사람 피부 제작

사람 피부를 만드는 방법 안내입니다.

Windows
MacOS
Linux

Not using SubsurfaceProfile

Using SubsurfaceProfile

제대로 된 사람 피부를 렌더링하는 방법은 매우 복잡한 주제라, 모든 것에 통하는 단 하나의 완벽한 솔루션은 없습니다. 그렇기에 다음 정보는 시작을 위한 참고 로만 삼아주시기 바랍니다. 현실적인 이미지를 얻기 위해서 필요한 것들이 많기 때문입니다. 왜냐면 우리 눈은 사람 피부의 미묘한 디테일을 감지하는 데 아주 숙달되어 있기 때문입니다. 제대로 하기는 매우 어렵지만, 도구에 숙달되기만 한다면 다른 경우에도 적용할 수 있을 것입니다.

셋업

머티리얼을 만들기 전, 먼저 참고자료를 조금 모아야 합니다. 왜냐면 각기 다른 라이팅 조건에서 머티리얼이 어떻게 보이는지 검증하기 위해서는 다양한 라이팅 상황에서의 사진 참고자료를 가지고 시작하는 것이 좋기 때문입니다. 가급적 스캔을 떠서 보정한 소스 데이터가 있다면 최적의 결과를 내도록 하는 데 큰 도움이 될 것입니다. 에디터에서 콘텐츠를 볼 때는, 에디터 시각 순응 기능을 끄면 보다 정교한 제어가 가능합니다: 편집 메뉴 > 프로젝트 세팅 > 렌더링 > 기본 포스트 프로세싱 세팅 > 자동 노출 입니다.

보정 환경이 색을 제대로 뽑아내는 데 도움이 되는 것은 사실이지만, 필수는 아닙니다.

다음 예제에서는 Skin Rendering (피부 렌더링) 콘텐츠 예제로 작업을 하겠습니다. 없으시다면 마켓 플레이스에서 Content Examples (콘텐츠 예제) 를 다운로드한 다음 Skin Rendering 맵을 여시면 됩니다. 또 한가지, 이 문서의 이미지는 저해상도로 되어 있어 소스 작업에 사용하기에는 적합하지 않다는 점, 염두에 두시기 바랍니다.

언리얼 엔진 안에서 사용할 노멀 맵 셋업이 제대로 되어있는지 확인하는 것이 매우 중요합니다. 일부 엔진에서는 초록 채널이 반전된 노멀 맵을 사용합니다. 다음 이미지의 색을 노멀에 비교해 보면 노멀 맵의 초록 채널이 반전되었는지 확인해 보실 수 있습니다.

NormalSetup.png

피부 텍스처와 머티리얼 제작을 시작하기 전 주의해야 하는 것들이 몇 가지 있습니다.

  • 텍스처 제작시 기억할 점은, 매우 높은 (2048 x 2048 이상) 해상도의 텍스처로 시작해야 최적의 결과를 얻을 수 있다는 점입니다.

  • 빠른 반복처리를 위해서는, 머티리얼 인스턴스를 만들고 스칼라와 벡터 파라미터를 노출시키는 것이 좋습니다. 그래야 머티리얼을 다시 컴파일하지 않고도 빠르고 쉬운 트윅 작업이 가능합니다.

  • 애셋은 여러 라이팅 조건에서 제대로 보이는지 확인을 해야 한다는 점 유념해 주세요. 포스트 프로세스 볼륨에 시각 순응(Eye Adaptaion) 기능을 켜는 것 조차도 최종적인 모양에 큰 차이가 날 수 있습니다.

  • 그림자 부작용을 피하기 위해서는, 추가적인 노력이 필요합니다. 그림자 편향치를 조정하거나, 좀 더 집중된 스포트 라이트 원뿔을 사용해야 더 나은 라이팅 해상도를 얻을 수 있기 때문입니다.

  • 트윅 작업시에는 지오메트리를 통해 잘려 보이거나 렌즈 왜곡이 없을 것이므로 에디터 FOV 를 조정하여 줌인하는 것이 좋을 수도 있습니다.

  • 에디터 필드 오브 뷰(FOV)는 원근 이라 써 있는 아이콘 옆의 드롭 다운 화살표 를 클릭한 다음 마우스로 조절할 수 있습니다.

    HS_Change_FOV.png

  • 작업물 확인시 스트리밍 시스템이 줌 레벨을 고려하지 않아 원치 않는 상황에 텍스트가 뿌옇게 될 수가 있습니다. 3D 게임을 위한 의도적인 디자인 결정사항이었습니다만, 추후 변경될 수 있습니다. 이러한 현상을 방지하기 위해서는, 메시 인스턴스의 텍스처 Streaming Distance Multiplier (스트리밍 거리 배수)를 변경하면 됩니다.

