연습: 음영으로 인한 렌더링 오류 디버깅

이 연습에서는 Visual Studio 그래픽 진단을 사용하여 셰이더 버그로 인해 올바르지 않게 색이 표시된 개체를 조사합니다.

이 연습을 통해 다음을 수행하는 방법을 알 수 있습니다.

  • 문제를 표시 하는 픽셀을 식별 하는 그래픽 로그 문서를 검사 합니다.

  • 그래픽 픽셀 기록 창을 사용하여 픽셀 상태를 더욱 면밀하게 검사합니다.

  • HLSL 디버거를 사용하여 픽셀과 꼭지점 셰이더를 검사합니다.

시나리오

꼭지점 셰이더에서 잘못된 픽셀 셰이더나 불완전한 정보를 전달하면 개체에서 일반적으로 개체에서 잘못된 색이 지정됩니다.

이 시나리오에서는 개체를 변환하여 고유한 모양을 제공하기 위해 새 꼭지점과 픽셀 셰이더와 함께 최근에 응용 프로그램에 개체를 추가했습니다.테스트하는 동안 응용 프로그램을 실행하면 개체는 단색 검정으로 렌더링됩니다.그래픽 진단을 사용하여 응용 프로그램을 디버깅할 수 있도록 그래픽 로그문제를 캡처합니다.문제는 응용 프로그램에서 다음과 같이 보입니다.

개체가 잘못된 색으로 렌더링되었습니다.

조사

그래픽 진단 도구를 사용 하 여 테스트 하는 동안 캡처된 프레임을 검사 하는 그래픽 로그 문서를 로드할 수 있습니다.

그래픽 로그에서 프레임을 검사하려면

  1. Visual Studio에서 누락된 모델을 보여주는 프레임이 포함된 그래픽 로그를 로드합니다.새 그래픽 로그 문서 창에 나타납니다 Visual Studio.이 창의 위쪽 부분에서 선택된 된 프레임의 렌더링 대상 출력이입니다.아래쪽은 프레임 목록이며 캡처된 각 프레임을 축소판 이미지로 표시합니다.

  2. 프레임 목록에서 개체가 올바른 모양을 갖고 있지 않은 프레임을 선택합니다.렌더링 대상은 선택한 프레임을 반영하도록 업데이트됩니다.이 시나리오에서는 그래픽 문서 창을 다음과 같은 로그:

    Visual Studio의 그래픽 로그 문서입니다.

문제를 보여주는 프레임을 선택한 후 진단하는 데 그래픽 픽셀 기록을 사용할 수 있습니다.픽셀 기록 그래픽 창에는 특정 픽셀과 셰이더에 미치는 효과를 가질 수 있었던 기본 형식 및 렌더링 대상에 미치는 효과가 시간 순으로 표시됩니다.

픽셀을 검사하려면

  1. 그래픽 픽셀 기록 창을 엽니다.그래픽 진단 도구 모음에서 픽셀 기록을 선택합니다.

  2. 검사할 픽셀을 선택합니다.그래픽 로그 문서 창에서 픽셀 올바르게 색이 있는 개체 중 하나를 선택 합니다.

    픽셀을 선택하면 기록에 대한 정보가 표시됩니다.

    그래픽 픽셀 기록 창은 선택된 픽셀을 반영하도록 업데이트됩니다.이 시나리오에서 그래픽 픽셀 기록 창은 다음과 같습니다.

    픽셀 기록은 DrawIndexed 이벤트 하나를 표시합니다.

    픽셀 셰이더의 결과는 완벽한 불투명 검정(0, 0, 0, 1)이고 결과가 완벽한 불투명 검정이 될 수 있도록 Output Merger에서 이 결과가 픽셀의 Previous 색과 결합했습니다.

