किसी मॉडल के कुछ हिस्सों को कैसे रंगा जाए - जैसे आरटीएस गेम में टीम के रंग होते हैं?


16

मुझे आरटीएस के खेल में कुछ देखने की जरूरत है: टीम के रंग। मूल रूप से, मैं एक मॉडल के कुछ हिस्सों को रंगीन करने का एक तरीका ढूंढ रहा हूं। मैं इसे कैसे प्राप्त करूंगा? मुझे पता नहीं है कि कहां से शुरू करना है। क्या मुझे पहले 3 डी मॉडल में कुछ समायोजन करने की आवश्यकता है?

जवाबों:


18

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

यदि आप बनावट को रंगते हैं जैसे कि रंगीन क्षेत्र ग्रेस्केल हैं तो आप अल्फा चैनल का उपयोग यह निर्दिष्ट करने के लिए कर सकते हैं कि किन क्षेत्रों को रंगीन बनाने की आवश्यकता है।

तो अपनी छाया में आप (सबसे सरल तरीके के लिए) जा सकते हैं:

float3 finalColor;
if (colorFromTex.a > 0)
 finalColor = colorFromTex.rgb;
else
 finalColor = colorFromTex.rgb*myTintColor.rgb;

हालांकि यह इष्टतम नहीं है क्योंकि आपके पास एक कठिन संक्रमण होगा और आपकी छाया में एक शाखा होगी। इसके बजाय जाना बेहतर है:

float3 finalColor = lerp(colorFromTex.rgb, 
    colorFromTex.rgb*myTintColor.rgb, colorFromTex.a);

क्या आपको पता है कि 3ds Max में 3D मॉडल को DirectX shader कैसे मिलता है? जब मैंने एक प्रकार के shader के साथ एक सामग्री सेट करने का प्रयास किया और shader को ReplaceColor.fx पर सेट किया और मॉडल को निर्यात किया, तो परिणाम था Error 1 Missing asset "C:\Users\Kai\AppData\Local\Temp\fbx.shader.temp.1064.2756\ReplaceColor.fx"। मुझे समझ नहीं आ रहा है कि मैं कैसे सही हो सकता हूं।
rFactor

क्या आप इसे लोड करते हैं? यह अजीब लगता है कि FBX में पथ एक अस्थायी फ़ोल्डर को इंगित करेगा। क्या वह फ़ाइल मौजूद है? मैं 3ds मैक्स से FBX के निर्यात से बहुत परिचित नहीं हूं, लेकिन हो सकता है कि आपको पथ को सापेक्ष बनाने के लिए फ़ाइलों को संपादित करना हो (या एक विकल्प सेट करना)।
लुकास

अच्छी तकनीक, लेकिन अगर आप "टेंबिलिटी" को दर्शाने के लिए अल्फा चैनल का उपयोग कर रहे हैं, तो अपने फ़ाइनलकॉल में अल्फा घटक को रीसेट करना न भूलें।
चारस्टार

3

एक तकनीक में प्रत्येक मॉडल के लिए दो सेट बनावट हैं - एक लाल, दूसरा नीला। फिर यह निर्भर करता है कि आपको कौन सी टीम सौंपी गई है, उस बनावट सेट को लागू करें।

जाहिर है कि यह केवल तभी काम करता है जब आपके पास सिर्फ दो टीमें हों। हालांकि आप इसे दो से अधिक के लिए दूर कर सकते हैं, यह अक्षम होने लगता है।

दूसरा तरीका दो बनावटों को मिश्रण करना है - पहला मॉडल के लिए आधार बनावट, दूसरा एक रंगीन ओवरले होना जो आप रनटाइम के लिए उत्पन्न कर सकते हैं।

तीसरा तरीका आधार मॉडल के रंग को बदलना हो सकता है और मॉडल के उन हिस्सों पर कोई बनावट (या आंशिक रूप से पारदर्शी बनावट) नहीं है जिन्हें आप टीम के रंग दिखाना चाहते हैं।


2

टीम के रंग के लिए एक बनावट अल्फा चैनल समर्पित करना DXT बनावट को 2x बड़ा बनाता है, इसलिए मैं टीम रंग की गणना करने के लिए क्रोमा कुंजी का उपयोग करूंगा । अपने बनावट में एक रंग (जैसे हरा, नीला, मैजेंटा) को "आरक्षित रंग" के रूप में नामित करें।

जब इंजन बूट होता है, तो टीम के रंग पर "आरक्षित रंग" को घुमाने वाले प्रत्येक टीम रंग के लिए एक मैट्रिक्स बनाएं। टीम ऑब्जेक्ट खींचने से ठीक पहले, इस मैट्रिक्स को पिक्सेल शेडर स्थिर के रूप में सेट करें।

पिक्सेल शेडर में, पिक्सेल रंग को टीम कलर मैट्रिक्स द्वारा रूपांतरित करें। परिवर्तित पिक्सेल रंग के साथ अप्रतिष्ठित पिक्सेल रंग का लेप करें, पिक्सेल के क्रोमा के कोण के अनुपात में "आरक्षित रंग के" क्रोमा के अनुपात में।

यह आपको कुछ ALU निर्देशों का खर्च देगा और पिक्सेल shader में ट्रिगर करेगा, लेकिन यह बनावट बुक्स 2x के साथ आपकी बनावट कैश को बड़ा करने की तुलना में बहुत सस्ता है।

आपके पास प्रत्येक रंग के लिए एक बनावट चैनल को समर्पित किए बिना कई क्रोमा कुंजी (जैसे मैजेंटा और सियान एक प्राथमिक और माध्यमिक टीम के रंग पर मैप किए जाने की क्षमता है) है।


1

मेरी तकनीक यह होगी: 2 बनावट वाले: एक मुख्य बनावट, एक दूसरी बनावट जिसमें मुख्य भाग होता है, लेकिन केवल उन हिस्सों को जिन्हें आप रंगना चाहते हैं। दूसरी बनावट का रंग बदलें जैसा आप चाहते हैं।

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