2012-05-29 4 views
0

예를 들어 평평한 표면을 렌더링하면 초당 1500 프레임을 얻을 수 있습니다. 간단한 블렌드 맵을 사용하면 프레임 속도가 700으로 떨어집니다 (두 프레임 속도가 떨어지면!). Microsoft DirectX SDK 예제에서 'Parallax Occlusion Mapping "모델은 작고 200 개가 넘는 버텍스 써클이지만 프레임 속도는 400으로 떨어집니다. 저의 혼란은 크라이시스와 같은 게임이 모든 최신의 가장 무거운 쉐이더 효과를 결합한다는 것입니다 (테셀레이션은 시차 매핑보다 무겁습니다). yeat는 초경량으로 50FPS를 낼 수 있습니다. SDK 예제보다 6 배는 적지 만 Crysis는 SDK 예제보다 화면에 수십만 개의 정점 렌더링 + 효과를 더 많이줍니다.HLSL 셰이더가 성능에 미치는 영향을 어떻게 예측할 수 있습니까?

답변

1

아주 간단하게 말해서, 최적화 된 게임 엔진은 가능한 한 프레임 당 적은 작업을하면서 많은 데이터를 푸시합니다. IMO, 샘플에 대한 프레임 속도의 저하는 셰이더/코드가 GPU/CPU에서 얼마나 열심히 작동하는지뿐만 아니라 샘플이 최적화되어 있지 않음을 반영합니다 (초고속이 아닌 읽을 수 있어야 함). 당신이 비교 엔진.

테셀레이션과 픽셀 푸시를 직접 비교하는 것은 잘못되었습니다. 최신 게임 엔진은 종종 GPU 자체에서 볼 수있는 세부 사항을 생성하여 프레임 속도에 좋습니다. 또한 게임 세계에있을 때 볼 수있는 "고도로"테셀레이션 된 바위가 신중하게 제작 된 환상인지 또는 실제로 많은 폴리곤으로 구성되는지 전혀 알 수 없습니다.

주위를 비틀면 DX 샘플도 매우 빠르게 만들 수 있습니다. 그러나 더 이상 읽을 수 없게 될 것입니다. 바로이 기술의 순수한 일러스트레이션이 아닙니다.

또한 작업 추가로 인해 소요 시간이 선형 적으로 증가하지 않습니다. 두 개의 서페이스를 렌더링 해보십시오. 프레임 속도는 얼마입니까?

+0

흠 읽을 수있는 것은 무엇을 의미합니까? 예제가 매우 간단하고 간단하며, 더 많은 것을 최적화 할 수 있습니다. – none

+0

단일 그리기 호출에서 모든 데이터를 푸시합니까? 각 렌더링 전에 렌더링 상태를 전환합니까?각 렌더링 전에 셰이더 매개 변수 세트를 최적화합니까? LOD를 기반으로 데이터를 가져 옵니까? 픽셀 쉐이더에서 수행되는 계산을 최적화합니까? 그런 것들이 합쳐집니다. – Ani

+0

좋아,이 질문을 많이하는지도 모르지만,이 HLSL을 최적화 할 수있는 곳을 1 ~ 2 개 지적 할 수 있을까요? 예를 들어, Dit it is : http://www.text-upload.com/read.php?id=381529&c=1374616 – none

1

이와 같은 간단한 샘플에서 프레임 속도를 살펴 보는 것은 매우 의미있는 성능 측정 방법이 아닙니다. DirectX는 약 100fps 또는 1000sfps의 매우 간단한 지오메트리를 렌더링하는 합성 테스트가 아닌 약 60fps에서 프레임 당 상당한 양의 지오메트리를 렌더링하는 게임 같은 작업 부하에 효율적입니다. 이와 같이 고립 된 프레임 속도를 간단하게 측정하여 특정 객체를 렌더링하는 상대적인 성능에 대해 굉장히 유용한 것을 외삽 할 수는 없습니다. 소프트웨어 및 하드웨어는 최소 대기 시간이 아닌 16.6ms 프레임의 최대 처리량을 위해 설계되었습니다.

DirectX 성능을 살펴볼 때 많은 작업이 병렬로 진행되고 있음을 기억해야합니다. 일반적인 게임에서 GPU가 프레임 n-1을 렌더링하는 동안 CPU는 프레임 n에 대해 draw 명령을 발행합니다. GPU 파이프 라인은 한 번의 그리기 호출에서 삼각형에 대한 픽셀을 음영 처리하는 반면 다른 호출에서는 삼각형을 래스터 화하고 동시에 다른 하드웨어 유닛에있는 다른 호출의 정점을 처리 할 수 ​​있습니다. 프레임 속도를 보면 무언가를 단순하게 렌더링 할 때 하드웨어를 효율적으로 사용하지 못합니다. 상당한 시간 동안 유휴 상태로있는 하드웨어가 대부분입니다. 하드웨어는 많은 작업을 동시에 처리 할 때 최대 처리량을 위해 설계되었으며 한 번에 하나 또는 몇 가지 작업 만 수행하면 많은 전력이 낭비됩니다.

크라이시스 같은 최신 게임은 하이 엔드 GPU에서 매우 복잡한 장면을 60fps로 렌더링합니다. 렌더링하려는 특정 장면이나 효과를 얻으려는 GPU 중 하나를 만들려고한다면 훌륭한 최적화 작업을 수행하지 않아도 사용자의 요구에 충분히 빨리 대응할 수 있습니다. 실제로 장면에서 성능이 문제가되는 지점에 도달하면 장면의 성능 병목 현상을 추적하고 최적화하는 데 사용할 수있는 PIX, nvPerfHUD 등과 같은 성능 도구가 있습니다.

관련 문제