Производительность Unity3d на iPhone - PullRequest
10 голосов
/ 05 августа 2011

Я действительно заинтересован в использовании Unity3d для разработки приложения.Мне нравится тот факт, что я могу разрабатывать один раз и портировать приложение на несколько платформ (Mac / Windows / iPhone / Android), и производительность на моем Mac кажется довольно хорошей.

Это будет впервыеЯ пишу приложение для iPhone, и мне любопытно узнать о проблемах с производительностью в будущем.Я думаю, что я определенно буду использовать Unity3d на iPhone для прототипа, но мне интересно, будет ли при создании приложения для iPhone Unity3d использовать ресурсы iPhone так же эффективно, как нативное приложение, написанное на Objective-C.

Кажется, что сайт Unity3dЯ предполагаю, что алгоритмы Unity3d оптимизированы, и я подумал, что если бы я задал этот вопрос на форумах Unity3d, это был бы ответ, который я получил бы.В идеале, мне было бы интересно услышать от кого-то, кто создал приложение в Unity3d и Objective-C и может сравнить их.ответ на вопрос о стоимости разработки для iOS , который звучит так: «Существует гораздо более простой способ разработки приложений для iPhone, чем изучение какао».

Ответы [ 5 ]

12 голосов
/ 11 августа 2011

В Unity есть специальные ресурсы, которые помогут в разработке мобильных приложений, включая ресурсы, шейдеры и т. Д., Специально разработанные для мобильных устройств.

Вы, конечно, не захотите брать «неоптимизированные» активы, относящиеся к качеству ПК, и помещать их в проект Unity и экспортировать их для платформы iOS, поскольку вы обеспечите низкую / ненадежную производительность.То, что вы хотите сделать, - это начать строить сцену с использованием ресурсов, схожих по качеству с теми, которые вы хотите для своей игры, а затем посмотреть, какова производительность на реальном устройстве.Это даст вам представление о том, какой уровень производительности вы можете ожидать от своей игры в производстве.

Помните, что производительность iPhone, iPad, iPad2 и т. Д. Будет сильно различаться в зависимости от того, что вы делаете, икакие функции вы касаетесь.Хотя Unity3D был сильно оптимизирован для работы с различными сценариями, вы, безусловно, можете делать такие вещи, как запотевание, которые увеличивают скорость заполнения (известное ограничение платформы) и приводят к ужасной производительности.

Не могли бы вывозможно получить больше производительности от создания вашего приложения исключительно в Objective-C?Если у вас есть необходимый набор навыков в разработке движка для разработки конкретной реализации технологии для ваших конкретных требований - конечно.

Вам просто нужно решить, хотите ли вы тратить свое время на написание технологии или создание продукта.Большинство людей, которые выбирают Unity, делают это потому, что вы получаете исключительно хороший двигатель, который большинство людей не может превзойти по производительности (попробуйте создать свой собственный ландшафтный двигатель), в то же время получая исключительное время для выхода на рынок ... и действительно свое время для выхода на рынокэто действительно важно в большинстве случаев.

4 голосов
/ 11 июня 2013

Это старый пост, но я решил, что отвечу на него, потому что никто здесь действительно не понял его правильно.

Важно помнить, что внутренняя работа ядра Unity полностью родная.,Физический движок и, следовательно, все, что связано со столкновением.Система окклюзии (умбра).Все ядро ​​движка рендеринга.Все это написано на C / C ++ и работает с полной скоростью на любой платформе.То, что говорит АмитАполло, совершенно неверно, нереальный движок 3 не является более прямым «нативным» по сравнению с единством.И Unity, и Unreal engine 3, а также любой другой 3D-движок, такой как Ogre или cocos3d, все их основные системы рендеринга написаны на c / c ++.Некоторые из этих механизмов могут иметь определенные алгоритмы внутреннего рендеринга, реализованные лучше, чем другие, и, таким образом, могут давать лучшую производительность, но это не имеет никакого отношения к тому, являются ли они «родными», потому что система рендеринга внутреннего ядра является родной для всех них,

Внутренняя работа физического движка также написана на c / c ++, и, следовательно, физический движок в UE3 и Unity работает на «полной собственной скорости».

Демонстрация epicCitadel такжене демонстрирует большего технического мастерства или производительности, чем Unity на iOS.Большая часть «визуального воздействия» демо цитадели проистекает просто из того факта, что это действительно хорошее произведение искусства.Демонстрация цитадели не продвигает большее число вершин, чем то, что Unity может обрабатывать на iOS, демоверсия цитадели не демонстрирует более продвинутые технологии шейдеров или освещения, чем то, что Unity может делать на iOS.На самом деле, есть больше примеров того, как Unity демонстрирует более продвинутые методы мобильного рендеринга, чем продемонстрировал Unreal Engine 3.Посмотрите на такие игры, как Shadowgun или BladeSlinger, сделанные в Unity, обе эти игры демонстрируют более продвинутые технологии мобильного рендеринга, чем Unreal Engine 3.Световые зонды, мобильные шейдеры BRDF с прозрачностью и нормальным отображением и хорошо реализованные динамические мобильные тени - это лишь некоторые из них.Подавляющее большинство самых успешных 3D-игр в магазине приложений - это игры Unity, и поэтому Unity вложила множество НИОКР в производительность и возможности мобильного рендеринга Unity.

