[포니 게임 개발] 26

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



광원을 무지하게 쏟아넣긴 했는데, 광원이 당췌 눈에 보이질 않으니 밋밋하더라구요. 역시 광원에서 산란되어서 나오는 빛이 있어서 광원이 리얼하게 보일텐데 (음? 잠깐 카툰렌더링이 목표인데... 뭐지? 몰라 걍 해보자) 해서 광원 주위에 무슨 효과라고 해야하나 (Light Scattering 효과라고 해야하나) 뿌옇게 밝게 보이는 효과를 추가했습니다.


구현법은 의외로 간단하게 했는데, 빌보드 오브젝트에 텍스쳐를 바르고, 최종 칼라에 가산혼합을 했어요.

깊이버퍼 값을 비교해서 가려지는 부분은 그려지지 않게 했구요.


문제는 어떻게 빛이 뿜어져 나오는 텍스쳐를 그릴 것인가인데. 처음에는 그냥 포토샵에서 방사형 그라디언트로 밖으로 갈수록 어두워지게 만들까 했어요


그냥 선형으로 방사형 효과를 준 텍스쳐. 광원의 느낌이라기보다는 그냥 뿌연 동그라미처럼 보입니다... 그래서 머리를 굴렸죠. 어떻게하면 될까. 단순한 물리법칙을 떠올리고 가정을 세웠어요


1. 빛의 세기는 거리의 제곱에 반비례한다. - 거리가 n배가 되면, 밝기는 1/n^2이 됩니다.

2. 산란되어 눈으로 들어오는 빛의 양은 광원에서 눈으로 오는 경로에서 산란되는 빛의 양의 총합과 비례한다.


2번은 물리법칙에 근거한게 아니라 그냥 왠지 그럴싸해보여서 설정한 가정이에요. 2번은 수식으로 세우기 매우 까다롭던데 어쨌든 대충 정리를 해보니, 광원에서의 거리에 반비례하는 크기로 산란되는 빛이 발생한다는 추정을 얻었어요.

수식을 보고싶은가?

그리고 파이썬 코드를 이용해서 이미지를 작성했습니다.



오오 이러니 왠지 광원처럼 보이네요ㅋ

이제 이 텍스쳐를 빌보드에 발라서, 광원이 있는 지점마다 찍어줄거에요.



이렇게 나왔습니다ㅋ

근데 문제는 깊이버퍼를 비교해서 찍어줬더니 지면쪽은 빌보드가 가려져서 직선이 드러나버리네요. 아마 정확하게 효과를 주려면, 깊이버퍼를 비교해서 찍어주는게 아니라, 광원이 차폐되는 정도에 비례해 밝기를 조절해서, 아예 차단되면 0, 전부 나타나면 1 이런식으로 계수를 곱해줘서 찍어야할듯합니다. 근데 그러면 느려질까봐... (이미 충분히 느려졌어요ㅋ)


근데 그렇게 해놓고 다 찍어보니 광원이 81개다 보니깐 뒤쪽으로 갈수록 밝아지는 현상이 나타났어요. 거리에 따라 감쇠를 줘야겠다는 생각이 들었는데, 여기서부터는 물리적인 판단은 못하고, 그냥 거리에 반비례하게 했다가 너무 약하게 나와서 거리의 제곱근에 반비례하도록 수정했습니다. 제곱근에 반비례하도록 한건 별 다른 이유는 없고 그냥 왠지 그럴싸해보여서...입니다ㅋㅋ



저작자 표시 비영리 동일 조건 변경 허락
신고
이 댓글을 비밀 댓글로
    • celectica
    • 2013.05.27 16:37 신고
    어렵네요 수고하십니다 ㅋ