DirectX11

[DX11] Renderdoc 사용법 CubeMap 디버깅

yeoul0714 2025. 4. 23. 21:31

1. 개요


지난 Shadow글에서는 구현이 완료된 뒤에 내용을 정리한 글이기 때문에 막힘없이 쭉쭉 나아갔던것을 볼 수 있었습니다.

 

그러나 실제로 구현을 할때는 마치 끝이 보이는 어두컴컴한 터널을 걷는 기분이었습니다.

 

이 길이 맞는지도 모르고 끝까지 간다고 해서 출구가 있을지도 모르는 미지의 상황이었습니다.

 

코딩은 마치 우리의 인생과 참 많이 닮아 있습니다.

 

이 길이 맞는지는 아무도 모르고 끝까지 간다고 해서 원하는 결과를 낼 수 있을지도 모릅니다.

 

결국 해결할 수 있었던것은 동료들과 방향을 알려주는 다양한 도구들이었습니다.

 

혼자 걷는 것 보다는 둘이 낫고 나침반이라도 들고 걷는 편이 길찾기에 훨씬 유리합니다.

 

오늘은 개발중 생긴 문제들과 나침반 역할을 해준 Renderdoc에 대해 글을 작성해보겠습니다.

 


 

2.  Renderdoc 사용법


우선 Depth Map이 적절하게 저장되는지를 판단하는 것 부터 큰 난관이었습니다.

 

일단 SRV하나에 6개의 depth가 저장된다는 개념부터 파악하기가 힘들었습니다.

 

비주얼스튜디오의 그래픽 디버거를 이용해서 어느정도 파악이 되는듯 했지만 명확하지는 않았습니다.

 

그래서 사용한것이 바로 Renderdoc이다.

 

https://renderdoc.org/

 

RenderDoc

I've written this post with a specific target audience in mind, namely those who have a good grounding in existing APIs (e.g. D3D11 and GL) and understand the concepts of multithreading, staging resources, synchronisation and so on but want to know specifi

renderdoc.org

 

이곳에서 다운받을 수 있고 간단한 사용법을 소개하고

 

Renderdoc을 이용해 큐브맵을 보는법을 소개하도록 하겠습니다.

우선 Renderdoc을 켜면 이러한 화면이 나오게 되는데

 

우리가 주목할 곳은 빨간 네모가 쳐진 부분입니다.

 

Executable Path : 이곳에 프로젝트를 빌드한 exe파일을 등록해줍니다.

 

Working Directory : 현재 작업중인 디렉토리로 설정해줍니다. (cpp파일등 프로젝트와 관련된 파일이 있는 곳)

 

이렇게 설정해줬다면 우하단의 주황색 네모를 보면 Launch라는 버튼이 있습니다. 

 

이것을 눌러주면 자동으로 프로젝트가 실행됩니다.

 

 

그렇게 실행하면 우상단에 Capturing D3D11 이런식으로 나오게 됩니다.

 

 

 

그런뒤 포인트 라이트의 큐브맵을 확인할 수 있도록 씬을 구성해줍니다.

 

 

그런뒤 renderdoc을 켜보면 화면이 이런식으로 바뀌어 있을것입니다.

 

여기서 빨간 네모를 눌러주면 됩니다. (Cpture Frame Immediately)

 

그러면 이렇게 화면이 캡쳐가 됩니다.

 

그런뒤 우리는 캡쳐된 사진을 더블클릭 할것입니다.

 

 

그러면 해당 프레임에 대한 다양한 정보가 나오게 됩니다.

 

우리가 궁금한것은 바로 6방향의 depth가 저장되어 있는 Shader Resource View입니다.

 

우선 코드에서 몇번 슬롯으로 넘겨주고 있는지 확인해야합니다.

 

 

저 같은 경우엔 15번 슬롯으로 ShadowCubeMap을 넘겨주고 있었습니다.

 

좋습니다. 이제 우리는 15번 슬롯에 담겨있는 SRV를 renderdoc을 이용해 확인할것입니다.

 

필터에 다음과 같이 검색해줍니다. 

 

그렇게하면 해당 함수를 쓰는 부분을 확인할 수 있습니다.

 

그런뒤 주황네모의 화살표를 눌러줍니다.

 

 

