이건 작년 초에 했던 짓임.
대충 게임학원 국비과정을 끝내고 취업을 못한 애들끼리 모여서 롤 모작을 해보기로 했음.
여튼 그래서 보통 게임에서 캐릭터를 마우스 커서를 올려뒀을 때 외곽선이 뜨는 효과가 필요하다 해서 구현하게 되었음.
당시 상황에는 이미 디퍼드 렌더링을 구현한 상황이었고, 디퍼드 렌더링으로 렌더링으로 한 메시들의 외곽선을 그려야 했음.
그 때 당시에 외곽선을 그리는 방법을 검색했을 때는 대체로 노말의 차이를 이용하여 외곽선을 그리는 방식들만 나왔는데
나( 그리고 팀원들)이 생각한 외곽선은 그런 게 아니었음.
그래서 생각한 방법은 GBuffer 중 한 장에 외곽선의 색상을 렌더링하고 다시 후처리를 통해서 그리는 방식이었지.
근데 이 아이디어는 좋았는데 문제가 있었음.
D3D10부터는 픽셀 셰이더에서 사용할 수 있는 랜더타겟이 8개지만 D3D9에서는 4개였음.
우리는 이미 디퍼드 렌더링을 하고 있기 때문에 GBuffer로 알베도, 노말, 깊이, 샤프니스 총 네 개를 이미 사용하고 있어서 외곽선을 그릴 수 없었음.
그래서 예전에 어디선가 들었던 것 중에 노말 패킹이라는 기법이 있다고 해서 검색을 적용을 했음.
노말 패킹이란, 기본적으로 x, y, z의 값으로 이뤄진 노말을 두 개의 값으로 압축시키는 기법이었음.
https://aras-p.info/texts/CompactNormalStorage.html
여튼 그래서 결론적으로 이렇게 외각선을 그릴 수 있게 되었음
GBuffer 텍스쳐들은 전부 4채널 텍스쳐들이였어?
알베도 RGBA 노말/스펙큘러 XYZS 깊이 R24X8 하면 노말패킹 안해도 됬긴했을거같은데
암튼 개추!
알베도 노말 / 스켈큘러 / 객체ID 깊이 색상 이렇게 한 것같음. 깊이 R24X8을 내 기억에는 픽셀셰이더의 텍스처에 바인딩을 못 했을 거임.
아.. 객체 ID 까지
스텐실 버퍼 어따 팔아먹었어 - dc App
솔직히 말해서 스텐실에 대해서 잘 몰라서 고려를 못했음.