장면 양식 애셋 파일 참조

장면 양식 애셋 정의 (*.sfa) 파일은 사람이 읽을 수 있는 장면 형식 바이너리 애셋 (*.sfb) 설명입니다. 이 파일은 소스 애셋의 모델, 머티리얼 정의, 텍스처를 가리키며 장면 형식의 물리적 기반 머티리얼에 대한 머티리얼 매개변수도 제공합니다.

이 파일은 장면 가져오기 Android 스튜디오 플러그인에서 처음 가져올 때 자동으로 생성되지만, 속성을 조정하여 애셋의 모양을 변경할 수 있습니다. 이 참조에서는 애셋의 모양을 수정하도록 구성할 수 있는 속성을 설명합니다. sfa에 없는 선택적 속성은 기본값을 갖습니다. sfa의 구문은 JSON의 확장인 jsonnet입니다.

구문

{
   materials: [
      {
         name: "<name>",
         parameters: [
            {
               <parameterName>: <parameterDefaultValue>,
            },
            …
         ],
         source: "path/to/source_material.sfm",
      },
      …
   ],
   model: {
      attributes: [
         "Position",
         "TexCoord",
         "Orientation",
      ],
      file: "path/to/source_asset.ext",
      name: "<Name>",
      scale: 1.0,
      recenter: false,
      smoothing_angle: 45.0,
      flip_texture_coordinates: false,
      fix_infacing_normals: false,
   },
   samplers: [
      {
         file: "path/to/source_texture.ext",
         name: "<name>",
         params: {
            usage_type: "Color",
            mag_filter: "Linear",
            min_filter: "NearestMipmapLinear",
            wrap_s: "Repeat",
            wrap_t: "Repeat",
         },
         pipeline_name: "<pipeline_name>",
      },
      …
   ]
}

속성

materials[].parameters

이 블록의 콘텐츠는 source 속성으로 지정된 머티리얼 정의에 따라 다릅니다.

기본 자료(*.sfm)의 경우 지원되는 매개변수 목록을 참고하세요.

맞춤 머티리얼 (*.mat)의 경우 지원되는 매개변수 목록이 *.mat 파일에 지정됩니다.

materials[].source
머티리얼 정의 파일(기본 머티리얼 정의(*.sfm) 파일 또는 맞춤 머티리얼 정의(*.mat) 파일)을 지정합니다.
model.attributes

소스 모델을 가져오는 동안 계산된 내보낸 버텍스 스트림의 집합을 정의합니다. 가능한 값은 다음과 같습니다.

설명
"Color" 버텍스 COLOR입니다.
"Orientation" 버텍스 TANGENT입니다.
"Position" 버텍스 POSITION입니다.
"TexCoord" TEXCOORD0: 첫 번째 UV 좌표
model.file
필수 속성입니다. 소스 애셋 파일에 대한 파일 시스템 경로가 포함됩니다. 현재 지원되는 형식은 *.fbx, *.obj, *.gltf, *.glb입니다.
model.scale

선택적 속성이며 기본값은 1.0입니다. 내보낸 모델 및 소스 애셋 콘텐츠의 배율을 제어합니다. 2.0 배율을 사용하면 애셋의 크기가 두 배로 커집니다.

장면 양식 위치 값은 미터로 지정됩니다. 표준 단위의 차이를 수용하기 위해 배율은 첫 번째 가져오기 도중에 가장 큰 축이 5cm 이상이고 가장 작은 축이 1m 이하가 되도록 자동으로 계산됩니다. 이는 초기 가져오기 환경을 위한 것으로, 이러한 한도가 적용되지 않습니다.

model.recenter

선택적 속성이며 기본값은 false입니다. 내보낸 도형의 위치를 제어합니다. 가능한 값은 다음과 같습니다.

