Обновление темы.
Поскольку для примеров потребовалось делать несколько скриншотов что бы показать результат, я несколько изменил подход. Здесь будет просто текст, а текст с иллюстрациями я прикреплю в виде файла Ворда. Добавлю позже, вместе с общими выводами.
Progressive CPU
Предисловие.
Система довольно старая и как следствие по ней тонны всякой и разной информации. Думаю можно составить отдельное исследование по этому вороху информации. Я же по понятным причинам не буду делать обзор на эту информацию, а приведу ссылки которые как мне показалось, достойны внимания.
Для того что бы оперативно находить нужную информацию в приведенных ссылках, надо использовать ctrl+f.
В версии 2019.1 был добавлен новый функционал и изменен функционал некоторых систем. Я буду отмечать эти моменты если вдруг вы еще на версии 2018.3/4.
Скриншоты waruiyume навели на мысль о контроле сложных мест. Очень часто, на невооруженный взгляд некоторые места не кажутся сложными, однако с точки зрения расчетов, они могут быть предельно сложными. К сожалению в Юнити с визуальными средствами контроля все очень слабо, что конечно огорчает и я считаю именно это в большинстве случаев приводит к посредственным графическим результатам проектов.
Один из инструментов контроля который напрашивается сам, это визуальное представление пускаемых лучей при просчете сцены. Т.е. что бы можно было увидеть источник луча, его направление, отскок и где он закончил свои расчеты. Я не разбирался можно ли такое сделать, но если кто заморочится на эту тему то сделает большое одолжение сообществу. Скорее всего этот инструмент нельзя будет использовать на сложных сценах, но в большинстве случаев это и не нужно. Если есть сомнения, то можно просто взять часть сцены и воссоздать в отдельной сцене примерное освещение, чтобы понять что идет не так в конкретном случае.
В любом случае когда вы начинаете работать с освещением, то надо представлять как идут лучи света. Пока что алгоритмы систем освещения находятся на таком уровне, что наилучший результат вы увидите только тогда, когда камера будет смотреть в полусферу не в направлении света, а полусферу обращенную в сторону источника света. Из чего можно сделать вывод, что расставлять дополнительные источники света следует в противоположную сторону от основного освещения, так что бы всякий раз когда камера будет повернута в ту же сторону что и основной источник света, неточности алгоритмов освещения компенсировались дополнительными источниками света. Так следует поступать во всех программах где вы используете свет, не только в Юнити.
Так же, хочу предложить простой и надежный способ для объективного сравнения полученных результатов. Для этого понадобится Паинт и все. Когда вы провели расчет сцены, то просто нажимаете Принт Скрин и вставляете этот скрин в Паинт. Снимаете выделение. Затем делаете новый расчет и снова делаете скрин с результатом. Снова вставляете его в Паинт. Снимаете выделение. Теперь простым ctrl+z и ctrl+y сравниваете результаты. Важно лишь не менять ракурс камеры и вы сможете заметить мельчайшие изменения результатов.
Теперь начнем.
За перевод спасибо гуглу.
Progressive Lightmapper - это система Lightmapper, основанная на быстрой трассировке пути, которая обеспечивает запеченные карты и световых с прогрессивными обновлениями в редакторе. Это требует неперекрывающихся ультрафиолетовых лучей с небольшими площадными и угловыми ошибками и достаточного заполнения между диаграммами.
Progressive Lightmapper делает короткий подготовительный шаг для обработки геометрии и обновлений экземпляров, а также генерирует G-буфер и маски диаграмм. Затем он немедленно производит вывод и постепенно улучшает его для значительно улучшенного процесса интерактивного освещения. Кроме того, время выпечки намного более предсказуемо, потому что Progressive Lightmapper обеспечивает приблизительное время выпечки.
Progressive Lightmapper также испускает глобальное освещение (GI) с разрешением карты освещения для каждого текселя в отдельности, без схем повышающей дискретизации или использования каких-либо кэшей освещенности или других глобальных структур данных. Это делает его надежным и позволяет запекать отдельные части световых карт, что ускоряет тестирование и итерацию вашей сцены
Подробное видео, демонстрирующее интерактивный рабочий процесс, см. В пошаговом руководстве по видео для Unity: в разработке - Progressive Lightmapper (YouTube)
https://youtu.be/foMZJrwRGr0 .
Settings Чтобы использовать Progressive CPU Lightmapper, выберите Window > Rendering
> Lighting Settings, перейдите к настройкам Lightmapping и установите Lightmapper
к Progressive CPU . Посмотрите Настройки Lightmapping для получения дополнительной информации об этом окне.
Prioritize View Включите это, чтобы Progressive Lightmapper применял изменения к текселям, которые в данный момент видны в представлении сцены, затем примените изменения к текстам вне поля зрения.
Multiple Importance Sampling Включите этот параметр, чтобы использовать выборку с несколькими значениями для выборки из среды. Как правило, это приводит к более быстрой конвергенции при создании световых карт, но может привести к более шумным результатам в определенных низкочастотных средах. Это отключено по умолчанию.
Добавлена в версии 2019.1 и ее описание выглядит так:
Multiple Importance Sampling for Environment (MIS Environment) is a new sampling method which samples the most important areas in the cubemap/HDRI. This sampling technique avoids shooting a large number of GI rays into the hemisphere, and instead focuses them on the important areas (such as bright spots, like the sun). With this feature, it’s possible to bake scenes with measured HDRI environment maps that are highly non-uniform. A new Environment Samples parameter has been added to the lighting window. This value controls how many rays are traced directly into the environment per lightmap texel.
Выборка по нескольким значениям для среды (MIS Environment) - это новый метод выборки, который выбирает наиболее важные области в кубической карте / HDRI. Этот метод выборки позволяет избежать попадания большого количества GI-лучей в полушарие и вместо этого фокусирует их на важных областях (таких как яркие пятна, такие как солнце). С помощью этой функции можно запекать сцены с помощью карт измерений среды HDRI, которые сильно неоднородны. Новый параметр Environment Samples был добавлен в окно освещения. Это значение контролирует, сколько лучей попадает непосредственно в среду на один пиксель карты освещения.
Ссылка -
https://blogs.unity3d.com/ru/2019/04/16 ... ty-2019-1/.
Ссылка на разъяснения отличий старого подхода и нового -
https://forum.unity.com/threads/confusi ... rs.683041/Разъяснения по эффекту, правда не в Юнити, а вообще –
https://3dyuriki.com/2013/09/06/renderi ... ng-luchej/От себя. Эффект проявляется при использовании дефолтного скайбокса (в моем случае, либо скайбокс есть, либо его нет). Во всех моих случаях, он осветлял тени. Однако в видео, где человек как раз разбирает этот эффект -
https://www.youtube.com/watch?v=ESODq5KBOVw как раз хорошо показывается работа алгоритма. Я же проведя подобные тестирования получил сходные результаты.
Следует помнить, что используя этот эффект без фильтра, вы добавите на сцене «светлых пятен» у теней.
Еще одна ссылка -
https://twitter.com/pigselated/status/8 ... 1109727232 Direct Samples Количество образцов (путей), снятых с каждого текселя. Этот параметр контролирует количество образцов, которые Progressive Lightmapper использует для расчетов прямого освещения. Увеличение этого значения может улучшить качество световых карт, но увеличивает время выпечки.
Indirect Samples Количество образцов (путей), снятых с каждого текселя (размеры текселей регулируется в Lightmap Resolution). Этот параметр определяет количество образцов, которые Progressive Lightmapper использует для расчетов непрямого освещения. Для некоторых сцен, особенно для наружных сцен, должно хватить 100 образцов. Для внутренних сцен с излучающей геометрией увеличивайте значение, пока не увидите желаемый результат.
Если значение слишком низкое, то тени будут с проплешинами.
Основной параметр который повлияет на конечный результат. Как видно из справки, чем выше значение, тем лучше.
Создается впечатление, что этот параметр увеличивает разрешение текселя из Lightmap Resolution. Условно говоря, если размер текселя будет равен 1, а значение Indirect Samples равно 8, то он разобьет тексель на 8 ячеек.
Если Lightmap Resolution будет равен значения по умолчанию 40, то чем меньше значение Indirect Samples, тем хуже будут просчитаны тени. Но чем меньше значения Lightmap Resolution, тем ситуация будет становиться «лучше». Сложно сказать когда это будет преимуществом, но факт так сказать на лицо. Наверное это даст плюс если на первом месте производительность, а не качество.
Имеет рационально максимальное значение, которое к сожалению определить не удастся, поскольку нет ни каких объективных средств контроля за этим. Единственный способ определить оптимальное значение, это либо на глаз, либо используя Паинт и ctrl+z / ctrl+y вычисляя момент когда качество картинки становится неизменной, если вы увеличиваете значение, либо когда картинка остается неизменной, если вы снижаете значение.
Environment SamplesВведен в версии 2019.1.
Определите количество образцов, которые Lightmapper использует для расчетов освещения окружающей среды. Более высокие значения могут улучшить качество световых карт, но увеличить время, необходимое для выпечки. Это устанавливается на 500 по умолчанию.
Далее, выдержка из
https://blogs.unity3d.com/ru/2019/04/16 ... ty-2019-1/Новый параметр Environment Samples был добавлен в окно освещения. Это значение контролирует, сколько лучей попадает непосредственно в среду на один пиксель карты освещения.
Еще одна ссылка с примерами –
https://learn.foundry.com/modo/content/ ... ation.htmlDetermines the number of samples taken of the environment used for global illumination. More detailed environments benefit from additional samples, increasing the accuracy of the final render, but also increasing render time. On low resolution or low detail environments, you can keep this value low to reduce render time.
The image on the left has importance sampling disabled and uses an HDR image for environment lighting with a bright spot (sun). With 128 IC rays, undesirable splotches are visible that are eliminated in the middle image by increasing the IC rays 8 times to 1024 rays. The third image enables Importance Sampling at default values and resets the IC rays back to 128 rays. Note the crispness of the shadow and the complete lack of any splotches, producing superior result with only a slightly longer render than the left image.
Note: When Environment Importance Sampling is enabled, the same option is available in the Settingstab, called Environment.
На всякий случай скопировал, если вдруг тот сайт куда то исчезнет.
В моем же случае, эффект проявился только с дефолтным скайбоксом (либо скайбокс есть, либо либо его нет) и полностью подтверждает выше сказанное. Из чего можно сделать вывод что использование Environment Samples целесообразно либо для того что бы снизить значения Importance Sampling, либо вы уже используете масимальное значение Importance Sampling, то улучшить качество расчетов за счет более высоких значений Environment Samples (поскольку объективных данных Importance Sampling получить невозможно, то скорее будет преобладать первый случай).
Bounces Используйте это значение, чтобы указать количество косвенных отказов, которые нужно выполнять при трассировке путей. Для большинства сцен достаточно двух отскоков. Для некоторых внутренних сцен может потребоваться больше отскоков.
Тут все просто. Наиболее емкое описание взято отсюда -
https://sites.google.com/site/rusewyl/g ... -v-detalah. Правда информация настолько старая, что практически не пересекается с текущим состоянием дел. Последняя активность на сайте наблюдалась в 2015г…
Количество переотражений света в симуляции глобального освещения. Как минимум одно отражение или преломление требуется для обеспечения мягкого, реалистичного непрямого освещения. 0 означает, что будет рассчитываться только прямой свет.
FilteringВ 2019.1 был изменен.
Фильтр просто дает размытие теней по какому то выбранному алгоритму, что поможет замазать некоторые косяки, а заодно и все преимущества. +100 в карму разработчика, который замыливает все что не попадя для придания неповторимого шарма его творению. Как именно размывать тени дело сугубо личное.
Ссылки на документацию.
https://docs.unity3d.com/Manual/Lightmapping.htmlhttps://unity3d.com/ru/how-to/progressi ... ation-tipshttps://docs.unity3d.com/Manual/Progres ... apper.htmlСтатистикаПанель под опциями Auto Generate и Generate Lighting отображает статистику по картированию освещения, в том числе:
Количество созданных Unity световых карт
Memory Usage: объем памяти, необходимый для текущего отображения света.
Occupied Texels: количество текселей, занятых в УФ-пространстве карты освещения.
Lightmaps in view: количество карт освещения в представлении сцены.
Lightmaps not in view: количество карт освещения, которые находятся вне поля зрения.
- Converged: все расчеты для этих лайтмапов завершены.
- Not Converged: выпечка для этих лайтмапов еще продолжается.
Bake Performance : количество лучей в секунду. Если это низкий уровень (т. Е. Меньше 2), вам следует отрегулировать настройки или аппаратное обеспечение, чтобы обрабатывать больше световых лучей одновременно.
Кроме того.В ходе экспериментов была выявлена зависимость Lightmap Resolution, Lightmap Size и Tranform Scale объекта на сцене.
Размер текселя строго коррелируется между Lightmap Resolution, Lightmap Size и Scale объекта на сцене. Можете подобрать оптимальное разрешение создаваемого файла световой карты по следующему алгоритму:
Переключаетесь на Baked Lightmap. Если вы считаете что Lightmap Resolution у вас настроен, то просто перебираете от меньшего к большему Lightmap Size до тех пор, пока размеры текселей не перестанут меняться. Как только дальнейшее увеличение значение не приведет к увеличению, это и будет порог оптимального Lightmap Size.
Можно собрать следующую тестовую сцену что бы увидеть эту зависимость. Для этого создаете куб и растягиваете его скажем до размера 10*10, обнулите позицию и задайте значение Y -0,5. Создаете еще один куб, оставляете размер по умолчанию. Lightmap Resolution по умолчанию равен 40, этого значения для тестирования более чем достаточно. Оставляете его без изменений. Ставите Lightmap Size минимальное значение в 32. Теперь вы видите, что размеры текселей у большого куба, не совпадают с размерами текселей у малого куба. Какими бы не были высокими значения Lightmap Resolution, размеры текселей останутся прежними. Вам необходимо добиться либо равных размеров текселей у обоих примитивов, для чего необходимо увеличивать Lightmap Size, либо, если Lightmap Size умеет нужное значение, снижать значения у Lightmap Resolution до тех пор, пока сетка не начнет увеличиваться. При дальнейшем снижении значения Lightmap Resolution, можно сравнять размеры сетки до большого куба, но при этом вы начнете терять в качестве.
При увеличении значения Lightmap Resolution и низком для него Lightmap Size, результат остается неизменным, из чего можно сделать вывод, что есть рационально максимальное значение для Lightmap Resolution, которое завит от Lightmap Size и scale игровых объектов. Развивая вывод, можно сказать что для наиболее прогнозируемых результатов, необходимо выдерживать на сцене одинаковые размеры объектов.
Вообще это довольно интересная штука, которая была случайно обнаружена. Ни где я не видел информации о такой зависимости. Это наводит на мысль, что можно регулировать подробность освещения, для каждого отдельно взятого объекта на сцене, просто масштабируя его соответствующим образом. Так же не стоит растягивать объекты, поскольку сетка растягивается в строгом соответствии давая по растянутой оси растянутые текстели.