보통 조명 계산(diffuse = max(dot(N,L), 0))은 각도에 따라 부드럽게 이어지는 값을 냅니다. MeshToonMaterial은 이 값을 gradientMap이라는 작은 1D 텍스처에서 다시 찾아 읽습니다 — 그 텍스처가 계단식(예: 4단계 회색조)이면 조명값도 계단식으로 뚝뚝 끊기면서 셀 애니메이션 특유의 밴딩이 생깁니다. 텍스처의 minFilter/magFilter를 NearestFilter로 두는 게 핵심인데, 안 그러면 단계 사이가 보간되어 밴드 경계가 흐려집니다.
윤곽선(외곽선)은 별도 기법이 필요합니다. 가장 간단한 방법은 "인버티드 헐(inverted hull)"입니다: 같은 지오메트리를 살짝(1.03~1.08배) 키우고, side: THREE.BackSide인 단색 머티리얼로 뒤집어서 원본 메시 뒤에 겹쳐 그립니다. 뒷면만 보이는 이 확대된 껍질이 원본 메시의 실루엣 바깥으로 살짝 삐져나와 검은 테두리처럼 보입니다.
데모는 구를 MeshToonMaterial + 4단계 그라데이션으로 셰이딩하고, 그 뒤에 검은 인버티드 헐을 겹쳐 만화 캐릭터 같은 룩을 만듭니다.
언제 쓰나
만화·애니메이션풍 캐릭터, 논포토리얼(non-photorealistic) 게임 아트에.