설명
false 도형은 변환 없이 작성된 대로 내보냅니다.
true 도형의 중심이 원점에 배치됩니다.
"root" 도형을 내보내면서 원점이 가로로 가운데 정렬되고 가장 낮은 꼭짓점이 원점과 수평이 되도록 수직으로 이동합니다. 이를 사용하면 앵커 또는 평면에 배치된 내보낸 모델이 이 앵커 포인트 위에 서 있도록 할 수 있습니다.
{x:float, y:float, z:float} 표시된 점에 따라 원점이 배치되도록 도형을 내보냅니다.
{x:0, y:0, z:0}는 도형의 축에 정렬된 경계 상자의 최솟값에 해당합니다.
{x:1, y:1, z:1}는 도형의 축에 정렬된 경계 상자의 최댓값에 해당합니다.}
model.smoothing_angle
도에서 지정된 선택적 속성이며 기본값은 45입니다. 버텍스별 노멀이 없는 소스 애셋 (예: obj)에는 smoothing_angle을 사용하여 생성된 버텍스별 노멀이 있어 버텍스 노멀의 계산에 사용되는 얼굴 노멀 세트를 제한합니다. 이 각도를 초과하는 모델의 가장자리는 패싯으로 표시되거나 패싯되면 나타나지 않으며 매끄럽게 표시됩니다.
model.flip_texture_coordinates
선택적 속성이며 기본값은 false입니다. true인 경우 가져오기 중에 수직 좌표가 반전됩니다 ((u, v) -> (u, 1 - v)). 이를 통해 OpenGL/Direct3D의 이전 차이를 수용할 수 있습니다.
model.fix_infacing_normals
선택적 속성이며 기본값은 false입니다. true인 경우 가져오기는 표면을 향하는 노멀 (표면을 가리키는 노멀)을 찾아서 보정하려고 시도합니다.
samplers[].params.usage_type
런타임에 인코딩된 이미지 데이터를 해석하는 방법을 정의합니다. sRGB 이미지 텍스처에는 "Color"를 사용하세요. "Data" 또는 "Normal"를 사용하여 이미지의 콘텐츠를 선형 공간에 있는 것처럼 처리합니다. 기본값은 "Color"입니다.
samplers[].params.mag_filter

샘플링된 밉맵이 기하학적 구조를 샘플링하는 도형의 픽셀 크기보다 클 때 사용되는 축소 필터를 정의합니다. 기본값은 "Linear"입니다. 가능한 값은 다음과 같습니다.

설명
"Nearest" GL_NEAREST에 해당합니다. 텍스처링 중인 픽셀의 중심에 가장 가까운 (맨해튼 거리 내) 텍스처 요소의 값을 반환합니다.
"Linear" GL_LINEAR에 해당합니다. 텍스처링 중인 픽셀의 중심에 가장 가까운 네 개의 텍스처 요소의 가중 평균을 반환합니다. 여기에는 텍스처 wrap_s 및 텍스처 wrap_t의 값과 정확한 매핑에 따라 테두리 텍스처 요소가 포함될 수 있습니다.
samplers[].params.min_filter

샘플링된 밉맵이 기하학적 구조를 샘플링하는 도형의 픽셀 크기보다 클 때 사용되는 축소 필터를 정의합니다. 기본값은 "NearestMipmapLinear"입니다. 가능한 값은 다음과 같습니다.

설명
"Nearest" GL_NEAREST에 해당합니다. 텍스처링된 픽셀의 중심에 가장 가까운(맨해튼 거리 내) 텍스처 요소의 값을 반환합니다.
"Linear" GL_LINEAR에 해당합니다. 텍스처링된 픽셀의 중심에 가장 가까운 네 개의 텍스처 요소의 가중 평균을 반환합니다. 여기에는 텍스처 wrap_s 및 텍스처 wrap_t의 값과 정확한 매핑에 따라 테두리 텍스처 요소가 포함될 수 있습니다.
"NearestMipmapNearest" GL_NEAREST_MIPMAP_NEAREST에 해당합니다. 텍스처링 중인 픽셀의 크기와 가장 일치하는 밉맵을 선택하고 "Nearest" 기준 (픽셀 중심에 가장 가까운 텍스처 요소)을 사용하여 텍스처 값을 생성합니다.
"LinearMipmapNearest" GL_NEAREST_MIPMAP_LINEAR에 해당합니다. 텍스처링되는 픽셀 크기와 가장 일치하는 두 밉맵을 선택하고 "Nearest" 기준 (픽셀 중심에 가장 가까운 텍스처 요소)을 사용하여 각 밉맵에서 텍스처 값을 생성합니다. 최종 텍스처 값은 이 두 값의 가중 평균입니다.
"LinearMipmapLinear" GL_LINEAR_MIPMAP_LINEAR에 해당합니다. 텍스처링되는 픽셀 크기와 가장 일치하는 두 밉맵을 선택하고 "Linear" 기준 (픽셀 중심에 가장 가까운 텍스처 요소 4개의 가중치 평균)을 사용하여 각 밉맵에서 텍스처 값을 생성합니다. 최종 텍스처 값은 이 두 값의 가중치 평균입니다.
samplers[].params.wrap_s

