खेल में, सामग्री अक्सर केवल वस्तुओं की दृश्य उपस्थिति को प्रभावित करती है। दृश्य उपस्थिति shaders द्वारा प्रभावित है। तो शब्दावली के संबंध में सामग्री और शेड के बीच अंतर है? क्या आपको एक सामग्री के लिए एक shader लिखना चाहिए?
खेल में, सामग्री अक्सर केवल वस्तुओं की दृश्य उपस्थिति को प्रभावित करती है। दृश्य उपस्थिति shaders द्वारा प्रभावित है। तो शब्दावली के संबंध में सामग्री और शेड के बीच अंतर है? क्या आपको एक सामग्री के लिए एक shader लिखना चाहिए?
जवाबों:
एक सामग्री विशेषताओं का एक संयोजन है जो बताती है कि दी गई सामग्री की सतह कैसी दिखनी चाहिए।
कुछ इंजन विभिन्न सामग्रियों के लिए अलग-अलग शेड का उपयोग करते हैं, इस मामले में एक सामग्री परिभाषा इस तरह दिख सकती है:
[Material]
Shader=NormalMappedSpecular.glsl
Texture1=Rock.png
Texture2=RockNormal.png
Texture3=RockSpecular.png
अन्य इंजन सभी वस्तुओं के लिए एक shader का उपयोग करते हैं (या बजाय इंजन तय करता है कि मापदंडों, निर्भर GPU और दूरी जैसे अन्य कारकों का उपयोग करने के लिए क्या shader), जिस स्थिति में कोई सामग्री इस तरह दिखाई देगी:
[Material]
Ambient=0.5
Specularity=0.7
DiffuseMap=Rock.png
NormalMap=RockNormal.png
SpecularMap=RockSpecular.png
एक सामग्री निर्दिष्ट करती है कि कोई वस्तु प्रकाश से कैसे प्रतिक्रिया करती है।
आम मापदंडों के एक जोड़े हैं:
अब कहते हैं कि आपके पास सामग्री के साथ एक त्रिकोण है M
। M
Kd = (1,0,0) (लाल विसरित प्रतिक्रिया), Ks = (1,1,1) (सफ़ेद स्पेक्युलर रेस्पॉन्स), Ns = 25 (स्पेक्युलर हाइलाइट काफी शार्प होगा और फ़्यूज़ नहीं होगा) और कोई map_Kd ( कोई बनावट नहीं)।
शेडर का काम त्रिकोण के शीर्ष पदों को लेने के लिए गणित का उपयोग करना है , प्रकाश की स्थिति, सामग्री के रंग के मूल्य, और यह पता लगाना है कि त्रिकोण को किस रंग का दिखना चाहिए। प्रत्येक शीर्ष पर एक बार एक शीर्ष shader यह "छायांकन अभिकलन" करता है और त्रिकोण के पार रंग को प्रक्षेपित करता है।
एक शीर्ष पर फैलाना प्रतिक्रिया की गणना करने के लिए एक shader में एक सामान्य ऑपरेशन है:
// hlsl
float3 vertexToLight = normalize( lightPos.xyz - vertexPos.xyz ) ;
float3 diffuseColor = max( dot( vertexToLight, vertexNormal ), 0.0 ) * kd * lightColor ;
एक सामग्री वह है जो आप इसे रंग और पैटर्न देने के लिए ज्यामिति पर लागू करते हैं। एक बनावट एक सामग्री का एक घटक है।
एक शेडर एक छोटा प्रोग्राम है जो इस सामग्री को रनटाइम पर प्रस्तुत करने की अनुमति देता है। शेड्स के बारे में अच्छी बात यह है कि आप सामग्री को रेंडर करने से लेकर स्पेक्युलर हाइलाइट्स और रिफ्लेक्शन जैसे डायनामिक इफेक्ट्स को जोड़ने के लिए हर तरह से बेहद चालाक चीजों जैसे कि दीवारों के माध्यम से नकली छेद को रेंडर करने के लिए कर सकते हैं, जहां एक गोली लगी है।
इसलिए आपके प्रश्न के उत्तर में - हाँ एक अंतर है, थोड़ा ओवरलैप भी है - आप या तो एक लाल सामग्री बना सकते हैं या चीजों को लाल रंग में प्रस्तुत करने के लिए एक shader लिख सकते हैं, लेकिन ये दोनों आपको बहुत सारी चीजों की अनुमति देते हैं दूसरे के साथ नहीं हो सकता।
और नहीं, आपको प्रति सामग्री एक shader की आवश्यकता नहीं है। हालाँकि एक सामग्री के लिए एक शेडर की आवश्यकता होती है, लेकिन यदि आप चाहते हैं तो आपके पास सभी सामग्रियों के लिए एक हो सकता है। वे विशिष्ट चीजें करते हैं इसलिए यदि आप चाहते थे कि सब कुछ उदाहरण के लिए चमकदार हो, तो आप सिर्फ एक लिख सकते हैं।
शादियों का एक अच्छा उदाहरण युद्ध की तैयारी में है। दृश्य के लिए सामग्री का एक सेट है, लेकिन जब आप सामरिक दृश्य पर स्विच करने के लिए एक बटन दबाते हैं, तो इन सामग्रियों को प्रदान करने वाले शेड्स बदल जाते हैं ताकि चीजें रेखांकित और आम तौर पर अलग दिखें। बैटमैन में भी यही बात होती है: अरखाम की 'जासूसी विधा'।
हालांकि देर से, एक "धोखा" है जो आपको बेहतर समझने में मदद कर सकता है।
एक सामग्री वह सब कुछ है जो उस ड्रा कॉल के लिए एक निश्चित shader से जुड़ी होती है।
उदाहरण के लिए, उपरोक्त उत्तर में, आपके पास यह सामग्री है: [सामग्री] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png
जो अनुवाद किया है कि आप एक shader है कि एक सामान्य नक्शा और एक specular गणना करता है के साथ प्रतिपादन किया जाएगा, और यह उस shader के अंदर 3 बनावट का उपयोग करेगा।
बाद में, आप एक ही शेडर का उपयोग कर सकते हैं, अलग-अलग 3 बनावटों (जैसे कार, कारनॉर्मल और कारस्पेकुलर) के साथ, आप एक अलग सामग्री के साथ एक अलग ड्रॉ कॉल करेंगे, सिर्फ इसलिए कि आपने शेडर मापदंडों को बदल दिया है।
सभी में, एक सामग्री वह सब कुछ है जो विशिष्ट रूप से समान मापदंडों (बनावट, वर्दी, विशेषताओं) के साथ एक ही shader का उपयोग करके एक ड्रॉ कॉल बनाता है।
मुझे उम्मीद है कि इससे इसे बेहतर रूप से देखने में मदद मिलेगी