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

셰이더 연구 #2

by IX. 2022. 4. 11.

4.11

지금까지 벡터의 방향을 잘못이해하고 있었다.

ViewDirection이라고 하면 '내가 보는 방향 = 카메라 방향'인 줄 알았는데

'정점이 카메라를 보는 방향'이었던 것이다.

저 그림이 아니었으면 아직도 헤메고 있을 듯. 고마워요 흑흑

 

4.12

뭔 소리인지 하나도 모르는 문서들에 파묻혀 이틀을 보냈다.

내가 처음들었던 엔젤링(머리하이라이트)의 구현방법은 View Direction(카메라가 보는 방향)과 UV(맵좌표)를 잘 비벼보는 거였다. 카메라가 움직이는 각도에 따라 머리UV를 수직으로 펴고 위아래로 움직이면 되잖아?

이게 말만들으면 쉬울 것 같았는데, 생각만큼 쉽게 되지 않아서 하루를 날리고,

유니티짱 헤어셰이더에서 엔젤링 부분만 배껴야지 싶었는데 코드를 보면서도 뭔소린지 하나도 모르겠다. ^^

그러다가 어차피 머리카락이란 게 대체로 둥근형태니까, 노말대신 비탄젠트를 쓰면 되지 않을까? 싶어서 비벼본 형태. 가끔 하이라이트가 너무 크게 나오는 것과 z축을 기준으로 회전했을 때 변화가 없다는 것이 문제이긴 한데, UV를 펴지 않아도 되는(!) 장점이 있다.   펴야 된다. 흑흑. 심지어 더 잘펴야 된다.

이제 Anisotropy처리만 해주면 얼추 마무리가 될 거 같은데, 사실 저게 뭔 소리지 싶어 찾아봤더니 '비등방성'

 

...???

 

하이라이트가 끝나는 부분이 딱 끊어지는 일자가 아니라, 지그재그로 조금씩 까실까실하게 표현해주는 걸을 말한다고 한다. 뭐 이리 어려운 말을 써...

Aniso구현중 나온 이미지. 

이야... 이거 그냥 명암으로 써도 되겠다.

구현방법은 이 아저씨가 다 알려줌.

https://www.youtube.com/watch?v=kxWWBmIUxbc 

1차 완성. 야호.

4.13

원래대로라면 헤어 셰이더에 그림자 붙이고 하이라이트 붙이고 해야 하는데,

익스포트된 FBX파일을 보니 애니메이션 데이터가 요상해서 살펴보는 시간을 갖기로 했다.

이름이 이상하다. 그리고 쓸데없이 많다!
블렌더 내엔 이거밖에 없는데?

원인을 찾아보자. 블렌더엔 NLA라는 트랙에디터가 있다.

이것이 뭐냐면 애니메이션 클립을 갖다가 요리조리 조합해서 전체 씬을 구성하는 것이다. 유니티의 타임라인과 비슷하다.

 

그런데 난 이게 필요없다. 블렌더에서 영화찍을 건 아니니까.

그럼 안쓰면 그만인데, 문제는 이 시스템을 이해하지 않고서는 저 애니메이션이 저렇게 뽑히는 지, 왜 키가 없는데 캐릭터가 움직이고 있는지 이해할 수가 없다는 것이었다. 3DSMAX 모션플로우같은 건 안쓰면 그만인데, 이건 그게 안된다. 버튼 하나 잘못건드리는 순간 쓰레기 데이터를 만들수 있고, 모션을 날릴 수도 있다. 그래서 이걸 알아볼 필요가 있었다.

 

블렌더의 모션은 어딘가에  쓰지 않으면 다 날아간다. 왜 이렇게 위험하게 만들었는지 정말 알 수가 없는데 여튼 그렇다. (사실 블렌더의 시스템이 원래 그렇다. 매트리얼도 만들어놓고 안쓰는건 다음구동 때 다 지운다. 모든 데이터 블럭이 다 마찬가지다. )

이 사용하는 주체를 'user'라고 부르는 것 같다. 애니메이션 데이터같은 경우는 아까 말했던 NLA에서 사용한다. 즉, NLA에 사용신고를 안해주면 정성들여 만든 애니메이션이 다 날아간다. 

저렇게 앞에 0 붙은 게 미사용중이란 표시

방법은 2가지가 있는데, 실제로 사용을 해주거나 나중에 쓸거라고 표시를 해두는 방법이다.

실제로 사용해보자. 애니메이션 목록 옆 의문의 버튼, Push Down, Stash메뉴가 바로 그것이다.

Push Down은 클립을 당장 사용하겠다는 것이고, Stash는 저장해놓겠단 건데 어차피 클립 등록에 그칠 것이기 때문에 결과적으론 비슷하다. Stash가 lock이 걸리므로 좀 더 안전할 것 같다.(근데 del버튼 누르면 또 지워진다. 무엇으로부터의 보호?)

 

두번째로는 나중에 쓸거라고 표시를 해두는 방법이다. 

이걸 눌러두면 fake User표시가 되면서 데이터가 보호된다. 아까 말했듯 user란 '사용자'가 아니고 '사용처'를 뜻한다. 이게 정말 헛갈린다. 유저라면 당연히 '나'라고 생각하지!! 아니면 공동작업을 할 때 다른 작업자를 말하거나. 난 그래서 처음 봤을 땐 다른 사람이 내 작업분 못건들도록 애니메이션에 잠금 거는 건줄 알았다.

 

날 한층 더 헛갈리게 만든건 Push Down옆의 저 레이어 버튼인데

저걸 켜면 타임라인이 백지화가 되면서 새로운 키를 받아들일 준비를 한다. 아하. 이건 당연히 바이패드에 있던 그 레이어 기능이구나.싶었는데

 

...아니네? 저 기능은....

NLA 레이어 위아래 왔다갔다하는 것이다.

그러니까 타임라인이 백지화가 된 건 삽질 중에 우연찮게 NLA로 들어간 그 어떤 레이어가 선택되었기 때문.

아니, 클립을 이리 저리 조합해 붙이라고 에디터까지 만들어놓곤 이 버튼을 대체 왜 액션에디터에다 만들어놨냐고!

 

그래서 내린 결론.

NLA에선 스택을 싹 지우고, 각 모션에 fake user를 켜주자.

 

...불필요한 애니메이션은 정리됐지만, 그래도 썩 마음에 드는 결론은 아니다. 

앞에 마음에 들지 않는 수식어(rig|)가 붙어있고, 포즈 라이브러리의 데이터가 딸려온다. (저것도 할 말이 많다.)

 

그래서 블렌더 NLA 분석을 끝내고 다시 머리셰이더 보강. 라이트에 따른 Dot연산을 추가.

Outline셰이더가 좀 문제가 있다. 예제보고 만들었는데 거리측정이 뭔가 잘못된 모양.

 

엔젤링과 Phong이 잘 어울릴거라 생각했는데 생각보다 따로 놀아서 포기.

섬뜩

완성! 이제 리소스만 잘만들면 된다.

머리리소스 추출 : VRoid

 

4.14

블렌더에서 저렇게 체크해두면 오토키를 켰을 때도 트랙이 없는 놈은 키를 만들지 않는다.

조명 배치를 바꿔도 쓸데없이 모션을 만드는 걸 방지하기 위함. 

문제는 캐릭터도 트랙이 없는 부위는 키를 만들지 않는다는 점인데, 캐릭터야 모션 시작할 때 ALT+RGS박고 시작하니 별 상관 없을 듯.

댓글5