선택적 속성이며 기본값은 "Repeat"입니다. 가로 래핑 동작을 제어합니다.

설명
"ClampToBorder" GL_CLAMP_TO_BORDER에 해당합니다.
"ClampToEdge" GL_CLAMP_TO_BORDER에 해당합니다.
"MirroredRepeat" GL_MIRRORED_REPEAT에 해당합니다.
"MirrorClampToEdge" GL_MIRROR_CLAMP_TO_EDGE에 해당합니다.
"Repeat" GL_REPEAT에 해당합니다.
samplers[].params.wrap_t

선택적 속성이며 기본값은 "Repeat"입니다. 세로 래핑 동작을 제어합니다.

설명
"ClampToBorder" GL_CLAMP_TO_BORDER에 해당합니다.
"ClampToEdge" GL_CLAMP_TO_BORDER에 해당합니다.
"MirroredRepeat" GL_MIRRORED_REPEAT에 해당합니다.
"MirrorClampToEdge" GL_MIRROR_CLAMP_TO_EDGE에 해당합니다.
"Repeat" GL_REPEAT에 해당합니다.

기본 자료용 매개변수

장면 양식은 OBJ 애셋용, ROAS 애셋용, glTF 애셋용 등 세 가지 기본 머티리얼 정의를 제공합니다.

이 섹션에는 각 기본 머티리얼 정의에서 지원하는 머티리얼 매개변수가 나와 있습니다.

obj_material.sfm

매개변수 설명
baseColor <sampler_name> 샘플러의 값으로 보간된 색상을 곱한 값으로 baseColor를 계산합니다.
null baseColor를 보간된 색으로 또는 보간된 색이 없는 경우 흰색으로 계산합니다.
baseColorTint <vec4> 계산된 baseColor 값([r, b, g, a]로 지정)에 색조를 적용합니다.
metallic <float_value> 머티리얼의 금속성을 관리합니다.
비금속 머티리얼에는 0.0를 사용합니다.
금속 머티리얼에는 1.0을 사용합니다.
roughness <float_value> 머티리얼의 거칠기를 제어합니다.
반짝이는 머티리얼에는 낮은 값을 사용하세요(0.0는 완벽한 미러링을 나타냄).
디퓨팅 머티리얼에는 높은 값을 사용하세요(1.0는 광택이 없는 머티리얼을 나타냄).
opacity null 완전히 불투명합니다.
<float_value> 투명도가 사용 설정되었습니다.
1.0은(는) 완전히 불투명합니다.
0.0은(는) 완전히 투명합니다.

fbx_material.sfm

매개변수 설명
baseColor <vec4> baseColorMap 결과에 대한 색조 계수로 [r, g, b, a]로 지정됩니다.
baseColorMap <sampler_name> 결과는 baseColorMap 샘플러의 값입니다.
null 흰색으로 바뀝니다.
normalMap <sampler_name> 샘플 결과를 조명 계산에 사용되는 탄젠트 공간 일반으로 해석합니다.
null 상수 [0, 0, 1]를 탄젠트 공간 노멀으로 사용합니다.
metallic <float_value> 머티리얼의 금속성을 제어하기 위해 metallicMap를 조정합니다.
비금속 머티리얼에는 0.0을 사용합니다.
금속 머티리얼에는 1.0을 사용합니다.
metallicMap <sampler_name> 샘플러의 빨간색 채널 값을 metallicMap 값으로 사용합니다.
null 상수 1.0를 사용하여 metallic로 조정합니다.
roughness <float_value> roughnessMap의 크기를 조정하여 머티리얼의 거칠기를 제어합니다.
반짝이는 머티리얼에는 낮은 거칠기를 사용합니다.
완화 머티리얼에는 높은 거칠기를 사용합니다.
roughnessMap <sampler_name> 샘플러의 빨간색 채널 값을 roughnessMap 값으로 사용합니다.
null 상수 1.0를 사용하여 roughness로 조정합니다.
reflectance <float_value> 머티리얼의 반사 요소를 제어합니다.
0.5의 기본값은 가능한 거의 모든 머티리얼을 포함합니다.
opacity null 명시적인 불투명도 제어가 없습니다.
소스 데이터에 불투명도 맵이 지정된 경우 투명 블렌딩으로 머티리얼이 렌더링됩니다.

