У меня есть серьезная проблема, которая беспокоила меня некоторое время.
Моя проблема в том, что в моей игре используется механизм отложенного рендеринга, что очень затрудняет альфа-смешивание.
Единственный способ решить эту проблему - это визуализация сцены (включая карту глубины, карту нормалей и диффузную карту) без каких-либо объектов с альфа-символами.
Затем для каждого многоугольника, имеющего текстуру с альфа-компонентом, отключите буфер z и отредактируйте его, включая нормали, глубину и цвет, а где бы ни было значение «0», не выводите ничего в глубину, нормаль и цвет буфер. Выполните расчеты освещения / другие отложенные эффекты для этих двух отдельных текстур, затем объедините цветовые буферы, используя карту глубины, чтобы проверить, какой пиксель виден.
Эта идея была бы чрезвычайно дорогостоящей (не говоря уже о некоторых серьезных недостатках), чтобы сделать это, очевидно, должна быть зарезервирована только для как можно меньшего числа случаев, что исключает вопрос о лесных участках. Однако, если нет лучшего решения, у меня есть один вопрос.
При альфа-смешивании с DirectX есть ли состояние шейдера / устройства, которое я могу установить, чтобы сделать так, чтобы я мог избежать записи в буфер глубины / нормального / цветного изображения, когда захочу? Проблема заключается в том, что пиксельный шейдер должен выводить на все указанные цели рендеринга, поэтому, если он настроен на вывод на 3 цели рендеринга, он должен это сделать, что переопределит предыдущее значение цвета для этого текселя в текстуре.
Если нет состояния наложения, которое позволяло бы мне это сделать, это означало бы, что мне нужно будет скопировать карту нормалей, текстур и глубины, чтобы сохранить сцену, а затем отобразить новую текстуру, карту глубины и карты нормалей, а затем объединить два текстуры на основе значений альфы и глубины.
Полагаю, на самом деле все, что я хочу знать, - это если есть простой надежный и, возможно, дешевый способ рендеринга альф в отложенном рендерере?