0

これも Nvidia Developer ディスカッションに投稿しました。

http://forums.developer.nvidia.com/devforum/discussion/9946/extracting-numbers-cgfx-shader

初めての cgfx シェーダー (地形シェーダー) の書き方を学んでいます。したがって、1 つの頂点チャネル (アルファ チャネル) しか使用できず、3 つのマスクを格納する必要があります。3d アプリ Maya で問題なくスクリプトをプログラムし、10 分の 1 に 1 つのマスク、100 分の 1 に 1 つ、1000 分の 1 に 1 つのマスクを格納できます。

元のペイントされた各マスクは 0 ~ .9 にクランプされます (fmod でゼロになるのを防ぐため)。

マスク 1 =.857

マスク 2 =.345

マスク 3 -.948

この頂点の結合されたアルファ チャネルは = .839 です。

私が抱えている問題は、シェーダーでこれらのマスクを個別のマスクに適切に抽出できないことです。

Mask1 を出力すると、きれいにブレンドされた適切なマスクが得られます。私はこれを行います:

float Mask1 = (fmod((Mcolor  * 10f ), 10f)) *.111f;

Mask2 を出力すると、これらすべての奇妙なアーティファクトが得られます。Mask2 のみを出力しているときでも、mask1 が自分自身を押し上げているように見えます。私は数学が機能することを確信しています.Mayaで同じことを実行して、最初に値を保存しました. なぜこれが起こっているのか誰にも教えてもらえますか?

平:

float Mask2 = frac(Mcolor *10);

これは、マスク 2 を 10 分の 1 に押し上げ、マスク 1 を消去するだけで、同じアーティファクトが発生します。

float Mcolor = In.VertColor.a;
float Mask1 = (fmod((Mcolor  * 10f ), 10f)) *.111f;
float Mask2 = (fmod((Mcolor * 100f ), 10f)) *.111f;

問題の画像を Nvidia フォーラムに投稿しましたが、スパム防止のためここには投稿できません。

http://forums.developer.nvidia.com/devforum/discussion/9946/extracting-numbers-cgfx-shader

助けていただければ幸いです。最後までお読みいただきありがとうございます。できれば/時間があれば、あなたの反応を説明してください。私はプログラミングに慣れていないので、わかりやすいほど良いです!

4

1 に答える 1

0

頂点シェーダーに出力値を追加するだけです。'texcoord'セマンティクスを指定します。例:float4 Masks:TEXCOORD1;

次に、「Mask1」の代わりに「OUT.Masks.x」を割り当て、「Mask2」の代わりに「OUT.Masks.y」を割り当てます。

フラグメント/ピクセルシェーダーでは、入力に同じ値を含め(コネクタ構造体を使用すると、これを管理しやすくなります)、「IN.Masks.x」などを読み取ります。

于 2012-12-05T00:37:14.600 に答える