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

하나 #3

by IX. 2022. 6. 28.

6.28

얼굴명암을 처리하기 위해 이것저것 찾아보다가 SDF(Signed Distance Fields : 부호화된 거리 필드?) 라는 용어가 자주 등장해서 먼저 이걸 알아야 할 것 같았다.  찾아보니, 기계적으로 계산한 이미지를 알파로 뚫어서 사용하는 기술이다. 확대를 해도 깨지지 않는 장점이 있고, 때문에 비디오메모리를 획기적으로 줄일 수 있다.

이렇게 생겼다.

팀 포트리스에서 데칼에 주로 쓰였다고 한다. 오. 대단하다! 알파 임계점을 사용하니 오파쿠에서도 쓸 수 있다. 우왕.

이 이미지가 5달러 짜리!
Transparents를 이용하면 스무싱을 줄 수도 있다.

좋은 기술이다. 그런데 이게 얼굴명암과 뭔 관계가 있지...?

돌아다니던 중국 사이트에선 이렇게 생긴걸 SDF라 부르는데

이건 그냥 명암 이미지잖아...SDF와 무슨 관계지? 

 

...해서 좀 더 조사를 해보니, 얼굴의 명암을 단계별로 그린 후,  SDF이미지로 만들어서 최종합성을 시킨다고 한다. 

이렇게까지 필요할까?!

 

6.29

오늘의 실험 1.

어제 구입한 어셋의 SDF이미지는 SingleChannel로 설정되어 있었다. 이게 뭐지? 싶어서 유니티 문서를 찾아보니 R채널만 사용하는 설정이라고 한다. 그건 아. 그렇구나. 라고 말았는데, 다른 설정들도 살펴보다가 Default항목의 sRGB체크항목이 눈에 띈다. 텍스처가 감마 공간에 저장되도록 지정하려면 이 박스를 선택합니다.- 라고 써 있다.

 

감마는 셰도우,스펙큘러등의 정보맵에선 필요가 없다. 아니, 오히려 방해가 된다. 그렇다면 이걸 끄면 정확한 계산을 할 수 있지 않을까? 맷캡텍스처로 테스트해보자.

흰색(1), 검은색(0), 회색(0.5)가 두루두루 들어있는 맷캡텍스처
0.25를 빼면 색이 좀 남아야 한다.

 

결과는 성공이다. 올ㅋ 예상대로 색이 남았다. 

아니 뭐 당연한 걸... 이라고 생각이 되지만, 실제로 감마를 켜면 요래 된다.

이제 맷캡코드를 개조해보도록 하자. (몇번째인지 모르겠다..)

 

오늘의 실험2.

어제 SDF를 배웠지만, 그닥 성과는 없었다. 배경제작할 때 자주 써먹을 수는 있을 것 같지만, 결국 내가 목적으로 했던 캐릭터의 얼굴라이트맵은 그냥 그라데이션을 부어주는 게 더 좋은 효과를 보여줬다.( 참고로 프리폼 그라데이션 필은 포토샵에 없다! 일러스트레이터에서만 지원한다. 그것도 최근에 들어갔다고 한다. 클립스튜디오에선 지원된다는데!!)

 

하지만 이래나 저래나 소프트셰도우를 지향하는 내겐 도트가 너무보여 튀어 못쓰는 수준이었다. 그런데 SDF자체는 쓸만해 보여서 이걸 어디에 써먹을 수 있을까? 궁리하던 중, 외곽선에 써보면 어떨까? 라는 생각이 들어서 적용해봤더니

 

오. 결과가 괜찮다. 확대해도 전혀 깨짐이 없다. 마치 폴리곤 처럼 선명해! 

게다가 선이 얇아지는 곳에선 저렇게 진짜 펜선처럼 끊어서 드로잉을 하기도 한다.

이건 바로 채택이다. 이번 셰이더부터 적용.

 

 

얼굴의 삼각존은 몇번째 연구인지 모르겠지만, 할 수 있는 건 다 해본 것 같다.

 

1. 달이 차오르듯 명암을 수동으로 그리는 방법 - 제어가 쉬움. 제작방법의 번거로움. 소프트쉐도우시 도트튐.

2. 삼각존 노말 조작 - 깔끔한데, 안예쁨. 제어가 어렵다. 폴리곤이 좀 더 많아야 쓸만 할 듯.

3. 셰도우 가중치 맵 - 어중간한 부분에서 삼각존과 명암의 해골형 명암이 발생. 조명이 돌아올 때 모순되는 명암이 발생.(이건 라이트방향 계산으로 해결이 가능하긴 하다.)

 

노말 삼각존

 

해서 결론은 그냥 그리지 말자. ^^

돌고 돌아 예전 방식인 달걀귀신형으로. 이게 가장 깔끔해 보인다.

그냥 코만 표현해주는 방식.

이제 목표했던 셰이더의 종착역. 림.

