본문 바로가기
툰렌더링 공부

레벨5 #1

by IX. 2022. 10. 14.

집에서 밤마다 비정기적으로 진행하는 작업.

 

10.13

오진영의 '미소녀는 눈이 네모야. 라는 말을 듣고 다시 시작해보는 모델링.

 

 

10.14

마음이 급하면 결국 다시 하게 된다. 천천히.

 

10.15

예전에 만들었던 메타모델을 소환

10.18

10.19

몸와이어를 다듬고, 귀를 조립

방역수칙을 잘 지키는 모델.

눈과 입의 셰이더를 다르게 쓸 것이기 때문에 분리해 준다.

10.20

엉망진창ㅋㅋ

 

블렌더의 셰이더는 게임이 아니라 그런지, 메인 라이트벡터를 제공하지 않는다. (사실 유니티도 제공하지 않는다...스크립트로 억지로 끼워넣어 쓰고 있을 뿐)

때문에 빛벡터를 구해서 써야 한다.

벡터의 방향은 점에서 점을 빼면 된다. 그런데 문제가 있다. 버텍스->라이트가 될 경우, 포인트라이트처럼 작동한다. 원하는 바가 아니다.

라이트의 회전값을 사인함수로 변환하면 xyz값을 -1~1사이로 맞출 수 있다. 이 이론은 절반만 성공했다. 드라이버에 굴러들어오는 값이 90도를 넘어가는 순간 내부적인 값은 -90으로 변하면서 흡사 외적한 것처럼 부호가 변해버린다. 그래서 벡터가 튀는 현상이 일어난다.아. 오일러...

아! 그럼 라이트에 가상의 더미를 달고 라이트의 위치에서 더미의 위치를 빼면 어떨까?

결과는 성공이다. 이걸로 L을 구할 수가 있다.

하지만 문제가 더 있다. 셰이더에서 그림자 감쇄를 던져주지 않는다. 블렌더는 캐스케이드 셰도우 외에 컨택 셰도우란 걸 지원한다. 셰도우맵을 가까이서 한 번 더 그려주는 것인데, 이게 품질이 꽤 괜찮다.

아. 뭐 좋아. 그럼 그냥 통째로 가져와서 써보자. Shader to RGB노드로 조명째 변환하자. 어차피 NdotL과 비슷하니까.

하프램버트를 못쓰는 점이 아쉽긴 한데, 어차피 툰렌더 베이스노드만 따올 거라 괜찮다.

 

일단 원하는대로 노드를 붙이자. 블렌더에선 Input Data에 AO가 있다!

일러스트풍 툰렌더를 만들어볼 계획이므로, 당연히 붙이자. 최적화 신경안쓰니 아주 신남.

 

10.21

신나서 이것저것 넣었다가 결국 다 뺐다.

몸은 된 것 같고, 그 다음은 머리

조금 더 수정.

빛에 따라 이미지가 워낙 다르다.

10.22

눈에 사용되는 매핑만 4장. 미소녀는 눈으로 말하기에 쓸만한 가치가 있다.(고 생각한다.)

어차피 최적화 신경안써도 되고..

블렌더엔 Time노드가 없다. 당연히 있어야 할 게 없다...

Step도, Lerp도 없다... 다 만들어써야 한다...

아. 이리 보니 Vector는 Saturate도 안된다...

당황스럽지만 어쨌거나 선인들의 지혜를 빌러 구글링을 해보니 밸류에 #frame을 넣어서 쓰면 현재의 프레임에 드라이브가 걸린다고 한다. 눈반짝임은 거기에 사인함수를 넣고 잘 비비면 될 것이다.

성공이다!

눈은 4장의 맵으로 구성되는데

1. 흰자

2. 동공

3. 홍채모양(스샷속 별무늬)

4. 하이라이트

...로 구분해야 원하는 걸 할 수 있다. (사실 1장 더 있었지만 너무 오버스러워서 뺐다.)

설계에 오랜 시간이 걸렸지만 원하는대로 구현은 됐다. 나중에 컨트롤러를 붙이면 좀 더 쉽게 제어가 될 것이다.

 

눈동자의 하이라이트는 맷캡같아 보이지만 아니다. 맷캡은 평면에 이미지를 투영시키지 못한다는 단점이 있다. 눈이 약간의 곡면을 가지고 있긴 하지만, 그 정도로는 원하는 이미지를 얻기 어렵다. 큐브는 안써봤고, 쓸 줄도 모르지만, 그냥 쓰기가 싫었다. 6장이나 그리기 싫어...

...해서 카메라 뷰와 오브젝트의 벡터를 Dot연산해 나오는 값으로 원하는 이미지를 얻었다. 이건 쓸 곳이 많다! 대표적으로 입이 있다.

기존 모델링을 할 때 측면에서 모델링을 아무리 잘해도 짱구처럼 보이는 저 입이 매우 거슬렸었는데, 이 단점을 상당부분 해소시켜 준다! 참고로 머리는 브이로이드 발췌.

 

이렇게 만들어진 노드치곤 단순하다. 하지만 그룹화되어 있는 저 함수들을 파고 들면 또 한가득.

내일부턴 다시 모델링을 파보는 걸로

댓글2