6년 전 쯤? 모바일 프로젝트 때문에 개발하던 셰이더와 관련 해서 중국어로 작성 해 놨던 페이지가 보여 다시 한국어로 전환 해서 블로그에 올려봅니다.
핵심 요약
목적
본 문서는 OpenGL 3.2 이상을 지원하는 기기에서 스킨 셰이더를 구현하기 위한 기술적 고려사항을 설명.
범위
듀얼 로브 스킨.
방법론
What is the dual lobe specular?
듀얼 로브 스페큘러(dual lobe specular) 기술은 두 개의 독립적인 정반사 거칠기 값을 사용하여 최종 렌더링 효과를 처리합니다. 이 방식은 고품질의 서브픽셀 디테일을 통합하여 피부의 미세 특성을 정밀하게 시뮬레이션함으로써 더욱 사실적인 시각적 표현을 구현합니다.
사실 이 부분은 2013년부터 사용되어 널리 알려져 있었으며, 다만 Epic Games가 2018년에 발표했을 때 더욱 강조되었을 뿐입니다.

Softer Lobe

Tighter Lobe

Combined Lobes
간단히 말해서, 풍부하고 자연스러운 피부 표면은 하나의 specular로만 제어하기에는 부족합니다. Clear Coat와는 다른 차원이지만, 피부의 굴곡과 피지 분포, 유분 분포의 차이가 크기 때문에, 더욱 사실적이고 자연스러운 피부 광택을 표현하기 위해 최근에는 두 개의 specular를 사용하는 것이 주류가 되었습니다. 개인의 선호도에 따라 Softer Lobe는 표준 GGX나 유사한 Trowbridge-Reitz를 사용할 수 있으며, Tighter Lobe는 Backmann을 사용할 수 있습니다. 최적화가 필요한 경우, 전부 Backmann을 사용하고, specular 모델은 한 번만 계산하여 Softer Lobe 분기 전에 Branching과 Narrow 값을 매핑한 후 병합하면 됩니다.
기존 PBR 셰이더의 메커니즘을 수정해 보겠습니다. 주로 세 가지를 수정해야 합니다: Geometry Shadow Model, Curvature와 Blurry Scatter, 그리고 Back Scatter입니다. 모두 Forward 렌더링을 기준으로 구현합니다.
위의 예시를 구할 수 없어서, Mike의 예시를 먼저 살펴보겠습니다. 이는 Dual Lobe의 기본 개념과 유사한데, 다음과 같습니다: 여기서는 두 개의 거칠기 값을 사용했습니다.

