モデルの特定の部分を色付けする方法-RTSゲームのようにそれらのチームの色がありますか?


16

RTSゲームで見られるもの、つまりチームカラーを実装する必要があります。基本的に、モデルの特定の部分を色付けする方法を探しています。どうすればこれを達成できますか?どこから始めればいいのかわかりません。最初に3Dモデルを調整する必要がありますか?

回答:


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);

DirectXシェーダーを3ds Maxの3dモデルに追加する方法を知っていますか?シェーダーのタイプでマテリアルを設定し、シェーダーをReplaceColor.fxに設定してモデルをエクスポートしようとすると、結果はになりましたError 1 Missing asset "C:\Users\Kai\AppData\Local\Temp\fbx.shader.temp.1064.2756\ReplaceColor.fx"。どうすればそれが正しいのか理解できません。
rFactor

ロードするときですか?FBXのパスが一時フォルダーを指すのは奇妙に思えます。そのファイルは存在しますか?3ds MaxからFBXをエクスポートすることにはあまり慣れていませんが、ファイルを編集(またはオプションを設定)してパスを相対にする必要があるかもしれません。
ルーカス

優れた手法ですが、アルファチャネルを使用して「色合い」を示す場合は、finalColorのアルファコンポーネントをリセットすることを忘れないでください。
チャースター

3

1つの手法は、モデルごとに2セットのテクスチャを使用することです-赤と青 次に、キャラクターが割り当てられているチームに応じて、そのテクスチャセットを適用します。

明らかにこれは、チームが2つしかない場合にのみ機能します。2回以上使用するとうまくいかないかもしれませんが、非効率になり始めます。

もう1つの方法は、2つのテクスチャをブレンドすることです。1つはモデルのベーステクスチャ、2つ目は実行時に生成できる色付きのオーバーレイです。

3番目の方法は、ベースモデルの色を変更し、チームの色を表示するモデルの部分にテクスチャー(または部分的に透明なテクスチャー)を持たないようにすることです。


2

テクスチャアルファチャンネルをチームカラーに当てると、DXTテクスチャが2倍大きくなるため、クロマキーを使用してチームカラーを計算します。テクスチャの「予約色」として1つの色(緑、青、マゼンタなど)を指定します。

エンジンが起動したら、各チームカラーのマトリックスを作成し、「予約色」をチームカラーに回転させます。チームオブジェクトを描画する直前に、このマトリックスをピクセルシェーダー定数として設定します。

ピクセルシェーダーで、チームカラーマトリックスによってピクセルカラーを変換します。ピクセルの彩度と「予約色」の彩度の角度に比例する量だけ、変換されていないピクセル色を変換されたピクセル色で抽出します。

これには、いくつかのALU命令とピクセルシェーダーのトリガーがかかりますが、2倍の大きさのテクスチャでテクスチャキャッシュを膨らませるよりもはるかに安価です。

また、各色に1つのテクスチャチャンネルを割り当てずに、複数のクロマキー(たとえば、マゼンタとシアンをプライマリおよびセカンダリチームカラーにマッピングする)を使用できます。


1

私のテクニックは次のとおりです。2つのテクスチャ:1つのメインテクスチャ、メインにオーバーレイする1つ目のテクスチャ、ただし着色したい部分のみ。必要に応じて2番目のテクスチャの色を変更します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.