Skip to content

언리얼 엔진의 초현실적 휴먼 렌더링 기술 분석 3부 - 헤어 렌더링 등

🌐 원문 링크: 剖析Unreal Engine超真实人类的渲染技术Part 3 - 毛发渲染及其它 (cnblogs.com/timlly)
📅 원문 발행일: 2019-07-17 | ✍️ 저자: Timlly (00 / )

💡 시리즈 분류: Digital Human국내 업계 표준 용어 감수 및 수식/도해 복원 적용 완료


헤어 렌더링은 복잡한 조명, 많은 수, 물리적 효과의 추상화 부족으로 인해 실시간 그래픽에서 항상 어려운 문제였습니다. 초기에는 여러 패치를 통해서만 교체할 수 있었습니다. 이후 하드웨어 및 렌더링 기술의 개선으로 경험적 모델인 Kajiya-Kay와 물리 기반 Marschner 헤어 렌더링 모델이 천천히 개발되었습니다. Mike는 Marschner 헤어 렌더링 모델을 사용합니다.

4.1.1 모발의 구조

현실 세계의 머리카락은 주로 섬유로 구성되어 있으며, 중앙 골수(Medulla), 내부 피질(Cortex), 표피 큐티클(Cuticle)로 구성된 다층 구조로 나눌 수도 있습니다. (아래 사진)

머리카락 단면

각질층이 확대된 후에는 하이라이트와 반사를 유발하는 매체인 함몰된 마이크로패싯이 보입니다(아래 그림). 또한 빛이 모발 표피에 조사된 후 투과와 부반사가 발생하게 됩니다.

수천 배 확대된 머리카락의 마이크로패싯

모발의 마이크로패싯에 있는 구덩이는 뿌리부터 꼬리까지 상대적으로 균일한 방향성을 가지고 있습니다. 이 현상은 탄젠트 및 이방성 속성을 사용하여 그래픽에서 측정할 수 있습니다.

단순화된 헤어 모델

4.1.2 Marschner 헤어 렌더링 모델

Marschner는 Stephen R. Marschner 등이 공동 출판한 "Light Scattering from Human Hair Fibers" 논문의 방법인 물리적 기반 헤어 렌더링 모델입니다.

이 방법은 현실 세계의 머리카락 구성과 특성을 연구하고 분석하며 아래 그림과 같이 조명 모델을 추상화합니다.

머리카락에 해당하는 단면 조명 모델 다이어그램:

이 모델은 머리카락에 대한 빛의 효과를 세 부분으로 나눕니다.

  • 반사(R): 표면에서 반사되어 주요 하이라이트를 생성하며 머리카락 접선과 이방성의 영향을 받습니다.

  • 전송-전송(TT): 전송-전송 경로, 빛이 모낭에 닿아 침투한 다음 반대쪽으로 나갑니다. 이것은 일정량의 빛에서 빛이 산란되는 과정입니다.

  • 투과-반사-투과(TRT): 빛이 모낭에 들어가서 내부 표면 경계에서 반사된 다음 다시 빛납니다. 생성되는 것은 하위 하이라이트입니다.

위의 조명 모델을 기반으로 이 논문은 기하학적 광학을 기반으로 특정 광학 경로에서 빛의 동작을 추가로 분석하고, 특히 이 동작을 세로 산란방위각 산란이라는 두 가지 범주로 나눕니다.

차이 각도는 다음과 같이 계산됩니다.

θd=(θrθi)/2

ϕ=(ϕrϕi)

반각은 다음과 같이 계산됩니다.

θh=(θrθi)/2

ϕh=(ϕrϕi)/2

R, TT, TRT 세 가지 산란 종방향 산란 함수 M은 모두 θh를 만족하고 가우스 분포를 따릅니다. 공식은 다음과 같습니다.

MR=g(βR,αR,θh)

MTT=g(βTT,αTT,θh)

MTRT=g(βTRT,αTRT,θh)

