6
การสร้างเอฟเฟ็กต์การสลับสีแบบย้อนยุคใน OpenGL
ฉันกำลังทำงานกับเกมที่คล้ายกับMegamanซึ่งฉันต้องเปลี่ยนสีของพิกเซลบางตัวในขณะใช้งานจริง สำหรับการอ้างอิง : ในMegamanเมื่อคุณเปลี่ยนอาวุธที่คุณเลือกจากนั้นจานสีของตัวละครหลักจะเปลี่ยนไปตามอาวุธที่เลือก ไม่ทั้งหมดของผีสางของการเปลี่ยนแปลงสีเพียงบางคนทำ เอฟเฟกต์แบบนี้เป็นเรื่องปกติและค่อนข้างง่ายที่จะทำกับ NES เนื่องจากโปรแกรมเมอร์สามารถเข้าถึงพาเล็ตและการแมปโลจิคัลระหว่างพิกเซลและดัชนีพาเล็ต สำหรับฮาร์ดแวร์ที่ทันสมัยสิ่งนี้ค่อนข้างท้าทายกว่าเพราะแนวคิดของจานสีไม่เหมือนกัน พื้นผิวทั้งหมดของฉันเป็นแบบ 32 บิตและไม่ใช้จานสี มีสองวิธีที่ฉันรู้เพื่อให้ได้ผลตามที่ฉันต้องการ แต่ฉันอยากรู้ว่าถ้ามีวิธีที่ดีกว่าในการบรรลุผลนี้ได้อย่างง่ายดาย สองตัวเลือกที่ฉันรู้คือ: ใช้ shader และเขียน GLSL บางอย่างเพื่อดำเนินการ "palette swapping" หากไม่สามารถใช้เฉดสีได้ (เช่นเนื่องจากการ์ดกราฟิกไม่รองรับ) ก็เป็นไปได้ที่จะลอกแบบพื้นผิว "ดั้งเดิม" และสร้างรุ่นที่แตกต่างกันโดยมีการเปลี่ยนสีที่นำไปใช้ล่วงหน้า เป็นการดีที่ฉันต้องการใช้ shader เนื่องจากดูเหมือนว่าตรงไปตรงมาและต้องการงานเพิ่มเติมเล็กน้อยเมื่อเทียบกับวิธีการทำซ้ำพื้นผิว ฉันกังวลว่าพื้นผิวที่ซ้ำซ้อนเพียงเพื่อเปลี่ยนสีในพวกเขากำลังสูญเสีย VRAM - ฉันไม่ควรกังวลเกี่ยวกับสิ่งนั้นหรือ แก้ไข : ฉันลงเอยด้วยการใช้เทคนิคของคำตอบที่ยอมรับและนี่คือ shader ของฉันสำหรับการอ้างอิง uniform sampler2D texture; uniform sampler2D colorTable; uniform float paletteIndex; void main() …