ไฟล์ Sceneform Asset Definition (*.sfa
) คือคําอธิบายเนื้อหาที่ไบนารีของ Sceneform (*.sfb
) อ่านได้ ซึ่งชี้ไปที่โมเดล คําจํากัดความ และพื้นผิวของชิ้นงานต้นฉบับ รวมถึงมีพารามิเตอร์เนื้อหาสําหรับวัสดุที่อิงกับ Sceneform จริง
ไฟล์นี้สร้างขึ้นโดยอัตโนมัติโดยปลั๊กอิน Sceneform Android
Studio เป็นครั้งแรก แต่คุณสามารถปรับแต่งแอตทริบิวต์เพื่อเปลี่ยนรูปลักษณ์ของเนื้อหาได้ ข้อมูลอ้างอิงนี้อธิบายแอตทริบิวต์ที่คุณกําหนดค่าให้แก้ไขรูปลักษณ์ของเนื้อหาได้ แอตทริบิวต์ที่ไม่บังคับที่ไม่อยู่ใน sfa
จะมีค่าเริ่มต้น ไวยากรณ์ของ sfa
คือ jsonnet ซึ่งเป็นส่วนขยายของ JSON
ไวยากรณ์
{ 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
ซึ่งเป็นพิกัดรังสียูวีแรก
model.file
- แอตทริบิวต์ที่จําเป็นมีเส้นทางระบบไฟล์ไปยังไฟล์ชิ้นงานต้นทาง
รูปแบบที่รองรับในขณะนี้ ได้แก่
*.fbx
,*.obj
,*.gltf
,*.glb
model.scale
แอตทริบิวต์ที่ไม่บังคับ ค่าเริ่มต้นคือ
1.0
ควบคุมขนาดของโมเดลที่ส่งออก เทียบกับเนื้อหาแหล่งที่มา ขนาด2.0
จะทําให้เนื้อหามีขนาดใหญ่ขึ้น 2 เท่าค่าตําแหน่งของฉากจะระบุเป็นหน่วยเมตร ระบบคํานวณระยะเวลาการปรับขนาดโดยอัตโนมัติระหว่างการนําเข้าเริ่มต้นเพื่อให้แกนที่ใหญ่ที่สุดไม่น้อยกว่า 5 ซม. และแกนขนาดเล็กที่สุดไม่เกิน 1 ม. เพื่อรองรับความแตกต่างของหน่วยมาตรฐาน ทั้งนี้เพื่อให้การนําเข้าครั้งแรก ไม่ใช่การบังคับใช้ขีดจํากัดเหล่านี้
model.recenter
แอตทริบิวต์ที่ไม่บังคับ ค่าเริ่มต้นคือ
false
ควบคุมการวางตําแหน่ง ของรูปเรขาคณิตที่ส่งออก ค่าที่เป็นไปได้มีดังนี้ค่า คำอธิบาย false
เรขาคณิตจะส่งออกตามที่ได้รับอนุญาตโดยไม่ต้องเปลี่ยน true
จุดศูนย์กลางของรูปเรขาคณิต จะอยู่ในจุดเริ่มต้น "root"
ระบบจะส่งออกรูปเรขาคณิตเพื่อให้จุดศูนย์กลางอยู่ในจุดกําเนิดโดยตรง และปรับในแนวตั้งเพื่อให้จุดยอดต่ําสุดอยู่ในระดับเดียวกับจุดยอด ซึ่งใช้เพื่อให้โมเดลที่ส่งออกซึ่งอยู่ในตําแหน่ง Anchor หรือเครื่องบินจะตั้งอยู่เหนือจุดยึดนี้ {x:float, y:float, z:float}
ระบบจะส่งออกรูปทรงเรขาคณิตเพื่อให้ต้นทางวางอยู่ตามจุดที่ระบุ {x:0, y:0, z:0}
สอดคล้องกับค่าต่ําสุดของกรอบการปรับแนวตามแกนของรูปทรงเรขาคณิต{x:1, y:1, z:1}
สอดคล้องกับจํานวนสูงสุดของกรอบการปรับแนวแกนของ รูปทรงเรขาคณิต}
model.smoothing_angle
- แอตทริบิวต์ที่ไม่บังคับที่ระบุหน่วยเป็นองศา ค่าเริ่มต้นคือ
45
ชิ้นงานแหล่งที่มา ไม่มีค่าปกติต่อจุดยอด (เช่นobj
) จะสร้างค่าปกติต่อจุดยอดมุม โดยใช้ความลื่นไหล เพื่อจํากัดชุดปกติของใบหน้าที่ใช้ในการคํานวณจุดยอดมุมปกติ ขอบในโมเดลที่เกินมุมนี้จะปรากฏ 'ยาก' หรือด้านที่หุ้มขอบ ขอบที่เกินจะแสดงอย่างเรียบเนียน
model.flip_texture_coordinates
- แอตทริบิวต์ที่ไม่บังคับ ค่าเริ่มต้นคือ
false
หากเป็น"จริง"พิกัดแนวตั้งจะกลับกัน ((u, v) -> (u, 1 - v)
) ระหว่างการนําเข้า วิธีนี้ช่วยรองรับความแตกต่างระหว่าง ที่ผ่านมาระหว่าง OpenGL/Direct3D
model.fix_infacing_normals
- แอตทริบิวต์ที่ไม่บังคับ ค่าเริ่มต้นคือ
false
หากเป็น "จริง" การนําเข้าจะพยายามค้นหาและแก้ไขตามปกติที่เผชิญอยู่ (ค่าปกติชี้ไปยัง 'ใน' พื้นผิว ซึ่งตรงข้ามกับ ' จาก' พื้นผิว
samplers[].params.usage_type
- กําหนดวิธีที่รันไทม์ตีความข้อมูลรูปภาพที่เข้ารหัส ใช้
"Color"
สําหรับพื้นผิว รูปภาพ RGB ใช้"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
เลือกแผนผังขนาดเล็กที่ใกล้เคียงกันที่สุดกับขนาดของพิกเซลที่มีการกําหนดพื้นผิว และใช้เกณฑ์"Nearest"
(องค์ประกอบพื้นผิวที่อยู่ใกล้จุดกึ่งกลางของพิกเซลมากที่สุด) เพื่อสร้างค่าพื้นผิว"LinearMipmapNearest"
สอดคล้องกับ GL_NEAREST_MIPMAP_LINEAR
เลือก Mipmap 2 รายการที่ตรงกับขนาดของพิกเซลที่มีพื้นผิวมากที่สุด และใช้เกณฑ์"Nearest"
(องค์ประกอบของพื้นผิวที่อยู่ใกล้กับจุดศูนย์กลางของพิกเซลมากที่สุด) เพื่อสร้างค่าพื้นผิวจาก Mipmap แต่ละรายการ ค่าพื้นผิวสุดท้ายคือค่าเฉลี่ยถ่วงน้ําหนักของ 2 ค่านั้น"LinearMipmapLinear"
สอดคล้องกับ GL_LINEAR_MIPMAP_LINEAR
เลือก Mipmap 2 รายการที่ตรงกับขนาดของพิกเซลที่มีการกําหนดพื้นผิวมากที่สุด และใช้เกณฑ์"Linear"
(ค่าเฉลี่ยแบบถ่วงน้ําหนักที่ระบุองค์ประกอบของพื้นผิว 4 รายการที่อยู่ใกล้กับจุดกึ่งกลางของพิกเซลมากที่สุด) เพื่อสร้างค่าพื้นผิวจาก Mipmap แต่ละรายการ ค่าพื้นผิวสุดท้ายคือค่าเฉลี่ยถ่วงน้ําหนักของ 2 ค่าเหล่านั้น
samplers[].params.wrap_s
แอตทริบิวต์ที่ไม่บังคับ ค่าเริ่มต้นคือ
"Repeat"
ควบคุมลักษณะการ Wrap แนวนอนค่า คำอธิบาย "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"
ควบคุมลักษณะการ Wrap แนวตั้งค่า คำอธิบาย "ClampToBorder"
สอดคล้องกับ GL_CLAMP_TO_BORDER
"ClampToEdge"
สอดคล้องกับ GL_CLAMP_TO_BORDER
"MirroredRepeat"
สอดคล้องกับ GL_MIRRORED_REPEAT
"MirrorClampToEdge"
สอดคล้องกับ GL_MIRROR_CLAMP_TO_EDGE
"Repeat"
สอดคล้องกับ GL_REPEAT
พารามิเตอร์สําหรับวัสดุเริ่มต้น
Sceneform มีการให้คําจํากัดความสื่อเริ่มต้น 3 แบบ โดยแบบแรกสําหรับเนื้อหา OBJ, แบบหนึ่งสําหรับเนื้อหา FBX และอีกแบบหนึ่งสําหรับชิ้นงาน 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>
|
Result คือค่าตัวอย่างของ 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>
|
แปลความหมายผลลัพธ์ตัวอย่างเป็นการเว้นวรรคที่ปกติ (Tangent-space) ใช้ในการคํานวณแสง |
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
ในรายการแอตทริบิวต์ ผู้ใช้จะระบุบล็อก injections
แทน pipeline_name
ซึ่งใช้กับตัวอย่างที่นําเข้าโดยอัตโนมัติเท่านั้น
ลองดูตัวอย่างของ FBX ที่มีแอตทริบิวต์ TexCoord
แต่ไม่มีพื้นผิว คุณเพิ่มไฟล์ภาพในโฟลเดอร์โครงการแล้วลิงก์กับบล็อกตัวอย่างใหม่ได้ จากนั้นการแทรกจะประกาศการใช้งานในชื่อ "Normal"
ในโค้ดต่อไปนี้
{ file: "sampledata/models/cragly_normal.png", name: "bumps", injections: [ {usage: "Normal",}, ], },
ในขั้นตอนนี้ พื้นผิวจะใช้กับวัสดุของคุณได้ ในการแสดงตัวอย่าง
ให้ตรวจสอบว่าคําขอเนื้อหาตัวอย่างสําหรับพารามิเตอร์ normalMap
ตรงกัน (มิเช่นนั้น ตัวอย่างดังกล่าวจะปรากฏว่าไม่ได้ใช้งานและจะได้รับการแก้ไข) เมื่อพิจารณาชื่อ bumps
ในตัวอย่างบล็อกของเราแล้ว บล็อกเนื้อหาของเราควรมีโค้ดต่อไปนี้
{ normalMap: 'bumps', },
การใช้งานที่พร้อมใช้งานสําหรับการบล็อกการแทรกคือ BaseColor
,
Metallic
,Normal
,Emissive
,
Roughness
และ Occlusion