머티리얼

아래는 Content Example 맵의 완성된 머티리얼 이미지입니다. 복잡해 보이긴 하지만, 다음 부분에서 머티리얼 각 섹션이 무엇을 하는지 분해해 보도록 하겠습니다.

베이스 컬러

HS_Base_Color.png

한 가지 이해해야 할 사항은, 아주 먼 거리에서 '서브서피스 스캐터링' 이펙트를 인지하기가 힘들 수 있다는 점입니다. 즉 원거리에서 봤을 때도 텍스처의 베이스 컬러가 제대로 나오게 하는 것이 좋다는 뜻입니다. 회색조 텍스처를 사용하여 베이스 컬러와 스페큘러를 어둡게 만들어서 (오클루전 효과) 피부의 전체적인 느낌을 살릴 수도 있습니다. 벡터나 스칼라 컨트롤을 추가하여 피부의 색이나 강도를 조절하여 원하는 느낌을 낼 수 있도록 추가적인 트윅 작업을 할 수도 있습니다.

러프니스

HS_Roughness.png

피부의 경우, 러프니스는 0.4 정도의 상수로 시작하여 조정해 나가는 것이 좋습니다. 참고로 모방해 내려는 피부에 대한 실제 값은, 피부의 스케일/거리, 나이, 습도에 따라 달라집니다. 다른 텍스처와는 달리, 맵 맵은 확실히 달라보이도록 하고 싶었습니다. 그런 밉 체인은 이런 모습입니다:

DetailRoughness.png

보시면 밉이 작을 수록 더 밝은 회색 값이 많아져, 보다 거친 머티리얼 쪽으로 머티리얼 전환이 일어난다는 뜻입니다. 또 한가지, 이 텍스처는 다른 텍스처의 채널에 넣(어 텍스처 룩업 및 텍스처 메모리 절약하)는 것이 가능합니다. 이 텍스처의 해상도는 노멀 맵 텍스처와 같도록 하는 것이 이상적입니다.

스페큘러

HS_Spec.png

피부에 대한 스페큘러 값은 0.35 로 설정되어 있습니다. 0.35 라는 수치는 현실에서 실측한 스페큘러 값을 엔진에서 사용하는 범위로 변환시켜 얻어낸 것입니다.

노멀

HS_Normal.png

노멀 맵이 피부에 정상 작동하기 위해서는, 노멀 맵이 다음 조건을 만족해야 합니다.

  • 피부에 사용된 노멀 맵에는 주름에 대한 디테일만 들어있어야 합니다. 모공 디테일은 타일링 텍스처로 하는 쪽이 낫습니다.

  • 오브젝트의 노멀 맵과 디테일 노멀 맵을 조합할 때, BlendAngleCorrectedNormals 머티리얼 함수를 사용하여 조합하는 것이 더 나은 결과를 얻을 수 있습니다. 파라미터를 노출시켜 노멀 맵 조합 혼합을 조정하는 것도 매우 유용합니다. 디테일 노멀 맵 값을 취한 다음 Z 컴포넌트에 스칼라 값을 더하고 정규화시키면 됩니다. 이런 식으로 일반 노멀 맵에서 평평한 디테일의 노멀 맵으로 전환 가능합니다.

  • 피부는 각기 다른 영역에 다양한 셰이딩 프로퍼티가 있으며, 러프니스를 오브젝트 매핑된 (타일링되지 않은) 텍스처와 합치는 것이 최선입니다. 디테일 노멀 맵이 거리상 러프니스를 올라가게 만들기 때문에, 그에 대한 보정을 해 줘야 합니다. 또한 셰이딩을 여러 스케일 / 뷰 거리에서 검증해야 카메라와의 모든 거리에서 괜찮아 보이는지 확인할 수 있습니다.

  • 요즘의 실시간 렌더링은 픽셀 단위 라이팅의 셰이딩을 구현합니다. 그렇게 되면 보통은 매우 높은 퀄리티의 결과물을 얻을 수 있지만, 노멀 맵의 디테일도 매우 높아집니다. 밉 맵을 사용하여 일렁임을 피하고 퍼포먼스를 높이긴 하지만, 노멀 맵의 경우 밉맵은 잘 통하지 않는데, 낮은 밉맵에서 디테일이란 것이 존재하지 않을 뿐만 아니라 표면이 원래보다 훨씬 빛나 보이기 때문입니다. 그에 대한 상쇄 효과로, 러프니스를 알맞게 조정하면 됩니다. 여기에 어나이소트로픽(이방성) 디테일까지 잡히지는 않지만, 비방향성에 대해서는 잘 잡아내는 편입니다.

