सीनफ़ॉर्म एसेट फ़ाइल का रेफ़रंस

सीनफ़ॉर्म एसेट डेफ़िनिशन (*.sfa) फ़ाइल, सीनफ़ॉर्म बाइनरी एसेट (*.sfb) का ऐसा ब्यौरा है जिसे लोग आसानी से पढ़ सकते हैं. यह आपके सोर्स एसेट के मॉडल, सामग्री की परिभाषाओं, और बनावट के बारे में बताता है. साथ ही, यह सीनफ़ॉर्म की फ़िज़िकल तौर पर मौजूद सामग्री के लिए, सामग्री से जुड़े पैरामीटर भी उपलब्ध कराता है.

सीनफ़ॉर्म 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 के स्केल से, एसेट दो बार बड़ी हो जाएगी.

सीनफ़ॉर्म की जगह की वैल्यू, मीटर में दी गई है. स्टैंडर्ड यूनिट में अंतर रखने के लिए, शुरुआती शब्द को अपने-आप कैलकुलेट कर दिया जाता है, ताकि सबसे बड़ा ऐक्सिस 5 सेंटीमीटर से कम और सबसे छोटा ऐक्सिस एक मीटर से बड़ा न हो. ऐसा सिर्फ़ इंपोर्ट करने के शुरुआती अनुभव के लिए किया जाता है; ये सीमाएं लागू नहीं होती हैं.

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) उनमें वर्टीकल नॉर्मल का इस्तेमाल करके, स्मूथ नॉर्मल जनरेट किए जाएंगे. इससे वर्टेक्स नॉर्मल के कंप्यूटिंग में इस्तेमाल किए जाने वाले फ़ेस नॉर्मल के सेट को सीमित किया जा सकेगा. मॉडल के वे किनारे जो इस कोण से ऊपर होते हैं, वे दिखाई देंगे #39;हार्ड' या संग्रहित किए गए, से ज़्यादा के किनारे दिखाई नहीं देंगे.
model.flip_texture_coordinates
ज़रूरी नहीं है, तो डिफ़ॉल्ट रूप से false का इस्तेमाल करें. अगर सही है, तो इंपोर्ट के दौरान वर्टिकल कोऑर्डिनेट उलटा ((u, v) -> (u, 1 - v)) होता है. इससे OpenGL/Direct3D के पुराने अंतर को समझने में मदद मिलती है.
model.fix_infacing_normals
ज़रूरी नहीं है, तो डिफ़ॉल्ट रूप से false का इस्तेमाल करें. अगर सही है, तो इंपोर्ट, सामान्य एलिमेंट को पहचानने और उसे सही करने की कोशिश करेगा (आम तौर पर, यह 'in' को दिखाता है).
samplers[].params.usage_type
यह तय करता है कि रनटाइम, एन्कोड किए गए इमेज डेटा को कैसे समझता है. एसआरजीबी इमेज के लिए "Color" का इस्तेमाल करें. "Data" या "Normal" का इस्तेमाल करके इमेज के कॉन्टेंट को ऐसे मानें कि वे लीनियर स्पेस में हों. डिफ़ॉल्ट वैल्यू "Color" है.
samplers[].params.mag_filter

जब कम किए गए फ़िल्टर का सैंपल किया गया हो, तो यह बताता है कि सैंपल किया गया मिपमैप, ज्यामिति के नमूने के साइज़ के पिक्सल से बड़ा है या नहीं. डिफ़ॉल्ट वैल्यू "Linear" है. ये वैल्यू हो सकती हैं:

वैल्यू जानकारी
"Nearest" GL_NEAREST से मेल खाता है. यह टेक्स्ट के एलिमेंट के मान को (मैनहैटन की दूरी पर) पास में रखा जाता है.
"Linear" GL_LINEAR से मेल खाता है. ऐसे चार टेक्सचर एलिमेंट के औसत साइज़ का औसत दिखाता है जो पिक्सल के बीच वाले हिस्से के सबसे करीब होते हैं. इनमें टेक्सच wrap_s और स्ट्रक्चर्ड wrap_t के मान के आधार पर, बॉर्डर की बनावट के एलिमेंट शामिल किए जा सकते हैं. साथ ही, इसमें सटीक मैपिंग भी की जा सकती है.
samplers[].params.min_filter

जब कम किए गए फ़िल्टर का सैंपल किया गया हो, तो यह बताता है कि सैंपल किया गया मिपमैप, ज्यामिति के नमूने के साइज़ के पिक्सल से बड़ा है या नहीं. डिफ़ॉल्ट वैल्यू "NearestMipmapLinear" है. ये वैल्यू हो सकती हैं:

