Как мы избавились от real-time теней в своей игре Slash Arena.
Игра сделана на Unity и работает как на мобильных девайсах, так и на десктопах. На мобильниках все очень плохо с фпс и приходится использовать любую возможность для оптимизации. Так вышло и с тенями.
В unity есть возможность "запечь" свет - просчитать карту теней заранее для статических объектов и записать ее в текстуру. Но это работает только с неподвижными объектами. А что делать с двигающимися персонажами, их оружием и другими предметами?
Если полностью отключить просчет динамических теней(тени, которые могут менять позицию, масштаб и форму) фпс взлетает до небес на мобильных устройствах. Осталось придумать, как их заменить.
Мы применяем следующее решение: есть набор заранее подготовленных текстур с простыми формами - круг, квадрат, стейк(именно форма стейка:) ) Эти текстурки подкладываются под объекты, которые должны иметь тень, и при помощи скейла и наложения друг на друга создают форму близкую к форме реальной тени. Причет прозрачность тени меняется вместе с высотой объекта, имитируя поведение реальной тени.
1) Камера в главном меню не двигается и не крутится, поэтому мы заменили все окружение на статичную картинку: https://i.gyazo.com/316a9328a3e917556732384da678aa2e.mp4 (вверху - то, что отображается в игре, внизу - то, как объекты расположены в реальности)
2) В бою мы отображаем только те объекты которые попадают в область видимости камеры https://i.gyazo.com/93a5d61a94269b4ef04b537e5dcddfa2.mp4 (вверху - то, что отображается в игре, внизу - то, как объекты расположены в реальности)
В своей игре Slash Arena нам пришлось оптимизировать анимацию смерти. Боевка игры - бегать по арене и крутить вокруг себя здоровенным топором, стараясь попасть по другим игрокам. Хорошо попал — убил. (пример геймлея https://www.youtube.com/watch?v=Wyx1ju4s6hY)
Чтобы смерть от топора была эффектной, мы использовали обычную ragdoll анимацию, построенную на физике. И всё было хорошо. Поначалу.
А потом, с увеличением количества персонажей и расчетов, игра начала подтормаживать на старых телефонах. Отключали всю физику — получали 50-60 кадров секунду и абсолютную плавность процесса. Но отказываться от красивых смертей персонажей уже совсем не хотелось.
Можно было озадачить аниматоров. Мы даже почти отдали эту задачу в работу, как пришла мысль: почему бы не записать несколько ragdoll смертей прямо в Unity, и потом просто показывать нужную анимацию?
Мы написали специальный класс, который записывает все поведение ragdoll-объекта просчитанного по физике в файл с анимацией. И уже во время боя воспроизводили именно анимацию и тем самым полностью избавились от необходимости симулировать физику.
Смерти получатся разнообразными, аниматоров подключать не нужно, а главное — все будет быстро и красиво.
концепт для адаптации игры под изменение настроения игрока, я не писатель, так-что читать может быть сложно. Возможно, по большому счёту относится только к интерактивным играм, особенно на приставках. Суть в том, что камера в реальном времени оценивает настроение игрока во время прохождения, микрофон следить за громкостью комментариев (если она вообще есть), и сама игра за интенсивностью нажатия клавиш (press x to win) Если, допустим, темное освещение у игрока, игра меняет фильтры цветов на более мрачные, чтобы больше испугать играющего (в идеальности, конечно, считывать эмоции с лица, если игрок заскучал, для контроля уровнем сложности, но это будет еще не скоро). Вообще, интерактивное кино, так устроено, что гейм-дев следующего поколения этого жанра будет примерно на это и заточен, к адаптации к игроку и установления контакта Игра-Игрок, допустим вы не можете пройти один уровень, ну лично вам не комфортно играть тут, и игра чуть-чуть смягчает сложность, но в следующих уровнях будет компенсировано. Еще про звук была идея: Электронное пианино от синтезатора отличается тем, что одно в реальном времени создаёт звук, а другое играет записанный (если хороший синтезатор там несколько звуков на одну клавишу, зависит от степени нажатия), то в играх примерна вторая система, но что если сделать, чтобы например звук от выстрела не записанный был, а по алгоритму создавался каждый раз при нажатии fire?, что если бы звуки были записаны лишь в качестве карты шума, получается при его создании каждый был бы, немного но разный, конечно, в реальности такое почти не осуществимо из-за высокой нагрузки на процессор. контакты свои не оставлю, так-как такой бред далекого от гейм-дева человека, победить не может. p.s: если есть ошибки не серчайте.
Как мы избавились от real-time теней в своей игре Slash Arena.
Игра сделана на Unity и работает как на мобильных девайсах, так и на десктопах.
На мобильниках все очень плохо с фпс и приходится использовать любую возможность для оптимизации. Так вышло и с тенями.
В unity есть возможность "запечь" свет - просчитать карту теней заранее для статических объектов и записать ее в текстуру.
Но это работает только с неподвижными объектами. А что делать с двигающимися персонажами, их оружием и другими предметами?
Если полностью отключить просчет динамических теней(тени, которые могут менять позицию, масштаб и форму) фпс взлетает до небес на мобильных устройствах. Осталось придумать, как их заменить.
Мы применяем следующее решение: есть набор заранее подготовленных текстур с простыми формами - круг, квадрат, стейк(именно форма стейка:) )
Эти текстурки подкладываются под объекты, которые должны иметь тень, и при помощи скейла и наложения друг на друга создают форму близкую к форме реальной тени. Причет прозрачность тени меняется вместе с высотой объекта, имитируя поведение реальной тени.
Вот как это выглядит в игре:
На простом объекте https://i.gyazo.com/1d34108c449fc55a4846e1f1d31d3aff.mp4
На сложном объекте https://i.gyazo.com/c73905c1bc0ce9d945754b12505e8497.mp4
(оранжевым внизу выделены фейковые тени)
Еще несколько из примеров визуального "обмана":
1) Камера в главном меню не двигается и не крутится, поэтому мы заменили все окружение на статичную картинку:
https://i.gyazo.com/316a9328a3e917556732384da678aa2e.mp4
(вверху - то, что отображается в игре, внизу - то, как объекты расположены в реальности)
2) В бою мы отображаем только те объекты которые попадают в область видимости камеры
https://i.gyazo.com/93a5d61a94269b4ef04b537e5dcddfa2.mp4
(вверху - то, что отображается в игре, внизу - то, как объекты расположены в реальности)
С тенями прикольно, а вот в использовании оклюжн куллинга ничего нового)
А так молодцы и игра прикольная)
В своей игре Slash Arena нам пришлось оптимизировать анимацию смерти.
Боевка игры - бегать по арене и крутить вокруг себя здоровенным топором, стараясь попасть по другим игрокам. Хорошо попал — убил.
(пример геймлея https://www.youtube.com/watch?v=Wyx1ju4s6hY)
Чтобы смерть от топора была эффектной, мы использовали обычную ragdoll анимацию, построенную на физике. И всё было хорошо. Поначалу.
А потом, с увеличением количества персонажей и расчетов, игра начала подтормаживать на старых телефонах. Отключали всю физику — получали 50-60 кадров секунду и абсолютную плавность процесса.
Но отказываться от красивых смертей персонажей уже совсем не хотелось.
Можно было озадачить аниматоров. Мы даже почти отдали эту задачу в работу, как пришла мысль: почему бы не записать несколько ragdoll смертей прямо в Unity, и потом просто показывать нужную анимацию?
Мы написали специальный класс, который записывает все поведение ragdoll-объекта просчитанного по физике в файл с анимацией. И уже во время боя воспроизводили именно анимацию и тем самым полностью избавились от необходимости симулировать физику.
Смерти получатся разнообразными, аниматоров подключать не нужно, а главное — все будет быстро и красиво.
ссылка на исходники https://github.com/DrunkenMonday/AnimationRecorder
4С это 4 х 1С
концепт для адаптации игры под изменение настроения игрока, я не писатель, так-что читать может быть сложно.
Возможно, по большому счёту относится только к интерактивным играм, особенно на приставках.
Суть в том, что камера в реальном времени оценивает настроение игрока во время прохождения, микрофон следить за громкостью комментариев (если она вообще есть), и сама игра за интенсивностью нажатия клавиш (press x to win)
Если, допустим, темное освещение у игрока, игра меняет фильтры цветов на более мрачные, чтобы больше испугать играющего (в идеальности, конечно, считывать эмоции с лица, если игрок заскучал, для контроля уровнем сложности, но это будет еще не скоро). Вообще, интерактивное кино, так устроено, что гейм-дев следующего поколения этого жанра будет примерно на это и заточен, к адаптации к игроку и установления контакта Игра-Игрок, допустим вы не можете пройти один уровень, ну лично вам не комфортно играть тут, и игра чуть-чуть смягчает сложность, но в следующих уровнях будет компенсировано.
Еще про звук была идея: Электронное пианино от синтезатора отличается тем, что одно в реальном времени создаёт звук, а другое играет записанный (если хороший синтезатор там несколько звуков на одну клавишу, зависит от степени нажатия), то в играх примерна вторая система, но что если сделать, чтобы например звук от выстрела не записанный был, а по алгоритму создавался каждый раз при нажатии fire?, что если бы звуки были записаны лишь в качестве карты шума, получается при его создании каждый был бы, немного но разный, конечно, в реальности такое почти не осуществимо из-за высокой нагрузки на процессор.
контакты свои не оставлю, так-как такой бред далекого от гейм-дева человека, победить не может.
p.s: если есть ошибки не серчайте.
То чувство, когда живёшь вдалеке от городов, где проходят гейм-дев мероприятия и не имеешь возможности съездить на них. =_=