सामग्री और शेडर के बीच अंतर


27

खेल में, सामग्री अक्सर केवल वस्तुओं की दृश्य उपस्थिति को प्रभावित करती है। दृश्य उपस्थिति shaders द्वारा प्रभावित है। तो शब्दावली के संबंध में सामग्री और शेड के बीच अंतर है? क्या आपको एक सामग्री के लिए एक shader लिखना चाहिए?


1
मैंने कुछ इंजन देखे हैं जहां एक सामग्री एक shader + diffuse बनावट + bumpmap है, लेकिन मुझे नहीं लगता कि एक संक्षिप्त परिभाषा है।
रॉय टी।

3
@RoyT। उन इंजनों का दुरुपयोग शब्दावली होगा। एक सामग्री एक shader के बराबर नहीं है - एक shader एक प्रोग्राम है , एक सामग्री डेटा मानों का एक गुच्छा है। 2 अलग-अलग shader प्रोग्राम एक ही सामग्री को प्रस्तुत कर सकते हैं और विभिन्न परिणाम प्राप्त कर सकते हैं ।
बोब्बोबो

@bobobobo या अधिक सामान्यतः, एक ही shader का उपयोग कई सामग्रियों को प्रस्तुत करने के लिए किया जाता है, अलग-अलग बनावट, पैरामीटर मान और ऐसे में प्लग करके।
नाथन रीड

जवाबों:


29

एक सामग्री विशेषताओं का एक संयोजन है जो बताती है कि दी गई सामग्री की सतह कैसी दिखनी चाहिए।

कुछ इंजन विभिन्न सामग्रियों के लिए अलग-अलग शेड का उपयोग करते हैं, इस मामले में एक सामग्री परिभाषा इस तरह दिख सकती है:

[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

2
क्या गेम इंजन द्वारा समर्थित प्रत्येक इंद्रियों को सामग्री की परिभाषा का विस्तार नहीं किया जा सकता है? उदाहरण के लिए, लगता है कि सामग्री का उत्पादन होगा जब हिट, कदम, आदि, या उसके घर्षण मापदंडों पर?
१५:१३

10

एक सामग्री निर्दिष्ट करती है कि कोई वस्तु प्रकाश से कैसे प्रतिक्रिया करती है।

आम मापदंडों के एक जोड़े हैं:

  • Kd: प्रकाश की प्रतिक्रिया को डिफ्यूज़ करें
  • Ks: प्रकाश के लिए विशिष्ट प्रतिक्रिया
  • एनएस: "पिंडली"
  • map_Kd: बनावट

अब कहते हैं कि आपके पास सामग्री के साथ एक त्रिकोण है MMKd = (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 ;

3

एक सामग्री वह है जो आप इसे रंग और पैटर्न देने के लिए ज्यामिति पर लागू करते हैं। एक बनावट एक सामग्री का एक घटक है।

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

इसलिए आपके प्रश्न के उत्तर में - हाँ एक अंतर है, थोड़ा ओवरलैप भी है - आप या तो एक लाल सामग्री बना सकते हैं या चीजों को लाल रंग में प्रस्तुत करने के लिए एक shader लिख सकते हैं, लेकिन ये दोनों आपको बहुत सारी चीजों की अनुमति देते हैं दूसरे के साथ नहीं हो सकता।

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

शादियों का एक अच्छा उदाहरण युद्ध की तैयारी में है। दृश्य के लिए सामग्री का एक सेट है, लेकिन जब आप सामरिक दृश्य पर स्विच करने के लिए एक बटन दबाते हैं, तो इन सामग्रियों को प्रदान करने वाले शेड्स बदल जाते हैं ताकि चीजें रेखांकित और आम तौर पर अलग दिखें। बैटमैन में भी यही बात होती है: अरखाम की 'जासूसी विधा'।


1
तकनीकी रूप से एक बनावट वास्तव में खुद पर एक सामग्री नहीं है , यह आमतौर पर एक सामग्री का हिस्सा है।
बोब्बोबो

1

हालांकि देर से, एक "धोखा" है जो आपको बेहतर समझने में मदद कर सकता है।

एक सामग्री वह सब कुछ है जो उस ड्रा कॉल के लिए एक निश्चित shader से जुड़ी होती है।

उदाहरण के लिए, उपरोक्त उत्तर में, आपके पास यह सामग्री है: [सामग्री] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png

जो अनुवाद किया है कि आप एक shader है कि एक सामान्य नक्शा और एक specular गणना करता है के साथ प्रतिपादन किया जाएगा, और यह उस shader के अंदर 3 बनावट का उपयोग करेगा।

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

सभी में, एक सामग्री वह सब कुछ है जो विशिष्ट रूप से समान मापदंडों (बनावट, वर्दी, विशेषताओं) के साथ एक ही shader का उपयोग करके एक ड्रॉ कॉल बनाता है।

मुझे उम्मीद है कि इससे इसे बेहतर रूप से देखने में मदद मिलेगी


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