Comments 6
Спасибо за перевод!
Не так давно сам мучался с подобной задачей. Есть игровое поле, состоящее из ~80 кубов, выстроенных в 2д-сетку. Кубы могут исчезать и выпадать сверху, заполняя пустые места. Для каждого куба нужно отрисовывать тень от направленного источника света, находящегося слева вверху (то есть, все тени параллельны между собой, направлены вправо-вниз).
Главными проблемами были:
Реализовать удалось, используя стенсил-буфер, с его помощью вырезая области тени в градиентной текстуре света (для каждого куба своя), размером с игровое поле.
Не так давно сам мучался с подобной задачей. Есть игровое поле, состоящее из ~80 кубов, выстроенных в 2д-сетку. Кубы могут исчезать и выпадать сверху, заполняя пустые места. Для каждого куба нужно отрисовывать тень от направленного источника света, находящегося слева вверху (то есть, все тени параллельны между собой, направлены вправо-вниз).
Главными проблемами были:
- Тень должна быть градиентной, затухающей по мере отдаления от источника света.
- Области пересечения теней между собой не должны быть заметны.
- Всё должно быть оптимизировано для мобильных устройств.
Реализовать удалось, используя стенсил-буфер, с его помощью вырезая области тени в градиентной текстуре света (для каждого куба своя), размером с игровое поле.
Цитата: «Поэтому я решил создать 2D-аналог способа расчёта теней, который используется в большинстве современных 3D-игр».
Многие разработчики 3д игр, выбирая подобные 2д способы расчёта теней (и не только теней) почему-то стараются исходить из предпосылок, что их творение будут смотреть исключительно на 2д экранах. Или же просто не помнят, что есть ещё и 3д (шлемы, очки...). А зря. На ровном месте создаётся проблема совместимости с последними, т.к. все попытки «прикрутить» любое подобие 3д на 2д картинку (на финальной стадии в буфере кадра) — чаще всего оборачивается глюками. Ведь тень, по-хорошему, должна быть наложена туда, куда именно она падает и уже потом трансформироваться в 2д проекцию для зрителя, а не налагаться в виде декорации на уже «объектив виртуальной камеры, который есть лицо главного героя игры, которое, в свою очередь — есть 2д проекция на зрителя перед монитором». Ведь именно подобные фокусы далее и становятся самой распространённой причиной отсутствия поддержки 3дстерео и VR (а кому приятно видеть тени только в ракурсе для одного глаза или висящие в воздухе над объектом декали, которые тоже — жертва такой же «оптимизации»). И хорошо, если всё это подвержено потом исправлению фиксами. Только вот, статистика числа успешных увиденных правок что-то не очень радует.
Просьба помнить и задумываться о таких вещах при поиске компромиссов в разработке. Спасибо. Удачи.
Многие разработчики 3д игр, выбирая подобные 2д способы расчёта теней (и не только теней) почему-то стараются исходить из предпосылок, что их творение будут смотреть исключительно на 2д экранах. Или же просто не помнят, что есть ещё и 3д (шлемы, очки...). А зря. На ровном месте создаётся проблема совместимости с последними, т.к. все попытки «прикрутить» любое подобие 3д на 2д картинку (на финальной стадии в буфере кадра) — чаще всего оборачивается глюками. Ведь тень, по-хорошему, должна быть наложена туда, куда именно она падает и уже потом трансформироваться в 2д проекцию для зрителя, а не налагаться в виде декорации на уже «объектив виртуальной камеры, который есть лицо главного героя игры, которое, в свою очередь — есть 2д проекция на зрителя перед монитором». Ведь именно подобные фокусы далее и становятся самой распространённой причиной отсутствия поддержки 3дстерео и VR (а кому приятно видеть тени только в ракурсе для одного глаза или висящие в воздухе над объектом декали, которые тоже — жертва такой же «оптимизации»). И хорошо, если всё это подвержено потом исправлению фиксами. Только вот, статистика числа успешных увиденных правок что-то не очень радует.
Просьба помнить и задумываться о таких вещах при поиске компромиссов в разработке. Спасибо. Удачи.
Или же просто не помнят, что есть ещё и 3д (шлемы, очки...). А зря.
Как говорится «за двумя зайцами погонишься, можешь ни одного не поймать».
Не всем играм суждено быть в 3д и для VR.
Универсальность не всегда хорошо.
Например игру для смартфонов лучше сделать в 2д с 60 фпс, чем в 3д с 20 фпс(грубо говоря).
А почему нет варианта: лучше в 3д с 60 фпс, чем в 2д с 60 фпс? Не всем нравятся 2д игры :)
А почему нет варианта: лучше в 3д с 60 фпс, чем в 2д с 60 фпс?Такой вариант тоже есть :) Это зависит от игры.
К примеру мне вот нравится 2д игра «Limbo», и при прохождении я не думал о том, что было бы круто, если игру сделали в 3д. Игру изначально задумывали в 2д и она очень хороша.
Тут дело скорее не в сравнении «что лучше: 2д или 3д?», а в целесообразности разработки и выпуска 2д-игры с низким фпс (и, соответственно, потери аудитории/прибыли) вследствие туманных перспектив её дальнейшей доработки до 3д.
Как сказал bogotoff, не каждая успешная 2д-игра должна когда-нибудь выйти в 3д. Это не прогресс и не следующая стадия её развития (не учитывая игры, где нужно ощущение глубины, для которых, в своё время, появление и развитие 3д безусловно поспособствовало улучшению пользовательского опыта). Это просто два разных типа игр.
Уж поверьте, тени для игр — головная боль. Особенно для мобильных устройств. И тут практически всегда приходится изощряться изо всех сил, придумывать обходные пути, чтобы получить картинку приемлемого качества с минимально необходимым фпс.
P. S. Да, мне нравятся 2д-игры. Как в качестве развлечения, так и при их разработке :)
Как сказал bogotoff, не каждая успешная 2д-игра должна когда-нибудь выйти в 3д. Это не прогресс и не следующая стадия её развития (не учитывая игры, где нужно ощущение глубины, для которых, в своё время, появление и развитие 3д безусловно поспособствовало улучшению пользовательского опыта). Это просто два разных типа игр.
Уж поверьте, тени для игр — головная боль. Особенно для мобильных устройств. И тут практически всегда приходится изощряться изо всех сил, придумывать обходные пути, чтобы получить картинку приемлемого качества с минимально необходимым фпс.
P. S. Да, мне нравятся 2д-игры. Как в качестве развлечения, так и при их разработке :)
Sign up to leave a comment.
Реализация быстрых 2D-теней в Unity с помощью 1D shadow mapping