मैं ज्यादातर CPU से मार्चिंग क्यूब्स के कार्यान्वयन को ओपनग्लूट कंप्यूट शेड्स पर पोर्ट करने में सफल रहा हूं, लेकिन मैंने अभी तक मानदंडों से निबटा नहीं है और इसके बारे में जाने का सबसे अच्छा तरीका सोच रहा हूं।
मेरा कार्यान्वयन विशेष रूप से द्विआधारी मूल्यवान क्षेत्रों से संबंधित है (मैं 3D फ्रैक्टल कार्यों को मॉडल करने की कोशिश कर रहा हूं जिनके पास अभी तक एक दूरी अनुमानक नहीं है), इसलिए ढाल और आगे के अंतर के तरीके काम नहीं करेंगे। मैंने काम करने वाले वर्टिकल साझा किए हैं, और मेरा सीपीयू कार्यान्वयन क्विलज़ विधि का उपयोग करता है, जो प्रत्येक पड़ोसी के शीर्ष पर चेहरे के मानदंडों को संचित करने के लिए यहां वर्णित है ।
मैं इस कार्यान्वयन को एक और shader पर पोर्ट कर सकता था, लेकिन इसके साथ जो समस्या मुझे दिख रही है, वह है भारी संख्या में परमाणु की आवश्यकता। चूँकि हम केवल स्केलर पूर्णांक प्रकारों पर एटमिक्स का उपयोग कर सकते हैं, और मैं एक हस्ताक्षर योग्य तरीके से 3 हस्ताक्षरित इनट्स को 1 में पैक करने का एक तरीका नहीं सोच सकता, इसका मतलब है कि 3 अक्ष * 3 कोने = 9 परमाणु प्रति shader आह्वान कहते हैं। वे निश्चित रूप से पूरे स्मृति में फैल जाएंगे, इसलिए यह 9 बार एक एकल परमाणु काउंटर को मारने की तरह नहीं है, लेकिन यह अभी भी बहुत कुछ नरक की तरह लगता है।
अन्य विकल्प एक shader मंगलाचरण प्रति बहुभुज चलाने के लिए और चेहरे की सामान्य सूची बनाने के लिए है (मैं शायद इस तरह से x10y10z10 पर पैक कर सकता हूं), तो पड़ोसी चेहरों के सभी मानदंडों को संचित करने के लिए एक shader प्रति-शीर्ष। यह एक बहुत बड़ा मेमोरी हॉग होगा, हालांकि सबसे खराब स्थिति से निपटने के लिए चेहरे के सूचकांकों के स्टोरेज स्पेस को 12 इंट प्रति वर्टिक्स की आवश्यकता होगी। इस बात की भी समस्या है कि इस स्टोरेज में लिखने के लिए फिर से एटमिक्स का सहारा लिए बिना काम करने के लिए कितने चेहरों को पहले से ही एक विशेष शीर्ष पर लिखा गया है।
किसी को भी यह कैसे करना है पर कोई बेहतर विचार है?