Страница 1 из 2

Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 29 мар 2012, 23:14
Syberex
ShadowGun: Optimizing for Mobile Sample Level

ShadowGun: оптимизация уровня под мобильные устройства
by Will Goldstone

Изображение

Здесь, на Unity, мы хотим поделиться с Вами опытом создания фантастической игры. Одной из важнейших частей нашей работы является то, что Unity является высоко производительной платформой для запуска на мобильных устройствах, но когда дело дойдет до получения лучшей производительности вашей игры - это будет то место, где вы сядите. Поэтому чтобы вам не сгнить в этой тьме, когда дело дойдет до оптимизации вашей игры, мы вместе с MadFinger Games, разработчиками блокбастера 'ShadowGun', решили предложить вам образец уровня их проекта, созданный с применением инновационных методов, чтобы помочь вам узнать о техниках, которые они использовали при создании своей игры.

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

Демо уровень

Мы хотели бы поблагодарить MadFinger за помощь в этом проекте и за всю представленную ниже информацию. На некоторые термины, указанные здесь, мы приводим ссылки на внешние сайты, разъясняющие запутанные понятия:

Основные особенности

Если вы хотите получить игру от третьего лица с красивой графикой, сложными уровнями, с кучей врагов и достойным ИИ, который работает безупречно на iPhone 3Gs, вы должны приложить много усилий в оптимизации. В части графики, вы можете оптимизировать число треугольников, количество текстур в памяти и, конечно, шейдеры. Мы обнаружили, что на мобильных устройствах, шейдеры могут быть реальными пожирателями производительности, но и невероятно и мощными помощниками.

Альфа-смешивание убивает (Alpha blending)

Количество фейсов с применением Альфа-смешивания (Alpha blending), особенно, когда они заполняют большую часть экрана, резко снижает производительность мобильных устройств. Когда группы таких фейсов перекрывают друг друга, тогда увеличивается перерисовка (increase overdraw) и это полностью убивает производительность на медленных устройствах.

Сложные, по-пиксельные шейдеры снижают число кадров (Complex, per-pixel shaders)

Мы обнаружили, что рендеринг больших поверхностей (во всю площадь экрана) со сложным фрагментарным шейдером снижает число кадров еще больше, чем Альфа-смешивание. Сложные фрагментарные шейдеры могут быть использованы только для небольших объектов.

Шейдеры в ShadowGun

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

Specular карты окружения (Shader Virtual Gloss Per Vertex Additive)

Этот шейдер сочетает диффузный (RGB) и бликовый (specular) (Альфа) каналы. Specular карта использует Альфа-канал текстуры для определения глянцевых и матовых частей поверхности, как обычно, но блики, рассчитываются не на каждый пиксель, а только на каждую вершину поверхности.

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

Оптимизированное динамическое освещение и затенение персонажа (Lightprobes и BRDF Shader)

Традиционной проблемой со статическим освещением (картами освещения (Lightmaps)) является не возможность получить соответствующее освещение на динамических объектах (т.е. игровых персонажах и NPC).

Unity предлагает классическое решение, сохранение информации об освещении динамических объектов в прокси-объектах (Light probes). В дальнейшем из которых будет восстановлена информация об освещенности динамических объектов.

Unity также содержит великолепный шейдер для персонажей (superb character shader), который хорошо оптимизирован под мобильные устройства (смотрите нашего Мутанта в демо сцене). Этот шейдер поддерживает Diffuse, Specular and Normal карты и использует специальный скрипт, который генерирует текстуру, использующуюся при оценке освещения в BRDF-функции (in BRDF-like fashion). Персонажи с такими эффектами, приближаются к супер современным персонажам на консолях самых известных брендов.

Туман и объемный свет (Shader Blinking Godrays)

После того как вы включите глобальной туман в 3d-движке, частота кадров опустится ниже играбельного уровня, особенно на старых мобильных устройствах.

Однако, с графической точки зрения, туман значительно улучшает вид окружающей среды, особенно помогает воспринимать глубину и пространство сцены. Мы нашли решение с помощью простой сетки с прозрачной текстурой (Fog planes) вместо глобального тумана. Когда игрок приходит слишком близко к сетке тумана, она исчезает, и более того, вершины сетки тумана расстягиваются на расстонии (pulled away)(даже с полностью прозрачными Альфа каналами поверхности требуют много времени на рендеринг).

Подготовка сетки в 3D приложении для корректной работы с шейдером

