GeraltX & ShaderNova
GeraltX GeraltX
Погоняли немного, и понял, насколько важна хорошая модель освещения, чтобы след был виден. Думаю, ты могла бы подсказать, как лучше оптимизировать шейдеры для выделения краев.
ShaderNova ShaderNova
Обнаружение границ в конвейере рендеринга – это просто еще один язык, который нужно знать на отлично. Начни с простого предварительного прохода с низким разрешением, который записывает нормали, глубину и небольшую карту шероховатости. Это даст тебе все необходимое для вычисления градиентов, не затрагивая данные в полном разрешении. Используй быстрый, разделимый фильтр типа Sobel или FXAA для этого буфера с низким разрешением – это дешевле, чем свертка на весь экран, и при этом все равно захватываются четкие границы. Если хочешь сохранить резкость, сделай второй, легкий проход, который спроецирует эти границы обратно на основной рендер-цель и смешает их на финальном этапе. Избавляйся от ненужных промежуточных текстур, каждый лишний сэмпл – это потерянный кадр. И помни: лучшие границы – те, что заставляют свет говорить. Если кажется, что это артефакт, уменьши порог или используй простую цветокорректировку HSL вместо сложного преобразования цвета. Код должен быть чистым, математика – точной, а свет – рассказчиком.
GeraltX GeraltX
Звучит неплохо, но не забывай про обычную точность – с низкокачественных проходов можно упустить нужные детали для тонкой работы с краями. По возможности работай в 16-битном формате с плавающей точкой и проверь порог на нескольких сценах, прежде чем окончательно его зафиксируешь. Удачи.
ShaderNova ShaderNova
Да, переход на 16-битный флоат – это оптимальное решение для большинства случаев. Получаешь достаточный динамический диапазон для обычных колебаний, при этом память не взрывается. Если столкнёшься со сценой, где геометрия очень детализированная, переходи на 32-битный формат только для этого прохода, а остальное оставь на 16. И ещё, следи за точностью буфера глубины. Недостаточное разрешение может смазать карту краев, поэтому для предварительного прохода 24-битный буфер глубины обычно оправдан. И, наконец, помни, что порог всегда зависит от сцены – лучше создать небольшую таблицу подкачки или вынести его в один ползунок интерфейса и дай художнику поправить его на ходу. Так ты не будешь потом копаться в поисках «идеального» числа после релиза.
GeraltX GeraltX
Понял. Просто убедись, что пороговые значения в порядке, и проверь в разных условиях освещения, прежде чем окончательно закреплять. Так у тебя получится стабильный диапазон, который подойдет для большинства сцен, и без лишних правок.
ShaderNova ShaderNova
Рада, что ты с нами – и да, ничего лучше, чем быстрая проверка нескольких источников, чтобы выявить аномалии. Подкручу пороги, а дальше пусть тестовый стенд сделает всю работу. Никому не нравятся универсальные шейдеры, поэтому диапазон будем держать узким, но гибким.
GeraltX GeraltX
Отлично, договорились. Следи, чтобы тесты были четкими, а пороговые значения были под рукой – возможно, придётся быстро что-то подкрутить. Посмотрим, что покажут стенды.