그래픽스/DX11

DX11 - 쉐이더 개념 + 뒷면 제거

뽀또치즈맛 2024. 10. 21. 13:44

 
이번 강의에서는 렌더링 파이프라인의 각 화살표 단계에서
쉐이더가 무슨 일을 하는지, 왜 필요한지, 왜 이런 구조로 만들어 졌는지
알아보기 위해서
마치 쉐이더라는 것을 활용하는 것 처럼 짜본다.

 
 
쉐이더의 이름은 쉐이딩를 할 때 사용해서
쉐이더라는 이름이 붙기 시작했다.
 
입체감을 주기 위해서 음영처리를 하기 위해서 처리하는 단계이다.
가상 세계에서 정말로 3차원에 있는 것처럼 보이기 위해
빛과 물체의 표면의 상호작용을 고려해서 음영처리 하는 것을 시작으로
 
GPU안에서 작동하는 프로그램을 쉐이더라고 부르기 시작했다.
 
쉐이더에 공통적으로 들어가는 것은 
스케일, 트랜스레이션, 로테이션 값이다.
같은 물체 안에 동일한 변환을 적용하는 것들은 따로 모아놓고 사용하셨다.
 
버텍스 쉐이더에서 가장 중요한 것은
어떠한 정보가 들어가고 어떠한 정보가 나오는지 가 중요하다.
여기서는 position, color, uv 가 들어있었다.
실제로 쉐이더 프로그래밍을 할 때도 구조체로 입력 값을 관리할 수 있다.
 
아무리 복잡하고 단계가 많은 변환 과정도
행렬 하나로 간단하게 표현할 수 있다.
 
GPU 안에서는 멀티쓰레딩으로 여러 픽셀들을 한꺼번에 처리한다.
(엄밀히 이야기하면 픽셀이 아니라 될 수 있는 후보들이기 때문에
Fragment라는 다른 용어를 사용하기도 한다.)
 
uv를 이용해 그려줄 영역을 설정할 수 있다.

 
Update문과 MyVertexShader()를 통해서 회전값 변환
 
 

 
 

뒷면 제거 (Backface Culling)

 

카메라에 보이지 않는 뒷면의 폴리곤을 제거하는 기법이다.
벡페이스 컬링은 폴리곤은 두 개의 면을 가지고 있으며,
하나의 면은 전면, 다른 면은 후면이라 부르고 전면을 향하고 있는 폴리곤들이
뒤쪽의 후면 폴리곤을 가리고 있을 때
후면 폴리곤을 그리지 않음으로써 최적화적 이득을 취하는 컬링 기법이다.
 
오클루젼 컬링 (시야에 보이지 않는 오브젝트는 그리지 않는 컬링 기법)과
비슷하다고도 볼 수 있다.
시계 방향으로 변경하면 전면을 보이지 않도록 제거할 수 있다.
 
가상 공간에 임의이 삼각형이 앞면에서 보고있느냐 아니냐는
삼각형이 그려지는 방향에 따라 갈린다.
시계방향으로 그려지면 앞면임을 판별한다.
 
이는 외적한 벡터의 z축 값을 비교해
음수가 나오면 뒤짚혀있다는 의미가 된다.
즉, 음수가 나오면 후면이므로 렌더할 필요가 없다.