RTRT 산란 방위각 산란 함수N는 가우스 분포를 따르는 cos2ϕ,TT산란 방위각 산란 함수Nsatisfiesϕ로 단순화됩니다. 공식은 다음과 같습니다.

NR=cos2ϕ

NTT=g(γTT,0.0,πϕ)

NTRT=cos2ϕ

최종 산란 공식은 다음과 같습니다.

S=SR+STT+STRT

SP=MPNP,  for P=R,TT,TRT

위의 렌더링 기술을 사용하여 Mike의 직접 조명 부분을 렌더링할 수 있습니다.

다양한 조명 각도에서 Mike의 헤어 렌더링 효과

4.1.3 머리카락의 간접 조명

이전 섹션에서 설명한 직접 조명 외에도 머리카락에는 주변광이나 디퓨즈를 시뮬레이션하기 위한 간접 조명도 추가해야 합니다.

성능상의 이유로 UE4는 기본적으로 머리카락에 확산 간접 조명을 추가하는데, 이는 확산 가짜 산란(비물리적 실제 산란)과 유사합니다. 렌더링 결과는 다음과 같습니다.

비물리적으로 사실적이지 않은 간접 조명 효과 추가

UE4는 이중 산란(양방향 산란) 다중 산란 근사 조명 모델을 사용합니다. 논문 출처: 머리카락의 빠른 다중 산란을 위한 이중 산란 근사. 오프라인 레이 트레이싱 헤어 간접 샘플링 방법과 비교할 때 양방향 산란은 많은 시간을 절약하고 품질은 거의 유사합니다.

머리카락의 다중 산란 기능을 평가하기 위해 주로 양방향 산란이 사용됩니다. 이 기능은 두 부분으로 구성됩니다.

  • 전역 산란 기능. 전역 산란 함수는 주변 머리카락을 통과하는 빛으로 인해 현재 머리카락에 대한 산란 기여도를 계산하는 데 사용됩니다.

  • 국부 산란 기능. 국소 산란은 주변 머리카락의 빛의 다중 굴절로 인해 현재 머리카락에 대한 산란 기여도를 계산하는 데 사용됩니다.

이 두 가지 기여의 합을 양방향 다중 산란이라고 합니다. 이 계산 모델은 광원의 수와 유형에 의해 제한되지 않습니다.

위 그림에서 볼 수 있듯이 다음과 같은 추상적인 공식을 얻을 수 있습니다.

Ψ(x,ωd,ωi)=ΨG(x,ωd,ωi)(1+ΨL(x,ωd,ωi))

헤어 조명 구현을 위한 의사 코드(직접 조명 및 간접 조명 포함):

보다 구체적인 파생 및 구현 프로세스에 대해서는 참조 문서 또는 이 기술 문서인 실시간 헤어 시뮬레이션 및 렌더링을 참조하십시오.

4.2 머리카락의 기본 구현

UE가 머리카락을 구현하는 셰이더 코드는 주로 다음과 같습니다.

-\Engine\Shaders\Private\ShadingModels.ush.

Human Hair Fibers의 Light Scattering 논문은 다음과 같은 측정 표준 값 세트를 제공합니다. 다음 소스 코드에는 이러한 상수 또는 계산 공식이 많이 포함되어 있습니다.

헤어 조명 컬러링 소스 코드를 분석하는 것부터 시작해 보겠습니다.

