Comments 18
Очень полезная статья!
В Юнити 5 появилась возможность указывать двух сторонние тени для мешей. Не пробовали использовать для устранения проникновения теней сквозь односторонние поверхности?
Выяснилось, что при рендере освещения в Unity возле объектов, имеющих дыры, то есть удалённые полигоны, появляются жесткие, хорошо заметные артефакты.
В Юнити 5 появилась возможность указывать двух сторонние тени для мешей. Не пробовали использовать для устранения проникновения теней сквозь односторонние поверхности?
Неплохая идея, спасибо, я попробую.
Вот покопался по левелам, нашёл пример этой проблемы. Как видите, в середине тени какой-то невнятный треугольник. Можно было сказать, что там где-то через меш проходят лучи света, но так треугольник другого цвета! Причём если я эти объекты с отсутствующими полигонами убираю и перезапекаю освещение — всё становится нормальным. Видимо, ситуации как эта сводят Enlighten с ума при попытке посчитать отражённый свет.
Под спойлером скриншот.
Вот покопался по левелам, нашёл пример этой проблемы. Как видите, в середине тени какой-то невнятный треугольник. Можно было сказать, что там где-то через меш проходят лучи света, но так треугольник другого цвета! Причём если я эти объекты с отсутствующими полигонами убираю и перезапекаю освещение — всё становится нормальным. Видимо, ситуации как эта сводят Enlighten с ума при попытке посчитать отражённый свет.
Под спойлером скриншот.
Скрытый текст

