सीनफ़ॉर्म मॉडल के साथ रोशनी का अनुमान लगाना

लाइटिंग एस्टीमेशन एपीआई, अलग-अलग विज़ुअल संकेतों के लिए दी गई इमेज का विश्लेषण करता है और किसी सीन में रोशनी के बारे में ज़्यादा जानकारी देता है. इसके बाद, आप इस जानकारी का इस्तेमाल वर्चुअल ऑब्जेक्ट को रेंडर करने के लिए कर सकते हैं. ऐसा करते समय, उन्हें ऐसी ही स्थितियों में हाइलाइट करें जहां उन्हें रखा गया हो. इससे, उन ऑब्जेक्ट को उपयोगकर्ताओं के अनुभव को बेहतर बनाने और बेहतर अनुभव पाने में मदद मिलती है.

रोशनी से जुड़े संकेत और सिद्धांत

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

रोशनी का अनुमान लगाने की सुविधा ज़्यादातर काम आपके लिए करती है. इसमें ज़्यादा जानकारी वाला डेटा शामिल होता है, जो वर्चुअल ऑब्जेक्ट रेंडर करते समय आपको रोशनी के अलग-अलग संकेतों की नकल करने की सुविधा देता है. ये संकेत शैडो, आस-पास की रोशनी, शेडिंग, खास हाइलाइट, और रिफ़्लेक्शन हैं.

हम इस तरह के विज़ुअल संकेतों के बारे में बता सकते हैं:

  • ऐंबियंट लाइट. आस-पास की रोशनी के दायरे में, आस-पास से आने वाली सभी लाइटें जलती हैं.

  • शैडो. परछाई अक्सर दिशा के बारे में होती हैं और दर्शकों को बताती हैं कि रोशनी के स्रोत कहां से आ रहे हैं.

  • शेडिंग. दी गई इमेज के अलग-अलग हिस्सों में रोशनी एक जैसी होती है. उदाहरण के लिए, एक ही ऑब्जेक्ट के अलग-अलग हिस्से में एक ही सीन में शेडिंग के अलग-अलग लेवल हो सकते हैं, जो दर्शक से मिलते-जुलते ऐंगल और रोशनी के स्रोत से उसकी दूरी पर निर्भर करता है.

  • खास विशेषताएं. ये प्लैटफ़ॉर्म के चमकदार बिट हैं जो सीधे एक रोशनी के स्रोत को दिखाते हैं. किसी ऑब्जेक्ट में हाइलाइट को किसी सीन में दर्शकों की स्थिति के हिसाब से बदला जाता है.

  • रिफ़्लेक्शन. लाइट, सतह पर अलग-अलग तरीके से बाउंस होती है. यह इस बात पर निर्भर करता है कि प्लैटफ़ॉर्म पर स्पेक्लूलर (यानी कि बहुत ज़्यादा परछाई वाली) या डिफ़्यूज़ (रिफ़्लिक नहीं) प्रॉपर्टी है या नहीं. उदाहरण के लिए, धातु से बनी एक गेंद बहुत ही शानदार होती है और वह अपने आस-पास के माहौल को दिखाती है. ज़्यादातर रीयल-टाइम ऑब्जेक्ट में ये प्रॉपर्टी एक-साथ शामिल होती हैं -- स्टफ़-अप बोलिंग बॉल या बहुत ज़्यादा इस्तेमाल किए जाने वाले क्रेडिट कार्ड के बारे में सोचें.

    रिफ़्लेक्टिव प्लैटफ़ॉर्म भी आस-पास के माहौल से रंग लेते हैं. किसी ऑब्जेक्ट का रंग, पर्यावरण के रंग से सीधे तौर पर प्रभावित हो सकता है. उदाहरण के लिए, नीले रंग की चैट वाले सफ़ेद रंग के बॉल का इस्तेमाल नीले रंग में किया जाएगा.

हकीकत बदलने के लिए, लाइटिंग एस्टीमेशन मोड का इस्तेमाल करना

Config.LightEstimationMode एपीआई में ऐसे मोड दिए गए हैं जो आस-पास की रोशनी के हिसाब से रोशनी का अनुमान लगाते हैं.

  • एनवायरमेंटल एचडीआर मोड (ENVIRONMENTAL_HDR)

  • ऐंबियंट इंटेंसिटी मोड (AMBIENT_INTENSITY). यह मोड, किसी इमेज के लिए पिक्सल की औसत चमक और उसकी रोशनी का रंग तय करता है. यह एक असभ्य सेटिंग है, जिसे उपयोग के उदाहरणों के लिए डिज़ाइन किया गया है, जिसमें सटीक रोशनी महत्वपूर्ण नहीं है, जैसे कि बेक की गई रोशनी वाली ऑब्जेक्ट.

  • DISABLED. अगर किसी दिए गए एनवायरमेंट से मैच करने के लिए लाइटिंग किसी सीन या ऑब्जेक्ट के हिसाब से सही नहीं है, तो Config.LightEstimationMode को बंद करें.

