3D एसेट को इंपोर्ट करके उनकी झलक देखें

3D मॉडल को इंपोर्ट करने, उन्हें सीनफ़ॉर्म फ़ॉर्मैट में बदलने, और Android Studio में उनकी झलक देखने का तरीका जानें.

नई 3D एसेट इंपोर्ट करें

विज़ुअल फ़ॉर्म में 3D एसेट का इस्तेमाल इन फ़ॉर्मैट में किया जा सकता है:

  • ओबीजे
  • glTF (ऐनिमेशन काम नहीं करते)
  • FBX, ऐनिमेशन के साथ या उसके बिना.

नया 3D एसेट इंपोर्ट करने के लिए, यह तरीका अपनाएं:

  1. पुष्टि करें कि आपके प्रोजेक्ट के app फ़ोल्डर में, sampledata फ़ोल्डर है.

    फ़ोल्डर बनाने के लिए, प्रोजेक्ट विंडो में app फ़ोल्डर पर दायां क्लिक करें. इसके बाद, नया > डेटा की सैंपल डायरेक्ट्री चुनें.

    sampledata फ़ोल्डर आपके Android Studio प्रोजेक्ट का हिस्सा है, लेकिन इसके कॉन्टेंट को आपके APK में शामिल नहीं किया जाएगा.

  2. अपनी 3D मॉडल सोर्स एसेट फ़ाइल (*.obj, *.fbx या *.gltf) और इसकी सभी डिपेंडेंसी (*.mtl, *.bin, *.png, *.jpg वगैरह) को sampledata फ़ोल्डर में कॉपी करें.

    इन स्रोत फ़ाइलों को अपने प्रोजेक्ट के assets या res फ़ोल्डर में कॉपी न करें, इसलिए यह सुविधा आपके APK में बेवजह शामिल हो जाएगी.

  3. इंपोर्ट की प्रोसेस शुरू करने के लिए, 3D मॉडल की सोर्स एसेट पर दायां क्लिक करें और विज़ुअल फ़ॉर्म एसेट इंपोर्ट करें चुनें.

    वैल्यू का इस्तेमाल, ऐप्लिकेशन's build.gradle और *.sfa और *.sfb फ़ाइलों में किए जाने वाले इनपुट के लिए sceneform.asset() एंट्री से किया जाता है.

    अगर आप पहली बार मॉडल इंपोर्ट कर रहे हैं, तो डिफ़ॉल्ट वैल्यू का इस्तेमाल करें.

    फ़ील्ड जानकारी
    सोर्स एसेट पाथ इंपोर्ट करने के लिए, OBJ, FBX या glTF 3D मॉडल की एसेट का नाम.
    मटीरियल पाथ default से, Docs में पहले से मौजूद डिफ़ॉल्ट कॉन्टेंट या कस्टम कॉन्टेंट *.mat फ़ाइल के पाथ का इस्तेमाल करने की जानकारी मिलती है.
    .sfa आउटपुट पाथ डिफ़ॉल्ट का इस्तेमाल करें या sampledata फ़ोल्डर में कोई दूसरा पाथ डालें.

    अगर .sfa फ़ाइल मौजूद नहीं है, तो यह जनरेट होती है. इंपोर्ट की प्रोसेस के कुछ पहलुओं को कंट्रोल करने के लिए, इसमें बदलाव किया जा सकता है.

    इससे यह पक्का होता है कि *.sfa मुफ़्त में आपके APK में शामिल नहीं है.

    .sfb आउटपुट पाथ डिफ़ॉल्ट तौर पर, src/main/assets/ फ़ोल्डर का इस्तेमाल किया जाता है. इससे, आर्बिट्रेरी एसेट के फ़ाइल नाम इस्तेमाल किए जा सकते हैं.

    अगर फ़ाइल का नाम (फ़ाइल एक्सटेंशन के बिना) एक मान्य रिसॉर्स आइडेंटिफ़ायर (जैसे, R.raw.filename) है, तो आपके पास src/main/res/raw/ फ़ोल्डर का इस्तेमाल करने का विकल्प भी है.

    अपने ऐप्लिकेशन में assets/ और res/ फ़ोल्डर का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Android's ऐप्लिकेशन के संसाधनों की खास जानकारी देखें.

    ऐनिमेशन फ़ाइलें

    अगर आप *.fbx ऐनिमेशन फ़ाइलें इंपोर्ट कर रहे हैं, तो प्लस के निशान (+) पर क्लिक करें और बाकी फ़ाइलें एक-एक करके जोड़ें.

  4. इंपोर्ट करने के लिए पूरा करें पर क्लिक करें.

