संयोग सतहों के साथ z- लड़ाई से बचना


26

जब दो अतिव्यापी सह-प्लानर सतहों का प्रतिपादन किया जाता है, तो एक सामान्य मुद्दा "जेड-फाइटिंग" होता है, जहां रेंडरर यह तय नहीं कर सकता है कि ओवरलैप के क्षेत्र में दृश्य कलाकृतियों को देखते हुए, दोनों सतहों में से कौन सी सतह करीब है।

इसका मानक समाधान सतहों को मॉडल को डिज़ाइन करते समय थोड़ी ऑफसेट देना है। क्या कोई और उपाय है?


2
आप लॉगरिदमिक गहराई बफ़र्स चेकआउट कर सकते हैं। गामासूत्र
साबुन

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

@SimonF, "को-प्लानर" से मेरा मतलब है "बिल्कुल सह-प्लानर"। साबुन का समाधान केवल "लगभग सह-योजना" मामले में काम करता है।
मार्क

क्या आप अपनी सतहों का उदाहरण दे सकते हैं? केवल एक चीज जिसके बारे में मैं सोच सकता हूं वह यह है कि मेरे सिर के शीर्ष पर नकली त्रिकोण हैं जैसा कि @SimonF ने उल्लेख किया है।
रिचैम्स एम्स

@RichieSams सबसे आम मामला है जिसके बारे में मैं सोच सकता हूं कि यह दशमलव है, जहां आपको बिल्कुल डुप्लिकेट त्रिकोण की आवश्यकता नहीं है।
RYS

जवाबों:


10

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

एक संभव समाधान जेड-बफर का उपयोग बिल्कुल नहीं करना है। बल्कि आप पेंटर के एल्गोरिथ्म का उपयोग कर सकते हैं । दी, यह चित्रकारों एल्गोरिथ्म की सभी समस्याओं के साथ आता है। लेकिन, यह जेड-फाइटिंग को हल करेगा।

स्क्रीन स्पेस डिकल्स (SSDs) के आपके उदाहरण के मामले में, सामान्य समाधान एक ऑफसेट, उर्फ ​​एक सरल पतली क्यूब का उपयोग करना है। संदर्भ के लिए SSDs के बारे में Warhammer 40k की प्रस्तुति देखें । या बार्ट व्रोनस्की की पोस्ट जो कुछ अन्य मुद्दों को डिकल्स के साथ संबोधित करती है, लेकिन एसएसडी के बारे में कुछ अन्य प्रस्तुतियों से भी जुड़ती है


5
समान रूपांतरों के साथ एक ही ज्यामिति को फिर से प्रस्तुत करना हर बार समान गहराई से मान उत्पन्न करता है। (यानी यह एक शक्ति नहीं है , यह एक इच्छा है )। इसलिए, उदाहरण के लिए, मल्टी-पास फॉरवर्ड लाइटिंग काम करता है।
नाथन रीड

@NathanReed सही किया गया। स्पष्टीकरण के लिए धन्यवाद
रिचीसम्स

1
उस कार्यक्षमता को प्राप्त करने के लिए आपको glsl में अपरिवर्तनीय क्वालिफायर का उपयोग करने की आवश्यकता है: opengl.org/wiki/Type_Qualifier_%28GLSL%29#Invariance_qualifiers
ashleysmithgio

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

2

यहाँ मैंने अतीत में इसे कैसे हल किया है:

  1. पहला परीक्षण (वह वस्तु जो दूसरी वस्तु के पीछे दिखाई देनी चाहिए) को गहराई से परीक्षण करें लेकिन गहराई से नहीं
  2. गहराई परीक्षण और गहराई लेखन द्वारा दूसरी वस्तु बनाएं। यह z- लड़ाई का कारण नहीं बनेगा क्योंकि हमने चरण 1 में कोई गहराई नहीं लिखी है।
  3. पहली वस्तु को केवल गहराई बफ़र पर लिखकर आकर्षित करें, कि रंगीन बफ़र पर। यह सुनिश्चित करता है कि गहराई बफ़र किसी भी पिक्सेल के लिए अद्यतित है जो ऑब्जेक्ट 1 द्वारा कवर किया गया है लेकिन ऑब्जेक्ट 2 द्वारा नहीं।

ध्यान दें, काम करने के लिए वस्तुओं को लगातार खींचने की आवश्यकता होती है।


0

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

OpenGL में PolygonOffset होता है, लेकिन आपको अग्रिम में यह जानने की आवश्यकता होती है कि आप कुछ कॉपलनार को रेंडर करने वाले हैं। एक ही मॉडल के भीतर सतहों के लिए संभव नहीं है, यह भूमि के एक टुकड़े पर एक सड़क ओवरलेडिंग जब उदाहरण के लिए अच्छी तरह से काम कर सकता है।

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