2011-11-14 3 views

답변

1

아니요, 불가능합니다.

프래그먼트 셰이더에서 수정할 수있는 유일한 좌표는 Z이며, Z 버퍼로 이동합니다. 또한 계층 적 Z와 같은 몇 가지 최적화를 무효화하므로 성능에 영향을 미칩니다.

프래그먼트 셰이더가 실행되기 전에 X 및 Y 위치가 설정됩니다 (Rasterizer). 일반적인 래스터 라이저는 사실 최소한 2x2 픽셀의 청크를 생성하며 하드웨어는 블렌딩 단계까지 픽셀을 개별적으로 처리하지 않습니다.

이러한 유형의 기능을 모방하기 위해하는 경향이있는 사람들은 필요 이상으로 많은 픽셀을 생성하고 외부 픽셀을 삭제하는 경향이 있습니다.

들었던 기능은 비록 테셀레이션 일 수 있습니다. 조각 쉐이더의 일부로 수행되지는 않지만 추가 지오메트리를 생성 할 수있는 별도의 파이프 라인 부분입니다.

궁극적으로 사용할 수있는 기술은 달성하려는 목표에 따라 다릅니다. 그러나 하드웨어가 그것을 할 수 없기 때문에 X와 Y의 담요 수정은 Cg, OpenGL, DirectX 등 다양한 API에 의해 지원되지 못했습니다.

+0

좋아요. 그래서 어떻게 CG로 z를 수정합니까? Displacement는 내가 생각하기에 올바른 용어입니다 ... 어떻게 z 위치를 통과시키고 변경합니까? –

+0

DEPTH 의미론을 통해 Z를 변경할 수 있습니다 (float 형식). "[,,,] 기본값은 래스터 라이저에서 얻은 보간 깊이이며, 의미 상으로이 기본값은 프래그먼트 프로그램의 실행 초기에 출력에 복사됩니다." – Bahbar

1

실시간으로 비트 맵의 ​​실제 픽셀을 수정할 수는 없지만 U/V 좌표 매핑을 대체하여 각 픽셀이 매핑되는 지점을 변경할 수 있습니다.

빨강 및 녹색 그라데이션으로 UV 매핑을 상상해보십시오. 빨간색은 X 위치 매핑을 나타내고 녹색은 Y 위치 매핑을 나타냅니다. 예를 들어, 퍼널 노이즈 (parlin noise)로 좌표를 곱하면 맵핑이 오프셋되고 따라서 픽셀도 상쇄됩니다.

관련 문제