단위 테스트를 어떤 의미 에서 의 단위 테스트를 말하는 건지 잘 모르겠네요
1. GPU의 파이프라인이 의도한 대로 동작하고 있는지 디버깅 하고 싶다 : 위 댓글처럼 PIX, RenderDoc, Nsight 같은 GPU 디버깅 툴을 사용해서 할 수 있어요.
2. 사실적인 빛의 동작/효과를 시뮬레이션 하는 알고리즘의 유효성(즉 얼마나 사실적인지, 또는 정확한지)을 측정하고 싶다: 레퍼런스(reference) 비교 사용
2-1. 오프라인 렌더링 알고리즘이 현실 세계에서 연출한(준비한) 임의의 Scene과 얼마나 차이가 없는지 확인한다 (대표적인 예시, Cornell Box): 이때 검증을 위한 reference는 현실 세계에 있는 장면
설양(seolyang)2022-05-01 12:30
답글
2-2. 실시간 렌더링 알고리즘이, 이미 검증된 오프라인 렌더링 알고리즘과 얼마나 비슷한지 측정한다 : 이때 검증을 위한 reference는 오프라인 렌더링 알고리즘에 의한 결과물 또는 현실 세계의 scene
설양(seolyang)2022-05-01 12:31
답글
3. 마지막으로 쉐이더 프로그램 자체가 제대로 동작하는지 단위 테스트를 하고 싶다: CPU 측면에서 쉐이더 코드와 비슷한(또는 동일한) 환경을 갖추고, 입력에 대한 출력이 정확한지 단위 테스트를 진행. 예를 들어, 월드 공간 에서 의 빛의 위치와, 월드 공간 에서 의 정점의 정보, 그리고 그 정점 에서 의 재질 정보(텍스처, 정점 색상, BRDF) 가 주어졌을 때, 특정 BRDF를 통해 계산된 값이 예측한 값과 동일 한지를 테스트 해볼 수 있겠지요.
아니면 단순히 계산을 GPU에서 하되, 계산 값들을 텍스처 또는 버퍼로 출력해서 CPU에서 검증하는 방법도 있을 수 있구요.
PIX같은 그래픽스 디버거가 있어요
단위 테스트를 어떤 의미 에서 의 단위 테스트를 말하는 건지 잘 모르겠네요 1. GPU의 파이프라인이 의도한 대로 동작하고 있는지 디버깅 하고 싶다 : 위 댓글처럼 PIX, RenderDoc, Nsight 같은 GPU 디버깅 툴을 사용해서 할 수 있어요. 2. 사실적인 빛의 동작/효과를 시뮬레이션 하는 알고리즘의 유효성(즉 얼마나 사실적인지, 또는 정확한지)을 측정하고 싶다: 레퍼런스(reference) 비교 사용 2-1. 오프라인 렌더링 알고리즘이 현실 세계에서 연출한(준비한) 임의의 Scene과 얼마나 차이가 없는지 확인한다 (대표적인 예시, Cornell Box): 이때 검증을 위한 reference는 현실 세계에 있는 장면
2-2. 실시간 렌더링 알고리즘이, 이미 검증된 오프라인 렌더링 알고리즘과 얼마나 비슷한지 측정한다 : 이때 검증을 위한 reference는 오프라인 렌더링 알고리즘에 의한 결과물 또는 현실 세계의 scene
3. 마지막으로 쉐이더 프로그램 자체가 제대로 동작하는지 단위 테스트를 하고 싶다: CPU 측면에서 쉐이더 코드와 비슷한(또는 동일한) 환경을 갖추고, 입력에 대한 출력이 정확한지 단위 테스트를 진행. 예를 들어, 월드 공간 에서 의 빛의 위치와, 월드 공간 에서 의 정점의 정보, 그리고 그 정점 에서 의 재질 정보(텍스처, 정점 색상, BRDF) 가 주어졌을 때, 특정 BRDF를 통해 계산된 값이 예측한 값과 동일 한지를 테스트 해볼 수 있겠지요. 아니면 단순히 계산을 GPU에서 하되, 계산 값들을 텍스처 또는 버퍼로 출력해서 CPU에서 검증하는 방법도 있을 수 있구요.
최근 Embark Studio란 곳에서는 Rust로 쉐이더 코드를 작성하고, 이 코드가 CPU/GPU 양 쪽 모두 에서 돌아갈 수 있도록 만들고자 하는 것 같더라구요.
관련 프로젝트/정보는
https://github.com/EmbarkStudios/rust-gpu
그리고
https://medium.com/embarkstudios/homegrown-rendering-with-rust-1e39068e56a7
이
아티클에서 Shaders 항목을 참고하시면 될 것 같아요
일반적인 단위테스트들은 그래픽스 파이프라인에 대해서 하는건 본적이 없네요 웹에서 하듯 단위 테스트 용으로 함수를 너무 쪼개 놓으면 코드 보기에도 별로고 괜히 오버헤드만 만드는 느낌이...