모델 형식에 대한 재질 매핑
원본 자산이 모델로 변환되면 변환기는 각 메시에 대한 재질을 만듭니다. 재질을 만드는 방법을 재정의할 수 있습니다. 그러나 기본적으로 변환은 PBR 재질을 만듭니다. FBX와 같은 모든 소스 파일 형식은 자체 규칙을 사용하여 재질을 정의하므로 이러한 규칙은 Azure Remote Rendering의 PBR 재질 매개 변수에 매핑되어야 합니다.
이 문서에서는 원본 자산의 재질을 런타임 재질로 변환하는 데 사용되는 정확한 매핑을 나열합니다.
glTF
EmissiveFactor 및 EmissiveTexture를 제외한 거의 모든 glTF 2.0 사양이 Azure Remote Rendering에서 지원됩니다.
다음 표에서는 매핑을 보여줍니다.
glTF | Azure Remote Rendering |
---|---|
baseColorFactor | albedoColor |
baseColorTexture | albedoMap |
metallicFactor | metalness |
metallicTexture | metalnessMap |
roughnessFactor | 거칠기 |
roughnessTexture | roughnessMap |
occlusionFactor | occlusion |
occlusionTexture | occlusionMap |
normalTexture | normalMap |
normalTextureInfo.scale | normalMapScale |
alphaCutoff | alphaClipThreshold |
alphaMode.OPAQUE | alphaClipEnabled = false, isTransparent = false |
alphaMode.MASK | alphaClipEnabled = true, isTransparent = false |
alphaMode.BLEND | isTransparent = true |
doubleSided | isDoubleSided |
emissiveFactor | - |
emissiveTexture | - |
glTF의 각 텍스처에는 Azure Remote Rendering 재질에서도 지원되는 texCoord
값이 있을 수 있습니다.
포함된 텍스처
*.bin 또는 *.glb 파일에 포함된 텍스처가 지원됩니다.
지원되는 glTF 확장
기본 기능 집합 외에 Azure Remote Rendering은 다음 glTF 확장을 지원합니다.
- MSFT_packing_occlusionRoughnessMetallic
- KHR_materials_unlit: 색 재질에 해당합니다. 방출 재질의 경우 이 확장을 사용하는 것이 좋습니다.
- KHR_materials_pbrSpecularGlossiness: 금속 거친 질감 대신 확산 반사 광택 질감을 제공할 수 있습니다. Azure Remote Rendering 구현은 확장의 변환 수식을 직접 따릅니다.
FBX
FBX 형식은 폐쇄 소스이며 FBX 재질은 일반적으로 PBR 재질과 호환되지 않습니다. FBX는 다양한 고유 매개 변수 및 속성이 있는 표면에 대한 복잡한 설명을 사용하며 , 이 중 일부가 Azure Remote Rendering 파이프라인에서 사용되지는 않습니다.
Important
Azure Remote Rendering 모델 변환 파이프라인은 FBX 2011 이상만 지원합니다.
FBX 형식은 재질에 대한 보수적 접근 방식을 정의하며 공식 FBX 사양에는 두 가지 유형만 있습니다.
- 램버트 - 일반적으로 이미 꽤 많은 시간 동안 사용되지 않지만 변환 시 퐁으로 변환하여 여전히 지원됩니다.
- 퐁 - 거의 모든 자료와 대부분의 콘텐츠 도구는이 유형을 사용합니다.
퐁 모델은 더 정확하며 FBX 재질의 유일한 모델로 사용됩니다. 아래에서는 FBX 재질이라고 합니다.
Maya는 재료의 PBR 및 Stingray 형식에 대한 사용자 지정 속성을 정의하여 FBX에 대해 두 개의 사용자 지정 확장을 사용합니다. 이러한 세부 정보는 FBX 사양에 포함되지 않으므로 현재 Azure Remote Rendering에서 지원되지 않습니다.
FBX 재질은 Diffuse-Specular-SpecularLevel 개념을 사용하므로 확산 텍스처에서 albedo 맵으로 변환하려면 다른 매개 변수를 계산하여 확산에서 빼야 합니다.
FBX의 모든 색과 질감은 sRGB 공간(감마 공간이라고도 함)에 있지만, Azure Remote Rendering은 시각화 중에 선형 공간에서 작동하며 프레임 끝에서 모든 것을 다시 sRGB 공간으로 변환합니다. Azure Remote Rendering 자산 파이프라인은 모든 항목을 선형 공간으로 변환하여 준비된 데이터로 렌더러에 보냅니다.
이 표에서는 텍스처가 FBX 재질에서 Azure Remote Rendering 재질로 매핑되는 방법을 보여 줍니다. 그 중 일부는 직접 사용되지 않지만 수식에 참여하는 다른 텍스처(예: 확산 텍스처)와 함께 사용됩니다.
FBX | Azure Remote Rendering |
---|---|
AmbientColor | 폐색 맵 |
DiffuseColor | Albedo, Metalness에 사용됨 |
TransparentColor | Albedo의 알파 채널에 사용됨 |
TransparencyFactor | Albedo의 알파 채널에 사용됨 |
불투명도 | Albedo의 알파 채널에 사용됨 |
SpecularColor | Albedo, Metalness, Roughness에 사용됨 |
SpecularFactor | Albedo, Metalness, Roughness에 사용됨 |
ShininessExponent | Albedo, Metalness, Roughness에 사용됨 |
NormalMap | NormalMap |
범프 | NormalMap으로 변환 |
EmissiveColor | - |
EmissiveFactor | - |
ReflectionColor | - |
DisplacementColor | - |
위의 매핑은 많은 가정이 필요하므로 재질 변환의 가장 복잡한 부분입니다. 아래에서 이러한 가정에 대해 설명합니다.
아래와 같은 정의가 사용됩니다.
Specular
=SpecularColor
*SpecularFactor
SpecularIntensity
=Specular
.Red ∗ 0.2125 +Specular
.Green ∗ 0.7154 +Specular
.Blue ∗ 0.0721DiffuseBrightness
= 0.299 *Diffuse
.Red2 + 0.587 *Diffuse
.Green2 + 0.114 *Diffuse
.Blue2SpecularBrightness
= 0.299 *Specular
.Red2 + 0.587 *Specular
.Green2 + 0.114 *Specular
.Blue2SpecularStrength
= max(Specular
. 빨간색,Specular
. 녹색,Specular
. 파랑)
SpecularIntensity 수식은 여기에서 가져옵니다. 밝기 수식은 이 사양에 설명되어 있습니다.
Roughness
Roughness
는 이 수식을 사용하여 Specular
및 ShininessExponent
에서 계산됩니다. 수식은 퐁 반사 지수의 대략적인 근사값입니다.
Roughness = sqrt(2 / (ShininessExponent * SpecularIntensity + 2))
금속성
Metalness
는 glTF 사양의 이 수식을 사용하여 Diffuse
및 Specular
에서 계산됩니다.
여기서 아이디어는 수식을 해결한다는 것입니다. Ax2 + Bx + C = 0. 기본적으로 유전 표면은 반사 방식으로 빛의 약 4 %를 반사하고 나머지는 확산됩니다. 금속 표면은 확산 방식으로 빛을 반사하지 않지만 모든 반사 방식으로 반사됩니다. 이 수식은 광택 플라스틱과 광택 금속 표면을 구별 할 수있는 방법이 없기 때문에 몇 가지 단점이 있습니다. 대부분의 경우 표면에 금속 특성이 있다고 가정하므로 광택이 있는 플라스틱/고무 표면이 예상대로 보이지 않을 수 있습니다.
dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength
A = dielectricSpecularReflectance
B = (DiffuseBrightness * (oneMinusSpecularStrength / (1 - A)) + SpecularBrightness) - 2 * A
C = A - SpecularBrightness
squareRoot = sqrt(max(0.0, B * B - 4 * A * C))
value = (-B + squareRoot) / (2 * A)
Metalness = clamp(value, 0.0, 1.0);
반사율
Albedo
는 Diffuse
, Specular
및 Metalness
에서 계산됩니다.
Metalness 섹션에 설명한 대로 유전체 표면에서는 빛의 약 4%가 반사됩니다.
여기서는 값을 요소로 사용하여 Metalness
선형으로 색을 Dielectric
Metal
보간하는 것이 좋습니다. 금속이 0.0
면 반사에 따라 어두운 색(반사가 높은 경우)이거나 확산이 변경되지 않습니다(반사가 없는 경우). 금속이 큰 값이면 확산 색이 반사 색에 찬성하여 사라집니다.
dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength
dielectricColor = diffuseColor * (oneMinusSpecularStrength / (1.0f - dielectricSpecularReflectance) / max(1e-4, 1.0 - metalness))
metalColor = (Specular - dielectricSpecularReflectance * (1.0 - metalness)) * (1.0 / max(1e-4, metalness))
albedoRawColor = lerpColors(dielectricColor, metalColor, metalness * metalness)
AlbedoRGB = clamp(albedoRawColor, 0.0, 1.0);
AlbedoRGB
는 위 수식으로 계산되었지만 알파 채널은 더 많은 계산이 필요합니다. FBX 형식은 투명도에 대해 모호하며 이를 정의하는 여러 가지 방법이 있습니다. 콘텐츠 도구는 서로 다른 방법을 사용합니다. 여기서의 개념은 이러한 방법을 하나의 수식으로 통합하는 것입니다. 그러나 일부 자산이 일반적인 방식으로 생성되지 않은 경우 투명으로 잘못 렌더링됩니다.
이 값은 다음TransparencyFactor
Opacity
에서 TransparentColor
계산됩니다.
정의된 경우 Opacity
다음을 직접 AlbedoAlpha
= Opacity
사용합니다.
정의된 경우 = 1.0 - ((TransparentColor.Blue
+ + TransparentColor.Red
TransparentColor.Green
) / 3.0) else TransparencyColor
AlbedoAlpha
if TransparencyFactor
, then AlbedoAlpha
= 1.0 - TransparencyFactor
마지막 Albedo
색에는 4개의 채널이 있으며, 이 채널은 AlbedoRGB
.와 결합됩니다 AlbedoAlpha
.
요약
요약하면 Albedo
는 Specular
가 0에 가까운 경우 원래 Diffuse
와 매우 근사합니다. 그렇지 않으면 표면은 금속 표면처럼 보이고 확산 색을 잃게됩니다. ShininessExponent
가 충분히 크고 Specular
가 밝으면 표면이 더 매끄럽고 반사적입니다. 그렇지 않으면 표면이 거칠게 보이고 환경을 거의 반영하지 않습니다.
알려진 문제
- 현재 수식은 단순한 색이 지정된 기하 도형에 적합하지 않습니다. 충분히 밝은 경우
Specular
모든 기하 도형은 색상없이 반사 금속 표면이됩니다. 이 경우 해결 방법은 원본에서 30%로 낮추Specular
거나 변환 설정 fbxAssumeMetallic을 사용하는 것입니다. - PBR 자료는 최근에 콘텐츠 생성 도구에
Maya
3DS Max
추가되었습니다. 이러한 도구는 사용자 지정 사용자 정의 블랙 박스 속성을 사용하여 FBX에 이를 전달합니다. Azure Remote Rendering은 문서화되지 않고 형식이 닫힌 원본이므로 해당 속성을 읽지 않습니다.