아까 우리는 15번에 CubeMap을 넘겨준것을 기억하고 있습니다.

 

 

그리고 이 순서대로 눌러줍니다.

 

308번을 누르고 Pipeline State를 누르면 파이프라인 단계가 나오게 되는데

 

우리는 cubemap을 Pixel Shader에서 사용중이므로 PixelShader를 눌러줍니다.

 

그러면 Pixel Shader에서 쓰는 소스들이 리스트됩니다.

 

거기서 15번 슬롯을 찾아줍니다.

 

사진을 보면 null이 아닌 값이 들어오고 있어서 하늘색으로 표시된 모습입니다.

 

저기서 우측의 화살표를 눌러줍니다. (go)

 

 

빨간 네모를 확인해보면 우리가 원하는 face를 선택해서 볼 수 있습니다.

 

 

자 확인전에 오브젝트 배치를 다시 한번 확인해 봅시다.

 

여울 캐릭터는 -y방향에 큐브는 -z방향에 있습니다.

 

renderdoc에서 해당 방향을 확인했을때 정상적으로 나오는지 확인해보도록 합시다.

 

여울의 모습 -y

 

cube의 모습 -z

 

놀랍게도 잘 들어오고 있습니다! (사진상으로 희미해서 식별이 어려운 상태입니다.)

 

만약에 그림자가 잘 안되는 상태에서 renderdoc으로 cubemap이 정상적으로 값이 들어오고 있다는 사실을 알게 되면

 

난이도는 급격히 낮아집니다.

 

적어도 cubemap이 이상하진 않을까하며 확인해볼 수고가 줄어들기 때문입니다.

 

저도 그래픽 디버거를 이용해서 확인해보기 전까지는 도무지 어디가 문제인지 갈피를 잡기가 힘들었던 경험이 있습니다.

 

이 상황에서는 쉐이더에서 연산하는 부분이 문제였다는 사실을 우리는 알게 된것입니다. (cube texture는 정상이므로)

 

여기서 하나의 팁을 추가하자면

 

 

상단에 있는 마법 지팡이를 누르게 되면 

 

 

이렇게 더욱 선명하게 볼 수 있습니다

 

오른쪽의 초록 화살표를 누르면 다시 원래대로 돌아갑니다.


 

3. Renderdoc 쉐이더 디버깅


놀랍게도 Renderdoc에서는 쉐이더 디버깅도 가능합니다.

 

 

우선 Texture View로 돌아와서 좌측의 Colour Pass를 눌러줍니다.

 

그리고 내가 렌더링 하고 싶은 픽셀을 마우스 우클릭으로 찍어줍니다. (여기서는 여울 코)

 

그리고 우하단에 Debug 버튼을 눌러줍니다.

 

Colour Pass를 누르지 않은 상태라면 Debug버튼이 활성화되지 않습니다.

 

 

이상태로 주황 네모를 봅시다 저 부분을 우클릭하면 메뉴가 나오게 되는데

 

저기서 Debug Pixel을 눌러줍니다.

 

 

그럼 이렇게 쉐이더를 line별로 디버깅 가능합니다.

 

비주얼 스튜디오의 디버거처럼 F10을 통해서 line별로 넘어갈 수 있고 F11을 통해서 함수안으로 타고 들어갈 수 있습니다.

 

그리고 Ctrl + F10을 누르게되면 커서 부분으로 바로 이동합니다.

 

 

저는 Point Light의 빛을 계산하는 함수로 즉시 이동했습니다.

 

 

빛의 방향을 확인해보니 -y방향으로 잘 가고있는 모습입니다. (여울의 코 픽셀은 라이트기준 -y방향입니다.)

 

이러한 방식으로 쉐이더를 디버깅하면 문제를 보다 더 수월하게 찾을 수 있습니다.

 


 

 

'DirectX11' 카테고리의 다른 글

[DX11] Lua 스크립트 연동 + SOL2  (0) 2025.04.27
[DX11] PCF (Percentage Closer Filtering)  (0) 2025.04.24
[DX11] Point Light Shadow - Peter Panning, Shadow Acne  (2) 2025.04.23
[DX11] Normal Map  (0) 2025.04.16
[DX11] Light Culling  (0) 2025.04.12