Blender 8일차 - "Toon Shading"

Min Hyeok·2023년 1월 9일
0

3D

목록 보기
10/15

오늘은 만화같은 표현을 해주는 툰쉐이딩을 공부한다.

Toon Shading

what is "Toon shading"?

툰 쉐이딩은 말 그대로

"Toon" 만화영화
"Shading" 쉐이딩.

만화영화같은 결과물을 만들어내려고 사용하는 쉐이딩 방법이다.

필자가 꽤 재미있게 봤던 애니메이션인 빙과의 "호타로"의 사진을 들고와봤다.

이렇게 빨간 줄과 파란 동그라미 쳐진 부분을 보면, 그림자의 경계면이 굉장히 뚜렷하다.

보통 실사를 생각해보면, 일반적으로 "그림자"라고 하는 것은 어두운 영역에서 밝은 영역으로 갈 때 중간단계가 엄~~청나게 세분화된 그라데이션처럼 이미지가 점차 밝아진다.

반면, 만화영화의 경우엔 중간값이 없이 그림자가 확 져버린다. 이렇게 표현하는것이 툰쉐이딩을 표현하는 핵심적인 방법 중 하나라고 생각하고 쉐이딩을 진행하면 되겠다.

그러면 이론을 알았으니, 실습을 해보자.

실습

이게 전반적으로 툰쉐이딩을 진행한 Shader Editor에서 노드들의 상태이다.

뭔가 처음보는 것들이 많을텐데, 가장 핵심은

이 부분이다.

구체적인 설명을 들어가도록 하겠다.

UV 깔아주기

일단 기본 도형의 Monkey를 기준으로 하면, Edit mode에서 전체 선택해준 후 UV Editor에서 확인해주면

요로코롬 잘 나뉘어져있다.

이후,

잘 나뉘어진 UV를 가지고 Export UV Layout을 해준 뒤, 포토샵으로 가지고 가서 UV를 다듬어준다.

그 다음은 익숙해진것처럼 Image Texture에서 아까 포토샵에서 다듬어준 UV 파일(jpg, png같은 이미지 파일)을 불러오면 된다.

현재 예시처럼 UV 매핑이 되어있는 오브젝트의 경우엔, UV Shader를 가지고 만든 이미지 위에 그림자를 합성해준다.

본격적인 Shading

기본적으로 물체들은 Principled BSDF를 가지고 있는데, 툰쉐이딩의 경우 얘가 밝은 곳 / 어두운 곳을 자체적으로 판단해줄 필요가 없으므로, 지워버린다.

그러면 기존에 가지고 있던 Image Texture 노드와 그림자를 Mix 해주는 과정만 필요한데, Mix 노드를 추가해서 Data type Color를 선택해준다.

그 다음은 본격적인 Toon Shading을 해주는 과정 중 하나인 그림자 덧입히기를 해줄 것이다.

일단, 아까 지운 BSDF. "조명 위치"에 따라 음영 부분을 결정은 해줘야 하니까, 가장 단순한 BSDF인 Diffuse BSDF를 추가한다.

그 다음, BSDF로 판단한 어떤 "이미지"를 RGB값으로 바꿔줘야 하므로, Shader to RGB를 삽입 후 BSDF와 연결시켜준다. 그 다음, 음영부분을 판단한 후 그림자를 삽입해줘야 하니까 ColorRamp를 넣은 후 연결해준다.

여기서 ColorRamp의 Interpolation를 constant로 설정해주는 것잊지 말자.

그러면 위와 같은 과정이 나타나겠다.

그러면 아까 본 것 과 같은 결과물이 나오게된다.

아 맞다

여기서 Blending Mode(Multiply 있는 곳)을 눌러주면 포토샵에서 익숙하게 보는 화면이 나타나는데, 검정색과 합성해주므로 Multiply를 설정해줘야 한다고 한다.

