Pixel Shaders

9. GeForce3 은 몇개까지의 픽셀쉐이더 연산을 지원합니까?
답) Geforce3 은 4 개까지의 텍스춰 어드레싱 연산과 그 뒤에 따르는 8 개까지의 칼라/알파 블렌딩 연산을 지원합니다. 참고로 칼라연산과 알파연산은 픽셀쉐이더의 '+' 를 이용하여 한 명령 내에서 동시에 처리할 수 있으니까 실질적으로는 16 개까지의 연산을 수행할 수 있습니다.

10. 포그 처리는 픽셀쉐이더 안에서 프로그래머가 직접 처리하는 것입니까? 스페큘러값의 경우에는 어떻습니까?
답) 포그값은 픽셀쉐이더 처리가 끝난 후에 자동적으로 처리됩니다. 이 처리의 기준은 Renderstate 에서 정해져있는대로입니다. 스페큘러값은 프로그래머가 직접 처리해줘야 하고, 픽셀쉐이더에서 최종 칼라 값으로 나올 R0 레지스터에 직접 더해줘야 합니다.

11. 텍스춰 어드레싱 연산을 블렌딩 연산 후에 하면 안됩니까?
답) 안됩니다. 텍스춰 어드레싱 연산은 반드시 블렌딩 이전에 결정되어야 합니다. 이것은 파이프라인의 속성상 원래 그렇게 정해져있습니다.

12. 텍스춰 어드레싱 연산과 칼라 블렌딩 연산은 각각 무슨 일을 하는 것입니까?
답) 텍스춰 어드레싱 연산 (tex, texcoord, texm3x2tex, 등) 은 텍스춰에서 칼라값을 뽑아내는 방식을 정의하는 것입니다. 어드레싱 연산을 이용해서 32-bit 부동소숫점단위로 텍스춰의 어느부분을 뽑아낼지 좌표를 정할 수 있습니다. 칼라 블렌딩 연산 (dp3, mul, mad, lrp, 등등.. OpenGL 에서는 register combiners 라고 부름) 은 텍스춰 어드레싱 연산에서 뽑아져 나온 칼라값들을 조합하는 방식을 정하는 것입니다. 여기에는 부가적으로 버텍스 쉐이더에서 넘어온 보간된 칼라값 (v0 and v1) 과 별도로 정의된 상수 값 (c0-c7) 을 이용할 수 있습니다. 이것들은 부호가 있는 9비트 포맷입니다. (1-bit sign, 8-bits for each R, G, B, and A).

13. GeForce3 는 DX6 에서 쓰였던 EMBM 을 지원합니까?
지원합니다. 하지만 EMBM 은 일반인 범프매핑에 쓸 수 있는 해결방법이 못됩니다. 왜냐하면 평면에만 효과가 있기 때문입니다. 물론 몇몇경우에는 효율적으로 쓰일 수도 있고 범프매핑 이외의 다른 용도에 쓸 수도 있습니다. 예를 들면 EMBM 과 RenderToTexture를 이용해서 증기의 모양을 흉내낼 수 있습니다. 하지만 일반적으로 쓸 수 있는 반사효과를 포함할 수 있는 범프매핑을 하려면 GeForce3 에 내장된 기능을 이용하시길 바랍니다 (the texm3x3vspec pixel shader addressing instruction).

14. GeForce3 에서 지원하는 EMBM 에는 별도의 제약사항이 있습니까?
GeForce3 은 EMBM 용 ds/dt 오프셋과 회전처리를 한 이후에 프로젝션용 나눗셈연산을 하지 않습니다. 하지만 ds/dt 오프셋 연산을 하기 전에 프로젝션 연산을 할 수는 있습니다. 다시 말하자면 범프맵을 프로젝션할 수는 있지만, 환경 맵을 프로젝션 할 수는 없다는 뜻입니다.

15. GeForce2 는 픽셀쉐이더를 지원합니까?
GeForce 256 과 GeForce2 는 픽셀쉐이더를 지원하지 않습니다. 픽셀쉐이더를 지원하는 것은 GeForce3 뿐입니다.GeForce2 나 그 이전의 비디오카드를 하드웨어적으로 이용하려면 Direct3D 에서 예전처럼 SetTextureStageState() interface 를 이용합니다. 참고로 GeForce 256 과 GeForce2 은 DirectX 8 의 FFP 에 추가된 새로운 D3DTOP_MULTIPLYADD 같은 명령들과 추가적인 레지스터들을 이용할 수 있습니다.

imcgames 의 김학규입니다