다음을 통해 공유


HLSL 셰이더 최적화

이 섹션에서는 셰이더를 최적화하는 데 사용할 수 있는 범용 전략에 대해 설명합니다. 이러한 전략을 모든 플랫폼에서 모든 언어로 작성된 셰이더에 적용할 수 있습니다.

셰이더 계산을 수행할 위치 파악

꼭짓점 셰이더는 꼭짓점 가져오기 및 꼭짓점 데이터의 행렬 변환 수행을 포함하는 작업을 수행합니다. 일반적으로 꼭짓점 셰이더는 꼭짓점당 한 번 실행됩니다.

픽셀 셰이더는 텍스처 데이터 가져오기 및 조명 계산 수행을 포함하는 작업을 수행합니다. 일반적으로 픽셀 셰이더는 지정된 기하 도형에 대해 픽셀당 한 번 실행됩니다.

일반적으로 픽셀은 장면의 꼭짓점보다 많으므로 픽셀 셰이더는 꼭짓점 셰이더보다 더 자주 실행됩니다.

셰이더 알고리즘을 설계할 때 다음 사항에 유의합니다.

  • 가능한 경우 꼭짓점 셰이더에서 계산을 수행합니다. 픽셀 셰이더에서 수행되는 계산은 꼭짓점 셰이더에서 수행되는 계산보다 비용이 훨씬 더 많이 듭니다.
  • 조밀한 메시와 같은 상황에서 성능을 개선하려면 꼭짓점별 계산을 사용하는 것이 좋습니다. 밀도가 높은 메시의 경우 꼭짓점당 계산은 픽셀당 계산으로 생성된 결과와 시각적으로 구분할 수 없는 결과를 생성할 수 있습니다.

불필요한 명령 건너뛰기

HLSL에서 동적 분기는 실행되는 명령 수를 제한하는 기능을 제공합니다. 따라서 동적 분기는 셰이더 실행 시간을 단축하는 데 도움이 될 수 있습니다. 기하 도형이나 픽셀이 표시되지 않으면 동적 분기를 사용하여 셰이더를 종료하거나 명령을 제한합니다. 예를 들어, 픽셀이 켜지지 않으면 조명 알고리즘을 실행할 필요가 없습니다.

다음 표에는 셰이더에서 조건을 테스트하고 동적 분기를 사용하여 불필요한 명령을 건너뛸 수 있는 몇 가지 사례가 나열되어 있습니다. 테이블이 포괄적이지 않습니다. 오히려 코드를 최적화하기 위한 아이디어를 제공하기 위한 것입니다.

확인할 조건 셰이더의 응답
알파 검사는 픽셀이 보이지 않도록 결정합니다. 셰이더의 나머지 부분을 건너뜁니다.
픽셀 또는 기하 도형이 완전히 흐릿합니다. 셰이더의 나머지 부분을 건너뜁니다.
피부 두께는 0입니다. 뼈를 건너뜁니다.
광 감쇠는 0입니다. 조명을 건너뜁니다.
양이 아닌 램버시안 항입니다. 조명을 건너뜁니다.

 

팩 변수 및 보간

셰이더 데이터에 필요한 공간에 유의합니다. 가능한 한 많은 정보를 변수 또는 보간에 넣습니다. 때로는 두 변수의 정보가 단일 변수의 메모리 공간에 압축될 수 있습니다.

셰이더 복잡성 감소

셰이더를 작고 단순하게 유지합니다. 일반적으로 명령 수가 적은 셰이더는 명령 수가 많은 셰이더보다 더 빠르게 실행됩니다. 또한 더 작고 덜 복잡한 셰이더를 디버그하고 최적화하는 것이 더 쉽습니다.

HLSL에 대한 프로그래밍 지침

HLSL에 대한 프로그래밍 지침