전체 표면의 평균 거칠기 값은 0.95이며, 두 번째 거칠기 값은 1.05로, 텍스처 샘플러를 사용하여 보간합니다. 이 값은 더욱 정밀한 미세 거칠기와 곱해진 후, 외부 표면의 프레넬 결과와 더해집니다.
각 표현 부분을 디버그하여 살펴보겠습니다.
전체 분석 예시 후 발견한 바로는, 마스터 머티리얼을 수정하려면 셰이더 컴파일도 동시에 처리해야 해서 매우 번거롭습니다. 집에서도 완전한 버전 관리 시스템을 구축해야 하는 걸까요?
캐릭터 상반신에 사용된 셰이딩 모델은 다음과 같이 분류됩니다: 머리카락, 피부, 의상
넷이즈 게임 초류향 모델링을 사용한 전체 셰이딩 분석 보고서
특이사항: 프레임 디버깅 시 게임에서 "톤 매핑" 관련 정보가 없어 추측이 필요합니다. 실제로 후처리 단계에서 "톤 매핑" 사용 여부를 정확히 판단할 수는 없으나, GPU 디버깅에서는 발견되지 않았습니다. 초류향의 TA가 이 프로젝트 완료 후 텐센트 왕자영요 팀에 합류했는데, 현재 텐센트 왕자영요(청두 스튜디오)도 후처리에서 톤 매핑을 사용하지 않습니다. 대신 캐릭터 셰이더 내부에서 톤 매핑 공식을 계산하고 사용합니다. 최근 왕자영요 중국 버전이 PBR로 전환 중이라 톤 매핑이 중요한 구성 요소가 되었습니다. 톤 매핑이 전체 렌더링과 FX 효과에 영향을 미치는 점을 고려할 때, 캐릭터 렌더링 부분과 특정 부분에서만 수정된 ACES 공식(실제로는 복잡하지 않음)을 셰이더에서 사용했을 것으로 추정됩니다. 톤 매핑 없이는 앞서 언급한 피부 톤이나 스페큘러 효과를 구현하기가 매우 어렵거나 불가능합니다.
ARTISTIC IBL 라이팅을 적용하고 조정합니다. IBL 환경광 값을 수정하여 변화 추이를 관찰합니다. 이 단계가 매우 중요합니다. 렌더링 효과는 주로 조명에 좌우되므로, 기본 셰이더를 사용하더라도 아트 조정을 통해 유사한 품질을 달성할 수 있습니다.
초류향의 캐릭터 선택 창과 실제 게임 내 캐릭터 품질에 현저한 차이가 있습니다. 분석 결과: 캐릭터는 선택 창에서 확대 표시되는 이목구비 기준으로 제작되었으며, 이는 속눈썹의 농도(선명도, 분포 밀도 등)와 눈썹을 포함합니다. 따라서 실제 게임에서는 얼굴 이목구비의 해상도가 낮아져 특징이 충분히 두드러지지 않습니다. 이 분석은 2019년 10월 초류향 버전을 기준으로 합니다.
초류향 모델을 사용한 그림자 분석 보고서입니다. 초류향 게임 엔진(메시아)과 Unity 엔진의 기능 구현이 다르기 때문에, 여기서는 개인적인 견해를 바탕으로 분석했습니다. 부드러운 그림자 효과 구현에 필요한 요소들에 중점을 두었습니다.


화이트 모델로 형태를 확인합니다. 앰비언트 강도, 그림자 강도, 인물 포트레이트 라이팅 각도만 조정하여 테스트를 진행합니다.
화이트 앰비언트 라이팅을 사용한 변화 테스트.


인공적으로 제작된 화이트 환경광을 사용하여 곡면 굴곡의 변화 효과를 관찰합니다.

거칠기를 적용하고 전체적인 형태를 계속 확인합니다. 하이라이트와 앰비언트 효과가 얼굴의 입체감 표현 방식을 결정하기 때문에 이는 매우 중요한 테스트 단계입니다.
IBL 커스텀 라이트 제작. Substance Designer를 사용하여 자신만의 IBL 라이트를 제작하세요.

SD 파일 참조
HDR_커스텀
아티스틱 IBL 라이팅 적용. IBL 환경광 값을 조정하여 변화를 관찰합니다. 이 단계는 매우 중요합니다. 렌더링 효과는 주로 조명에 의존하므로, 기본 셰이더를 사용하는 상황에서도 아트 조정을 통해 품질을 향상시키는 것이 좋습니다.

이것은 Unity의 PBR 기본 기능을 사용한 결과입니다. IBL 조명과 하나의 디렉셔널 라이트를 사용했으며, 아직 스킨 효과는 적용되지 않았습니다.



카메라 각도와 시점을 조정하고, 동시에 클램프 라인을 더 섬세하게 조정합니다.

AO 정보를 사용하여 셰이더에서 동공과 속눈썹의 가상 그림자 영역을 제어하는 기능을 추가했습니다.
기본값.
채널 믹서를 사용한 색상 리매핑. 블루 채널 믹스를 사용하여 레드를 0에서 10으로 증가
셰이더 테스트 결과.


'UNITY3D' 카테고리의 다른 글
내장 셰이더 벡터 파라메터 (1) | 2025.03.03 |
---|---|
Cursor AI IDE 와 UNITY3D 연동하여 개발하기. (0) | 2025.03.02 |
Unity3D URPDual Lobe GGX works (0) | 2025.02.18 |
ActorSkinLitGUI (0) | 2025.02.17 |
유니티 6.2 렌더링 패스 (0) | 2025.02.10 |