이에 대한 자세한 내용은 해당 링크를 확인하면 새로이 공부했다.

그리고 Factor 값을 조절해줘서 그림자를 만들어준다.

Anyway, 이렇게 하면 Shader Editor에서 노드 설정은 대략 끝이 난다.

이미지를 불러오고 + 그림자를 영역을 설정해준 뒤, 이 두가지를 Mix 해주면 출력 값으로 우리가 원하는 쉐이딩이 나오는 것이다.

최종 정리를 하자면 위의 그림과 같다.

그렇다고 끝이냐?

Nope.

뭔가 부족해..

처음에 봤던 호타로 친구를 보자.

그림자가 중간값이 없다는 사실과 다시보면, 뭔가 또 다른 특징이 있다.

바로..

바로..

외곽선(Outline)이 있다는 것이다. 옷이라든가, 얼굴이라든가, 머리카락이라든가 전부 다시보면, 검은 선으로 외곽선이 좀 뚜렷하게 표시되어있지 않나?

좀 무섭게 생긴 우리 숭이친구의 현재까지 결과물을 다시보면,ㅡ 위와 같은 외곽선이 없다는 것을 알 수 있다.

이를 만들어줘야겠다.

숭이친구를 Object모드에서 제자리에서 복제(Shift + D)해준 뒤, 사이즈를 쪼꼼만 더 키운다. 이때 복제된 친구를 복숭이라고 하겠다.

그 다음, 원래 적용되어있던 Material을 지워준다.

이 복숭이는 원래 숭이의 재질을 가지고 있는지는 궁금하지 않다. 어짜피 내부의 칠이되어있는 부분이 아닌 "외곽선"을 표현하고 싶을 뿐이다.

이는 어떻게 표현하나. 복숭이친구의 매쉬를 뒤집어 줄 것이다.

직전학기 Computer Graphics 시간에 배웠듯, 이런 3D 렌더링에선 위와 같이 법선벡터(Normal)가 모델의 바깥쪽을 향하게 되어있다. 이를 뒤집어서, 뒤집힌 면들이 다른 오브젝트에 가려지게 만들면 된다.

아까 만들어준 복숭이 친구를 Edit 모드에서 전체선택한 뒤, Ctrl + Shift + N을 눌러주면 Recalculate Normals가 실행된다. inside로 Recalculate해준다는 것은 우리가 원하는 법선벡터(Normals)를 뒤집는다는 얘기가 된다. 지금은 Normal이 outside로 향하고 있으니까.

이후 이 복숭이 친구의 재질을 검은색으로 설정해준 뒤,

이렇게 Material의 Settings창을 보면 Backface Culling이 있다.

쉽게 말하면 뒤집힌 면들을 숨겨준다는 얘기가 된다.

하지만 난 누군가, 컴퓨터 그래픽스를 배운 공학도이다.

출처 : 교수님의 수업자료.

Back-Face Culling은 "보이지 않는 뒷면"은 렌더링 될 필요가 없다는 이야기다.

아까 법선을 그린 숭이 친구의 그림을 보면,

이렇게 법선이 빠져나간 방향이 "앞면"이 된다.

근데, 저 법선을 뒤집었으면 원래 앞면이였던 부분이 뒷면이 된다는 얘기겠지?

이 때 "뒷면을 렌더링하지 않는" 뒷면제거를 사용한다면 어떻게 될까.

이러한 과정을 통해 뒤집힌 면들을 숨겨주게 된다.

그러면 이렇게 "외곽선이 그려진 느낌"을 주게 된다.

그 다음, shader editor에서 BSDF를 지워버리면 약간 반짝거리는 광택도 사라지고 완벽하게 외곽선의 느낌을 내게 된다.


컴퓨터 그래픽스에서 배운 내용이 확! 나와버리니까 이해가 확실히 쉬워진 느낌이다.

공학적 역량을 지닌 아티스트가 될 때까지 힘내보자.

0개의 댓글