정말 오랜만에 개발일지 올리네!

그간 놀고 있던 건 아니야!



7ceb8771b48b61f33dea86e2449f2e2dca8deed0e0c08a5fa1bb2fc893



스마일게이트 퓨처랩에서 진행하는 인디게임 개발 장학팀에 선발돼서

스터디까지 겸하면서 개발 진행했는데, 스터디 내용을 허락없이 올리기엔 눈치가 보이더라구~


그래서 이번에 개발 장학 기간이 끝난 김에 개발일지 올리게 됐어.



a76a08ad230e69e87eb1d19528d527034eb36907aabf18


이번 개발 주기에는 툰 쉐이더를 만들었어.

카툰 그래픽을 지향하는 프로젝트다 보니 툰 쉐이더에 대한 지식이

아무래도 필요할 것 같았거든.


툰 쉐이더는 처음 건드리다 보니 원신의 툰 쉐이더를 레퍼런스 삼아서

만들기로 했는데, 레퍼런스 자료가 많아서 참고하기 좋았어.

참고한 내용에 맞춰서 어떤 방식으로 툰 쉐이더를 만들었는지 알려줄게.



a76a08ad230e6ae87eb1d19528d52703911c0ca136a101


a76a08ad230e6be87eb1d19528d5270379b5b944b188a2


가장 먼저 미호요 공식 사이트에서 사용할 모델을 다운 받았어.

사용한 모델은 '엠버'라는 캐릭터야.



a76a08ad230e6ce87eb1d19528d52703a184e172cc17c096


기본적인 텍스쳐들은 공식 사이트에서 같이 배포하고 있어서

단순히 적용만 시켜줘도 좋은 퀄리티의 모델이 나와.

여기서 눈 여겨볼 점은 이미 그림자가 텍스쳐에 칠해져 있다는 거야.


 

a76a08ad230e6de87eb1d19528d52703412d4e320387f5


a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd3c665aa9f4


다음으로는 가장 기본적인 셀 쉐이딩을 적용해줬어.

그림자의 양상을 텍스쳐에서 받아오게 설정해줘서

단순하게 이 텍스쳐를 바꿔주는 걸로 다양한 효과를 연출할 수 있어.


7fee9e36ebd518986abce8954787716d89bbbe


위 사진은 쉐이딩 텍스쳐에 따른 그림자의 변화야.




a76a08ad230e61e87eb1d19528d52703008ecf6ba23696


다음으로는 Anisotrophic Hair와 Face Mask야.




2cb3d935ea9c3faf689fe8b115ef0465a5a8cdbbc148


2cb3d935ea8076a167b9f68b12d21a1d4413acc49aac45


Anisotrophic Hair는 위 두 사진과 같이 머릿결의 방향성을 효과로 주는 걸 말해.



a76a08ad230e69f620afd8b236ef203ec6ca1b9e39503140


위 텍스쳐처럼 머릿결에 해당하는 마스킹 텍스쳐를 따로 만들고, Fresnel 효과를 줬어.



a76a08ad230e69f720afd8b236ef203ecf40b4046f585d


2bbcd323abd531a04e81d2b628f172640c3fe9f047


Face mask는 얼굴에 지는 그림자를 NdotL과 같은 라이팅 모델이 아니라,

따로 만들어둔 텍스쳐를 따라 생기게 만드는 일종의 마스킹에 해당해.

확실히 위 방식으로 만들어야 애니메이션스러운 캐릭터가 나오더라구.



a76a08ad230e69f420afd8b236ef203e07877e20602056f2


다음은 금속 재질에 대한 처리야.



0a94f666b7826af523ef83f8448364b1b7c8d8e4608210e1b9ba1ad26e4c2746479de37fcdc2a9be6726d73eb5493ae3


이 경우에는 Matcap이라는 일종의 텍스쳐 베이킹 기법을 이용해 만들었어.


0893e128bce22f93369ef3b202e20573474e9f29abab9acc8ea5083cbe83a2

위 사진같이 미리 구워진 금속 재질의 텍스쳐를 사용해 빛 연산을 해주는 건데,

실제로 만들 때는, 위에서 설명한 ToonRamp 함수와 적절히 섞어서 사용했어.



a76a08ad230e69f520afd8b236ef203e12cf4f785a80cc0f


마지막으로 Outline과 Edge Highlight를 포스트 프로세싱으로 구현해줬어.

이 부분이 생각보다 어려웠는데, URP 환경에서는 포스트 프로세싱을 구현해줄 때

결국 별도의 패스를 만들어서 Renderer Feature로 빼주는 게 가장 편하더라고.



79ec8277b78669f43aee84e14783706c7ad383b272d1ba53f565572c325f1663a9835ed5


79ef8172b4806cf73ceb87e758d62d3b9a2db7bf7f865d502c760fcdf2


구체적인 내용을 세팅하기에도 편하고, 순서를 정하기도 좋아서

결과적으로는 괜찮게 구현된 것 같아.


또, 나는 현재 Deffered Render Pipeline로 게임을 만들고 있어서

툰 쉐이더도 이에 맞춰서 만들어줄 필요가 있는데,

생각보다 어려웠던 점은 Unlit 쉐이더로 만든 객체를

위 파이프라인의 G-Buffer에 그릴 필요가 있더라고.



7fef9e36ebd518986abce8954786766d6319


결과적으로는 G-Buffer에도 여타 다른 Lit 쉐이더 처럼 값들을 저장하게 하는데 성공했어.

이 G-Buffer에 저장된 값들을 사용해서 Outline이나 Edge Highlight를 만들었어.




78ec8268f5dc3f8650bbd58b36837165e60f2589


결과적으로는 이런 느낌이 나는 모델을 만들 수 있었어.

결과적으로 이쁘게 나오는 건 확실히 원신 캐릭터 모델링과 텍스쳐가 크게 한 몫 하는 것 같아.



모아 놓고 보니까 단순히 게시글 하나로 설명하기에는 부족한 게 많아 보이네.

혹시나 궁금한 점 있으면 자유롭게 물어봐 줘!

알고 있는 선에서 답해줄게!