저작물 참고 필자도 해당 내용을 공부하고 있는 입장으로 주로 오픈 문서, 포럼, AI 질의 응답을 활용하여 관련 내용을 공부하였습니다. 따라서 틀린 내용이 있을 수 있습니다.
다만, 타인(AI 등)의 저작물을 침해하지 않도록 순서, 과정, 스크린샷, 코드 등 다른 저작물을 활용 또는 포함하지 않았으며, AI 등 인터넷 자료는 오로지 기술 원리 이해의 목표로만 활용하고, 본 게시글에 언급된 과정, 흐름, 본문, 게시한 코드는 AI의 복붙 없이 모두 필자가 사전에 알고 있는 그래픽스 기술과 인터넷 상에 공개된 개념을 통해 모두 직접 시도하며 직접 작성하였음을 밝힙니다. 부득이하게 어떤 자료를 인용하는 경우는 링크로 출처를 남기고 인용합니다.
유니티 엔진에서는 데칼 기능을 제공한다. 자체 제공되는 데칼 기능을 사용하기전 직접 구현함으로써 데칼 프로젝션이 어떤 과정을 통해 제공되는지 간단하게 알아보기로 한다. 물론 엔진에서 제공하는 데칼 엔진과는 차이가 있겠으나, 우선 빛 처리 등의 일련의 과정을 모두 무시하고 우선 구현 해보는 것을 주요 목표로 한다.
참고로, 위 예시 이미지들에서 이미 데칼이 적용된 모습으로 보이는데, 사실은 그렇지 않다. 큐브에서 표면에 투영된 부분만 색상을 허용했기 때문에 위와 같은 결과가 나온다. 이는 뒤에서 후술한다.
다음으로, 깊이 버퍼를 구했으므로 각 메시의 스크린 UV와 깊이 버퍼를 조합하여, 해당 메시가 그려지기 직전 가지고 있던 깊이 버퍼(즉 이전 그려진 메시)의 World좌표를 알아내는 것을 목표로 한다. 즉 현재 데칼 메시의 표면 정점이 아니라, 데칼 메시에서 렌더링되는 지점에 해당하는 이미 전에 그려진 버퍼의 3차원 정점을 구하는 것을 목표로 하는 것이다.
따라서 x,y 좌표는 -1~1 범위가 되도록 screenUV 를 스케일링 해주면 되고, depthValue 는 위에서 계산한 깊이 값을 그대로 넣으면 된다. 깊이 값은 이미 계산이 [0,1] 또는 [-1,1]로 계산이 끝났기 때문이다.