के बीच इंटरपोलेट किए जाने वाले चर को निर्दिष्ट करें, मैं Unity3D
के अंदर शेडर्स लिखने के लिए GC
का उपयोग कर रहा हूं।सीजी: वर्टेक्स और खंड शेडर
मैं शेडर को कुछ पैरामीटर पास करने के लिए वर्टेक्स रंग विशेषताओं का उपयोग कर रहा हूं। रंगों को परिभाषित करने के लिए उनका उपयोग नहीं किया जाएगा, और वर्टेक्स शेडर से पिक्सेल शेडर को संशोधित किए बिना अग्रेषित किया जाना चाहिए।
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
fixed4 col: COLOR;
};
हैं:
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
fixed4 color : COLOR;
#if defined(SHADER_API_XBOX360)
half4 texcoord2 : TEXCOORD2;
half4 texcoord3 : TEXCOORD3;
half4 texcoord4 : TEXCOORD4;
half4 texcoord5 : TEXCOORD5;
#endif
};
यह संरचना टुकड़ा करने के लिए इनपुट के रूप में शिखर शेडर द्वारा दिया है:
यह संरचना मैं इनपुट के रूप में ले रहा हूँ Unity3D से शिखर शेडर है मैं बस खंडक शेडर को पैरामीटर अग्रेषित करता हूं, बेशक इसे इंटरपोलेट किया जाएगा:
v2f vert (appdata_full v)
{
v2f output;
//....
output.col = v.color;
}
मैं v.color
पैरामीटर पास करना चाहता हूं जो टुकड़े टुकड़े के लिए interpolated नहीं है। क्या यह संभव है? यदि हां कैसे?
संपादित
टिम की तरह कहे अनुसार, इस अपेक्षित व्यवहार है, शेडर की वजह से रंग interpolating अगर उन टुकड़ा करने के लिए शीर्ष शेडर से बाहर पारित कर रहे हैं की तुलना में और कुछ नहीं कर सकते। मैं बेहतर व्याख्या करने की कोशिश करूंगा जो मैं प्राप्त करने की कोशिश कर रहा हूं। मैं रंगों की तुलना में अन्य प्रकार की जानकारी स्टोर करने के लिए प्रति चरम रंगों का उपयोग कर रहा हूं। मैं इसके साथ क्या कर रहा हूं, इस बारे में सभी ब्योरे बताए बिना, मान लें कि आप प्रत्येक रंग वर्टेक्स को एक आईडी के रूप में मान सकते हैं (उसी त्रिभुज के प्रत्येक चरम पर, एक ही रंग होगा। असल में एक ही जाल के प्रत्येक चरम)।
इसलिए मैंने कुछ पैरामीटर मास्क करने के लिए रंगीन चाल का उपयोग किया क्योंकि मेरे पास ऐसा करने का कोई और तरीका नहीं है। अब जानकारी का यह टुकड़ा टुकड़े टुकड़े पर किसी भी तरह से उपलब्ध होना चाहिए। यदि वर्टेक्स शेडर के आउट पैरामीटर के रूप में पास किया गया है, तो रंग में एन्कोड की गई यह जानकारी खंड पर इंटरपोलेटेड पहुंच जाएगी, जो अब इसका उपयोग नहीं कर सकती है।
मैं इस जानकारी को खंडन शेडर तक अपरिवर्तित करने का एक तरीका ढूंढ रहा हूं (शायद वैश्विक चर या कुछ ऐसा करने के लिए संभव है? यदि हां कैसे?)।
कैसे आप अगर आप मान क्या आप अगर त्रिकोण में से प्रत्येक के शिखर का मान अलग है होने की अपेक्षा करते हैं अंतर्वेशन नहीं है पिक्सेल प्रति तीन आदानों (कोने) सामंजस्य करने के लिए जा रहे हैं – Tim
@Tim? : ठीक है..तुम सही हो। मैं तुम्हारी आपत्ति को समझता हूं । मुद्दा यह है कि वास्तव में रंग मेरे शेडर में रंग नहीं होते हैं। मैं अन्य प्रकार की जानकारी स्टोर करने के लिए रंग मूल्यों का उपयोग कर रहा हूं। मुझे इस कशेरुक की जानकारी को कशेरुक से खंड टुकड़े तक अग्रेषित करने की आवश्यकता है, अंततः इसे वर्टेक्स शेडर के पैरामीटर के रूप में पास नहीं किया जा रहा है, लेकिन कुछ ऐसा "ग्लोबल चर" का उपयोग करना संभव है। मुझे स्पष्ट होने की उम्मीद है। – Heisenbug
यह वास्तव में कोई फर्क नहीं पड़ता कि यह रंग या सूचकांक या कुछ और है। आइए कहें कि आप एक त्रिकोण बना रहे हैं। कुछ मनमानी प्रति-वर्टेक्स गणना के आधार पर; वर्टेक्स 0 आउटपुट "5", वर्टेक्स 1 आउटपुट "10", और वर्टेक्स 2 आउटपुट "15"। आप इन टुकड़ों में से कौन सा नंबर अपने टुकड़े टुकड़े में दिखाना चाहते हैं? यदि यह वास्तव में एक वर्दी का उपयोग करने से वैश्विक मूल्य है, लेकिन अन्यथा मुझे लगता है कि आप इसे पूरी तरह से सोच नहीं रहे हैं। जब तक आप केवल "मैं हमेशा vertex 0 का मूल्य चाहता हूं और अन्य दो को अनदेखा करता हूं", यह बहुत समझ में नहीं आता है। – Tim