다음을 통해 공유


PBR 재질

PBR 재질은 Azure Remote Rendering에서 지원되는 재질 유형 중 하나입니다. 실제 조명을 받아야 하는 삼각형 메시에 사용됩니다. 반면에 점 구름은 동적 조명의 영향을 받지 않습니다.

PBR은 물리 기반 렌더링(Physically Based Rendering)의 약어이며, 모든 광원 조건에서 실제와 같은 결과를 얻을 수 있도록 해당 재질이 물리적으로 타당한 방식으로 표면의 시각적 속성을 기술한다는 것을 의미합니다. 대부분의 최신 게임 엔진 및 콘텐츠 생성 도구에서는 실시간 렌더링을 위한 실제 세계의 시나리오와 가장 근접한 것으로 간주되기 때문에 PBR 재질이 지원됩니다.

ARR로 렌더링된 헬멧 glTF 샘플 모델

물리 기반 렌더링의 핵심 개념은 실제 세계의 다양한 재질을 에뮬레이트하기 위해 BaseColor, MetalnessRoughness 속성을 사용하는 것입니다. PBR에 대한 자세한 설명은 이 문서의 범위를 벗어납니다. PBR에 대한 자세한 내용은 다른 원본을 참조하세요.

하지만 PBR 재질은 범용 솔루션이 아닙니다. 시야 각도에 따라 색상이 다르게 반영되는 재질이 있습니다. 예를 들어 일부 패브릭 또는 자동차 페인트가 여기에 포함됩니다. 이러한 종류의 재질은 표준 PBR 모델로 처리되지 않으며, 현재까지 Azure Remote Rendering에서 지원되지 않습니다. 이 제한 사항에는 Thin-Film(다중 레이어 표면) 및 Clear-Coat(자동차 페인트)와 같은 PBR 확장이 포함됩니다.

PBR 재질 속성