आपकी एसेट को इंपोर्ट करने के लिए, प्लग इन ये काम करता है:

  1. अगर आपके प्रोजेक्ट's build.gradle में कोई मौजूद नहीं है, तो Secureform gradle प्लग इन जोड़ता है:

    dependencies {
        …
        classpath 'com.google.ar.sceneform:plugin:1.15.0'
    }
    
  2. आपकी app's build.gradle फ़ाइल को अपडेट करता है. इसमें apply plugin लाइन शामिल होती है. साथ ही, इंपोर्ट की गई नई एसेट के लिए sceneform.asset() एंट्री होती है:

    apply plugin: 'com.google.ar.sceneform.plugin'
    
    sceneform.asset('sampledata/models/andy.obj', // 'Source Asset Path' specified during import.
            'default',                            // 'Material Path' specified during import.
            'sampledata/models/andy.sfa',         // '.sfa Output Path' specified during import.
            'src/main/res/raw/andy')              // '.sfb Output Path' specified during import.
    

    ऐप्लिकेशन और #39; build.gradle में ये नई एंट्री, दो ग्रेडल टास्क बनाती हैं:

    • अगर createAsset-<asset-name> अभी तक मौजूद नहीं है, तो एक Superform एसेट डेफ़िनिशन (*.sfa) फ़ाइल बनाई जाती है.

      इस टास्क से, मौजूदा *.sfa फ़ाइल ओवरराइट नहीं होगी. इसका मतलब है कि इंपोर्ट के बाद, SFA फ़ाइल में किया गया कोई भी बदलाव ओवरराइट नहीं होगा.

      *.sfa फ़ाइल एक टेक्स्ट फ़ाइल होती है. इसमें एसेट की इंपोर्ट सेटिंग की पूरी जानकारी होती है, जिसे लोग पढ़ सकते हैं. यह आपके सोर्स एसेट में मौजूद मॉडल और टेक्स्चर को रेफ़रंस के तौर पर इस्तेमाल करता है. साथ ही, यह सीनफ़ॉर्म की फ़िज़िकल तौर पर मौजूद सामग्री के लिए, मटीरियल पैरामीटर देकर जानकारी भी देता है.

    • compileAsset-<asset-name>, *.sfa फ़ाइल को सीनफ़ॉर्म बाइनरी एसेट (*.sfb) फ़ाइल में कंपाइल करता है.

      यह *.sfb फ़ाइल, आपके ऐप्लिकेशन के APK में पहले से मौजूद होती है. साथ ही, रनटाइम के दौरान रेंडर करने लायक बनाने के लिए लोड होती है.

    ज़्यादा जानकारी के लिए, सीनफ़ॉर्म ग्रेडल प्लग इन का रेफ़रंस देखें.

  3. टेक्स्ट विंडो में *.sfa और व्यूअर विंडो में *.sfb खोलता है.

पहले इंपोर्ट की गई 3D एसेट को अपडेट करना

जब आप पहले इंपोर्ट की गई OBJ, FBX या glTF मॉडल की सोर्स एसेट फ़ाइल (*.obj, *.fbx या *.gltf) में बदलाव करते हैं, तो आपके app's में इससे जुड़ी sceneform.asset() एंट्री, build.gradle की मदद से मौजूदा *.sfa पैरामीटर के आधार पर *.sfb की अपडेट की गई फ़ाइल अपने-आप जनरेट करती है.

पहले से इंपोर्ट की गई किसी एसेट की पैरामीटर वैल्यू में बदलाव करना:

  • *.sfa टेक्स्ट फ़ाइल में बदलाव करने के लिए, गाइड के तौर पर एसएफ़ए फ़ाइल फ़ॉर्मैट का इस्तेमाल करें.
  • बदलाव सेव करें. इससे एसेट को कंपाइल किया जाता है और *.sfb फ़ाइल अपडेट की जाती है.
  • एसेट की दर्शक विंडो खोलने के लिए, *.sfb फ़ाइल पर दो बार क्लिक करके अपडेट की गई एसेट की झलक देखें.

