2010-09-08 12 views
25

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

लेकिन मैं कहां से शुरू करूं?

मान लीजिए मैंने पुराने ओपनजीएल में कभी प्रकाश नहीं किया है, इसलिए मैं सीधे गैर-बहिष्कृत तरीकों पर जा रहा हूं।

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

क्या कोई जानकारी का स्रोत है जो फ्लैट रंगीन शिखर से एक को जीएलएसएल के माध्यम से उचित अंत परिणाम के लिए आवश्यक है? आदर्श रूप से किसी अन्य अतिरिक्त प्रकाश व्यवस्था के साथ जो इसे पूरक करने के लिए आवश्यक हो सकता है।

उत्तर

24

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

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

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

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

+4

बीटीडब्ल्यू: Google विद्वान इस तरह की चीजों पर आपका मित्र है। Http://scholar.google.de/scholar?q=glsl+ray+tracing – zerm

+3

ओपनसीएल के बारे में कैसे है ... –

+0

आपका मतलब क्या है "त्वरण डेटा संरचनाएं"? – bluejamesbond

18

आप कुछ चीजों को भ्रमित कर सकते हैं।

ओपनजीएल एक रास्टरराइज़र है। इसे रेट्रैसिंग करने के लिए मजबूर करना संभव है, लेकिन मुश्किल है। यही कारण है कि रेयट्रैसिंग "कुछ वर्षों में वास्तविक समय ग्राफिक्स के लिए आदर्श नहीं है"। कुछ सालों में, केवल हाइब्रिड सिस्टम व्यवहार्य होंगे।

तो, आपके पास तीन संभावनाएं हैं।

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

आप वास्तव में क्या हासिल करना चाहते हैं? मैं आपकी जरूरतों के आधार पर उत्तर में सुधार कर सकता हूं।

वैसे भी, this SO question अत्यधिक संबंधित है। भले ही इस विशेष कार्यान्वयन में एक बग है, यह निश्चित रूप से जाने का तरीका है। एक और संभावना ओपनसीएल है, लेकिन अवधारणा वही है।

संबंधित मुद्दे