다음 재질 속성은 예를 들어, 각각 C# PbrMaterial 클래스 또는 C++ PbrMaterial 클래스에서 런타임 API에 노출됩니다.

  • PbrFlags: 이 비트 마스크에 기타 기능 플래그를 결합하여 다음 기능을 사용하도록 설정할 수 있습니다.

    • TransparentMaterial: PBR 재질의 경우 투명도 설정이 하나만 있고, 이 설정이 사용되거나 사용되지 않습니다. 불투명도는 albedo 색의 알파 채널에 따라 정의됩니다. 사용하도록 설정하면 반투명 표면을 그리기 위해 더 복잡한 렌더링 방법이 호출됩니다. Azure Remote Rendering은 진정한 OIT(Order Independent Transparency)를 구현합니다. 투명한 기하 도형은 렌더링 비용이 많이 듭니다. 나뭇잎과 같이 표면에 구멍만 필요하면 대신 알파 클리핑을 사용하는 것이 더 좋습니다.

    0에서 완전 투명도까지 렌더링된 구 위 이미지에서 가장 오른쪽 구가 완전히 투명하지만 반사는 여전히 보이는 것을 확인합니다.

    Important

    런타임에 불투명에서 투명으로 전환되는 재질의 경우, 렌더러가 TileBasedComposition 렌더링 모드를 사용해야 합니다. 시작 시 투명한 재질로 변환되는 재질에는 이러한 제한이 적용되지 않습니다.

    • UseVertexColor: 메시에 vertex 색이 포함되고 이 옵션이 설정된 경우 메시의 vertex 색이 AlbedoColorAlbedoMap에 곱해집니다. 기본적으로 UseVertexColor는 사용되지 않습니다.
    • DoubleSided: 이중 sidedness가 true로 설정된 경우 카메라가 후면을 바라보는 경우에도 이 재질을 갖는 삼각형이 렌더링됩니다. 또한 PBR 재질의 경우 광원이 후면에 대해 적절하게 계산됩니다. 기본적으로 이 옵션은 사용되지 않습니다. Single-sided rendering을 참조하세요.
    • SpecularHighlights: 이 재질에 대한 반사 강조 표시를 사용하도록 설정합니다. 기본적으로 SpecularHighlights 플래그는 사용하도록 설정되어 있습니다.
    • AlphaClipped: AlphaClipThreshold 값 미만인 알파 값을 기준으로 픽셀 단위로 하드 컷아웃을 사용하도록 설정합니다(아래 참조). 이는 불투명한 재질에도 적용됩니다.
    • FresnelEffect: 이 재질 플래그를 사용하면 각 재질에서 가산적 프레스넬효과를 사용할 수 있습니다. 효과의 모양은 아래에 설명된 다른 프레스넬매개 변수 FresnelEffectColorFresnelEffectExponent에 의해 제어됩니다.
    • TransparencyWritesDepth: TransparencyWritesDepth 플래그가 재질에 설정되고 재질이 투명한 경우 이 재질을 사용하는 개체도 최종 깊이 버퍼에 기여합니다. 다음 섹션에서 투명한 PBR 재질 플래그를 참조하세요. 사용 사례에서 완전히 투명한 장면에 보다 타당한 후기 단계 재투영이 필요한 경우 이 기능을 사용하는 것이 좋습니다. 불투명/투명 혼합 장면의 경우에는 이 설정으로 인해 타당하지 않은 재투영 동작 또는 재투영 아티팩트가 발생할 수 있습니다. 그러므로 일반 사용 사례에서 기본 및 권장 설정은 이 플래그를 사용하지 않도록 설정하는 것입니다. 작성된 깊이 값은 카메라에 가장 가까운 개체의 픽셀별 깊이 계층에서 가져옵니다.
  • AlbedoColor: 이 색은 AlbedoMap 또는 vertex 색과 같은 다른 색에 곱해집니다. 재질에서 투명도를 사용하는 경우 알파 채널을 사용하여 불투명도가 조정됩니다. 1은 완전히 불투명한 것을 의미하고 0은 완전히 투명한 것을 의미합니다. 기본 알베도 색은 불투명한 흰색입니다.

    참고 항목

    PBR 재질이 완벽하게 정리 유리 표면처럼 완전히 투명한 경우에도 여전히 환경을 반사합니다. 태양과 같은 밝은 지점이 반사되어 표시될 수 있습니다. 이것은 색상 재질과 다릅니다.

  • AlbedoMap: 픽셀별 albedo 값의 2D 텍스처입니다.

  • AlphaClipThreshold: PbrFlags 속성에 AlphaClipped 플래그가 설정되면 알베도 알파 값이 AlphaClipThreshold보다 작은 모든 픽셀이 그려지지 않습니다. 알파 클리핑은 투명도를 사용하도록 설정하지 않아도 사용할 수 있으며 렌더링 속도가 훨씬 빠릅니다. 그러나 알파 클리핑된 재질은 완전히 불투명한 재질보다 렌더링 속도가 느립니다. 기본적으로 알파 클리핑은 사용되지 않습니다.

  • TexCoordScaleTexCoordOffset: 눈금은 UV 텍스처 좌표에 곱해지고 여기에 오프셋이 추가됩니다. 텍스처를 늘이거나 이동하는 데 사용할 수 있습니다. 기본 눈금은 (1, 1)이고 오프셋은 (0, 0)입니다.

  • FresnelEffectColor: 이 재질에 사용되는 프레스넬 색입니다. 이 재질에 프레스넬 효과 플래그가 설정된 경우에만 중요합니다(위 참조). 이 속성은 프레스넬 빛의 기본 색을 제어합니다(전체 설명은 프레스넬 효과 참조). 현재는 RGB 채널 값만 중요하며 알파 값은 무시됩니다.

  • FresnelEffectExponent: 이 재질에 사용되는 프레스넬 지수입니다. 이 재질에 프레스넬 효과 플래그가 설정된 경우에만 중요합니다(위 참조). 이 속성은 프레스넬 빛의 분산을 제어합니다. 최솟값 0.01에서는 빛이 전체 개체로 분산됩니다. 최댓값 10.0에서는 빛이 눈에 보이는 가장 빛나는 가장자리로만 제한됩니다.

  • PbrVertexAlphaMode: 꼭짓점 색의 알파 채널이 사용되는 방식을 결정합니다. 다음 모드가 제공됩니다.

    • Occlusion: 알파 값은 주변 폐색 값을 나타내므로 스카이 박스의 간접 조명에만 영향을 미칩니다.
    • LightMask: 알파 값은 적용되는 조명의 전체 양에 대한 배율 인수 역할을 합니다. 즉, 알파를 사용하여 영역을 어둡게 할 수 있습니다. 이는 간접 조명과 직접 조명 모두에 영향을 미칩니다.
    • Opacity: 알파는 재질의 불투명(1.0) 또는 투명(0.0)을 나타냅니다.
  • NormalMap: 세부 정보를 세밀하게 시뮬레이트하기 위해서는 보통 맵을 제공할 수 있습니다.

  • NormalMapScale: 노멀 맵 강도를 조정하는 스칼라 값입니다. 값이 1.0이면 노멀 맵의 노멀을 그대로 사용하고 값이 0이면 표면이 평평하게 보입니다. 1.0보다 큰 값은 노멀 맵 교란을 과장합니다.

  • RoughnessRoughnessMap: 거칠기는 표면이 거칠거나 부드러운 정도를 정의합니다. 거친 표면에서는 부드러운 표면보다 광원이 더 많은 방향으로 산란되며, 반사가 선명하지 않고 흐리게 나타납니다. 값 범위는 0.0~1.0입니다. Roughness0.0이면 반사가 선명합니다. Roughness0.5이면 반사가 흐려집니다. 거칠기 값 및 거칠기 맵이 모두 제공된 경우 최종 값은 두 값의 곱으로 나타납니다.

  • MetalnessMetalnessMap: 물리학에서 이 속성은 해당 표면이 전도체 또는 절연체인지 여부를 나타냅니다. 전도체 재질은 다른 반사 속성을 가지며, albedo 색 없이 반사되는 경향이 있습니다. PBR 재질에서 이 속성은 표면이 주위 환경을 반사하는 정도에 영향을 줍니다. 값 범위는 0.0~1.0입니다. 금속성이 0.0이면 albedo 색이 완전히 표시되고, 재질이 플라스틱 또는 세라믹처럼 보입니다. 금속성이 0.5이면 페인트를 칠한 금속처럼 보입니다. 금속성이 1.0이면 표면이 albedo 색을 거의 완전히 잃고, 주변만 반사됩니다. 예를 들어 metalness1.0이고 roughness0.0이면 표면이 실제 세계의 거울처럼 보입니다. 금속성 값과 금속성 맵이 모두 제공된 경우 최종 값은 두 값의 곱으로 나타납니다.

    다른 금속성 및 거칠기 값으로 렌더링된 구

    위 그림에서 오른쪽 아래 모서리에 있는 구는 실제 금속 재질처럼 보이고, 왼쪽 아래는 세라믹 또는 플라스틱처럼 보입니다. albedo 색도 물리적 속성에 따라 변경됩니다. 거칠기가 증가하면 재질의 반사 선명도가 손실됩니다.

  • AOMapAOScale: 앰비언트 폐색은 폐쇄된 영역에 그림자를 추가하여 균열이 있는 개체가 더 사실적으로 보이도록 만듭니다. 폐색 값 범위는 0.0~1.0입니다. 여기서 0.0은 어두운 부분(폐쇄됨)을 의미하고 1.0은 폐쇄된 부분이 없음을 의미합니다. 2D 질감이 폐색 맵으로 제공되는 경우 효과가 사용하도록 설정되고 AOScale가 승수 역할을 합니다.

    앰비언트 폐색을 사용하거나 사용하지 않고 렌더링된 개체

