मैं एसडीके से एनवीडिया के उदाहरणों का अध्ययन कर रहा हूं, विशेष रूप से आइलैंड 11 प्रोजेक्ट में और मुझे एचएलएसएल कोड के एक टुकड़े के बारे में कुछ उत्सुकता मिली है जो लहर की ऊंचाई के आधार पर प्रतिबिंबों को ऊपर और नीचे सही करता है।
स्वाभाविक रूप से, कोड के संक्षिप्त पैराग्राफ की जांच के बाद:
// calculating correction that shifts reflection up/down according to water wave Y position
float4 projected_waveheight = mul(float4(input.positionWS.x,input.positionWS.y,input.positionWS.z,1),g_ModelViewProjectionMatrix);
float waveheight_correction=-0.5*projected_waveheight.y/projected_waveheight.w;
projected_waveheight = mul(float4(input.positionWS.x,-0.8,input.positionWS.z,1),g_ModelViewProjectionMatrix);
waveheight_correction+=0.5*projected_waveheight.y/projected_waveheight.w;
reflection_disturbance.y=max(-0.15,waveheight_correction+reflection_disturbance.y);
मेरा पहला अनुमान था कि यह प्लैनर प्रतिबिंब के लिए क्षतिपूर्ति करता है जब यह ऊर्ध्वाधर गड़बड़ी (तरंगों) के अधीन होता है, परावर्तित ज्यामिति को एक बिंदु पर स्थानांतरित करना जहां कुछ भी नहीं है और पानी को सिर्फ इस तरह से बहाया जाता है जैसे कि वहां कुछ भी नहीं है या सिर्फ आकाश है
अब, यह आकाश को दर्शा रहा है कि हमें इलाके के हरे / धूसर / पीले रंग के प्रतिबिंब को पानी की आधार रेखा से देखना चाहिए। मेरी समस्या अब यह है कि मैं वास्तव में यह नहीं बता सकता कि इसके पीछे क्या तर्क है। लहर / जल ज्यामिति के एक बिंदु के वास्तविक विश्व स्थान की स्थिति और फिर -.5f से गुणा करने पर, केवल उसी बिंदु का एक और प्रक्षेपण लेने के लिए, इस बार इसके y निर्देशांक के साथ -0.8 (क्यों -0.8?) में बदल गया।
कोड में सुराग यह इंगित करते हैं कि यह परीक्षण और त्रुटि के साथ लिया गया था क्योंकि अतिरेक है। उदाहरण के लिए, लेखक अनुमानित y निर्देशांक के नकारात्मक आधे को ले लेता है (w विभाजन के बाद):
float waveheight_correction=-0.5*projected_waveheight.y/projected_waveheight.w;
और फिर दूसरे बिंदु के लिए भी यही करता है (केवल सकारात्मक, किसी प्रकार का अंतर पाने के लिए, मुझे लगता है) और उन्हें जोड़ती है:
waveheight_correction+=0.5*projected_waveheight.y/projected_waveheight.w;
2 से भाग को हटाने से, मुझे गुणवत्ता में सुधार में कोई अंतर नहीं दिखता (यदि कोई मुझे ठीक करने की परवाह करता है, तो कृपया करें)। इसका क्रूस अनुमानित y में अंतर प्रतीत होता है, ऐसा क्यों है? यह अतिरेक और प्रतीत होता है -.8f और -0.15f का मनमाना चयन मुझे इस निष्कर्ष पर ले जाता है कि यह उत्तराधिकार / अनुमान कार्य का एक संयोजन हो सकता है। वहाँ यह करने के लिए एक तार्किक underpinning है या यह सिर्फ एक हताश हैक है?
यहां प्रारंभिक समस्या का एक अतिशयोक्ति है, जो कोड के टुकड़े को ठीक करता है, न्यूनतम टेसलेशन स्तर पर निरीक्षण करता है। उम्मीद है, यह एक विचार है कि मैं याद आ रही है चिंगारी हो सकता है। -.8f एक संदर्भ ऊंचाई हो सकती है जिसमें से यह घटाया जा सकता है कि बनावट को गड़बड़ी करने के लिए कितना संयमित रूप से परिलक्षित ज्यामितीय रेंडर को नमूना करना चाहिए और -.15f कम बाउंड, एक सुरक्षा उपाय हो सकता है।