GLSL, सभी एक या कई shader कार्यक्रमों में?


17

मैं OpenGL का उपयोग करके कुछ 3D डेमो कर रहा हूं और मैंने देखा कि GLSL कुछ हद तक "सीमित" है (या यह सिर्फ मेरे लिए है)। वैसे भी मेरे पास कई तरह की सामग्रियां हैं। कुछ सामग्रियों में परिवेश और फैलाना रंग होता है, कुछ सामग्रियों में परिवेश रोड़ा नक्शा होता है, कुछ में स्पेक्युलर मैप और बम्प मैप आदि होते हैं।

क्या एक वर्टेक्स / टुकड़ा शैडर जोड़ी में सब कुछ का समर्थन करना बेहतर है या कई वर्टेक्स / टुकड़े शेड बनाने के लिए बेहतर है और वर्तमान में चयनित सामग्री के आधार पर उनका चयन करें? OpenGL या D3D में सामान्य shader रणनीति क्या है?



यह एक गलत द्वंद्वात्मकता है, जिसे आपको शेड प्रबंधित करने के लिए एक या दूसरे दृष्टिकोण को चुनना होगा। उद्योग में पंद्रह वर्षों में, मैंने कभी भी एक ऐसी परियोजना पर काम नहीं किया है, जहां हमने या तो चरम का पालन किया हो, लेकिन हमेशा दो दृष्टिकोणों के बीच संतुलन का प्रबंधन करने के लिए संतुलन कायम किया, प्रत्येक का उपयोग करते हुए ऐसा करने के लिए समझ में आया।
ट्रेवर पॉवेल

जवाबों:


12

जवाब है, यह थोड़े निर्भर करता है।

मूल रूप से विचार के दो स्कूल हैं; सब कुछ के लिए छोटे, इष्टतम shaders और uber-shader शिविर।

छोटे शेड्स बस वही हैं; एक काम करो, और इसे अच्छे से करो। उबेर-शेडर्स या तो वर्दी के माध्यम से रनटाइम पर अपनी कार्यक्षमता को नियंत्रित करते हैं, या प्रीप्रोसेसर मैक्रोज़ (और / या उत्पन्न shader स्रोतों) के माध्यम से विभिन्न शेड्स के एक समूह में संकलित करते हैं।

इष्टतम समाधान शायद न तो है, लेकिन किसी प्रकार का संकर है। शायद कुछ uber-shaders या uber-shaders कुछ मामलों के लिए विशेष shaders के साथ संयुक्त हैं।

छोटा शेडर

पेशेवरों:

  • तेजी से / अधिक इष्टतम होने की संभावना है
  • सिर्फ वही करता है जो आप करना चाहते हैं
  • अजीब, कस्टम सामान आसानी से कर सकते हैं

विपक्ष:

  • आसानी से हाथ से निकल जाता है, खासकर जब सुविधाओं की संख्या बढ़ती है
  • संभवतः अधिक काम, जब तक कि आपके पास बहुत कम संख्या में शेड न हों

उबेर-शेडर

पेशेवरों:

  • एक जगह सब कुछ
  • अधिक कलाकार-अनुकूल (पहली बार फीचर एक्स के साथ फीचर ए का उपयोग करने के लिए जरूरी नहीं कि कोडर समय की आवश्यकता हो)

विपक्ष:

  • लंबे समय तक छायादार संकलन समय
  • कम इष्टतम परिणाम (esp। यदि वर्दी का उपयोग सुविधाओं को चालू / बंद करने के लिए किया जाता है)
  • डिबग / ऑप्टिमाइज़ करना अधिक कठिन हो सकता है

Uber-shaderइस प्रतिनिधित्व में एक अच्छी बात नहीं है :) मैं पूर्वनिर्धारितों के आधार पर अच्छे shaders प्रबंधक लिखने का प्रस्ताव करूंगा - इसलिए हमारे पास कई #ifdefs के साथ uber-shader कोड होंगे जो विभिन्न सामग्रियों के लिए टॉगल किए जाएंगे।
ब्रिगेडियर

2
मैं कहूंगा कि एक uber-shader का एक अन्य समर्थक यह है कि स्विचिंग शेड्स के प्रदर्शन के मामले में लागत है, इसलिए यदि आप कम बार स्विच कर रहे हैं, तो आप प्रदर्शन को बेहतर बनाने में सक्षम हो सकते हैं।
18-13 को झेरिको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.