일단 오늘은 타임오버이니 내일 고민해보자.

6.30

커밋이 오래 걸리길래 뒤져보던 중에 발견.

이 사이트는 내가 지금까지 연구했던 모든 것과 그 이상을 담고 있다.

진작부터 이걸 봤으면 좋았을걸...

https://zhuanlan.zhihu.com/p/411188212

 

二次元角色卡通渲染—面部篇

Change Log: 2021-11-24 添加赛马娘面部阴影计算方式(2.3小节) 2021-09-16 Base这个系列我会整理一下卡通渲染中使用到的各种Trick,目前卡通渲染网上的资料很全,这部分内容技术上难点不多,不过tri

zhuanlan.zhihu.com

 

오늘의 실험.

각진 형태의 물건의 모서리에 스펙큘라를 준다면, 이건 Flat셰이딩이 맞을까? Smooth셰이딩이 맞을까?

일단 박스를 준비해보자. 이 두 개의 박스는 같은 매트리얼을 사용중이다. 노말의 방향만 다르다.

모서리의 빛을 살려준다면 스무드셰이딩이 맞는데, '박스'라면 일단 플랫셰이딩이 나아보인다.

박스를 좀 변형해보자.

 

실전의 모델들은, 좀 더 복잡한 모양을 띈다. 하지만 결과는 비슷하다. 플랫 셰이딩을 사용한다면 스펙큘라는 그리나 마나한 결과를 낳는다. 

모서리의 예쁨을 살린다면 스무드 셰이딩이 맞고, 딱딱하고 정확한 모양은 플랫셰이딩이 맞다. 중간점은 없다. 박스모델에선, 둘 중 하나를 택해야 한다. 그렇다면....흐음. 플랫셰이딩이 낫겠다. 어느 정도 예상할 수 있는 결과였지만, 여기서 얻을 수 있는 결론은, 모든 모서리에 스페큘라선을 긋기 위해 진땀을 빼지 않아도 된다는 사실이다. 봉의 장식등에 특히 이런 자잘한 모서리부분이 많은데, 생산성을 생각한다면 과감히 생략하는 것도 좋아보인다.

 

플랫셰이딩을 쓰되, 모서리를 돋보이게 하고 싶으면 베벨을 쓰자.

 

그럼 이제 본래의 목표로 돌아와 림 처리.

림 자체는 어렵지 않다. 심지어 프레넬이라는 림 전용 노드도 지원한다. 다만 전에 이걸 한 번 사용했다가 지웠는데, 당시엔 너무 지저분하게 느껴졌었다.

 

하지만 다들 하길래. "역시 없으면 안되나?" 싶어서 재도전.

지금은 셰이더그래프가 어느 정도 손에 익었기 때문에 원하는 이미지를 내기 쉬워져서 "이걸 내가 왜 안썼지?"라는 기분.

뭐야? 예쁘잖아.

 

입술을 좀 더 표현해주면 어떨까? 싶어서 입술의 명암도 좀 더 도드라지도록 설정.

결과는 꽤 좋은 편.

 

일단 셰이더는 완료.

 

신나는 리깅시간.

페인팅 기반 리깅이 처음엔 불편했는데, 익숙해지고 나니 더 편안.

7.1

리기파이 설정시 척추본을 줄였더니 어깨탈골이 일어나는 현상이 있었다.

Torso레어이엔 몇개의 조절자가 잇는데, chest와 hips가 척추뼈를 2개씩 나눠서 조절을 하는 시스템. 그런데 여기서 chest의 뼈를 1개로 줄였더니 2번째 뼈를 참조해야 하는 어깨뼈가 1번뼈를 참고하면서 탈골현상이 일어난다. 어차피 스파인 하나 줄여봤자 최적화에 그닥 도움도 안되니 그대로 사용하자. 

정상적인 상황
탈골됨

이제 애니메이션. 블렌더에선 카메라를 유니티로 옮기고 싶을 때 별도로 뽑아야 한다는 교훈을 얻었다.

7.4

출근할 땐 이번엔 애니 포기할까...싶다가 그래도 다시 한 번.

 

댓글6

  • 로딘 2022.06.28 17:30

    아... 이거, 언리얼 GI 공부하다보면 나오는 디스턴스 필드구먼?
    답글

  • 로딘 2022.06.29 11:27

    언리얼 메뉴얼은 개떡같지만...

    https://docs.unrealengine.com/5.0/ko/distance-field-soft-shadows-in-unreal-engine/
    답글

  • 쩜100 2022.06.29 15:17

    와....진짜 머리좋다...저걸 저렇게 해결할 생각을 어캐 해내는거지....
    여튼 이거 섭디하다보면 나오는 베벨 노드구만?
    답글

    • IX. 2022.06.29 18:12

      밸브의 기술력은 원래부터 세계최고였고 앞으로도 그럴 듯?
      이미 이름은 모르는데 여기저기 쓰이고 있는 것 같긴 하더이다.