मैं एक दृश्य को कैसे याद कर सकता हूं जो स्मृति में फिट नहीं होता है?


11

यदि दृश्य को अलग किया जा सकता है तो मेमोरी में संग्रहीत नहीं किया जा सकता है, तो मशीन में अधिक रैम जोड़े बिना यह व्यावहारिक समय अवधि में इसे प्रस्तुत करने के लिए अवास्तविक लगता है, डिस्क से दृश्य के विभिन्न भागों को लोड करने की आवश्यकता के कारण संभावित रूप से प्रति पिक्सेल कई बार। ।

क्या इसके आसपास कोई रास्ता है? मैं बड़ी संख्या में गणना करने के कुछ तरीके के बारे में सोचने की कोशिश कर रहा हूं, जिसमें एक ही बार में दृश्य के एक विशेष सबसेट को शामिल किया जाता है, यह याद में लोड करने की आवश्यकता को कम करने के लिए। क्या ऐसे मामले में गति में सुधार का कोई अन्य तरीका है?

जवाबों:


10

यदि दृश्य पूरी तरह से स्मृति में फिट नहीं होता है, तो आप आउट-ऑफ-कोर प्रतिपादन के क्षेत्र में प्रवेश कर रहे हैं। यहां अनिवार्य रूप से दो दृष्टिकोण हैं: ए) अपने दृश्य को ऑन-डिमांड जेनरेट करें बी) अपने दृश्य को ऑन-डिमांड लोड करें

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

जब तक आपके सभी बेस मेश आराम से मेमोरी में फिट हो जाते हैं, तब तक आप आसानी से आउट-ऑफ-कोर जा सकते हैं और सब-डिविज़न लेवल पर ऐसे मेज़ को प्रस्तुत कर सकते हैं जो कभी भी मेमोरी में फिट नहीं होंगे। जियोमेट्री कैश भी आपके पास स्मृति की मात्रा के साथ अच्छी तरह से तराजू है, जिससे आप रैम बनाम रेंडर समय का वजन कर सकते हैं। मेरा मानना ​​है कि यह भी कारों में इस्तेमाल किया गया था ।

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

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

इस तरह के दृष्टिकोण का पहला लाभ यह है कि जो चीजें कभी हिट नहीं होती हैं, वे कभी लोड नहीं होती हैं, जिसका अर्थ है कि यह स्वचालित रूप से आपके दृश्य में दृश्यता के लिए अनुकूल है। दूसरा लाभ यह है कि यदि आप कई किरणों का पता लगा रहे हैं, तो आपको किसी वस्तु को तुरंत लोड नहीं करना है क्योंकि यह किरण से टकराती है; इसके बजाय, आप उस किरण को पकड़ सकते हैं और तब तक प्रतीक्षा कर सकते हैं जब तक कि किरणें उस वस्तु से नहीं टकराती हों, कई किरणों के हिट पर भार को बढ़ाती है।

आप इस दृष्टिकोण को एक किरण छँटाई एल्गोरिथ्म के साथ भी जोड़ सकते हैं जैसे कि असंगत किरणों के कारण थ्रैशिंग से बचने के लिए प्रोडक्शन पाथ ट्रेसिंग के लिए सॉर्टेड डिफर्ड शेडिंग । उल्लेख किया गया पेपर डिज्नी के हाइपरियन रेंडरर की वास्तुकला का वर्णन करता है, जिसका उपयोग बिग हीरो 6 के लिए किया जाता है, मुझे विश्वास है, इसलिए यह सबसे अधिक संभावना है कि उत्पादन के पैमाने पर दृश्यों को संभाल सकता है।


1
यह सुपर दिलचस्प है! तो आपके द्वारा जुड़ा हुआ डिज़नी पेपर है।
जॉन कैल्सबीक

+1 मैंने हमेशा जिन चीजों के बारे में सोचा है, उनके जवाब!
रोटेम

7

यदि आप अपने दृश्य को एक स्थानिक संरचना में व्यवस्थित करते हैं (सामान्य रूप से एक बाउंडिंग वॉल्यूम पदानुक्रम है ), तो आप एक तरह के आभासी दृश्य का उपयोग कर सकते हैं (मैं इस शब्द को बना रहा हूं, आभासी बनावट के संदर्भ में )।

एक मेमोरी मैनेजर एक समय में सीमित संख्या में बाउंडिंग बॉक्स रखेगा, और एक को पुनः प्राप्त करने के लिए ऑपरेशन को अमूर्त करेगा।

इस तरह, एक बॉक्स को केवल आवश्यकतानुसार लोड किया जाएगा: जब कोई किरण एक बाउंडिंग बॉक्स से टकराती है, तो टक्कर को हल करने के लिए बॉक्स लोड हो जाता है। बाद में जब दूसरे बॉक्स को लोड करने की आवश्यकता होती है, तो अप्रयुक्त को नए के लिए जगह बनाने के लिए हटा दिया जाता है।

इन सभी बक्सों को लोड और डिलीट करने के साथ, रे कोहेरेंसी गति में एक प्रमुख कारक होगा। मुझे लगता है कि पहले से लोड किए गए बक्से का इलाज करने के लिए किरणों को फिर से व्यवस्थित करके लोडिंग को स्थगित करने के लिए एक और सुधार हो सकता है।


हाँ कुछ इस तरह।
पूजा

1

आप जो कर रहे हैं वह डिस्क पर आधारित मेमोरी से त्रिकोणों को लोड करता है जो पहले हिट हो चुका है। आप पहले निकटता में त्रिकोण के साथ शुरू कर सकते हैं। तर्क यह है कि एक क्षेत्र में किरणों को एक ही त्रिकोण के बार-बार हिट करने की संभावना है। और अंततः आप कुछ हद तक कुशल होंगे। (इस कारण से यह एक अच्छा विचार है कि क्रोसट्रक्शन ट्रेसिंग में अंतिम हिट त्रिकोण को कैश करें जो कि ऑर्डर की देखभाल नहीं करता है)

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

ऐसे मामले हैं जहां यह विफल हो जाता है, लेकिन इसके अधिकांश दृश्य बाल्टी में कुशल है अगर आपका शोर प्रदान नहीं करता है ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.