Теперь Unity написан на C # и Mono.Который работает медленнее, чем собственный код, по оценкам, на 50% медленнее на iOS.Но вы должны иметь в виду, что вы делаете только игровую логику в этом коде.Вы не пишете какой-либо код на C # и Mono в Unity, который касается работы его внутренней системы рендеринга или внутренней работы системы физики.Вы пишете игровую логику только на C #, которая затем взаимодействует с ядром рендеринга и физики, который затем выполняется с полной собственной скоростью.Mono C # работает медленнее, чем собственный C ++, но если вы будете программировать с умом, я думаю, вы вряд ли это помешаете, потому что вы выполняете игровую логику только в Mono C #, а игровая логика не обязательно сильно загружена процессором.По моему опыту, действительно трудно сделать iPad 2 ниже 60 кадров в секунду на чисто игровой логике, написанной на Mono C #.На самом деле мне это никогда не мешало.

Если мы хотим сравнить с Unreal Engine 3, имейте в виду, что UE3 также настроен для программирования своей игровой логики на не родном языке, UnrealScript.Unrealscript - это язык, очень похожий на Mono C # или Java, где UnrealScript компилируется в байтовый код, а затем интерпретируется во время выполнения.То есть, как и в Unity, игровая логика не является «родной» в UE3.

Теперь, если вы посмотрите здесь: http://lua -users.org / wiki / LuaVersusUnrealScript Это сравнение производительностиUnrealScript для C ++ для простой арифметической операции с использованием целых чисел.Это показывает, что нереальный сценарий от 1/4 до 1/20 скорости C ++.

Тогда посмотрите здесь: http://www.codeproject.com/Articles/212856/Head-to-head-benchmark-Csharp-vs-NETЕсли вы прокрутите вниз до C # vs C ++ Простой арифметический тест.Это показывает, что Mono C # составляет 3/4 скорости C ++, выполняя простую int арифметику.Mono C # составляет примерно половину скорости при выполнении простой арифметики с поплавками.Тесты int64 и double на самом деле мало что значат для нас, потому что, как правило, вы никогда не будете использовать их в критичном к производительности коде в игровой логике iOS.

Теперь другие тесты показывают, что Mono C # порой имеет столь же плохой результат.как 1/20 производительность C ++.Но они проходят через очень специфические тесты, действительно лучший тест от яблок до яблок, который я смог найти, - это простые арифметические тесты.

На самом деле, поскольку скрипты Unity работают на Mono C #, а UE3 работает на UnrealScript.На самом деле Unity - это движок, который предложит вам радикально более высокую производительность в игровом логическом коде.

Идея о том, что UE3 более продвинутый, или предлагает более высокую производительность, или любую большую графическую возможность, чем Unity на iOS, просто неправда.Наоборот, это правда.

Теперь это правда, что если бы вы использовали что-то вроде cocos3d, вы могли бы потенциально получить более высокую производительность, потому что ваша игровая логика могла бы быть написана также на C ++.Но преимущества работы с языком сценариев, например c #, для создания игровой логики, я думаю, намного перевешивают потерю производительности, которая обычно никогда не вызывает проблем.А именно преимущества использования языка сценариев для игровой логики заключаются в том, что он предлагает вам более быстрые итерации проектирования, что при выполнении игр действительно важно из-за того, насколько странными могут быть вещи, и как часто вам приходится перекомпилировать и тестировать код.

Однако в Unity действительно легко писать плагины с собственным кодом в версии Pro.Так что, если у вас когда-нибудь есть фрагмент кода, критичного к производительности, который должен работать на собственной скорости, вы можете написать его на C ++, скомпилировать его в собственную библиотеку, а затем вызвать его из Mono C #.

1 голос
/ 03 января 2013

Также имейте в виду, что если вы ориентируетесь на все устройства iOS, разница в объемной графике на графическом процессоре означает резкое расхождение в производительности между iPhone 3GS до 4, затем с 4,4S до iPad2 и 3. Даже некоторые игры на новом iPhone5 или iPad4 могут работать на более высоких FPS, чем его предшественники. Имейте в виду, что поли должны быть низкими, и, конечно, в вашей местности сохраняйте низкие разрешения, и даже что-то настолько тонкое, как ошибка пикселя, может сильно повлиять. Туман всегда будет вызывать напряжение. Текстуры> 512x512 могут вызвать проблемы, так же как и с несколькими источниками света. Гораздо быстрее не делать рендеринга света и запекать тени и блики. Я также обнаружил, что работа в собственном разрешении в отличие от лучшей производительности может снизить производительность (Unity 4). Billboarding, Occlusion Culling также являются темами, которые вы хотите найти. Существует тонкая грань между хорошим внешним видом и медленным бегом.

Если производительность является проблемой для вас, вам может потребоваться совсем другой движок. Более прямой «родной» движок, такой как Unreal Engine 3, поражает своими возможностями. И это может сделать это без особых накладных расходов. Дело в том, что демонстрационное приложение Epic Citadel работает на iPhone 4 или 3GS. Нечто похожее в Unity будет медленным и не будет выглядеть так сексуально.

0 голосов
/ 29 июня 2013

Одним из ресурсов, который помогает повысить производительность в IOS, является KGFSkyBox.

Мы выяснили, что скайбоксы unity3d используют до 6 вызовов!Это небольшая проблема на устройствах с максимальным пределом 30 DC!

Мы решили эту проблему, внедрив KGFSkyBox, который уменьшает количество вызовов до 1, если у вас есть ландшафт (скрывает полусферу нижнего неба).Если вы не используете terrain, KGFSkyBox будет выполнять рендеринг с использованием 2-х вызовов, что еще лучше, чем 6!

Проверьте это здесь: http://u3d.as/4Wg

Если у вас есть какие-либо вопросы или предложения, просто свяжитесь с нами здесь: support@kolmich.at

0 голосов
/ 05 августа 2011

Возможно, будет хорошей идеей взглянуть на другие игры, созданные с Unity, и посмотреть, к чему они подходят и какую производительность вы можете ожидать.

http://www.youtube.com/watch?v=7aVttB25oPo

http://unity3d.com/gallery/game-list/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...