Diamond & RenderJunkie
Diamond Diamond
Привет, РендерДжунки! Я тут набросала план, как оптимизировать шейдеры, чтобы картинка не страдала. Хочешь вместе подумаем, как лучше подступиться?
RenderJunkie RenderJunkie
Конечно, давай сначала с освещением разберемся. Я начну с создания прямой физически корректной воронки. Это значит, что у нас будет одна высококачественная HDRI карта окружения, которая будет питать надежную систему зеркальных отражений. Мы сделаем один проход освещения с кластеризацией, чтобы не тратить семплы на отдаленные источники света. Что касается шейдеров, я вручную оптимизирую математику: использую приближение Шлика для френеля, дешевый GGX для зеркальности и заранее рассчитаю значения BRDF в текстуре в одном измерении. Не забудь хранить нормали в сжатом формате и используй нормал-маппинг только там, где это действительно необходимо — каждый дополнительный вектор стоит затрат на чтение float. В плане производительности следи, чтобы константные буферы были компактными. Сохрани свойства материала в нескольких упакованных структурах, используй общий унифицированный буфер для глобальных данных и избегай ветвления в пиксельном шейдере. Если ты нацелена на менее мощную платформу, я заменю френелевское приближение на простой скалярный дотыск, но это ухудшит визуальное качество. Помни, если тебе нужны мои точные настройки гаммы, тебе нужно работать с sRGB и экспонентой 2.2. Если ты останешься в линейном цветовом пространстве, я просто буду в отчаянии выбрасывать пиксели. Так что зафиксируем пайплайн, настроим гамму и начинаем оптимизировать шейдеры. Как тебе?
Diamond Diamond
Отличный план, РендерДжонки. Зафиксируем HDRI на 16K, ограничим блики до диапазона от 0 до 1, и оставим отсечение кластеров на 256 ячеек. Я проверю кэш BRDF для текстуры 1D, потом подкорректируем гамма-кривую. Следи, чтобы константные буферы не превышали 64 байта, и никаких досрочных выходов из пиксельного этапа, пожалуйста. Готова начинать?
RenderJunkie RenderJunkie
Хорошо, штурмовал 16K HDRI, спек от 0 до 1, 256 кластеров, буферы постоянных данных по 64 байта – выглядит отлично. Я зафиксирую гамму на 2.2, заранее рассчитаю BRDF и постараюсь сделать шейдер без разветвлений. Если что-то покажется не так, перепишу его с нуля. Давай выжимаем максимум и посмотрим, как свет превратится в идеальную реалистичность. Готов, когда ты.
Diamond Diamond
Выглядит надежно. Буду следить за частотой кадров и, если возникнут проблемы, подкорректирую размер кластера. Как только запустим первый кадр, выкрутим настройки на максимум и посмотрим, как свет обретает форму. Поехали.