30. 폴리곤을 화면에 그리는 순서가 성능에 영향을 미치나요?
답) 예. Geforce3 는 z-buffer 최적화기능을 갖추고 있기 때문에 폴리곤을 앞쪽부터 뒤쪽으로 찍으면 효율이 증가됩니다. 그렇다고 폴리곤단위로 정렬을 할 필요까지는 없고, 오브젝트 단위로 대충 소트만 해줘도 성능 향상에 도움이 될 것입니다.

31. 프레임 버퍼를 별로 필요가 없어도 꼭 지워야 하나요?
답) 답은 예와 아니오 둘 다입니다. Clear() 를 사용해서 z-buffer 와 stencil 버퍼를 지우는 것은 GeForce 자체의 z-buffer 최적화에 도움을 주기 때문에 반드시 해주는 것이 좋고 프로그램의 수행속도에도 별 지장을 주지 않을 정도로 충분히 빠릅니다. 하지만 color 버퍼는 z-buffer 나 stencil 버퍼와는 달리 꼭 지울 필요가 없다면 지우지 않는 것이 좋습니다.

32. 스텐실 버퍼를 다룰 때 성능 문제에 대해 주의해야 할 점은 어떤 것이 있나요?
답) 깊이 버퍼 포맷을 고를때 스텐실이 있는 것을 골랐을 경우 (D24S8) (역자주 : 원문에는 깊이버퍼를 backbuffer 라고 잘못 써 놨다.. 백버퍼가 스텐실과 무슨 상관인가 --;;) 에는 스텐실을 쓰지 않더라도 깊이 버퍼를 지울때 반드시 스텐실도 같이 지워주어야 합니다. 안 그러면 일일이 스텐실 값을 보존해주기 위해서 별도의 카피를 하게 되어버립니다. 스텐실이 없는 포맷을 사용할 경우에는 물론 관계없는 얘기입니다.

33. 삼각형 스트립이 삼각형 리스트보다 빠릅니까? 팬(fan) 은 어떻습니까?
답) GeForce3 에서 인덱스를 사용한 삼각형 스트립은 삼각형 리스트보다 빠릅니다. 저희가 개발한 NVTriStrip 툴을 이용하면 버텍스 캐쉬에 최적화된 스트립을 만들 수 있습니다. 팬은 스트립만큼 빠르긴 하지만 Batch 처리에 약하다는 단점이 있기 때문에 큰 물체를 그리려면 DrawPrimitive 호출을 여러번 해야 합니다. 그때문에 결국 Fan 을 사용함으로써 생긴 이득을 까먹게 되니까 결국 쓸만한 것이 못됩니다. 데이타를 스트립 형태로 만드는 것이 어려울 경우에는 인덱스를 사용한 삼각형 리스트를 쓰는 것이 좋습니다. (역자 주: 확실히 GeForce 의 데모인 NVSimple 같은 프로그램을 돌리면 스트립이 트라이앵글보다 성능이 더 좋다. 하지만 NVSimple 에 등장하는 모델은 극단적으로 간략화된 경우이기 때문에 실제 게임 프로그램에서도 그만큼의 성능차가 날 것이라고 보긴 어렵다. flipcode 등에서 오간 토론을 보면 실제 게임에서는 strip 을 쓰기 위해서 들인 노력에 비해 별 보람이 없다는 얘기도 많고 하므로 그것보다는 삼각형 리스트에서 버텍스 캐쉬에 어떻게 최적화 시킬 것인가 연구하는게 낫지 않을까 싶다)

34. GF3 (GeForce3) 에는 버텍스 캐쉬가 달려있나요?
답) 예. GF3 에는 24 개짜리 버텍스 캐쉬가 달려있습니다. (GF 나 GF2 에는 16개짜리입니다) 참고로 그중에 효율적으로 쓰이는 것은 주로 18 개짜리인데, 그 이유는 한번에 6 개까지의 버텍스가 뜨기 때문이라고 합니다 (역자주 : 이해불능.. 원문을 옮기겠음 - Note that the effective size of the vertex cache is more like 18 entries due to the fact that up to 6 vertices can be in flight at one time) 캐쉬에 들어있는 버텍스가 적중하면 TnL 을 다시 할 필요가 없고, 버텍스 데이타를 가져오는 bandwidth 도 절약할 수 있다.

35. 버텍스의 크기는 얼마가 적절합니까? 버텍스 버퍼에 넣을때 특정한 크기로 맞추는 것이 좋습니까?
답) 일반적으로, 버텍스의 크기는 가능한한 작게 해서 쓰는 것이 좋습니다. 그래야만 AGP 의 대역폭과 메인 메모리의 용량을 절약할 수 있기 때문입니다. 어떤 경우에는 버텍스의 크기를 32의 배수로 맞추는 것이 좋을 때도 있긴 합니다. (예를 들면 40바이트짜리 버텍스에 24 바이트어치의 안 쓰이는 데이타를 넣어서(padding) 64 바이트로 만든다던가 하는 경우) 이런 경우는 버텍스 버퍼내에 흩어져있는 데이타를 여기저기 랜덤 억세스하는 경우입니다. 하지만 버텍스 버퍼를 순차적으로 억세스할 경우에는 그렇게 할 필요가 없습니다. 보통은 버텍스 버퍼에 한번에 채워서 한꺼번에 보내기 때문에 padding 을 할 필요가 별로 없습니다. 단, 여러개의 버텍스 버퍼를 나눠서 쓰는 대신 하나의 큰 버텍스 버퍼로 합쳐서 쓰고자 할 경우 각 버텍스의 크기가 다를 경우 padding 을 하는 것은 VB 바꾸는 횟수를 줄여서 성능향상에 도움을 줄 수 있습니다.

36. 버텍스 버퍼에 버텍스가 정렬된 순서가 성능에 영향을 미칩니까?
답) 옙. 버텍스는 버텍스가 실제로 쓰일 순서대로 저장해놓을때 효율이 좋습니다. 특히 버텍스의 크기가 32의 배수가 아닐때는 더욱 그렇습니다. 그리고 버텍스 버퍼내에 여기저기 흩어져있는 데이타를 억세스 할 경우에는 DRAM 페이지가 자꾸 열렸다 닫혔다 하면서 성능이 나빠집니다. 저희 홈피에 있는 NvTriStip 프로그램을 사용하면 이런 문제를 해결할 수 있도록 최적화할 수 있습니다.

imcgames 의 김학규입니다