On this page |
vector gradient(float val, ...)
vector gradient(vector P, float val, ...)
このメソッドは、指定したポジションの偏微分(Du
, Dv
, and Dw
)を使って、ボリュームフィールドの微分を計算します。
ポジションを用意しなかった場合、P
がシェーディングコンテキストで使われます。Du
とDv
のみが定義されていれば、微分は、レンダリングされるサーフェスに接線になります。
微分オプション ¶
微分を計算する関数は、追加の引数を受け取ることで、微分計算の調整をすることができます。
"extrapolate
",
int
=0
微分がパッチ境界上で“滑らか”になります。ほとんどの場合、“extrapolate(外挿法)”をオンにすると、そのようになります。 微分計算はC2サーフェスに対して正確であるべきです。しかし、VEX変数が高い頻度で変化する時(例えば、P変数に高い頻度の変更を引き起こす高周波ディスプレイスメントマップ)、 微分計算の外挿法がパッチ境界間で誇張された不連続性が生じる場合があります。
"smooth
",
int
=1
パッチ上の微分の大きさを不均一に調整します。これは通常ではディスプレイスメント/テクスチャのシェーダでパッチの不連続性を減らします。 しかし、時々この機能をオフにしたい場合があります。
N = computenormal(P, "extrapolate", 1, "smooth", 0);
Examples ¶
densityフィールドの勾配ベクトルを返します:
surface test_grad(float density = 0) { Cf = gradient(density); }
See also | |
shading |
|
volume |
|