कई वस्तुओं को रेंडर करने के लिए मुझे कितने ओपन प्रोग्राम का उपयोग करना चाहिए?


10

मेरे दृश्य में कई ऑब्जेक्ट हैं। (मान लें कि 3 क्यूब्स, 1 सिलेंडर, 8 गोले हैं।) मेरा मानना ​​है कि मुझे प्रत्येक के लिए एक वर्टीकल शेडर बनाना चाहिए। मुझे कितने कार्यक्रम करने चाहिए?

विकल्प:

  • प्रति वस्तु एक कार्यक्रम
  • सभी क्यूब्स के लिए एक कार्यक्रम और सभी क्षेत्रों के लिए दूसरा (यह मानते हुए कि वे एक ही शेड का उपयोग करते हैं)
  • सब कुछ के लिए एक बड़ा कार्यक्रम

सही तरीका क्या है?


1
"मुझे लगता है कि मुझे प्रत्येक के लिए एक शीर्ष shader बनाना चाहिए।" आप यह क्यों मान रहे हैं? एक वर्टिशर शेड आपके मॉडल के अनुसार वर्टीकल्स को बदल देगा और मैट्रिसेस को देखेगा और आप लगभग हमेशा यही चाहेंगे कि यह हर चीज के लिए समान हो।
यूएसएम

जवाबों:


8

आपको shader कार्यक्रमों को राज्य के समान भाग के रूप में बनावट पर विचार करना चाहिए। राज्य बदलना महंगा है, इसलिए आप बनावट में बदलाव से बचने के लिए कई बनावटों को एक साथ जोड़कर दूर हो सकते हैं; वही शेड्स पर लागू होता है - आप राज्य परिवर्तनों से बचने के लिए कई शेड्स को संयोजित करने में सक्षम हो सकते हैं।

इसी तरह, बनावट के संयोजन के लिए, शेड्स का संयोजन एक ओवरहेड के साथ आता है - यदि आप केवल 40xx4096 बनावट में से 16x16 पिक्सेल क्षेत्र प्रस्तुत करते हैं, तो आप हार्डवेयर का कुशलता से उपयोग नहीं कर रहे हैं। इसी तरह, यदि आप जिस ऑब्जेक्ट को रेंडर करते हैं, वह आपके शेडर में केवल 10% कोड का उपयोग करता है, तो यह संभव है (और यहां तक ​​कि) कि ग्राफिक्स कार्ड अनावश्यक रूप से बहुत सारे सामान की गणना कर रहा है।

संक्षेप में, "निर्भर करता है"।


4
इसके अलावा, कई मामलों में आप केवल एक shader के साथ दूर हो सकते हैं। अंतर केवल उन गणवेश में हैं जिन्हें आप शेडर को पास करते हैं, जैसे, रंग, बनावट, सामान्य नक्शे, आदि
rioki

हाँ, उदाहरण के लिए, आपके पास एक "स्कैलिक" शेडर हो सकता है जो ऐसे टुकड़ों का निर्माण करता है जो देखने में भद्दे लगते हैं, और जो इस तरह से काम करते हैं (सबसे अधिक शेड करते हैं ...) जो आप सभी 3 क्यूब्स, 1 सिलेंडर और 8 क्षेत्रों का उपयोग करके प्रस्तुत कर सकते हैं। एक shader (इसी ज्यामिति आदिम के साथ, निश्चित रूप से)। यहां वर्दी का एक उचित सेट रंग को परिभाषित करने वाला एक वेक्टर मूल्य हो सकता है, और शायद कुछ स्केलर या ऐसा कुछ जो प्रभावित करता है कि "स्केल" या "चमकदार" दृश्य प्रभाव कैसा होगा। फिर आपके पास एक shader है और आप बदलते हैं कि अलग-अलग geometries के ड्रॉ के बीच वर्दी को बदलकर shader के रंग कैसे बदल जाते हैं।
स्टीवन लू

5

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

इसे प्राप्त करने के लिए shader प्रबंधन और "इष्टतम" तरीके पर कई राय हैं। मैंने कुछ shader कार्यान्वयन भी देखे हैं, जहाँ हर shader जनरेट-ऑफ-फ्लाई बेस्ड ऑफ पैरामीटर्स (जैसे Unreal इंजन ) में उत्पन्न होता है ।

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

इस तरह की प्रणाली का उद्देश्य चीजों को सरल रखना है। बस। रखें। यह। सरल।


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