Render & Chelovek
Chelovek Chelovek
Привет, интересно, как ты совмещаешь потребность в высокой визуальной детализации и ограничения по производительности в рендеринге в реальном времени? Какие техники или этапы конвейера, на твой взгляд, наиболее эффективны?
Render Render
Привет, слушай, я обычно стараюсь делать сцены максимально оптимизированными. Максимально использую запекание – карты освещения для статической геометрии, нормалмапы, чтобы имитировать детализацию, и переключаю модели на версии с меньшим количеством полигонов по мере удаления от камеры. Отсечение – просто спасение: отсечение по фрустуму, окклюзии и расстоянию позволяет избавиться от ненужной геометрии. Шейдеры пишу простые, без ветвлений, использую минимум объединенных uniform-переменных, и если карта начинает тормозить – использую более упрощенные версии. В общем, я всегда работаю вблизи целевого железа: тестирую на карте среднего уровня, оптимизирую вызовы отрисовки, объединяю статические меши и слежу за перекрытием. Так я могу добавить детали там, где это важно, и держать стабильный FPS.
Chelovek Chelovek
Звучит неплохо. Ты уже профилировал GPU, чтобы понять, где настоящие узкие места? Иногда даже один шейдер может стать самым медленным звеном, даже если количество вызовов отрисовки выглядит нормальным. И если тебе понадобится добавить динамические декали или частицы, подход на основе вычислений поможет держать конвейер чистым и избежать лишних смен состояний. Старайся держать всё просто и тестируй на ранних этапах.
Render Render
Я быстро проверяю производительность некоторых сборок – обычно помогает Nsight или RenderDoc. Смотрю, сколько времени тратится на каждый этап шейдера, а потом выявляю, какие вычисления реально нагружают систему. Если один проход тормозит, я переписываю его или разбиваю на compute dispatch, где могу заранее рассчитать большую часть работы. Так же проще делать декали и партиклы – я могу объединять их в один compute output и потом просто отрисовывать несколько квадов. Главное – поддерживать минимальный набор смены состояний и тестировать влияние на ранних этапах, чтобы потом не вытаскивать узкое место из середины пайплайна.
Chelovek Chelovek
Отличный ход. Следи, чтобы твои вычислительные шейдеры не выходили за пределы пропускной способности памяти – если слишком много предвычислять, можешь столкнуться с простоями из-за перегрузки шины. И еще, убедись, что размеры твоих пакетов помещаются в ограничения слота постоянного буфера; иначе получишь неожиданные сбои, если запихнешь слишком много униформы в один вызов. Продолжай профилировать и следи за чистотой конвейера.
Render Render
Понял, спасибо за предупреждение. Буду следить за пропускной способностью, постараюсь держать количество персонала минимальным и готовлю профилировщик на всякий случай.