Цвет Альфа канала определяет, какие вершины подвижны, а какие нет (в нашем случае, вершины с черными Альфа не двигаются, с белыми Альфа двигаются).
Нормали вершин определяют направление движения.
Затем шейдер оценивает расстояние до зрителя и обрабатывает поверхность соответственно.

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

Плотный анимированный дым от крушения (Shader Scroll 2 Layers Sine Alpha-blended)

Из-за плотности, частицы дыма довольно дорогие, и мы обнаружили, что лучше использовать простые сетки с анимированными текстурами дыма (например, для фона пожара на месте крушения).

В нашем случае, мы анимируем дым путем смешивания двух текстур и перемещаем их друг относительно друга. Есть также альфа вершин, участвующих в целях сглаживания краев сетки. Сетка также подкрашивается в цвет вершин (The mesh is also colored with vertex colors) (оранжевый, чтобы имитировать огонь на земле, и светло серый, где дым сливается с небом).

Движение облаков (Skybox) (Shadow Scroll 2 Layers Multiplicative)

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

Ткани флагов на ветру (Shader Lightmap + Wind)

Любые анимированные объекты в сцене вдыхают жизнь в уровень, и, когда они анимируют себя из шейдера. Мы оживили флаги и кабели в направлении ветра. Информация о том, какие вершины развеваются на ветру, и какие нет, определяется цветом Альфа в 3d-приложении (белый значит движется, черный не движется). В параметрах шейдера, пользователь должен определить направление и скорость развевания.

Юридические уведомления

Все пользовательские шейдеры в демо уровне SHADOWGUN, являются интеллектуальной собственностью MADFINGER Games, и они доступны для свободного пользования (кроме BRDF шейдера, который был создан Unity Technologies, но его также можно использовать бесплатно).
Сетки и текстуры в уровне остается собственностью MADFINGER Games, и не могут использоваться для каких-либо коммерческих целей без разрешения MADFINGER Games.

--------------------------------------------------------------------------------
Это мой первый перевод. Переводил с помощью Яндекс переводчика и своих скромных знаний английского.
То, что выделил курсивом разобрать не смог. Надеюсь на помощь сообщества!
Видео смотрите в оригинальной статье, сюда вставить не получается...

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 30 мар 2012, 02:35
burlak
Круто! Спасибо за перепост!

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 04 апр 2012, 13:43
VitaMin00
круто)) сяду за комп распатрашу демку)))

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 09 апр 2012, 20:39
vetcat
Спасибо!

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 12 апр 2012, 15:15
alexsilent
Спасибо большое! Тоже интересно заценить дему и скрипты.

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 16 апр 2012, 09:06
akkelman
Извините, а вот не пойму, решил перенести небо в свой проект на андроиде. А шейдер не работает. Текстуры не отображаются всё розовое и компилировать не хочет. Оно не для мобильников что-ли тут в примере? Если собираю под писишной платформой то всё в норме

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 16 апр 2012, 10:56
Syberex
Уровень смотрел, но шейдеры применять на практике еще не пробовал.
На самом деле они для мобильников и оптимизированы. Но чем помочь не знаю :(

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 26 май 2012, 19:10
Acolit
Добрый вечер, такой вопрос: открыл проект, но он почти пуст, нет ни скриптов, ничего)

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 26 май 2012, 19:31
eligma
Сверяйте версию исходников которые открываете. В данном случае здесь версия юнити не ниже 3.5 а винда XP. За винду отвечаю - сам пробовал. Потому что некоторые исходники даже зависят от версии винды. Буржуи же делают на семерке и вообще ни о чем не думают. (было что на старшей версии винды работает а на младшей нет)

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 26 май 2012, 19:34
Acolit
у меня 3.5 последняя самая.

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 16 июн 2012, 11:27
Acolit
У кого еще такая проблема - пишите, помогу решить.

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 19 июн 2012, 18:20
Belfegnar_
Acolit писал(а):У кого еще такая проблема - пишите, помогу решить.

Помогай (popcorn1)

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 19 июн 2012, 19:02
Acolit
1. Вырезаем папку library оттуда, запускаем проект, должно получится все розовое.
2. Вырезаем папку assets/shaders.
3. Сохраняем проект.
4. Не закрывая, копируем опять туда же папку assets/shaders.
Вот и все.

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 20 июн 2012, 23:31
Belfegnar_
Спасибо. Не помогло, к сожалению.

Re: Перевод "ShadowGun: Optimizing for Mobile Sample Level"

СообщениеДобавлено: 20 июн 2012, 23:59
Acolit
Что именно?