Vertex Shaders

23. 버텍스 쉐이더의 명령 갯수와 수행 성능과는 어떤 관계가 있습니까?
답) 버텍스 쉐이더의 수행성능은 명령의 갯수가 늘어나는 만큼 선형적으로 영향을 받습니다. 대체적으로 명령어 한개당 한개의 명령싸이클이 소모된다고 보면 됩니다.

24. 명령의 종류마다 수행소요시간이 다른 것들이 있습니까?
답) 모든 명령은 동일한 시간을 소요합니다. Negations, swizzling, 과 write masking 같은 연산은 수행시간을 따로 먹지 않으니까 최대한 많이 활용하는 것이 좋습니다.

25. 버텍스 쉐이더의 성능과 FFP 의 성능차이는 어느정도입니까?
답) 버텍스 쉐이더는 FFP 와 거의 동급의 수행효율을 보입니다. 몇몇경우에는 FFP 가 약간 더 빠르지만, 프로그램 자체가 geometry 처리부분이 병목현상을 보이거나 TnL 모드 변환이 아주 많은 경우가 아닌 경우에 한한 얘기입니다. 버텍스 쉐이더를 사용하다가 FFP 로 변환할때에는 시간 소모가 없지만, FFP 를 쓰다가 버텍스 쉐이더를 사용할 때에는 버텍스 프로그램을 업로딩하는 약간의 오버헤드가 발생합니다. 대신 버텍스 쉐이더를 쓸 때에는 잘 안보이는 부분에서 처리를 생략하는 방식으로 속도를 만회할 수있는 기회가 있습니다 (역자주: 원문에는 cut corner 라고 되어있는데, 몰래 금화의 테두리를 아주 조금씩 깎아 모아서 돈을 버는 행위를 말함. 원래 금화의 테두리는 밋밋했었는데 이런 일이 잦아지자 금화의 테두리에 울퉁불퉁한 굴곡을 새겨서 금을 깎아내면 곧바로 티가 나도록 하였다고 합니다)
예를 들면, 라이팅을 카메라 좌표계에서 하는 것이 아니라 모델좌표계에서 하는 편법을 쓴다던가, 몇몇 벡터들에 대한 정규화(normalizations)를 생략하는 것으로써 결과적으로 명령의 갯수를 줄이는 것입니다. 이런 방식을 잘 활용하면 버텍스 쉐이더가 FFP 보다 더 빨리 수행될 수 있는 여지가 많이 있습니다.

26. GeForce2 에서는 버텍스 쉐이더가 하드웨어적으로 돌아갑니까?
답) 아뇨 (--;;;;) GeForce2 는 하드웨어적으로 버텍스 쉐이더를 지원하지 않습니다. 하지만 DirectX8 런타임과 OpenGL 드라이버는 소프트웨어적으로 최적화되어있기 때문에 대부분의 경우 성능은 크게 뒤떨어지지 않습니다

Pixel Shaders
27. 멀티텍스춰를 여러개 쓰면 성능이 그만큼 저하됩니까?
답) 예. 두개까지의 텍스춰 (텍스춰가 1차원이건 2차원이건 큐브맵이건 한개로 간주) 는 GeForce3 에서 최고의 성능을 발휘하지만, 텍스춰의 갯수가 3개나 4 개로 늘어나면 성능이 절반으로 줄어듭니다

28. 칼라 블렌딩 연산(dp3, mul 등) 을 할때 어느정도나 성능에 영향을 미칩니까?
답) 명령의 갯수가 1개-2개 일때는 100% 의 성능을 내고, 3-4개는 50%, 5-6개는 33%, 7-8개는 25% 의 효율을 냅니다. 참고로 이것은 최악의 경우를 가정한 것이므로 실제 성능은 이것보다 더 좋을 수 있습니다.

29. 헉! 명령을 여러개 쓰면 성능이 팍팍 떨어지는데 이걸 쓸 수 있나요?
답) 너무 걱정하지 않아도 됩니다. 이것들은 단지 fill-rate 에만 영향을 끼치는데 요즘 게임들은 fill-rate 부분이 병목현상이 되는 경우는 많이 줄어들었습니다. 요즘에는 주로 병목현상이 메모리 대역폭이나 CPU 에서 발생하기 때문에 Fill-rate 가 25% 로 줄어들었다고 해서 갑자기 프레임률이 25%로 줄어들지는 않습니다. 그리고 텍스춰 하나에 대해 여러개의 명령을 수행하는 것은 최종적으로 pass 수를 줄이는데에 도움이 되기 때문에 fill-rate 와 관계없이 성능향상에 도움이 됩니다. 그리고 4 개의 텍스춰와 8 개의 명령을 사용한다고 하더라도, 성능 저하가 누적되지는 않습니다 (4개의 텍스춰:50%, 8개의 명령:25% = 12.5%, 즉 성능이 1/8 로 떨어지는 것은 아니다.)  왜냐하면 텍스춰 fetching 과 칼라 블렌딩은 파이프라인상에서 동시에 일어나기 때문에, 실질적인 fill-rate 에 대한 영향은 두가지중 제일 낮은 것에 의해서만 영향을 받습니다. (즉 텍스춰 갯수에서 50%의 성능 저하요소가 있고, 명령 갯수에서 25%의 성능저하요소가 있다고 하면 전체 성능저하는 텍스춰를 몇개 쓰건간에 25% 로 정해진다는 얘기임)

imcgames 의 김학규입니다