cpp
// Approximation to HairShadingRef using concepts from the following papers:
// [Marschner et al. 2003, "Light Scattering from Human Hair Fibers"]
// [Pekelis et al. 2015, "A Data-Driven Light Scattering Model for Hair"]
float3 HairShading( FGBufferData GBuffer, float3 L, float3 V, half3 N, float Shadow, float Backlit, float Area, uint2 Random )
{
	// to prevent NaN with decals
	// OR-18489 HERO: IGGY: RMB on E ability causes blinding hair effect
	// OR-17578 HERO: HAMMER: E causes blinding light on heroes with hair
	float ClampedRoughness = clamp(GBuffer.Roughness, 1/255.0f, 1.0f);

	//const float3 DiffuseN	= OctahedronToUnitVector( GBuffer.CustomData.xy * 2 - 1 );
	//const float Backlit	= GBuffer.CustomData.z;

#if HAIR_REFERENCE
	// todo: ClampedRoughness is missing for this code path
	float3 S = HairShadingRef( GBuffer, L, V, N, Random );
	//float3 S = HairShadingMarschner( GBuffer, L, V, N );
#else
	// N is the vector parallel to hair pointing toward root

	const float VoL       = dot(V,L);
	const float SinThetaL = dot(N,L);
	const float SinThetaV = dot(N,V);
	float CosThetaD = cos( 0.5 * abs( asinFast( SinThetaV ) - asinFast( SinThetaL ) ) );

	//CosThetaD = abs( CosThetaD ) < 0.01 ? 0.01 : CosThetaD;

	const float3 Lp = L - SinThetaL * N;
	const float3 Vp = V - SinThetaV * N;
	const float CosPhi = dot(Lp,Vp) * rsqrt( dot(Lp,Lp) * dot(Vp,Vp) + 1e-4 );
	const float CosHalfPhi = sqrt( saturate( 0.5 + 0.5 * CosPhi ) );
	//const float Phi = acosFast( CosPhi );
	
	// 초기화(Initialize)의 는 의 테이블
	float n = 1.55; // 의 굴절
	//float n_prime = sqrt( n*n - 1 + Pow2( CosThetaD ) ) / CosThetaD;
	float n_prime = 1.19 / CosThetaD + 0.36 * CosThetaD;
	
	// R、TT、TRT의 longitudinal shift
	float Shift = 0.035;
	float Alpha[] =
	{
		-Shift * 2,
		Shift,
		Shift * 4,
	};
	// R、TT、TRT의 longitudinal width
	float B[] =
	{
		Area + Pow2( ClampedRoughness ),
		Area + Pow2( ClampedRoughness ) / 2,
		Area + Pow2( ClampedRoughness ) * 2,
	};

	float3 S = 0;
	
	// 내에서 의 Mp는 산란 함수 ,Np는 산란 함수 ,Fp는 함수 ,Tp는 흡수 함수
	
	// 반사(Reflection)(R)
	if(1)
	{
		const float sa = sin( Alpha[0] );
		const float ca = cos( Alpha[0] );
		float Shift = 2*sa* ( ca * CosHalfPhi * sqrt( 1 - SinThetaV * SinThetaV ) + sa * SinThetaV );

		float Mp = Hair_g( B[0] * sqrt(2.0) * CosHalfPhi, SinThetaL + SinThetaV - Shift );
		float Np = 0.25 * CosHalfPhi;
		float Fp = Hair_F( sqrt( saturate( 0.5 + 0.5 * VoL ) ) );
		S += Mp * Np * Fp * ( GBuffer.Specular * 2 ) * lerp( 1, Backlit, saturate(-VoL) );
	}

	// 투과 (TT)
	if(1)
	{
		float Mp = Hair_g( B[1], SinThetaL + SinThetaV - Alpha[1] );

		float a = 1 / n_prime;
		//float h = CosHalfPhi * rsqrt( 1 + a*a - 2*a * sqrt( 0.5 - 0.5 * CosPhi ) );
		//float h = CosHalfPhi * ( ( 1 - Pow2( CosHalfPhi ) ) * a + 1 );
		float h = CosHalfPhi * ( 1 + a * ( 0.6 - 0.8 * CosPhi ) );
		//float h = 0.4;
		//float yi = asinFast(h);
		//float yt = asinFast(h / n_prime);
		
		float f = Hair_F( CosThetaD * sqrt( saturate( 1 - h*h ) ) );
		float Fp = Pow2(1 - f);
		//float3 Tp = pow( GBuffer.BaseColor, 0.5 * ( 1 + cos(2*yt) ) / CosThetaD );
		//float3 Tp = pow( GBuffer.BaseColor, 0.5 * cos(yt) / CosThetaD );
		float3 Tp = pow( GBuffer.BaseColor, 0.5 * sqrt( 1 - Pow2(h * a) ) / CosThetaD );

		//float t = asin( 1 / n_prime );
		//float d = ( sqrt(2) - t ) / ( 1 - t );
		//float s = -0.5 * PI * (1 - 1 / n_prime) * log( 2*d - 1 - 2 * sqrt( d * (d - 1) ) );
		//float s = 0.35;
		//float Np = exp( (Phi - PI) / s ) / ( s * Pow2( 1 + exp( (Phi - PI) / s ) ) );
		//float Np = 0.71 * exp( -1.65 * Pow2(Phi - PI) );
		float Np = exp( -3.65 * CosPhi - 3.98 );
		
		// Backlit는 ,에 의해 머티리얼(Material)。
		S += Mp * Np * Fp * Tp * Backlit;
	}

	// 회 반사(Reflection)(TRT)
	if(1)
	{
		float Mp = Hair_g( B[2], SinThetaL + SinThetaV - Alpha[2] );
		
		//float h = 0.75;
		float f = Hair_F( CosThetaD * 0.5 );
		float Fp = Pow2(1 - f) * f;
		//float3 Tp = pow( GBuffer.BaseColor, 1.6 / CosThetaD );
		float3 Tp = pow( GBuffer.BaseColor, 0.8 / CosThetaD );

		//float s = 0.15;
		//float Np = 0.75 * exp( Phi / s ) / ( s * Pow2( 1 + exp( Phi / s ) ) );
		float Np = exp( 17 * CosPhi - 16.78 );

		S += Mp * Np * Fp * Tp;
	}
#endif

	if(1)
	{
		// Use soft Kajiya Kay diffuse attenuation
		float KajiyaDiffuse = 1 - abs( dot(N,L) );

		float3 FakeNormal = normalize( V - N * dot(V,N) );
		//N = normalize( DiffuseN + FakeNormal * 2 );
		N = FakeNormal;

		// Hack approximation for multiple scattering.
		float Wrap = 1;
		float NoL = saturate( ( dot(N, L) + Wrap ) / Square( 1 + Wrap ) );
		float DiffuseScatter = (1 / PI) * lerp( NoL, KajiyaDiffuse, 0.33 ) * GBuffer.Metallic;
		float Luma = Luminance( GBuffer.BaseColor );
		float3 ScatterTint = pow( GBuffer.BaseColor / Luma, 1 - Shadow );
		S += sqrt( GBuffer.BaseColor ) * DiffuseScatter * ScatterTint;
	}

	S = -min(-S, 0.0);

	return S;
}

