การอ้างอิงไฟล์เนื้อหาของฉาก

ไฟล์ 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) ดูรายการพารามิเตอร์ที่รองรับดังนี้

สําหรับสื่อที่กําหนดเอง (*.mat) รายการพารามิเตอร์ที่รองรับจะระบุไว้ในไฟล์ *.mat ดังนี้

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) จะสร้างค่าปกติต่อจุดยอดมุม โดยใช้ความลื่นไหล เพื่อจํากัดชุดปกติของใบหน้าที่ใช้ในการคํานวณจุดยอดมุมปกติ ขอบในโมเดลที่เกินมุมนี้จะปรากฏ 'ยาก&#39 หรือด้านที่หุ้มขอบ ขอบที่เกินจะแสดงอย่างเรียบเนียน
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