ENVIRONMENTAL_HDR मोड का इस्तेमाल किया जा रहा है

ENVIRONMENTAL_HDR मोड, इनपुट कैमरे की इमेज का विश्लेषण करने के लिए मशीन लर्निंग का इस्तेमाल करता है. साथ ही, वर्चुअल ऑब्जेक्ट को रेंडर करने के लिए, एनवायरमेंट की लाइट को सिंथेसाइज़ करता है.

यह मोड, दिशा बताने वाली रोशनी, आस-पास के गोल आकार के हॉर्मोनिक, और एचडीआर क्यूबमैप को जोड़कर, यह बताता है कि वर्चुअल ऑब्जेक्ट किसी दिए गए सीन का हिस्सा हैं:

  • निर्देशक रोशनी में किसी इमेज के लिए रोशनी के साफ़ स्रोत का विश्लेषण किया जाता है. इस तरह से लाइट लगाने की सुविधा, सही तरीके से पोज़िशनल हाइलाइट करती है. साथ ही, ऑब्जेक्ट को शैडो करने वाली उन चीज़ों को दिशा में कास्ट करती है जो दिखने वाली असल ऑब्जेक्ट से मेल खाती हैं.

  • ऐंबियंट स्फ़ेरिकल हार्मनिक्स, किसी सीन में चारों तरफ़ से आ रही रोशनी को दिखाता है. रेंडरिंग के दौरान, इस जानकारी का इस्तेमाल वर्चुअल ऑब्जेक्ट की परिभाषा बताने के लिए, हल्के-फुल्के संकेतों को जोड़ने के लिए किया जाता है.

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

नीचे दी गई इमेज में, ऐसे वर्चुअल ऑब्जेक्ट का उदाहरण दिया गया है जो ENVIRONMENTAL_HDR के साथ चालू है.

किसी पाबंदी वाले सीन के लिए, ENVIRONMENTAL_HDR मोड को कॉन्फ़िगर करना

सीन सीन वाले ENVIRONMENTAL_HDR का इस्तेमाल करने के लिए, ARFragment क्लास को बढ़ाएं, और नीचे दिए गए तरीके से कॉन्फ़िगरेशन को बदलें:

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setLightEstimationMode(Config.LightEstimationMode.ENVIRONMENTAL_HDR);
  return config;
}

इसके काम करने का उदाहरण देखने के लिए, सोलर सिस्टम सैंपल देखें. (यह नमूना ARFragment का इस्तेमाल किए बिना ENVIRONMENTAL_HDR लागू करता है.)

AMBIENT_INTENSITY मोड का इस्तेमाल किया जा रहा है

AMBIENT_INTENSITY मोड किसी इमेज के लिए औसत पिक्सेल सघनता और रंग में सुधार करने की स्केलर तय करता है. यह एक असभ्य सेटिंग होती है जिसे उपयोग के ऐसे उदाहरणों के लिए डिज़ाइन किया गया है जिनमें सटीक रोशनी अहम नहीं होती, जैसे कि वे ऑब्जेक्ट जिनमें बेक किया गया रोशनी होता है.

  • Pixel की चमक, पूरे वर्चुअल ऑब्जेक्ट पर लागू करने के लिए, सीन में रोशनी की औसत पिक्सल गतिविधि को कैप्चर करती है.

  • रंग में सुधार करने वाली स्केलर हर फ़्रेम के लिए व्हाइट बैलेंस का पता लगाती है. साथ ही, आपको वर्चुअल ऑब्जेक्ट को सही से रंगने की सुविधा देती है, ताकि वह सीन के पूरे कलर में आसानी से इंटिग्रेट हो सके.

किसी पाबंदी वाले सीन के लिए, AMBIENT_INTENSITY मोड को कॉन्फ़िगर करना

सीन सीन वाले AMBIENT_INTENSITY का इस्तेमाल करने के लिए, ARfragment क्लास को बढ़ाएं, और नीचे दिए गए तरीके से कॉन्फ़िगरेशन को बदलें:

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setLightEstimationMode(Config.LightEstimationMode.AMBIENT_INTENSITY);
  return config;
}