위에서 볼 수 있듯이 먼저 R, TT, TRT 각 구성 요소의 함수 계수를 계산하고 조명 기여도를 추가한 다음 마지막으로 Kajiya Kay 디퓨즈 모델과 다중 산란 근사 방법을 사용하여 디퓨즈 부분을 시뮬레이션합니다.

4.3 모발 소재 분석

이 섹션에서는 Mike가 사용하는 헤어 소재를 분석합니다. 이들 머티리얼에는 한 가지 공통점이 있습니다. 즉, 모두 헤어 셰이딩 모델을 사용한다는 것입니다(아래 그림).

4.3.1 머리카락(M_Hair)

아래 사진은 헤어(M_Hair)에 대한 개요입니다.

  • 기본 색상

먼저, 아래 그림은 머리카락 중앙이 밝아지고 가장자리로 갈수록 어두워지는 효과를 시뮬레이션합니다. (아래 사진)

시뮬레이션된 머리카락 그라데이션 효과는 아래와 같습니다.

아래 그림의 Scalp Variation 부분은 두피(즉, 머리카락의 뿌리)에 가까운 UV 텍스처를 추출한 후 노이즈 텍스처를 샘플링하여 무작위로 변경되는 마스크 맵을 생성합니다.

Hair Albedo 부분은 주로 모근부터 모발까지의 색상 그라데이션을 시뮬레이션합니다. 컬러 마스크 hair_color_mask는 모근에 사용되어 모근의 색상을 두피에 더 잘 통합시킵니다.

