シーンアセット ファイルのリファレンス

シーン アセット定義(*.sfa)ファイルは、人が読める形式のシーン バイナリ アセット(*.sfb)の説明です。ソースアセットのモデル、マテリアル定義、テクスチャを示し、シーンベースの物理的ベースマテリアルのマテリアル パラメータも提供します。

このファイルは、Seneform Android Studio プラグインによる最初のインポート時に自動的に生成されます。ただし、属性を微調整してアセットの外観を変更できます。このリファレンスでは、アセットの外観を変更するために構成できる属性について説明します。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 では、アセットが 2 倍になります。

シーン位置の値はメートル単位で指定されます。標準単位の違いに対応するために、最初のインポート時にスケール項が自動的に計算され、最大軸が 5 cm 以上、最小軸が 1 m を超えないようにします。これは、最初のインポート エクスペリエンスのためであり、これらの制限は適用されません。

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 の場合、インポートでは法線(& 39; と &#39 が & 39; ~ 39; の面に面する法線)を検出して修正しようとします。
samplers[].params.usage_type
エンコードされた画像データをランタイムが解釈する方法を定義します。sRGB 画像テクスチャには "Color" を使用します。"Data" または "Normal" を使用して、画像の内容を直線的な空間であるかのように処理します。デフォルト値は "Color" です。
samplers[].params.mag_filter

サンプリングされた mipmap が、それをサンプリングするジオメトリのピクセルサイズより大きい場合に使用される圧縮フィルタを定義します。デフォルト値は "Linear" です。 表示される値は次のとおりです。

説明
"Nearest" GL_NEAREST に対応します。テクスチャが適用されているピクセルの中心に最も近い(マンハッタン距離)テクスチャ要素の値を返します。
"Linear" GL_LINEAR に対応します。テクスチャが適用されているピクセルの中心に最も近い 4 つのテクスチャ要素の加重平均値を返します。これには、テクスチャ wrap_s とテクスチャ wrap_t の値に応じて、境界テクスチャ要素が含まれます。また、正確なマッピングも確認できます。
samplers[].params.min_filter

サンプリングされた mipmap が、それをサンプリングするジオメトリのピクセルサイズより大きい場合に使用される圧縮フィルタを定義します。デフォルト値は "NearestMipmapLinear" です。表示される値は次のとおりです。

説明
"Nearest" GL_NEAREST に対応します。テクスチャが適用されているピクセルの中心に最も近い(マンハッタン距離)テクスチャ要素の値を返します。
"Linear" GL_LINEAR に対応します。テクスチャが適用されているピクセルの中心に最も近い 4 つのテクスチャ要素の加重平均を返します。たとえば、テクスチャの wrap_s とテクスチャの wrap_t の値、および正確なマッピングに基づいて、ボーダーのテクスチャ要素を含めることができます。
"NearestMipmapNearest" GL_NEAREST_MIPMAP_NEAREST に対応します。テクスチャを適用するピクセルのサイズに最も近い mipmap を選択し、"Nearest" 基準(ピクセルの中心に最も近いテクスチャ要素)を使用してテクスチャ値を生成します。
"LinearMipmapNearest" GL_NEAREST_MIPMAP_LINEAR に対応します。テクスチャを適用するピクセルのサイズに最も近い 2 つの mipmap を選択し、"Nearest" 基準(ピクセルの中心に最も近いテクスチャ要素)を使用して各 mipmap からテクスチャ値を生成します。最終的なテクスチャ値は、これら 2 つの値の加重平均です。
"LinearMipmapLinear" GL_LINEAR_MIPMAP_LINEAR に対応します。テクスチャを適用するピクセルのサイズに最も近い 2 つの mipmap を選択し、"Linear" 基準(ピクセルの中心に最も近い 4 つのテクスチャ要素の加重平均)を使用して、各 mipmap からテクスチャ値を生成します。最終的なテクスチャ値は、これら 2 つの値の加重平均です。
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 に対応しています。

デフォルトのマテリアルのパラメータ

シーンフォームには、3 つのデフォルトのマテリアル定義が用意されています。1 つは OBJ アセット用、1 つは FBX アセット用、もう 1 つは 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 属性を含むがテクスチャがない FBX の例について考えてみます。プロジェクト フォルダに画像ファイルを追加し、新しいサンプラー ブロックにリンクしてから、次のコードのようにインジェクションで "Normal" の使用を宣言できます。

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

この時点で、マテリアルにテクスチャを使用できます。表示するには、サンプラーがその normalMap パラメータをリクエストしていることを確認します(そうしないと、サンプラーは未使用とみなされ、選別されます)。サンプラー ブロックに bumps という名前を付けた場合、マテリアル ブロックに次のコードがあることを意味します。

    {
      normalMap: 'bumps',
    },

インジェクション ブロックの用途としては、BaseColorMetallicNormalEmissiveRoughnessOcclusion が挙げられます。