만지는 시간에 비례하게 점점 셰이더에 대해 알아가고 있는 기분이 듭니다.
저번 글 이후 아웃라인, 툰 셰이더, 스텐실 버퍼에 집중하여 건드려보고 있습니다.
특히 스텐실 버퍼는 이해는 했는데 아직 활용에는 많은 어려움이 있는 거 같습니다. 생각대로 흘러가진 않네요.
아웃라인의 경우 일반적으로 구할 수 있는 방법은 크게 2가지 있습니다.
1. 버텍스를 노말 따라 확장 시켜서 그리는 방법과
2. 중점으로부터 모델을 통째로 확장 시켜서 그리는 방법입니다.
둘 다 장단점이 존재하는데 단점이 심해서 솔직히 둘 다 요즘 게임에 사용하기엔 어려워보입니다.
1번 방법은
아마 이 문제가 가장 잘 알려져 있을겁니다.
버텍스들이 닫혀있으면 좌측의 구 처럼 깔끔하게 나오지만 그렇지 않으면 우측의 큐브처럼 사이가 갈라지게 됩니다.
모델링만 어떻게 잘 하면 무난하게 사용 할 수 있겠습니다만 장기적으로 봤을 때 그리 바람직 하지 않다고 생각합니다.
2번 방법은 저번에 제가 쓴 방법인데
1:1 비율의 도형의 경우엔 비교적 깔끔하게 나오는 편입니다만 캐릭터와 같이 다른 비율의 경우 위와 같은 문제가 발생합니다.
그리고 이런식의 문제도 발생하구요.
캐릭터와 같은 복잡한 모델링에는 1번 방법보다 더 안 좋아 보입니다.
그래서 둘 다 실제 게임에서 그대로 사용하기엔 문제가 많은 것 같아 찾아보니 현업에서는 후처리 방식의 외곽선을 사용한다는 글을 몇 개 볼 수 있었습니다.
아직 누가 공개해 놓은 코드까지는 발견하지 못했지만 현재로써는 제가 바라던 이상적인 아웃라인 형태와 가장 유사한 것 같더군요.
툰 셰이더의 경우 셰이더 포지에서도 아예 따로 마련 되있는데 직접 코딩으로 똑같이 구현하는데까진 성공했습니다.
다만 모델링이 툰 전용이 아닌 것도 있겠지만 툰 라이트의 경계가 굉장히 투박하더군요.
이는 쉐이더 포지에서도 똑같이 느꼈던 부분인데 그 경계를 완화 시키는 방법을 찾아 보고 있습니다.
직접 해보려고 이것저것 코딩해보고 있긴한데 생각처럼 되지는 않네요.
그래서 1번의 아웃라인 방식을 적용하고 툰라이트와 스텐실 버퍼를 적당히 섞어서 만든 중간 결과물입니다.
우측의 통짜 모델링의 경우엔 그래도 생각보다 깔끔하게 나온 편인데 좌측의 여러 모델링이 섞인 경우엔 여러가지로 뒤틀린 것처럼 보기 좋지 않네요.
그래서 아웃라인을 싹 맨 뒤로 돌리고 스텐실 버퍼로 좌측 캐릭터에게도 비슷하게 적용되게 해보았습니다.
다소 거칠게 보입니다만 위에보단 나아 보이네요.
그래도 여전히 어디 내세우기엔 턱없이 모자라 보입니다.
현재 후처리 아웃라인의 경우엔 아직 감이 잡히지 않아서 당분간은 진척이 없을거 같습니다.
림라이트를 좀 가공해서 아웃라인처럼 보이게 할까 시도해보려는데 썩 좋은 결과가 나올거란 생각은 들지 않네요.
툰 라이트의 경우엔 경계 완화에 집중하고 있습니다. 뭔가 떠오를 듯 한데 삽질하고 있습니다.