gltf_material.sfm

매개변수 설명
baseColorFactor <vec4> baseColor 결과에 대한 색조 계수로 [r, g, b, a]로 지정됩니다.
normal <sampler_name> 샘플 결과를 탄젠트 공간 일반으로 해석하고 조명 계산에 사용합니다.
null 상수 [0, 0, 1]를 탄젠트 공간 일반으로 사용합니다.
metallicFactor <float_value> 머티리얼의 금속성을 제어하기 위해 metallicRoughness를 조정합니다.
비금속 머티리얼에는 0.0을 사용합니다.
금속 머티리얼에는 1.0을 사용합니다.
roughnessFactor <float_value> 머티리얼의 거칠기를 제어하기 위해 metallicRoughness의 크기를 조정합니다.
반짝이는 머티리얼에는 낮은 거칠기를 사용합니다.
디퓨즈 머티리얼에는 높은 거칠기를 사용합니다.
metallicRoughness <sampler_name> 거칠기용으로 샘플러의 녹색 채널을 사용합니다(roughnessFactor로 조정).
금속 샘플용 샘플러의 파란색 채널(metallicFactor 배율)을 사용합니다.
null metallicFactorroughnessFactor를 사용합니다.
occlusion <sampler_name> 앰비언트 오클루전에는 샘플러의 빨간색 채널을 사용합니다.
null metallicRoughness 텍스처가 있으면 빨간색 채널을 사용하여 주변 오클루전을 유도합니다.
emissiveFactor <float_value> 머티리얼 방출을 제어하도록 emissive를 조정합니다.
자체 빛을 생성하지 않는 머티리얼에는 0.0를 사용합니다.
emissive <sampler_name> 샘플러의 색상을 방출값으로 사용합니다.
null 배출량 없음
reflectance <float_value> 머티리얼의 반전을 제어합니다.
0.5의 기본값은 가능한 거의 모든 머티리얼을 포함합니다.


소스 데이터에 알파 컷오프가 지정되면 머티리얼은 마스킹된 블렌딩으로 렌더링됩니다. 소스 콘텐츠에 블렌딩이 사용 설정된 경우 투명도가 사용 설정됩니다.

텍스처 교체 또는 추가

samplers 블록은 머티리얼에 사용할 수 있는 텍스처를 정의합니다. 소스 애셋에서 발생한 샘플러 레코드는 pipeline_name를 선언하므로 소스 애셋의 원본 이미지 경로로 고유하게 식별합니다. file 필드는 app/ 상대 파일 경로를 포함하도록 변경할 수 있습니다. 예를 들어 코드는 다음과 같습니다.

  {
     file: "sampledata/models/textures/dandy_andy.png",
     name: "andy",
     pipeline_name: "andy.png",
  },

소스 애셋에서 andy.png라고 하는 소스 텍스처를 ./sampledata/models/textures/dandy_andy.png 파일의 콘텐츠로 바꿉니다.

소스 애셋에서 완전히 또는 부분적으로 선언된 텍스처는 애셋으로 자동으로 가져올 수 없습니다. 이 경우 SFA에 추가할 수 있습니다. 속성 목록에 TexCoord이 있는 모델에 텍스처를 추가할 수 있습니다. 자동으로 가져온 샘플러에만 적용되는 pipeline_name 대신 사용자가 injections 블록을 지정합니다.

TexCoord 속성은 있지만 텍스처가 없는 Crashlytics의 예를 살펴보겠습니다. 프로젝트 폴더에 이미지 파일을 추가하고 새 샘플러 블록에 연결하면 다음 코드에서처럼 삽입에서 "Normal"로 사용을 선언할 수 있습니다.

  {
     file: "sampledata/models/cragly_normal.png",
     name: "bumps",
     injections: [
       {usage: "Normal",},
     ],
  },

이 시점에서 머티리얼에 텍스처를 사용할 수 있습니다. 이 매개변수를 표시하려면 샘플러가 normalMap 매개변수를 위해 머티리얼러를 요청하는지 확인하세요. 그러지 않으면 샘플러가 사용되지 않고 컬링됩니다. 샘플러 블록에 bumps라는 이름이 주어진 경우 머티리얼 블록에는 다음 코드가 있어야 합니다.

    {
      normalMap: 'bumps',
    },

삽입 블록에 사용할 수 있는 사용법은 BaseColor, Metallic, Normal, Emissive, Roughness, Occlusion입니다.