Yanıtlar:
Bunu nasıl yapacağım, birimlere uyguladığınız doku haritalarına dayanır. Çoğu şey için, renklendirilmesi gereken bazı bölgeler ve bazılarında olmayan. Örneğin, normal bir tankınız olabilir, ancak bazı bayrakların rengini değiştirmek istersiniz.
Dokuyu renkli bölgeler gri tonlamalıymış gibi boyarsanız, hangi bölgelerin renklendirilmesi gerektiğini belirtmek için alfa kanalını kullanabilirsiniz.
Böylece gölgelendiricinizde gidebilirsiniz (en basit şekilde):
float3 finalColor;
if (colorFromTex.a > 0)
finalColor = colorFromTex.rgb;
else
finalColor = colorFromTex.rgb*myTintColor.rgb;
Zor bir geçişiniz olacak ve gölgelendiricinizde bir dal olacak. Bunun yerine gitmek daha iyidir:
float3 finalColor = lerp(colorFromTex.rgb,
colorFromTex.rgb*myTintColor.rgb, colorFromTex.a);
Bir teknik, her model için iki doku setine sahip olmaktır - biri kırmızı, diğeri mavi. Daha sonra karakterin hangi takıma atandığına bağlı olarak, bu doku kümesini uygular.
Açıkçası bu sadece iki ekibiniz varsa işe yarar. Eğer ikiden fazla ile kaçabilirken, verimsiz olmaya başlar.
Başka bir yol, iki dokuyu karıştırmaktır - ilki model için temel doku, ikincisi çalışma zamanında üretebileceğiniz renkli bir kaplamadır.
Üçüncü yol, temel modelin rengini değiştirmek ve takımın renklerini göstermek istediğiniz modelin parçaları üzerinde hiçbir dokuya (veya kısmen saydam dokulara) sahip olmamak olabilir.
Takım rengine bir doku alfa kanalı ayırmak DXT dokularını 2 kat büyütür, bu yüzden takım rengini hesaplamak için chroma key kullanmayı tercih ederim . Tek bir rengi (örn. Yeşil, mavi, macenta) dokularınızda "ayrılmış renk" olarak belirleyin.
Motor açıldığında, her bir takım rengi için "ayrılmış rengi" takım rengine döndüren bir matris yapın. Bir takım nesnesi çizmeden hemen önce, bu matrisi piksel gölgelendirici sabiti olarak ayarlayın.
Piksel gölgelendiricide, piksel rengini takım renk matrisine dönüştürün. Dönüştürülmemiş piksel rengini, dönüştürülen piksel rengiyle, pikselin renk değerinin "ayrılmış rengin" renk değerine göre orantılı bir miktarda ekleyin.
Bu size bazı ALU komutlarına ve piksel gölgelendiricisinde tetiklemeye mal olacak, ancak bu, doku önbelleğinizi 2 kat büyük dokularla şişirmekten çok daha ucuz.
Ayrıca, her renge bir doku kanalı ayırmadan birden fazla chroma key (örn. Macenta ve mavi, birincil ve ikincil takım rengine eşleştirilebilir) özelliğine sahip olabilirsiniz.
Benim tekniğim: 2 dokuya sahip olmak: bir ana doku, ana üzerine üst üste binen ikinci bir doku ama sadece renklendirmek istediğiniz parçalar. İkinci dokunun rengini istediğiniz gibi değiştirin.
Error 1 Missing asset "C:\Users\Kai\AppData\Local\Temp\fbx.shader.temp.1064.2756\ReplaceColor.fx"
. Bunu nasıl düzeltebileceğimi anlamıyorum.