シーン アセット定義(*.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
)については、サポートされているパラメータのリストをご覧ください。- OBJ のアセット:
obj_material.sfm
- FBX アセット:
fbx_material.sfm
- glTF アセット:
gltf_material.sfm
カスタム マテリアル(
*.mat
)の場合、サポートされているパラメータのリストは*.mat
ファイルで指定します。- カスタム マテリアルのリファレンスを確認する
- OBJ のアセット:
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; の面に面する法線)を検出して修正しようとします。
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
|
metallicFactor と roughnessFactor を使用します。 |
|
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', },
インジェクション ブロックの用途としては、BaseColor
、Metallic
、Normal
、Emissive
、Roughness
、Occlusion
が挙げられます。