वैल्यू जानकारी
"Nearest" GL_NEAREST से मेल खाता है. बनावट वाले एलिमेंट की वैल्यू दिखाता है, जो टेक्सटाइल के बीच वाले हिस्से के पास मौजूद है (मैनहैटन की दूरी पर).
"Linear" GL_LINEAR से मेल खाता है. चार टेक्स्चर एलिमेंट का औसत निकाला जाता है, जो पिक्सल किए जाने वाले पिक्सल के केंद्र के सबसे करीब होते हैं. इनमें टेक्सच wrap_s और बनावट wrap_t के मान और सटीक मैपिंग पर निर्भर करने वाले बॉर्डर एलिमेंट शामिल हो सकते हैं.
"NearestMipmapNearest" GL_NEAREST_MIPMAP_NEAREST से मेल खाता है. वह मिपमैप चुनता है जो बनावट के आकार वाले पिक्सल के साइज़ से सबसे ज़्यादा मेल खाता है. साथ ही, आप स्ट्रक्चर की वैल्यू बनाने के लिए, "Nearest" मानदंड (Pixel के केंद्र के सबसे पास की बनावट के एलिमेंट) का इस्तेमाल करते हैं.
"LinearMipmapNearest" GL_NEAREST_MIPMAP_LINEAR से मेल खाता है. दो माइपमैप चुनता है, जो टेक्सचर किए जा रहे पिक्सल के साइज़ से सबसे ज़्यादा मेल खाते हैं और हर मिपमैप से टेक्सटाइल वैल्यू बनाने के लिए "Nearest" पिक्सल के बीच की बनावट वाले एलिमेंट का इस्तेमाल करते हैं. फ़ाइनल टेक्सचर वैल्यू, उन दो वैल्यू का औसत होती है.
"LinearMipmapLinear" GL_LINEAR_MIPMAP_LINEAR से मेल खाता है. दो मिपमैप को चुनता है, जो टेक्सचर किए जा रहे पिक्सल के साइज़ से सबसे ज़्यादा मेल खाता है. साथ ही, हर माइपमैप से टेक्सचर वैल्यू बनाने के लिए, "Linear" मानदंड (4 के एलिमेंट के औसत का औसत) का इस्तेमाल करता है. अंतिम बनावट मान, इन दो मानों का भारित औसत है.
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 से मेल खाता है.

डिफ़ॉल्ट सामग्री के लिए पैरामीटर

सीनफ़ॉर्म में तीन डिफ़ॉल्ट मटीरियल परिभाषाएं दी जाती हैं: एक 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> नतीजा, baseColorMap सैंपलर की वैल्यू है.
null सफ़ेद हो जाता है.
normalMap <sampler_name> सैंपल के नतीजे को टैंजेंट स्पेस के तौर पर देखता है. इसका इस्तेमाल रोशनी के हिसाब से किया जाता है.
null हमारे टैंजेंट स्पेस के तौर पर कॉन्सटेंट [0, 0, 1] का इस्तेमाल करें.
metallic <float_value> सामग्री की मेटालिकता को कंट्रोल करने के लिए, metallicMap स्केल करें.
बिना धातु वाले कॉन्टेंट के लिए, 0.0 का इस्तेमाल करें
सामग्री के लिए 1.0 का इस्तेमाल करें.
metallicMap <sampler_name> metallicMap वैल्यू के तौर पर, सैंपलर से मिली लाल चैनल की वैल्यू का इस्तेमाल करें.
null metallic से मापने के लिए, कॉन्सटेंट 1.0 का इस्तेमाल करें.
roughness <float_value> कॉन्टेंट की खुरदरापन को कंट्रोल करने के लिए, roughnessMap स्केल करता है.
शानदार कॉन्टेंट के लिए कम क्वालिटी का इस्तेमाल करें.
असाइनमेंट के लिए, ज़्यादा भीड़-भाड़ का इस्तेमाल करें.
roughnessMap <sampler_name> roughnessMap वैल्यू के तौर पर, सैंपलर से मिली लाल चैनल की वैल्यू का इस्तेमाल करें.
null roughness से मापने के लिए, कॉन्सटेंट 1.0 का इस्तेमाल करें.
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.

सोर्स एसेट में पूरी तरह या कुछ हद तक तय किए गए टेक्स्चर, एसेट में अपने-आप इंपोर्ट नहीं हो सकते. ऐसे में, उन्हें एसएफ़ए में जोड़ा जा सकता है. एट्रिब्यूट की सूची में मौजूद TexCoord वाले मॉडल में टेक्स्चर जोड़े जा सकते हैं. pipeline_name के बजाय, जो सिर्फ़ अपने-आप इंपोर्ट किए गए सैंपल पर लागू होता है, उपयोगकर्ता injections ब्लॉक तय करता है.

एक FBX का उदाहरण देखें, जिसमें TexCoord एट्रिब्यूट हों, लेकिन कोई बनावट न हो. अपने प्रोजेक्ट फ़ोल्डर में इमेज फ़ाइल को जोड़ा जा सकता है और उसे एक नए सैंपल ब्लॉक में जोड़ा जा सकता है. इसके बाद, इंजेक्शन में यह बताया जा सकता है कि उसे "Normal" के तौर पर इस्तेमाल किया गया है, जैसा कि इस कोड में किया गया है:

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

इस समय, आपकी सामग्री के लिए बनावट उपलब्ध है. इसे दिखाने के लिए, पक्का करें कि normalMap पैरामीटर के लिए सैंपलर उस अनुरोध का अनुरोध करता है जिसके लिए सैंपलर काम नहीं करता है. ऐसा न करने पर, सैंपलर का इस्तेमाल नहीं होगा और उसे हटा दिया जाएगा. हमारे सैंपलर ब्लॉक में bumps नाम दिया गया है. इसका मतलब है कि हमारे मटीरियल ब्लॉक में यह कोड होना चाहिए:

    {
      normalMap: 'bumps',
    },

इंजेक्शन ब्लॉक के लिए BaseColor, Metallic,Normal,Emissive, Roughness, और Occlusion का इस्तेमाल किया जाता है.