अगर आप पहले इंपोर्ट की गई ऐसी एसेट को अपडेट कर रहे हैं जिसमें ऐनिमेशन डेटा शामिल है, तो इंपोर्ट किए गए डायलॉग के ऐनिमेशन फ़ाइलें सेक्शन में प्लस (+) के निशान का इस्तेमाल करके, अपडेट की गई हर *.fbx फ़ाइल को अलग-अलग इंपोर्ट करें.

Gradle एसेट की परिभाषाएं

इंपोर्ट करने की प्रोसेस के तहत, build.gradle फ़ाइल के आखिर में *.fbx ऐनिमेशन की कोई भी फ़ाइल जुड़ जाती है.

sceneform.asset('sampledata/models/andy_dance.fbx',
'default',
'sampledata/models/andy_dance.sfa',
'src/main/res/raw/andy_dance',
['sampledata/models/andy_wave_r.fbx',
'sampledata/models/andy_wave_l.fbx'])

रेंडर करने लायक बनाएं

अगर एसेट को *.sfb फ़ॉर्मैट में कंपाइल किया जाता है, तो ModelRenderable बनाया जा सकता है. साथ ही, सीन में किसी नोड के साथ इस तरह जोड़ा जा सकता है:

ModelRenderable.builder()
    // To load as an asset from the 'assets' folder ('src/main/assets/andy.sfb'):
    .setSource(this, Uri.parse("andy.sfb"))

    // Instead, load as a resource from the 'res/raw' folder ('src/main/res/raw/andy.sfb'):
    //.setSource(this, R.raw.andy)

    .build()
    .thenAccept(renderable -> andyRenderable = renderable)
    .exceptionally(
        throwable -> {
          Log.e(TAG, "Unable to load Renderable.", throwable);
          return null;
    });

कस्टम सामग्री का इस्तेमाल करना

प्राकृतिक रूप में मौजूद डिफ़ॉल्ट सामग्री से डेवलपर के लिए शानदार नतीजे पाना आसान हो जाता है. कस्टम कॉन्टेंट का इस्तेमाल करके भी अपनी एसेट को पसंद के मुताबिक बनाया जा सकता है.

अपनी एसेट में कस्टम कॉन्टेंट असाइन करने के लिए:

  1. एक कस्टम सामग्री परिभाषा (*.mat) फ़ाइल बनाएं, जिसमें गाइड के रूप में [कस्टम मटीरियल रेफ़रंस](/scineform/develop/custom-material) का इस्तेमाल किया जाए.

  2. एसेट पर कस्टम कॉन्टेंट लागू करें:

    नई एसेट इंपोर्ट करते समय:

    पहले इंपोर्ट की गई एसेट अपडेट करने के लिए:

    • अगर *.sfa के कॉन्टेंट को पसंद के मुताबिक नहीं बनाया गया है, तो मौजूदा *.sfa और *.sfb फ़ाइलों को मिटाएं. इसके बाद, ऐप्लिकेशन और sceneform.asset() में जाकर, sceneform.asset() की एंट्री मिटाएं. इसके बाद, एसेट को फिर से इंपोर्ट करें. इससे यह पक्का होता है कि दोबारा जनरेट किए गए *.sfa एट्रिब्यूट और सामग्री पैरामीटर, आपकी कस्टम सामग्री के साथ काम करने वाले पैरामीटर से मेल खाएंगे.

    • आपने जो *.sfa कस्टमाइज़ेशन किए हैं उन्हें सुरक्षित रखने के लिए, *.sfa फ़ाइल खोलें और source एट्रिब्यूट को, अपने कस्टम मटीरियल *.mat फ़ाइल के पाथ में बदलें. इसके बाद, *.sfa एट्रिब्यूट और कॉन्टेंट पैरामीटर को मैन्युअल तरीके से अडजस्ट करें, ताकि वे आपकी कस्टम सामग्री से मेल खा सकें.