В целом так и есть. И хотя это лишние полигоны — двухсторонний материал по качеству освещения не равняется двустороннему мешу. Однако такие баги еще со времён Unity4. И что то мне кажется что к Enlighten это малое отношение имеет. Я и сейчас постоянно сталкиваюсь. Замкнутый меш, окей… даже сверху добавил специальный меш который смотрит нормалью на солнце (Внешняя часть стены отдельным мешом) — что б можно было его легко скрыть и работать с внутренностью. Но тем не менее не смотря на цельный меш — в местах Hard Edge проскакивают белые полосы света. Очевидно что это уже будет давать глюки при запекании.
Очень часто помогает один фокус — не давать мешам пересекатся. Желательно вообще везде)
Очень часто помогает один фокус — не давать мешам пересекатся. Желательно вообще везде)
А как делается освещение в играх со сменой времени суток? Я так понимаю, запекание в этом случае не подходит? В современных играх, например в Far Cry или том же The Forest, освещение довольно красиво и реалистично, как этого добиваются без запекания?
Я занимаюсь в основном мобилками, поэтому не приходилось тестировать производительность разных методов освещения под ПК и консоли. Тем не менее, могу предположить, что там сейчас делается полностью реалтаймовый свет.
Само по себе реалтаймовое освещение выглядит очень сухо, топорно и ненатурально. Поэтому добавляются различные фишечки типа атмосферного рассеяния, вольюмов цветокоррекции (грубо говоря, пока вы идёте по солнечной равнине, у вас на экране всё с жёлтым оттенком, а когда вы спускаетесь в тень в низину — цветокоррекция окрашивает всё в зеленоватый цвет) и прочего.
Само по себе реалтаймовое освещение выглядит очень сухо, топорно и ненатурально. Поэтому добавляются различные фишечки типа атмосферного рассеяния, вольюмов цветокоррекции (грубо говоря, пока вы идёте по солнечной равнине, у вас на экране всё с жёлтым оттенком, а когда вы спускаетесь в тень в низину — цветокоррекция окрашивает всё в зеленоватый цвет) и прочего.
Amplify Motion и Color (LUT Color correction), AFS и другие прочие ассеты из ассет стора. Но на сколько я знаю в Forest юзают самую обычную динамику без GI. Просто ребята с хорошим вкусом, приправили все это сдобно сбалансированными фильтрами и туманом. Их работа еще раз подтверждает что графика зависит от не движка, а от прямых рук :)
В Юнити 5 тени очень экономные, так как их качество режется на расстоянии. По крайней мере я почти перестал замечать разницу между 500м и можно поставить хоть 2500м. Однако, если вы знаете, тени которые рендерятся кубемапой имеют ограниченное качество, что означает что чем меньше дистанция теней, тем лучше качество. Тени на 2500м мягко говоря… мммм… вещество коричневатого цвета))) В Unreal Engine с этим справились лучше. Они внедрили Distance Field по которому работает и АО статическое и другие интересные фишки — как Raytrace Shadows. Вот и простая комбинация — в близи на динамику рисуем обычные тени. В дали на статику Raytrace shadows.
В Юнити 5 тени очень экономные, так как их качество режется на расстоянии. По крайней мере я почти перестал замечать разницу между 500м и можно поставить хоть 2500м. Однако, если вы знаете, тени которые рендерятся кубемапой имеют ограниченное качество, что означает что чем меньше дистанция теней, тем лучше качество. Тени на 2500м мягко говоря… мммм… вещество коричневатого цвета))) В Unreal Engine с этим справились лучше. Они внедрили Distance Field по которому работает и АО статическое и другие интересные фишки — как Raytrace Shadows. Вот и простая комбинация — в близи на динамику рисуем обычные тени. В дали на статику Raytrace shadows.
Динамические тени, тонирование (общая подсветка, имитирующая свет неба) + АО-шка творят чудеса.
Огромное человеческое спасибо за столь подробную статью на актуальную для меня тему.
Самое замечательное для меня то, что вы не просто излагаете материал, но и приводите собственные значения, от которых можно оттолкнуться. Экспериментальным путем, естественно, можно было бы подобрать и самостоятельно, но на это пришлось бы потратить в разы больше времени.
Поэтому, еще раз спасибо! Однозначно в закладки.
Самое замечательное для меня то, что вы не просто излагаете материал, но и приводите собственные значения, от которых можно оттолкнуться. Экспериментальным путем, естественно, можно было бы подобрать и самостоятельно, но на это пришлось бы потратить в разы больше времени.
Поэтому, еще раз спасибо! Однозначно в закладки.
Запекание во внешнем редакторе увеличит количество текстур во много раз так, что вес лайтмапа покажется сказкой :) Грубо говоря, если у вас уровень собран из 100 копий одной стены, имеющей размер текстуры 512х512, то вы можете отделаться одним лайтмапом 1024х1024 на весь уровень. Если вы будете запекать свет прямо в текстуры во внешнем редакторе, то у вас будет 100 уникальных текстур каждая размером 512х512.
Только при этом объекты окажутся страшно размытыми, ведь на каждую из 100 стен в этом 2048 атласе будет выделено 20х20 пикселей. Лайтмап же позволяет сохранить качество текстур просто накладывая поверх них информацию об освещении.
А как во внешнем редакторе запечь свет со спекуляром? Везде, где я видел — запекается прям в дифуз, но потом по такому объекту не бегают блики.
В юнити же Directional-Specular режим позволяет и свет запечь и блики получить более-менее адекватные
В юнити же Directional-Specular режим позволяет и свет запечь и блики получить более-менее адекватные
По идее спекуляр в первую очередь зависит от шейдера. Если простой лайтмап положить на объект с шейдером, имеющим спекуляр и, опционально, спекуляр мапу, то он и будет блестеть.
Простите, в терминологии не силен, но, Specular — это что-то вроде силы отражения, как и Metallness в базовом шейдере. Это само собой.
Тем не менее важен не только свет (который элементарно запекается в дифуз), но и то, какое направление этого света, откуда этот свет пришел, чтобы при правильном угле отобразить блик.
Ну чтобы получилось вроде такого (гифка):


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


Вот если просто запечь свет в дифуз, то он более-менее равномерно ляжет по поверхностям и никакого блика не будет. Unity позволяет запечь в отдельных картах не только свет, но и направления и будут что запеченный свет, что более-менее корректные блики.
Sign up to leave a comment.
Работа с освещением в Unity — теория и практика