Sceneform Öğe Tanımı (*.sfa) dosyası, Sceneform İkili Öğesi'nin (*.sfb) kullanıcılar tarafından okunabilen bir açıklamasıdır. Dosya, kaynak öğenizdeki modelleri, malzeme tanımlarını ve dokuları işaret eder ve Sceneform'un fiziksel tabanlı malzemeleri için malzeme parametreleri sağlar.
Bu dosya, Sceneform Android Studio eklentisi tarafından ilk içe aktarma işleminde otomatik olarak oluşturulur, ancak öğelerinizin görünümünü değiştirmek için özelliklerde ince ayar yapabilirsiniz. Bu referans, öğenizin görünümünü değiştirmek için yapılandırabileceğiniz özellikleri açıklar. sfa öğesinde bulunmayan isteğe bağlı özelliklerin varsayılan değeri vardır. sfa söz dizimi, JSON uzantısı olan jsonnet şeklindedir.
Söz dizimi
{
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>",
},
…
]
}
Özellikler
materials[].parametersBu blokun içeriği,
sourceözelliği tarafından belirtilen malzeme tanımına bağlıdır.Varsayılan materyaller için (
*.sfm) desteklenen parametrelerin listesine bakın:- OBJ öğeleri:
obj_material.sfm - {8/} öğeleri:
fbx_material.sfm - glTF öğeleri:
gltf_material.sfm
Özel materyaller için (
*.mat) desteklenen parametrelerin listesi*.matdosyasında belirtilir:- Özel malzeme referansına bakın
- OBJ öğeleri:
materials[].source- Malzeme tanımı dosyasını (varsayılan malzeme tanımı (
*.sfm) dosyası veya özel malzeme tanımı (*.mat)) belirtir.
model.attributesKaynak modelin içe aktarımı sırasında hesaplanan dışa aktarılan tepe noktaları akışını tanımlar. Olası değerler:
Değer Açıklama "Color"Köşe COLOR."Orientation"Köşe TANGENT."Position"Köşe POSITION."TexCoord"TEXCOORD0, ilk UV koordinatı.
model.file- Zorunlu özellik. Kaynak öğe dosyasının dosya sistemi yolunu içerir.
Şu anda
*.fbx,*.obj,*.gltfve*.glbbiçimleri desteklenir.
model.scaleİsteğe bağlı özellik, varsayılan olarak
1.0değerine ayarlanır. Dışa aktarılan modelin ve kaynak öğe içeriğinin ölçeğini kontrol eder.2.0ölçeği, öğenin değerini iki katına çıkarır.Sahne biçimi konum değerleri metre cinsinden belirtilir. Standart birimlerdeki farklılıkları barındırmak için ölçek terimi, ilk içe aktarma sırasında en büyük eksen 5 cm'den küçük ve en küçük eksen 1 m'den küçük olacak şekilde otomatik olarak hesaplanır. Bu, ilk içe aktarma deneyimi için geçerlidir; bu sınırlar uygulanmaz.
model.recenterİsteğe bağlı özellik, varsayılan olarak
falsedeğerine ayarlanır. Dışa aktarılan geometrinin konumlandırmasını kontrol eder. Olası değerler:Değer Açıklama falseGeometri, yazıldığı gibi, herhangi bir dönüşüm olmadan dışa aktarılır. trueGeometrinin merkezi, başlangıç noktasının üzerine yerleştirilecek. "root"Geometri, başlangıç noktası üzerinde yatay olarak ortalanacak şekilde dışa aktarılır ve dikey olarak en düşük yönleri orijinalle aynı hizada olacak şekilde kaydırılır. Bu işlem, sabit veya uçakta konumlandırılmış dışa aktarılan bir modelin bu sabitleme noktasının üzerinde kalmasını sağlamak için kullanılabilir. {x:float, y:float, z:float}Geometri, kaynağın belirtilen noktaya göre yerleştirileceği şekilde dışa aktarılır. {x:0, y:0, z:0}geometrinin eksene bağlı minimum sınır kutusuna karşılık gelir.{x:1, y:1, z:1}geometrinin eksene bağlı maksimum sınırlayıcı kutusuna karşılık gelir.}
model.smoothing_angle- Derece olarak belirtilen isteğe bağlı özellik, varsayılan olarak
45değerine sahiptir. Köşe başı normalleri olmayan kaynak öğeler (ör.obj), tepe noktası normal hesaplamasında kullanılan yüz normalleri grubunu sınırlandırmak için smoothing_angle kullanılarak oluşturulan köşe başına normal değerlere sahip olacaktır. Modelde bu açıyı aşan kenarlar 'sert' dış görünümlü, aşmayan kenarlar pürüzsüz görünür.
model.flip_texture_coordinates- İsteğe bağlı özellik, varsayılan olarak
falsedeğerine ayarlanır. Doğruysa içe aktarma sırasında dikey koordinat tersine çevrilir ((u, v) -> (u, 1 - v)). Bu, OpenGL/Direct3D arasındaki geçmiş farklılıkların korunmasına yardımcı olur.
model.fix_infacing_normals- İsteğe bağlı özellik, varsayılan olarak
falsedeğerine ayarlanır. Doğruysa, içe aktarma işlemi, normalin (yüzdeyi gösteren ' yüzeyin 'dışından düşülene göre) normali bulmaya ve düzeltmeye çalışır.
samplers[].params.usage_type- Çalışma zamanının kodlanmış görüntü verilerini nasıl yorumladığını tanımlar. SRGB resim dokuları için
"Color"özelliğini kullanın. Resmin içeriğini doğrusal alandaymış gibi işlemek için"Data"veya"Normal"kullanın. Varsayılan değer"Color"değeridir.
samplers[].params.mag_filterÖrneklenmiş mipmap, geometrinin piksel piksel boyutundan daha büyük olduğunda kullanılan küçültme filtresini tanımlar. Varsayılan değer
"Linear"değeridir. Olası değerler:Değer Açıklama "Nearest"Karşılık gelen GL_NEAREST. Dokulu pikselin merkezine en yakın (Manhattan mesafedeki) doku öğesinin değerini döndürür."Linear"Karşılık gelen GL_LINEAR. Dokulu pikselin merkezine en yakın dört doku öğesinin ağırlıklı ortalamasını döndürür. Bunlar,wrap_sdokusuna vewrap_tdokusuna ve tam eşlemeye bağlı olarak sınır doku öğeleri içerebilir.
samplers[].params.min_filterÖrneklenmiş mipmap, geometrinin piksel piksel boyutundan daha büyük olduğunda kullanılan küçültme filtresini tanımlar. Varsayılan değer
"NearestMipmapLinear"şeklindedir. Olası değerler:Değer Açıklama "Nearest"Karşılık gelen GL_NEAREST. Doku oluşturulan pikselin merkezine en yakın (Manhattan mesafesinde) doku öğesinin değerini döndürür."Linear"Karşılık gelen GL_LINEAR. Doku haline getirilen pikselin merkezine en yakın dört doku öğesinin ağırlıklı ortalamasını döndürür. Bunlar,wrap_sdokusuna vewrap_tdokusuna bağlı olarak kenarlık doku öğelerini ve tam eşlemeyi içerebilir."NearestMipmapNearest"Karşılık gelen GL_NEAREST_MIPMAP_NEAREST. Dokulu piksel boyutuyla en yakın mixmap'i seçer ve doku değeri oluşturmak için"Nearest"ölçütünü (pikselin merkezine en yakın doku öğesi) kullanır."LinearMipmapNearest"Karşılık gelen GL_NEAREST_MIPMAP_LINEAR. Doku haline getirilen pikselin boyutuyla en yakın şekilde eşleşen iki mipmap'i seçer ve her bir karma eşlemeden doku değeri oluşturmak için"Nearest"ölçütünü (pikselin merkezine en yakın doku öğesi) kullanır. Son doku değeri, bu iki değerin ağırlıklı ortalamasıdır."LinearMipmapLinear"Karşılık gelen GL_LINEAR_MIPMAP_LINEAR. Doku haline getirilen pikselin boyutuyla en yakın şekilde eşleşen iki mipmap'i seçer ve her bir mip haritasından bir doku değeri oluşturmak için"Linear"ölçütünü (pikselin en yakınına doğru dört doku öğesinin ağırlıklı ortalaması) kullanır. Son doku değeri, bu iki değerin ağırlıklı ortalamasıdır.
samplers[].params.wrap_sİsteğe bağlı özellik, varsayılan olarak
"Repeat"değerine ayarlanır. Yatay sarmalama davranışını kontrol eder.Değer Açıklama "ClampToBorder"Karşılık gelen GL_CLAMP_TO_BORDER."ClampToEdge"Karşılık gelen GL_CLAMP_TO_BORDER."MirroredRepeat"Karşılık gelen GL_MIRRORED_REPEAT."MirrorClampToEdge"Karşılık gelen GL_MIRROR_CLAMP_TO_EDGE."Repeat"Karşılık gelen GL_REPEAT.
samplers[].params.wrap_tİsteğe bağlı özellik, varsayılan olarak
"Repeat"değerine ayarlanır. Dikey sarmalama davranışını kontrol eder.Değer Açıklama "ClampToBorder"Karşılık gelen GL_CLAMP_TO_BORDER."ClampToEdge"Karşılık gelen GL_CLAMP_TO_BORDER."MirroredRepeat"Karşılık gelen GL_MIRRORED_REPEAT."MirrorClampToEdge"Karşılık gelen GL_MIRROR_CLAMP_TO_EDGE."Repeat"Karşılık gelen GL_REPEAT.
Varsayılan materyaller için parametreler
Sceneform üç varsayılan malzeme tanımı sağlar: OBJ öğeleri için bir tane, {8/} öğeleri için bir tane ve glTF öğeleri için bir tane.
Bu bölümde, her bir varsayılan malzeme tanımı tarafından desteklenen malzeme parametreleri listelenmektedir.
obj_material.sfm
| Parametre | Değer | Açıklama |
|---|---|---|
baseColor
|
<sampler_name>
|
Örnekleyiciden alınan değer, çarpım yapılan rengin çarpımıyla baseColor hesaplanır. |
null
|
baseColor değerini interpolasyon rengi olarak, beyaz olmayan bir renk varsa beyaz olarak hesaplayın. |
|
baseColorTint
|
<vec4>
|
[r, b,
g, a] olarak belirtilen hesaplanan baseColor değerine bir ton uygular. |
metallic
|
<float_value>
|
Malzemenin metalikliğini kontrol eder. Metalik olmayan malzeme için 0.0 değerini kullanın.Metalik malzeme için 1.0 kullanın. |
roughness
|
<float_value>
|
Malzemenin pürüzlüğünü kontrol eder. Parlak malzeme için düşük değerler kullanın ( 0.0, en iyi aynadır).Dağınık malzeme için yüksek değerler kullanın ( 1.0 parlak olmayan malzemedir). |
opacity |
null |
Tamamen opak. |
<float_value>
|
Şeffaflık etkinleştirildi.1.0 tamamen opak.0.0 tamamen şeffaf. |
fbx_material.sfm
| Parametre | Değer | Açıklama |
|---|---|---|
baseColor
|
<vec4>
|
baseColorMap sonucundaki tonlama faktörü. [r, g, b,
a] olarak belirtilir. |
baseColorMap
|
<sampler_name>
|
Sonuç, baseColorMap örneğinin değeridir. |
null |
Beyaza döner. | |
normalMap
|
<sampler_name>
|
Örnek sonucu, ışıklandırma hesaplamalarında kullanılan tanjant normal alanı olarak yorumlar. |
null
|
Tanjant alanı normal olarak sabit bir [0, 0, 1] kullanın. |
|
metallic
|
<float_value>
|
Materyalin metaliliğini kontrol etmek için metallicMap ölçeklenir.Metalik olmayan malzemeler için 0.0 kullanınMetalik malzeme için 1.0 kullanın. |
metallicMap
|
<sampler_name>
|
Örnekleyicideki kırmızı kanal değerini metallicMap değerimiz olarak kullanın. |
null
|
metallic olarak ölçeklenecek sabit bir 1.0 kullanın. |
|
roughness
|
<float_value>
|
Malzemenin pürüzlerini kontrol etmek için roughnessMap ölçekler.Parlak malzeme için düşük pürüzlülük kullanın. Difüzyonlu malzemeler için yüksek pürüzlülük kullanın. |
roughnessMap
|
<sampler_name>
|
Örnekleyicideki kırmızı kanal değerini roughnessMap değerimiz olarak kullanın. |
null
|
roughness olarak ölçeklenecek sabit bir 1.0 kullanın. |
|
reflectance
|
<float_value>
|
Bir malzemenin yansımasını kontrol eder.0.5 varsayılan değeri, olası tüm malzemeleri kapsar. |
opacity
|
null
|
Açık opaklık kontrolü yoktur. Kaynak verilerde opak bir harita belirtildiyse malzeme şeffaf harmanlama ile oluşturulur. |
gltf_material.sfm
| Parametre | Değer | Açıklama |
|---|---|---|
baseColorFactor
|
<vec4>
|
[r, g, b,
a] sonucu olarak belirtilen baseColor sonucuna ait bir tonlama faktörü. |
normal
|
<sampler_name>
|
Örnek sonucu, aydınlatma hesaplamalarında kullanılan tanjant alanı normal olarak yorumlar. |
null
|
Tanjant alanı normal olarak sabit bir [0, 0, 1] kullanın. |
|
metallicFactor
|
<float_value>
|
Materyali metal metaliliğini kontrol etmek için metallicRoughness ölçekler.Metalik olmayan malzemeler için 0.0 kullanın.Metalik malzeme için 1.0 kullanın. |
roughnessFactor
|
<float_value>
|
Malzemenin pürüzlerini kontrol etmek için metallicRoughness ölçekler.Parlak malzeme için düşük pürüzlülük kullanın. Difüzyonlu malzeme için yüksek pürüzlülük kullanın. |
metallicRoughness
|
<sampler_name>
|
Pürüzlülük için örnekleyicinin yeşil kanalını (roughnessFactor oranında ölçeklendirilir) kullanın.Metalik örnekleyicideki mavi kanalı kullanın ( metallicFactor oranında ölçeklendirilir). |
null
|
metallicFactor ve roughnessFactor kullanın. |
|
occlusion
|
<sampler_name>
|
Ortam kapama için örnekleyicideki kırmızı kanalı kullanın. |
null
|
metallicRoughness dokusu varsa ortam kapamayı artırmak için kırmızı kanalı kullanın. |
|
emissiveFactor
|
<float_value>
|
Materyali, emisyonu kontrol etmek için emissive ölçeklendirir.Kendi ışığını üretmeyen malzemeler için 0.0 kullanın. |
emissive
|
<sampler_name>
|
Yayıcı değerimiz olarak örnekleyicinin rengini kullanın. |
null |
Emisyon yok. | |
reflectance
|
<float_value>
|
Bir malzemenin yansımasını kontrol eder.0.5 örneğinin varsayılan değeri, mümkün olan tüm malzemeleri kapsar. |
Kaynak verilerde alfa kesimi belirtildiyse malzeme maskeli harmanlamayla oluşturulur. Kaynak içerikte harmanlama etkinleştirilmişse şeffaflık etkinleştirilir.
Dokuları değiştirme veya ekleme
samplers bloğu, malzemeleriniz için hangi dokuların kullanılabileceğini tanımlar. Kaynak öğeden gelen örnekleyici kayıtları, pipeline_name öğesini bildirir. Bu sayede kayıtları kaynak öğedeki orijinal resim yoluna göre benzersiz şekilde tanımlarlar. file alanı, app/ göreli dosya yolu içerecek şekilde değiştirilebilir. Örneğin, kod:
{
file: "sampledata/models/textures/dandy_andy.png",
name: "andy",
pipeline_name: "andy.png",
},
kaynak öğelerde andy.png olarak adlandırılan kaynak dokuyu, dosyanın içeriğiyle değiştirir../sampledata/models/textures/dandy_andy.png
Kaynak öğede tamamen veya kısmen bildirilen dokular, öğeye otomatik olarak aktarılamayabilir. Bu durumda, SFA'ya eklenebilir. Özellik listesinde TexCoord bulunan tüm modellere doku eklemek mümkündür. Kullanıcı, yalnızca otomatik olarak içe aktarılan örnekleyiciler için geçerli olan pipeline_name yerine injections bloku belirtir.
Doku içermeyen, TexCoord özelliğine sahip bir GCDS örneği düşünün. Proje klasörünüze bir resim dosyası ekleyebilir ve bu dosyayı yeni bir örnek blokuna bağlayabilirsiniz. Daha sonra, enjeksiyonlarda resmin aşağıdaki kodda "Normal" olarak belirtildiği belirtilir:
{
file: "sampledata/models/cragly_normal.png",
name: "bumps",
injections: [
{usage: "Normal",},
],
},
Bu noktada doku, malzemelerinize alınabilir. Göstermek için, normalMap parametresi için örnekleyicinin kullanıldığından emin olun. Aksi takdirde, örnekleyici kullanılmamış olur ve toplanır. Örnekleyici blokumuzdaki bumps adı için bu, malzeme blokumuzun aşağıdaki koda sahip olması gerektiği anlamına gelir:
{
normalMap: 'bumps',
},
Enjeksiyon blokunun kullanılabilir kullanımları BaseColor,
Metallic,Normal,Emissive,
Roughness ve Occlusion'dir.