Fluxis & ReelRefinery
ReelRefinery ReelRefinery
Привет, Флюксис, вот что я думала: как бы нам ускорить постпродакшн для VR-проектов — чтобы рендер был быстрее, но при этом ты не теряла свою детализацию? Что, по-твоему, сейчас больше всего тормозит твой рабочий процесс?
Fluxis Fluxis
Честно говоря, самое большое замедление происходит на финальной прорисовке, когда я выставляю текстуры по краям. Движок пытается сохранить чёткость, но в итоге сглаживает стыки. Если бы я могла убрать пару миллисекунд из расчётов шейдера или заменить карты окружения на предварительно отфильтрованную цепочку мип-карт, цикл ускорился бы значительно. Сейчас это похоже на погоню за призраком – с каждым кадром я добиваюсь большей детализации, но она всё равно не выглядит законченной. Как тебе кажется?
ReelRefinery ReelRefinery
Кажется, у тебя движок работает на пределе, а текстуры будто на старте. Вот пара быстрых решений: во-первых, убедись, что твои карты окружения предварительно отфильтрованы на каждом уровне MIP – никаких вычислений на лету во фрагментном шейдере. Если ты до сих пор запекаешь каждый кадр, переходи на текстурный массив, чтобы GPU мог брать нужный LOD за один проход. Во-вторых, проверь сам шейдер: убери все вычисления нормалей на пиксель, которые можно перенести в вершину, или используй карту нормалей. Даже одно вычисление с плавающей точкой на пиксель быстро накапливается. В-третьих, следи за перекрытием: используй отсечение передней грани, где это возможно, и оптимизируй предварительные тесты глубины, чтобы GPU не тратил ресурсы на пиксели, которые все равно будут отброшены. И, наконец, после каждого изменения запускай гистограмму времени кадра – это даст тебе наглядное представление о том, где на самом деле узкое место. Если ты сделаешь все это, ты перестаешь гоняться за призраками и начнешь получать стабильные, плавные кадры.
Fluxis Fluxis
Спасибо за настолько понятный чек-лист, прямо в точку. Начну с замены per-pixel нормалей на запечённую карту и добавлю карты окружения в префильтрованный массив. Overdraw – тихий убийца, поэтому в следующий раз займусь оптимизацией отсечения и depth pre-tests. Прогоню гистограмму сразу после каждой правки; цифры покажут, где ещё теряю миллисекунду. Превратим это погоню за призраками в плавную поездку.
ReelRefinery ReelRefinery
Замечательно. Держи всё лаконичным – не дай запечённым нормалям снова стать причиной артефактов, и следи, чтобы точность буфера глубины не стала узким местом. Если числа будут выглядеть ровными, значит движок доволен, и ты наконец сможешь перестать гоняться за призраком. Удачи, я буду следить за гистограммой как сокол.
Fluxis Fluxis
Поняла. Важнее точность, а не идеальная полировка, поэтому подкручу фильтрацию нормал-мапы, чтобы края были чёткими, без ступенек. Увеличим буфер глубины до 24 бит и ограничим диапазон, чтобы избежать потери точности. Если гистограмма останется ровной, я, наконец, закончу с этим призраком. Спасибо за зоркий глаз, до встречи в самой сочной точке.
ReelRefinery ReelRefinery
Ты всё правильно делаешь – точность важнее красивой картинки, когда цифры сойдутся. Только смотри, чтобы узкий диапазон глубины не начал обрезать объекты на переднем плане. Следи за гистограммой, и когда она станет ровной – радуйся этому идеальному моменту. Удачи в поисках, и не стесняйся написать мне, если этот призрак опять появится в тенях.