В компьютерной графике распространенным методом является применение джиттера к позициям выборки, чтобы избежать видимых шаблонов выборки.

Как правильно применять дрожание к позициям выборки во фрагментном шейдере? Один из способов, который я мог бы придумать, - это подать текстуру шума в шейдер, а затем в зависимости от значения texl этой текстуры шума изменить позиции выборки всего, что нужно сэмплировать.

Есть ли лучший способ реализовать дрожание?

0
matthias_buehlmann 29 Дек 2012 в 18:47
 – 
user1849534
29 Дек 2012 в 18:50

1 ответ

Лучший ответ

Различные схемы AA для аппаратных драйверов обычно уже основаны на джиттере - у каждого поставщика есть свои предпочтительные шаблоны. И, к сожалению, пользователь / игрок часто может возиться с настройками и включать и выключать вещи.

Это может заставить вас думать, что нет "правильного" пути - и вы будете правы! Есть способы, некоторые из которых подходят для некоторых задач. Учись и используй то, что тебе нравится.

Для дрожания текстуры поверхности вы можете попробовать что-то вроде этого:

  1. В фотошопе сделайте изображение 256x512 rgb (или 256x511 для некоторых версий экспортера NVIDIA DDS), залейте его ВСЕ случайным шумом, сохраните как DDS с «использовать существующие mip-карты». это даст вам примерно равномерный шум независимо от того, насколько масштабируется текстура (по крайней мере, во многих полезных диапазонах размеров).

  2. в своем шейдере прочтите текстуру шума, затем примените ее к UV, а затем прочитайте другую текстуру (и), например

    float4 noise = tex2D (noiseSampler, OriginalUV);

    float2 newUV = OriginalUV + someSmallScale * (noise.xy-0.5);

    float4 jitteredColor = tex2D (colorSampler, newUV);

Попробуйте другие варианты по своему усмотрению. Имейте в виду, что сильное дрожание текстуры может вызвать множество промахов в кэше текстур, что может сказаться на производительности, и будьте осторожны с картами нормалей, поскольку вы вводите высокочастотные компоненты в уже отфильтрованный сигнал.

1
bjorke 30 Дек 2012 в 14:52