Risposte:
Il modo in cui lo farei è basato sulle mappe delle trame che stai applicando alle unità. Per la maggior parte delle cose avresti alcune regioni che devono essere colorate e altre no. Quindi, ad esempio, potresti avere un normale carro armato ma vuoi solo cambiare il colore di alcune bandiere.
Se dipingi la trama come se le aree colorate fossero in scala di grigi, puoi utilizzare il canale alfa per designare quali regioni devono essere colorate.
Quindi nel tuo shader potresti andare (per il modo più semplice):
float3 finalColor;
if (colorFromTex.a > 0)
finalColor = colorFromTex.rgb;
else
finalColor = colorFromTex.rgb*myTintColor.rgb;
Questo non è ottimale, dal momento che avrai una transizione difficile e avrai un ramo nel tuo shader. Invece è meglio andare:
float3 finalColor = lerp(colorFromTex.rgb,
colorFromTex.rgb*myTintColor.rgb, colorFromTex.a);
Una tecnica consiste nell'avere due serie di trame per ciascun modello: uno rosso e l'altro blu. Quindi, a seconda della squadra a cui è assegnato il personaggio, applica quel set di trame.
Ovviamente questo funziona solo se hai solo due squadre. Mentre potresti cavartela per più di due, inizia a diventare inefficiente.
Un altro modo è fondere due trame: la prima è la trama di base per il modello, la seconda è una sovrapposizione colorata che è possibile generare in fase di esecuzione.
Un terzo modo potrebbe essere quello di cambiare il colore del modello base e non avere trame (o trame parzialmente trasparenti) su quelle parti del modello che si desidera mostrare i colori della squadra.
Dedicare un canale alfa trama al colore della squadra rende le trame DXT 2 volte più grandi, quindi preferirei usare il chroma key per calcolare il colore della squadra. Designare un colore (ad es. Verde, blu, magenta) come "colore riservato" nelle trame.
Quando il motore si avvia, crea una matrice per ciascun colore di squadra che ruota il "colore riservato" sul colore di squadra. Appena prima di disegnare un oggetto team, imposta questa matrice come costante di pixel shader.
Nel pixel shader, trasforma il colore dei pixel con la matrice dei colori del team. Lerp il colore del pixel non trasformato con il colore del pixel trasformato, di una quantità proporzionale all'angolo del chroma del pixel rispetto al chroma del "colore riservato".
Questo ti costerà alcune istruzioni ALU e un trig nel pixel shader, ma è molto più economico che gonfiare la cache delle texture con trame due volte più grandi.
Hai anche la possibilità di avere più chroma key (ad es. Magenta e ciano vengono mappati su un colore di squadra principale e secondario) senza dedicare un canale di trama a ciascun colore.
La mia tecnica sarebbe: Avere 2 trame: una trama principale, una trama seconda sovrapponendo la trama principale ma solo le parti che si desidera colorare. Cambia il colore della seconda trama come desideri.
Error 1 Missing asset "C:\Users\Kai\AppData\Local\Temp\fbx.shader.temp.1064.2756\ReplaceColor.fx"
. Non capisco come posso farlo correttamente.