क्या अप्रत्यक्ष प्रकाश के लिए योगदान की गणना करते समय कॉशन भारित गोलार्ध नमूने को अभी भी एनडीओटीएल की आवश्यकता होती है?


12

जब समान गोलार्ध के नमूने को कॉशन भारित गोलार्द्ध के नमूने से परिवर्तित करते हैं तो मैं एक लेख में एक बयान द्वारा भ्रमित होता हूं।

मेरे वर्तमान अप्रत्यक्ष योगदान की गणना इस प्रकार है:

Vec3 RayDir = UniformGenerator.Next()
Color3 indirectDiffuse = Normal.dot(RayDir) * castRay(Origin, RayDir)

जहां डॉट उत्पाद cos (cos) है

लेकिन बेहतर नमूनाकरण ( http://www.rorydriscoll.com/2009/01/07/better-sampling/ ) पर इस लेख में लेखक पीडीएफ (cos (θ) / pi) का सुझाव देता है, और इसका कोई सबूत नहीं है एन डॉट एल गणना।

मेरा सवाल है - क्या इसका मतलब यह है कि मुझे अब सामान्य डॉट रेडायरेक्शन करने की आवश्यकता नहीं है क्योंकि यह पीडीएफ में शामिल है, या यह पीडीएफ के अतिरिक्त है?

जवाबों:


12

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

यह भी ध्यान दें कि उल्लेखित संदर्भ में, यदि पीडीएफ में ऐसे शब्द हैं जो आपको रेंडर समीकरणों में भी मिलते हैं तो आप इन शब्दों को रद्द करके यदि आप चाहें तो कोड को ऑप्टिमाइज़ कर सकते हैं।

मत भूलो कि एक विसरित सतह का BRDF ρ / D है जहां ρ सतह एल्बिडो के लिए खड़ा है। इसलिए हमें π द्वारा परिणाम को विभाजित करने की आवश्यकता है। हालांकि अप्रत्यक्ष प्रसार घटक के मामले में, यह मत भूलो कि हमें यादृच्छिक चर के पीडीएफ द्वारा कास्टरे के परिणाम को विभाजित करना चाहिए था, जैसा कि हमने इस अध्याय में पहले दिखाया था 1 / (2π)। डिवाइडिंग को अप्रत्यक्ष रूप से 1 / (2 mis) इस मान को 2π से गुणा करने पर गलत है। और चूंकि एल्बेडो को भी is से विभाजित किया गया है इसलिए हम कोड को सरल बना सकते हैं ...

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

(सीरों(θ))पीडीएफ=(सीरों(θ))सीरों(θ)π=


1
धन्यवाद! यह समझ आता है। सहज रूप से मुझे पता था कि यह आवश्यक है लेकिन मैं नहीं जानता था कि यह एक अनुकूलन था।
स्टीवन

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

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