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