컬러 믹싱의 마지막 단계에서는 엣지 컬러와 앰비언트 오클루전 컬러를 추가해 최종 헤어 컬러에 사실적인 효과를 더해줍니다.

머리카락의 윗부분 색깔은 대부분 노란색이고 작은 부분은 흰색이라는 점에 유의해야 합니다(아래 그림).

  • 분산

이 속성은 머리카락의 확산 색상과 강도를 시뮬레이션하는 머리카락 셰이딩 모델에만 사용할 수 있습니다. 이는 머리카락 가장자리 색상에 배율 인수를 곱하여 수행됩니다. (아래 사진)

  • 러프니스

러프니스 계산은 복잡하지 않습니다. 기본 색상이 포함된 Scalp Variation 부분의 출력 결과를 선형 보간 알파로 사용하여 최대값과 최소값을 전환한 후 스케일링 인자를 거쳐 최종 결과를 얻습니다.

  • 탄젠트

기본 색상과 샘플링 노이즈 맵을 포함하는 Scalp Variation 부분의 결과를 사용하여 텍스처 V 방향으로 선이 무작위로 변화하는 탄젠트 데이터를 생성하여 머리카락의 미세 평면을 시뮬레이션합니다.

  • 백라이트

백라이트는 주로 헤어 컬러링 프로세스의 투과(TT) 부분 스케일링을 제어합니다([4.2 머리카락의 기본 구현](#4.2 머리카락의 기본 구현) 참조).

데이터는 UV 세트 2에 의해 제어되는 맵의 역 및 그림자 스케일링을 통해 얻습니다.

또한 버텍스 좌표 오프셋, AO 및 기타 데이터도 분석에서 무시됩니다. 관심 있는 독자들은 직접 자료를 확인해 볼 수 있습니다.

4.3.2 헤어 블러(M_HairBlur)

헤어 블러 머티리얼은 주로 머리카락 뿌리에 블러 효과를 추가하고 픽셀 깊이 오프셋을 추가하여 머리카락이 두피에 더 잘 "이식"되도록 하고 전환을 더 자연스럽게 만듭니다. (아래 사진)

구현의 핵심은 픽셀 주위의 16개 장면 색상 포인트를 샘플링하고, 평균 계산을 수행하고, 가우시안 블러 결과를 시뮬레이션하는 것입니다. (아래 사진)

4.3.3 눈썹 및 속눈썹(M_속눈썹, M_Brows)

눈썹과 속눈썹의 소재는 머리카락의 소재와 매우 유사합니다. 이전 섹션을 참조하세요.

4.3.4 M_Fuzz

Fluff는 카메라가 매우 가까울 때만 눈에 띄는 쉽게 간과되는 렌더링 디테일입니다. 그러나 실제로 Mike의 몸 전체는 보풀로 둘러싸여 있어 캐릭터 피부의 디테일과 렌더링 사실성을 향상시킬 수 있습니다.

노란색 부분은 솜털을 보여주며, 마이크의 몸 전체에 솜털이 피어나는 것을 볼 수 있습니다

자세한 내용은 다음과 같습니다.

그 머티리얼은 투명 블렌드, 라이팅 없는 셰이딩 모드를 사용합니다.

색상 계산은 이전 머리카락과 다소 유사합니다. 주변 장면의 색상을 먼저 흐리게 한 다음 명도와 어둡기, 가장자리 밝기를 조정하여 최종 색상을 얻습니다. 또한 위치 오프셋도 사용됩니다. (아래 사진)

5. 기타 부품

피부, 눈, 머리카락 등 중요한 부분의 렌더링 외에도 Mike는 다른 부분의 렌더링에도 세세한 부분까지 신경을 썼습니다.

5.1 혀

혀는 또한 서브서피스 스캐터링(SSS) 셰이딩 모델을 사용합니다.

색상은 디퓨즈와 명도반사 맵에서 보간을 하고, 채도 조정과 색상 명도 조정을 거쳐 최종 색상과 이미시브 색상을 얻는다.

법선의 경우 미세한 세부 법선이 기본 맵 위에 혼합됩니다.

5.2 치아

치아의 경우 옥과 같은 산란 효과(아래)를 반영하기 위해 표면 아래 산란 셰이딩 모델도 사용됩니다.

그 자료 개요는 다음과 같습니다.

색상은 기본 치아 색상과 흐릿한 부드러운 색상 사이에 보간 및 혼합을 수행합니다. 결과적으로 명도, 채도, 색상(TeethTint)을 여러 번 변환하여 중간색을 얻은 후 프레넬 효과의 가장자리 색상을 추가하여 최종 색상을 얻습니다.

하이라이트의 경우 법선과 시선 벡터를 사용하여 시야각과 관련된 요소를 구하여 반사 벡터에 가까운 픽셀이 더 강한 하이라이트를 갖도록 하이라이트를 조정합니다.

거칠기와 서브서피스 스캐터링(SSS) 강도는 AO 마스크 맵을 사용하여 여러 번 조정한 후에 얻어졌습니다.

혀와 유사한 법선의 경우 미세한 세부 법선이 기본 맵 위에 혼합됩니다.

5.3 옷

옷은 마스크 블렌딩 모드와 의상 셰이딩 모델을 활성화하고 여러 레이어의 머티리얼을 사용합니다. 배경 레이어는 옷 자체의 소재이고, 두 번째 레이어는 단추 소재입니다(아래 사진).

옷 자체의 소재는 회색조 이미지에 지정된 색상을 곱한 후 일련의 조정을 거쳐 색상을 얻습니다. 이러한 색상 변경은 게임 분야에서 일반적으로 사용되는 색상 변경 방식이기도 합니다. 소재의 밝기와 색상을 조절할 수 있다는 장점이 있습니다. 단점은 여러 색상이 아닌 단일 색상만 가질 수 있다는 것입니다. 옷의 노멀도 두 겹의 질감으로 뒤섞여 있다. 또한, 서브서피스 스캐터링(SSS) 컬러(SubsurfaceColor), 바니시(ClearCoat), AO 등의 속성도 설정됩니다.

버튼 재질의 경우 매우 간단하므로 여기서는 무시하겠습니다.

5.4 조명

먼저 장면의 조명을 분석합니다. 메인 조명은 캐릭터 앞에서 45도 각도로 배치되어 사진에 일반적으로 사용되는 렘브란트 스타일의 조명과 그림자를 제공합니다. 필 라이트는 캐릭터 바로 앞에 제공되어 얼굴의 그림자 밀도를 줄입니다. 캐릭터의 오른쪽에는 측면 조명이 있어 얼굴과 몸의 측면 프로필을 제공하고 질감을 향상시킵니다. 캐릭터 뒤에는 두 개의 배경 조명이 있어 배경과 머리카락을 조명하여 머리카락을 더욱 겹겹이 만들고 머리카락과 귀의 표면 아래 산란 및 투과 효과를 반영합니다. (아래 사진)

그 중 메인 라이트는 여러 개의 스포트라이트로 구성된 라이트 어레이와 유사하게 청사진에서 동적으로 생성되어 크고 부드러운 라이트를 시뮬레이션하여 캐릭터의 메인 광원과 눈의 빛을 제공합니다. (아래 사진)

상단: 여러 개의 스포트라이트로 구성된 라이트 어레이; 하단: 눈 하이라이트 피드백을 위한 조명 배열의 모양입니다.

또한 장면은 체적 안개를 제공하고 점 광원을 갖추고 있어 자연스러운 전환 배경 효과를 시뮬레이션합니다. (아래 사진)

6. 요약 및 전망

6.1 렌더링 기술 요약

이 기사 시리즈는 Unreal의 공식 디지털 휴먼 “Meet Mike” 캐릭터의 렌더링 기술 분석에 중점을 두고 있습니다. 관련된 기술적 사항은 다음과 같습니다.

  • 스킨

물리 기반 렌더링(PBR)

  • 양방향 반사 분포 함수(BRDF)

  • 지하 산란(SSS)

가우스 함수

  • 쌍극자

-다중극자

  • 피부 표면 아래 산란을 시뮬레이션하는 다중 가우스 함수

  • 양방향 부산란 반사 모델(BSSRDF)

  • 분리 가능한 지하 산란(SSSS)

특이값 분해(SVD)

  • 텍스처 공간 흐림

-화면 공간 흐림

  • 사전 컨볼루션 커널 가중치

물리적 기반 반사

스페큘러 반사

  • 굴절

  • 자체 반사형(사전 베이킹)

  • 미디어 렌더링 참여

  • 기타 세부정보:

젖음(정상 교란)

  • 피 묻은

  • 접촉 그림자

  • 눈물샘

  • 흐릿한 바디 마스크

  • 눈 혼합

  • 머리카락

Marschner 헤어 렌더링

반사(R)

  • 전송 (TT)

  • 두 번째 반사(TRT)

  • 이중층 UV

  • 고정밀 모델

X세대

6.2 실시간 현실을 구현하는 이유

이렇게 사실적인 렌더링 효과를 얻을 수 있는 주요 이유를 정리하면 다음과 같습니다.

  • 물리 기반 조명 모델

PBR

-BSSRDF

-SSSS

  • 실제 인물의 스캔을 기반으로 한 모델

초고정밀 모델(꼭지점 70w, 삼각형 60w)

  • 초고해상도 텍스처(4K+)

  • 다양한 기능을 갖춘 스티커

기본 색상, 하이라이트, 러프니스, 표면 아래 산란, 바니시, 노멀, AO 및 기타 맵

  • 직접 스캔, 조옮김, 재생산

  • 많은 세부 사항

피부 디테일 : 모공, 주근깨, 충혈, 보풀, 이중층 하이라이트, 주름...

  • 안구 세부 정보: 반사, 굴절, 셀프 섀도잉, 측면 조명, 재질 전환, 일반 섭동...

  • 물리학 및 사진 예술을 기반으로 한 장면 조명

스포트라이트 배열

  • 빛을 채우다

  • 측면 조명

  • 등 윤곽 조명

  • 배경 전환 조명

  • 고도로 맞춤화된 소재

피부 소재

  • 눈 소재

  • 머리카락 질감

  • 의류 소재

6.3 부족함

Mike에 따르면 렌더링 효과는 현실에 가깝지만 여전히 몇 가지 문제가 있습니다.

  • 머리카락은 물리적인 영향을 미치지 않습니다.

  • 재질을 모든 장면의 조명에 적용할 수는 없습니다. 일부 장면에서는 렌더링된 캐릭터 효과가 왜곡됩니다.

  • SSSS 렌더링에 나타나는 피부 줄무늬.

  • 주행 효과가 충분히 부드럽지 않습니다(게시된 영상에서 결론).

물론 후속 Siren 프로젝트에서는 위의 문제 중 일부가 해결되거나 완화되었습니다.

저는 강력한 UE 공식 팀 앞에서 가상 디지털 휴먼 탐색의 속도가 계속해서 전진하여 실시간 렌더링 분야에서 연달아 이정표를 달성할 것이라고 믿습니다.

이 기사 시리즈는 끝났습니다!

이 기사 시리즈의 다른 부분

  • 언리얼 엔진의 초현실적 휴먼 렌더링 기술 분석 1부 - 개요 및 피부 렌더링

  • 언리얼 엔진의 초현실적 휴먼 렌더링 기술 분석 2부 - 안구 렌더링

특별 지침

  • 참고문헌을 작성해주신 모든 분들께 감사드립니다!

  • 무단 전재를 금지합니다!








📚 참고 자료 및 공식 링크 (References)


🔗 연관 지식 베이스 (Wiki & Tools)

Based on the legendary technical series by Timlly (0向往0 / 毛星云)