[포니 게임 개발] 38. 반사 매핑 구현

Posted by 적분 ∫2tdt=t²+c
2013.11.04 15:07 프로그래밍/포니게임개발





물효과를 보고 갑자기 반사 매핑이 구현하고 싶어져서, 몇 시간 뚝딱해서 반사매핑을 넣어보았습니다.

구현하는건 생각보다 어렵지 않아요.


1. 카메라를 반사면에 대칭이동시켜서 그려낼 오브젝트를 컬링합니다.

2. RenderToTexture로 반사맵에 렌더링을 합니다.

3. 카메라를 원래대로 돌려놓고, 일반 렌더링을 합니다.

4. 반사매핑이 되어야 할 면은 diffuse, specular에 이어 반사맵을 가져와서 적당히 더해주면 끝


온 바닥이 매끈매끈한건 아무리 봐도 비현실적이죠.

여기에 반사량을 결정하는 Reflectivity 맵과 요철을 결정하는 Normal 맵을 이용해서

반사량과 반사지점을 적당히 흔들어주면 훨씬 그럴싸한 효과가 나오겠죠... 근데 그건 다음에 구현해야지..


말은 쉬운데 실제 구현에는 몇가지 난관이 있었습니다.

Deferred Shading을 하기 때문에, 화면에 오브젝트를 렌더링하려면 적어도 3번의 패스(그림자 그리고, MRT 그리고, 라이팅해서 혼합)를 통과해야하는데, 반사맵을 그리기 위해 이짓을 한 번 더 하면 어마어마하게 부담이 될거 같더라구요. 그래서 Forward Shading을 다시 구현했습니다.

즉 일반 렌더링 시에는 Deferred Shading을 사용하고, 반사맵 렌더링 시에는 Forward Shading을 하는거죠. Forward Shading 할때는 Deferred처럼 조명을 잔뜩 쓸 수 없으니, 주광, 보조광, 환경광 요 셋만 취급하는 걸로했습니다. 그림자 맵은 이미 그려진걸 재사용하면 되니 문제 없구요.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
이 댓글을 비밀 댓글로
    • 지나가던 사람
    • 2013.12.13 17:43 신고
    ㄷㄷ 이거 Equestria Daily에 소개되셨네요. 축하드려요!
    http://www.equestriadaily.com/2013/12/game-demonstration-korean-rainbow-dash.html
    • 네 그랬더라구요 ㅎㅎ
      감사합니다!
      이젠빼도박도 못하게 열심히 해야겠어요ㅎ

티스토리 툴바