잘못 색칠된 픽셀을 검사하고 픽셀 셰이더 출력이 예상된 색이 아니라는 발견한 후 HLSL 디버거를 사용하여 픽셀 셰이더를 검사하고 개체의 색에 일어난 일을 알아볼 수 있습니다.HLSL 디버거를 사용하여 실행하는 동안 HLSL 변수의 상태를 검토하고 HLSL 코드를 단계별로 실행하고 중단점을 설정하여 문제를 진단할 수 있습니다.

픽셀 셰이더를 검사하려면

  1. 픽셀 셰이더 디버깅을 시작합니다.픽셀 셰이더 옆의 개체 기본 아래에 있는 그래픽 픽셀 기록 창에서 디버깅 시작 단추를 선택합니다.

  2. 이 시나리오에서는 픽셀 셰이더가 셰이더 꼭지점을 통해 색상만을 전달하기 때문에 쉽게 픽셀 셰이더가 문제의 원인이 아닌지 확인할 수 있습니다.

  3. input.color에 포인터를 올려 놓습니다.그 값이 완전히 불투명 한 검정색 (0, 0, 0, 1) 인지 확인할 수 있습니다.

    "input"의 "color" 멤버가 정의되지 않았습니다.

    이 시나리오에서는 잘못 된 색 결과 꼭지점 셰이더 픽셀 셰이더 작업 대상의 오른쪽 색 정보를 제공 하지 않는 것 이며 검사 하 여 알 수 있습니다.

꼭지점 셰이더 픽셀 셰이더를 올바른 정보를 제공 하지 않을 것을 확인 한 후 다음 단계로 꼭지점 셰이더를 검토 하는 것입니다.

꼭지점 셰이더를 검사하려면

  1. 꼭지점 셰이더 디버깅을 시작합니다.꼭짓점 셰이더 옆의 개체 기본 아래에 있는 그래픽 픽셀 기록 창에서 디버깅 시작 단추를 선택합니다.

  2. 꼭지점 셰이더의 출력 구조를 찾습니다. 이것이 픽셀 셰이더 입력입니다.이 시나리오에서 이 구조체의 이름은 output입니다.꼭지점 셰이더 코드를 검사 하 고 여기서는 color 소속은 output 구조는 완전히 불투명 한 검정색으로 명시적으로 설정 된, 아마도 결과적으로 다른 사용자의 노력 디버깅.

  3. 색 멤버 입력된 구조에 복사 되지 않습니다 있는지 확인 합니다.때문에 값을 output.color 완전히 불투명 한 검정색으로 설정 하기 전에 output 구조체를 반환 하 고 있는지 확인 하는 것이 좋습니다 값 output 이전 줄에 올바르게 초기화 되지 않았습니다.꼭지점 셰이더 코드 설정 된 줄에 도달할 때까지 단계별로 output.color 의 값을 볼 때 검정 output.color.해당 값을 output.color 검정으로 설정 될 때까지 초기화 되지 않습니다.이 코드 줄에 설정 확인 output.color 에 검정 되지 수정 않고 삭제 합니다.

    "output.color"의 값은 초기화되지 않습니다.

꼭지점 셰이더 픽셀 셰이더를 올바른 색 값을 제공 하지 않습니다 렌더링 문제의 원인 인지 확인 한 후 문제를 해결 하려면이 정보를 사용할 수 있습니다.이 시나리오에서는 하면 그 다음 꼭지점 셰이더 코드를 변경 하 여 해결할 수 있습니다.

output.color = float3(0.0f, 0.0f, 0.0f);

를 다음으로 변경:

output.color = input.color;

이러한 코드는 수정되지 않은 개체의 꼭지점에서 바로 꼭지점 색상을 통과합니다. 더 복잡한 꼭지점 셰이더에서 코드가 통과하기 전에 색상을 수정할 수 있습니다.수정된 꼭지점 셰이더 코드는 다음과 유사해야 합니다.

수정된 꼭짓점 셰이더 코드입니다.

코드를 수정한 후 렌더링 문제가 해결되었는지 확인하려면 다시 빌드하고 응용 프로그램을 실행합니다.

개체가 올바른 색으로 렌더링되었습니다.