एक तेल स्लीक के रंगों का भौतिक आधार इंद्रधनुषी है , और न्यूटन के छल्ले से भी संबंधित है । विशेष रूप से, तेल परत की मोटाई प्रकाश की तरंग दैर्ध्य के क्रम पर होती है। चूँकि प्रकाश किसी भी तरंग दैर्ध्य पर तेल की ऊपरी और निचली सतह दोनों से परावर्तित होता है, कुछ कोणों पर दोनों प्रतिबिंब चरण से बाहर होंगे और एक दूसरे को रद्द कर देंगे; अन्य कोणों पर प्रतिबिंब चरण में होंगे और एक साथ जुड़ेंगे। यह प्रत्येक तरंग दैर्ध्य के लिए अलग-अलग कोणों पर होता है, इसलिए सफेद रोशनी के साथ तेल को रोशन करना उन सभी रंगों का उत्पादन करता है। यदि आप इसे एकल आवृत्ति (जैसे लेजर लाइट) से रोशन करते हैं, तो आपको केवल प्रकाश और अंधेरे रिंगों की एक श्रृंखला दिखाई देगी।
यदि आप तेल की परत में अपवर्तन को अनदेखा करते हैं, तो स्थिति की ज्यामिति पर काम करते हुए, आप पा सकते हैं कि किसी भी तरंग दैर्ध्य के लिए परावर्तित प्रकाश की चमक अलग-अलग होनी चाहिए
sin(2.0 * pi * oilThickness / (dot(L, H) * wavelength)) * 0.5 + 0.5
सैद्धांतिक रूप से इसे सभी तरंग दैर्ध्य पर एकीकृत किया जाना चाहिए, लेकिन व्यवहार में आप संभवतः इसे लाल, हरे और नीले रंग के लिए कर सकते हैं - क्रमशः 700, 550 और 400 एनएम कहते हैं। तेल की मोटाई बदलने से रंग के छल्ले की स्पष्ट त्रिज्या बदल जाएगी। मैं शायद 2.0 * pi * oilThickness / wavelength
एक समान मूल्य के रूप में shader को प्रदान किए गए एक एकल RGB मान में लपेटूंगा। यदि आप चाहें तो तेल की अलग-अलग मोटाई का अनुकरण करने के लिए इसे एक बनावट से गुणा कर सकते हैं - यही शायद ऊपर की छवि में सबसे दिलचस्प बनावट देता है।
यह एक RGB रंग मान पैदा करता है जिसे आप अपने BRDF में गुणा कर सकते हैं। dot(L, H)
कारक बिंदु / दिशात्मक रोशनी के लिए इस्तेमाल किया जाएगा, और आप स्थानापन्न कर सकते हैं dot(N, V)
और साथ ही एक ऐसा माहौल नक्शा प्रतिबिंब को यह लागू करने के लिए वहाँ में।
डिस्क्लेमर: मैंने इसे किसी शेडर में नहीं आज़माया है, बस कुछ आरेख बनाए हैं और खुद को आश्वस्त किया है कि इसे "काम करना चाहिए" ... इसलिए यदि आप इसे आजमाते हैं तो मुझे इसके परिणाम बताएं! :)