오파시티

HS_Opacity.png

오파시티 입력은 서브서피스 스캐터링이 일어나는 양을 제어합니다. 값이 1, 또는 순수 흰색은 서브서피스 스캐터링이 최대로 나와야 함을 뜻합니다. 값이 0, 또는 순수 검정은 서브서피스 스캐터링이 나오지 않음을 뜻합니다.

모공

HS_Pores.png

모공(Pore)은 현실적인 느낌의 피부를 얻는 데 매우 중요한 역할을 합니다. 하지만 모공 디테일은 매우 세밀해야 하기에, 베이스 노멀 맵에 모공을 추가한다고 원하는 만큼의 퀄리티를 내기가 매우 어렵습니다. 모공을 별도의 타일링가능 텍스처로 추가하면 더욱 도드라져 보일 뿐만 아니라, 조절하기도 훨씬 쉬워집니다. 이 셰이더의 모공 타일링 디테일 변종을 위해, TexCoord 머티리얼 표현식에 스칼라 파라미터를 곱하여 머티리얼 인스턴스 내부가 모공을 필요한 만큼 타일링할 수 있도록 했습니다.

모공 마스크와 노멀 텍스처 탭을 가까이서 봤을 때 어떤 모양인지는, 이렇습니다.

DetailSpec.png DetailNormal.png

모공은 지표각에서 봤을 때 표면 영역에 약간 가라앉아 있기에 잘 보이지 않게 됩니다. 표면을 바라보는 각도에 따라 모공 기여도를 페이드 아웃 시키면 그 효과를 흉내낼 수 있습니다. 이 계산은 프레넬과 유사하며, SkinMaster 머티리얼에서 이와 같이 구현되어 있습니다.

FresnelMask.png

서브서피스 프로파일 사용하기

서브서피스 프로파일은 피부가 정말 피부답게 만들어 주는 것입니다. 머티리얼에서 서브서피스 프로파일을 사용하려면, 머티리얼이나 머티리얼 인스턴스에 사용하고자 하는 서브서피스 프로파일을 제공해 주기만 하면 됩니다.

머티리얼에서 이 부분을 변경하기 위해서는, 머티리얼 에디터의 디테일 패널에서 사용하고자 하는 서브서피스 프로파일을 제공해 주면 됩니다.

SSP_Apply_SSP.png

머티리얼 인스턴스 안에서 사용된 서브서피스 프로파일을 변경하려면, 먼저 Override Subsurface Profile (서브서피스 프로파일 덮어쓰기)를 체크한 다음 머티리얼 인스턴스의 서브서피스 프로파일 섹션에 사용하고자 하는 서브서피스 프로파일을 제공해 주면 됩니다.

유용한 링크

다음 외부 링크에는 게임 캐릭터용 매우 현실적인 피부 제작법에 대한 양질의 정보가 들어있습니다.

Next Generation Character Rendering

결론

제대로 된 피부 렌더링을 위한 구성 작업은 시간이 오래 걸리는 길고 지루한 작업입니다. 이 안내서는 피부 구성에 있어 올바른 방향을 짚어드리는 데 도움을 드리기 위한 용도일 뿐이라는 점, 기억해 주세요. 여기 나와있는 것과 약간 다른 구성을 사용했더니 찾고 있는 결과가 나올 수도 있습니다. 다시 한 번 강조하지만, 위의 정보는 그대로 따라야 할 정보라기 보다는, 그냥 하나의 지침으로 참고만 해 주시기 바랍니다.

태그
Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