Как изменить / сместить положение пикселя в фрагментном шейдере Cg? - PullRequest
1 голос
/ 14 ноября 2011

Можно ли изменить пиксельные координаты в фрагментном (пиксельном) шейдере с помощью Cg?Я уверен, что такая функциональность стала доступна в шейдерах 2-го / 3-го поколения, но я не знаю, какие именно профили или как это сделать.

Ответы [ 2 ]

1 голос
/ 04 сентября 2014

Вы не можете изменять фактические пиксели растрового изображения в реальном времени, но вы МОЖЕТЕ сместить U / V-координатное отображение, которое изменяет точку, в которой отображается каждый пиксель.

Представьте себе ультрафиолетовое картирование как красно-зеленый градиент. Красный представляет отображение положения X, а зеленый - отображение положения Y. Если бы вы умножили эти координаты, скажем, на шум перлина, отображение было бы смещено, а значит, и пиксели.

1 голос
/ 23 ноября 2011

Нет, это невозможно.

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

позиции X и Y устанавливаются еще до того, как фрагментный шейдер будет выполнен (в Rasterizer ). Типичные растеризаторы на самом деле генерируют как минимум 2x2 фрагмента пикселей, а аппаратное обеспечение не обрабатывает пиксели по отдельности вплоть до стадии смешивания.

То, что некоторые люди склонны делать, чтобы имитировать этот тип функции, - это генерировать больше пикселей, чем необходимо, и отбрасывать посторонние пиксели.

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

В конечном счете, какую технику вы можете использовать, зависит от того, чего вы пытаетесь достичь. Но полная модификация X и Y никогда не поддерживалась различными API, будь то Cg, OpenGL или DirectX, потому что аппаратное обеспечение не может этого сделать.

...