On this page |
float area(vector p, ...)
この関数は、マイクロポリゴンの面積を取得するのに、Du(P)
の長さとDv(P)
の長さを乗算するよりも、正確で便利な関数です。
通常では、ピクセル単位でシェーディング面積を取得するために使います。
Note
この関数が動作するのは、VEXが変数P
に微分値(dPdu
とdPdv
)があることを知っている時です。
P
などの特別な変数の代わりに、文字通りにベクトルを指定すると、0
が返されます。なぜなら、VEXが微分値にアクセスできないからです。
オプションのパラメータを指定すれば、計算を制御することができます。
オプションのパラメータ"extrapolate"
は、エッジで微分外挿法を実行するかどうか制御します。
微分オプション ¶
微分を計算する関数は、追加の引数を受け取ることで、微分計算の調整をすることができます。
"extrapolate
",
int
=0
微分がパッチ境界上で“滑らか”になります。ほとんどの場合、“extrapolate(外挿法)”をオンにすると、そのようになります。 微分計算はC2サーフェスに対して正確であるべきです。しかし、VEX変数が高い頻度で変化する時(例えば、P変数に高い頻度の変更を引き起こす高周波ディスプレイスメントマップ)、 微分計算の外挿法がパッチ境界間で誇張された不連続性が生じる場合があります。
"smooth
",
int
=1
パッチ上の微分の大きさを不均一に調整します。これは通常ではディスプレイスメント/テクスチャのシェーダでパッチの不連続性を減らします。 しかし、時々この機能をオフにしたい場合があります。
N = computenormal(P, "extrapolate", 1, "smooth", 0);
Examples ¶
カメラ空間での現在のマイクロポリゴンの面積を返します:
area(P)
NDC空間での現在のマイクロポリゴンの面積を返します:
area(transform("ndc", P))
引数に微分値を持つ変数を指定していないので0
を返します:
area({0.1, 2.3, 4.5})
See also | |
shading |
|