วิธีทำให้สีบางส่วนของแบบจำลอง - เหมือนเกม RTS มีสีของทีมเหล่านั้น


16

ฉันต้องการใช้สิ่งที่เราเห็นในเกม RTS: สีของทีม โดยทั่วไปฉันกำลังมองหาวิธีที่จะทำให้สีบางส่วนของแบบจำลอง ฉันจะทำสิ่งนี้ได้อย่างไร ฉันไม่รู้ว่าจะเริ่มจากตรงไหน ฉันจำเป็นต้องทำการปรับเปลี่ยนโมเดล 3 มิติก่อนหรือไม่?

คำตอบ:


18

วิธีที่ฉันจะทำนี้ขึ้นอยู่กับแผนที่พื้นผิวที่คุณใช้กับหน่วย สำหรับสิ่งส่วนใหญ่คุณจะมีบางภูมิภาคที่ต้องย้อมสีและบางพื้นที่ก็ไม่มี ตัวอย่างเช่นคุณอาจมีรถถังธรรมดา แต่คุณต้องการเปลี่ยนสีของธง

หากคุณวาดพื้นผิวราวกับว่าภูมิภาคที่มีสีเป็นสีเทาคุณสามารถใช้ช่องอัลฟาเพื่อกำหนดภูมิภาคที่จำเป็นต้องทำสี

ดังนั้นในส่วนของคุณคุณสามารถไป (สำหรับวิธีที่ง่ายที่สุด):

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

มันไม่ได้ดีที่สุดเพราะคุณจะมีการเปลี่ยนแปลงอย่างหนักและมีสาขาใน shader ของคุณ แทนที่จะดีกว่าไป:

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

คุณรู้วิธีนำ DirectX shader ไปใช้กับโมเดล 3 มิติใน 3ds Max หรือไม่? เมื่อฉันพยายามที่จะกำหนดวัสดุที่มีประเภทของ Shader และตั้ง Shader เพื่อ ReplaceColor.fx Error 1 Missing asset "C:\Users\Kai\AppData\Local\Temp\fbx.shader.temp.1064.2756\ReplaceColor.fx"และส่งออกรูปแบบผลที่ได้ ฉันไม่เข้าใจฉันจะแก้ไขให้ถูกต้องได้อย่างไร
rFactor

นั่นคือเมื่อคุณโหลดหรือไม่ ดูเหมือนแปลกที่เส้นทางใน FBX จะชี้ไปที่โฟลเดอร์ temp มีไฟล์นั้นอยู่หรือไม่? ฉันไม่ค่อยคุ้นเคยกับการส่งออก FBX จาก 3ds Max แต่บางทีคุณอาจต้องแก้ไขไฟล์ (หรือตั้งค่าตัวเลือก) เพื่อสร้างเส้นทางที่สัมพันธ์กัน
ลูคัส

เทคนิคที่ดี แต่ถ้าคุณกำลังใช้ช่องอัลฟาเพื่อแสดงว่า "tintability" อย่าลืมรีเซ็ตองค์ประกอบอัลฟาในขั้นตอนสุดท้ายของคุณ
charstar

3

เทคนิคหนึ่งคือการมีพื้นผิวสองชุดสำหรับแต่ละรุ่น - หนึ่งสีแดงและสีน้ำเงินอื่น ๆ จากนั้นขึ้นอยู่กับทีมที่ตัวละครได้รับมอบหมายให้คุณใช้ชุดพื้นผิวนั้น

เห็นได้ชัดว่ามันใช้งานได้เฉพาะถ้าคุณมีเพียงสองทีม ในขณะที่คุณอาจหนีไปได้มากกว่าสองครั้งมันก็เริ่มไร้ประสิทธิภาพ

อีกวิธีหนึ่งคือการผสมผสานพื้นผิวสองแบบเข้าด้วยกัน - อย่างแรกคือพื้นผิวฐานสำหรับแบบจำลองส่วนที่สองเป็นภาพซ้อนทับสีที่คุณสามารถสร้างได้ในขณะทำงาน

วิธีที่สามอาจเป็นการเปลี่ยนสีของโมเดลพื้นฐานและไม่มีพื้นผิว (หรือพื้นผิวโปร่งใสบางส่วน) เหนือส่วนต่าง ๆ ของโมเดลที่คุณต้องการแสดงสีของทีม


2

การทุ่มเทช่องอัลฟาของพื้นผิวเป็นสีของทีมทำให้พื้นผิว DXT ใหญ่ขึ้น 2 เท่าดังนั้นฉันจึงควรใช้ปุ่มสีเพื่อคำนวณสีของทีม กำหนดหนึ่งสี (เช่นเขียวน้ำเงินน้ำเงินม่วงแดง) เป็น "สีสงวน" ในพื้นผิวของคุณ

เมื่อเครื่องยนต์บู๊ตขึ้นให้สร้างเมทริกซ์สำหรับแต่ละสีของทีมที่หมุน "สีที่สงวนไว้" ลงบนสีของทีม ก่อนที่จะวาดวัตถุทีมให้ตั้งค่าเมทริกซ์นี้เป็นค่าคงที่พิกเซลที่ใช้

ใน shader พิกเซลเปลี่ยนสีของพิกเซลโดยเมทริกซ์สีของทีม Lerp สีพิกเซลที่ไม่เปลี่ยนรูปด้วยสีพิกเซลที่ถูกแปลงโดยจำนวนสัดส่วนกับมุมของสีของพิกเซลกับสีของ "สีที่สงวนไว้"

สิ่งนี้จะทำให้คุณต้องใช้คำแนะนำ ALU และเรียกใช้ในส่วนแบ่งพิกเซล แต่นั่นก็ถูกกว่าการ bloating แคชของพื้นผิวของคุณด้วยพื้นผิว 2x ใหญ่

นอกจากนี้คุณยังมีความสามารถในการมีปุ่ม Chroma หลายปุ่ม (เช่นสีม่วงแดงและสีฟ้าได้รับการจับคู่กับสีของทีมหลักและรอง) โดยไม่ต้องอุทิศช่องสัญญาณพื้นผิวหนึ่งช่องสำหรับแต่ละสี


1

เทคนิคของฉันคือ: มี 2 พื้นผิว: หนึ่งพื้นผิวหลักหนึ่งพื้นผิวที่สองหนึ่งซ้อนทับหลัก แต่เฉพาะส่วนที่คุณต้องการสี เปลี่ยนสีของพื้นผิวที่สองตามที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.