변환 중 색 재질 재정의

색 재질 속성의 하위 집합은 재질 재정의 파일을 통해 모델을 변환하는 동안 재정의할 수 있습니다. 다음 표는 위에서 설명한 런타임 속성과 재정의 파일의 해당 속성 이름 간의 매핑을 보여 줍니다.

재질 속성 이름 재정의 파일의 속성 이름
PbrFlags.TransparentMaterial transparent
PbrFlags.AlphaClipped alphaClipEnabled
PbrFlags.UseVertexColor useVertexColor
PbrFlags.DoubleSided isDoubleSided
PbrFlags.TransparencyWritesDepth transparencyWritesDepth
AlbedoColor albedoColor
TexCoordScale textureCoordinateScale
TexCoordOffset textureCoordinateOffset
NormalmapScale normalMapScale
Metalness metalness
Roughness roughness
AlphaClipThreshold alphaClipThreshold

기술 세부 정보

Azure Remote Rendering에는 GGX NDF를 사용하는 Cook-Torrance 마이크로 패싯 BRDF, Schlick Fresnel 및 Lambert 디퓨징 텀을 사용하는 GGX Smith 상관 조정된 가시도 텀이 사용됩니다. 이 모델은 사실상 현재 업계 표준입니다. 자세한 내용은 물리적 기반 렌더링 - Cook Torrance를 참조하세요

Azure Remote Rendering에 사용되는 Metalness-Roughness PBR 모델의 대안은 Specular-Glossiness PBR 모델입니다. 이 모델은 다양한 범위의 재질을 나타낼 수 있습니다. 하지만 비용이 더 높고, 일반적으로 실시간 사례에 적합하지 않습니다. (BaseColor, Metalness)로 변환될 수 없는 (Diffuse, Specular) 값이 있기 때문에 항상 Specular-Glossiness에서 Metalness-Roughness로 변환할 수 있는 것은 아닙니다. 모든 (BaseColor, Metalness) 쌍이 잘 정의된 (Diffuse, Specular) 쌍에 해당하기 때문에 다른 방향으로의 변환이 더 간단하고 더 정확합니다.

API 설명서

다음 단계