On this page | |
Context(s) | shading |
vector reflectlight(float bias, float max_contrib, ...)
自己反射を軽減するためのbiasは通常では小さい数値(例えば、0.005)を使います。
biasが0よりも小さい場合、vm_raybias
設定で指定したデフォルトのレイトレーシングバイアスが代わりに使われます。
max_contribはレンダラーに反射光がピクセルの最終的なカラーにどれだけ寄与するのかを伝えます。 これは通常ではライティングモデルの反射コンポーネントの最大値です。 これは、結果のカラーには影響を与えません。この値は通常では1より小さくします。
vector reflectlight(vector P, vector D, float bias, float max_contrib, ...)
ポジションPと方向Dを受け取る一般的な形式。
vector reflectlight(vector P, vector N, vector I, float bias, float max_contrib, ...)
ポジションP、方向D、入射角度Iを受け取って反射ベクトルを返す一般的な形式。
領域サンプリングオプション ¶
領域サンプリングをするには、角度とサンプルの可変パラメータの両方を指定しなければなりません。例:
surface blurry_mirror(float angle = 3; int samples = 16; float bias=0.05) { Cf = reflectlight(bias, 1, "angle", angle, "samples", samples); }
光線オプション ¶
Tip
テクスチャを指定する時に例えばenvironment
キーワードと同様に、
画像フィルタリングキーワード引数を使用することもできます。
画像フィルタキーワード引数のリストは、environmentを参照してください。
"scope
",
string
光線に当たることができるオブジェクトのリスト。これを指定すると、scope
は、指定したraystyle
が選択されるようになっていたデフォルトのスコープを上書きします。
scope:default
値は、scope
引数が現在のコンテキストのデフォルトのスコープを使用するようにします。つまり、この引数を指定しなかった時の挙動になります。
光線の交差に対してスコープの上書きが可能になります。
特別なスコープ引数のscope:self
は、現在シェーディングされているオブジェクトにマッチします。
"currentobject
",
material
現行シェーディングオブジェクトがどれなのかを指定するために使用します。例えば、scope引数を使ったscope:self
は、この引数によって渡されたオブジェクトと同じ意味になります。
"maxdist
",
float
=-1
オブジェクトを検索する最大距離。これは、オブジェクトの検索を、その近くにあるオブジェクトだけに制限するために使います。指定したmaxdist
がマイナスなら、最大距離が指定されていないと見なされます。
交差をテストする時に光線が移動できる最大距離を上書きすることができます。 いくつかの関数(例えばfastshadow)には、(光線の長さによって)暗黙的に最大距離が定義されているものがあり、おそらくこのオプションを使用することができません。 しかし、反射、グローバルイルミネーション、屈折などの計算をする時には、このオプションを効果的に使用することができます。
"variancevar
",
string
分散アンチエイリアスで使用するVEXエクスポート変数の名前。レンダラーは、マイクロポリゴンレンダリングでこの値と隣接するマイクロポリゴンを比較し、さらにサンプルを必要とするシェーディングポイントを判断します(閾値としてvm_variance
propertyを使用)。もっとサンプルが必要なら、アルゴリズムは指定した最大光線サンプル数までサンプルを引き上げます。
この変数は、ヒットサーフェスからインポートされなければならないので、この変数はインポートする名前のリストになければなりません(以下の“光線から情報をインポートする”を参照)。名前を付けた変数がインポートされなければ、このオプションは無視されます。
分散アンチエイリアスは、高い分散値を持つ画像の領域内(例えば、シャープなシャドウエッジ)により多くのサンプルを配置します。これはvm_dorayvariance
が有効な時だけに使われます。そうでない場合は、最小光線サンプル(または明示的に指定したsamples
の値)のみがgatherループのアンチエイリアスで使われます。
グローバルのVarianceコントロール(Mantraの-vオプション)を上書きします。 このコントロールは、レイトレーシングのアンチエイリアス品質の決定に使用されます。 詳細は、Mantraのドキュメントを参照してください。
"angle
",
float
=0
分布角度(ラジアンで指定)。gather()に関しては、光線はこのアングル内で分布します。trace()に関しては、この角度は、交差距離が長くなるにつれてフィルタ幅が広がる速さを示すために使用されます。 角度が大きいほど、より遠くにあるヒットサーフェスほど、より大きい微分を使用するので、テクスチャリングとディスプレイスメントのパフォーマンスが良くなります。
効果を出すには、samplesパラメータも指定してください。
"samples
",
int|float
=1
フィルタ光線に送信されるサンプル数。イラディアンスとオクルージョンの関数に関しては、samplesパラメータを指定することで、デフォルトのイラディアンスサンプリングが上書きされます。
"environment
",
string
シーンに送信された光線がどこにも当たらなかった場合に評価される環境マップを指定することができます。
光線の方向を使用すると、指定した環境マップが評価されて、その結果のカラーが返されます。 ほとんどの場合、環境マップを評価するには、トランスフォーム空間を指定する必要があります。
refractlightとtraceの場合では、指定した背景カラーに関係なくOfとAfの変数に0が設定されます。
環境マップを指定する時、texture()のフィルタオプションにも対応しています。
環境/反射マップを作成する方法を参照してください。
"envobject
",
string
環境マップが使用されている場合、光線をシーン内の他のオブジェクト、ライトオブジェクト、フォグオブジェクトの空間に変換することで、その環境マップの向きを指定することができます。 Houdiniでは、Nullオブジェクトを使用して、その向きを指定することができます。例:
Cf = R*reflectlight(bias, max(R), "environment", "map.rat", "envobject", "null_object_name");
"envlight
",
string
環境マップが使用されている場合、光線をシーン内のライトの空間に変換することで、その環境マップの向きを指定することができます。
"envtint
",
vector
環境マップが使用されている場合、このカラーを使って環境マップに色味を付けます。
"background
",
vector
光線がどのオブジェクトにも当たらなかった場合、これをシーンの背景カラーとして使用します。 refractlightとtraceの場合では、指定した背景カラーに関係なくOfとAfの変数に0が設定されます。
"distribution
",
string
関数: irradiance, occlusion
イラディアンスの計算をするための分布。デフォルトでは、コサイン分布(ディフューズ照明)を使用します。
スタイルに指定可能な値は、均一なサンプリングをするnonweighted
、コサインウェイトのサンプリングをするcosine
です。
画像フィルタリングオプション ¶
フィルタパラメータを指定する例:
colormap(map, u, v, "smode", "decal", "tmode", "repeat", "border", {.1,1,1}); colormap(map, u, v, "mode", "clamp", "width", 1.3); colormap(map, u, v, "filter", "gauss", "width", 1.3, "mode", "repeat");
テクスチャがdeep.rat
ファイルの場合、channel
キーワード引数を使用することで、そのファイル内のチャンネルを指定することができます:
string channelname = "N"; cf = colormap(map, u, v, "channel", channelname);
-
Houdiniネイティブフォーマットの
.pic
や.rat
以外のフォーマットでテクスチャを読み込むと、Houdiniは OpenImageIO を使用してファイルから画像データを読み込みます。その場合には、以下の一部の可変引数は何の効果もありません。 -
テクスチャ関数が非Houdiniフォーマットテクスチャを評価すると、Houdiniはそのテクスチャ評価にOpenImageIOを使用するように切り替えます。 多くの可変キーワードに値が呼応していますが、一部のキーワードはOpenImageIOには同等の関数がありません。
-
デフォルトでは、OIIOはマルチ解像度画像を持たない画像に対してMIPマップを生成 しません 。
OPENIMAGEIO_IMAGECACHE_OPTIONS
環境変数の内容にautomip=1
を追加することで、これを有効にすることができます。MIPマップがないと、ブラーとフィルタリングが期待通りに動作しない場合があります。
-
OPENIMAGEIO_IMAGECACHE_OPTIONS
を使用することで、OIIOがキャッシュで使用するメモリ使用量を上書きすることもできます。デフォルトでは、Houdiniはキャッシュメモリを物理コンピュータメモリの1/8に設定します。
OPENIMAGEIO_IMAGECACHE_OPTIONS
変数を設定すると、その計算されたキャッシュサイズが上書きされます。
-
"wrap
",
string
="repeat"
repeat
または periodic
画像マップが0から1の範囲外を繰り返します。 基本的には、テクスチャ座標の整数コンポーネントは無視されます。 これがデフォルトです。
clamp
または edge
または streak
テクスチャ座標が0から1の範囲に制限されます。 これによって、その範囲外では、その画像に最も近いエッジにおけるカラーが評価されます(境界のピクセルが範囲外に引き伸ばされます)。
black
または decal
または color
0から1の範囲外の座標では(画像内のカラーではなく)境界カラーが評価されます。 境界カラーはデフォルトでブラック(つまり0)です。
"uwrap
",
string
(通称swrap
)
u座標が0から1の範囲外の時の挙動を指定します。
この値はwrap
と同じです。
"vwrap
",
string
(通称twrap
)
v座標が0から1の範囲外の時の挙動を指定します。
この値はwrap
と同じです。
"border
",
float|vector|vector4
=0
Black/Decal/Colorのラップが使用されている時の境界カラーを指定します。 OpenImageIOフォーマットには何の効果もありません。
"default_color
",
float|vector|vector4
テクスチャマップが見つからなかった時に使用するカラーを指定します。 この引数を渡さなかった場合、そのカラーはHOUDINI_DEFAULT_TEXTURE_COLOR変数で設定されます。
"channel
",
複数カラー平面(例えば、diffuse_indirect
やN
)を持つテクスチャのカラーチャンネルを指定します。
ptex画像に関しては、ここには1番目のチャンネルのインデックス(例えば、0
や4
)を指定します。
"blur
",
float
xとyの方向にブラーします。ブラーには、画像サイズの比率を指定します。
つまり、0.1のブラーは画像幅の10%をブラーします。
方向別に異なるブラー量が必要であれば、xblur
とyblur
を使用します。
"xblur
",
(通称ublur
, sblur
)
x画像方向のブラー量。
"yblur
",
(通称vblur
, tblur
)
y画像方向のブラー量。
"pixelblur
",
float
浮動小数点の数のピクセルだけテクスチャをブラーします。 OpenImageIOフォーマットには何の効果もありません。
Cf = texture("map.rat", ss, tt, "pixelblur", 2.0);
"xpixelblur
",
float
X方向に浮動小数点の数のピクセルだけテクスチャをブラーします。
"ypixelblur
",
float
Y方向に浮動小数点の数のピクセルだけテクスチャをブラーします。
"filter
",
string
="box"
評価に使用するアンチエイリアスフィルタのタイプを指定します。
Houdiniネイティブフォーマット では、以下の値のどれかを文字列で指定することができます:
"point"
ポイントサンプリング(つまり、フィルタリングなし)
"box"
ボックスフィルタ(デフォルト)
"gauss"
ガウスフィルタ
"bartlett"
Bartlett/Triangularフィルタ
"sinc"
Sinc sharpeningフィルタ
"hanning"
Hanningフィルタ
"blackman"
Blackmanフィルタ
"catrom"
Catmull-Romフィルタ
(OpenImageIOで読み込まれた)他のすべてのフォーマット では、"point"
フィルタを指定すると、OIIOの補間モードが"closest"
に設定され、MIPマップを無効にします。他の値はOIIOのsmart-bicubic補間を使用します。
"filtermode"
可変引数(以下参照)を使用することで、もっと細かくコントロールすることができます。
"xfilter
",
string
(通称ufilter
, sfilter
)
X方向のフィルタを指定します。このフィルタはfilter
と同じです。
"yfilter
",
string
(通称vfilter
, tfilter
)
Y方向のフィルタを指定します。このフィルタはfilter
と同じです。
"filtermode
",
string
Houdiniネイティブフォーマット では、VEXはもっと単純なフィルタリングも対応しています。
filtermode
には以下のどれかを設定することができます:
filter
filter
キーワード引数で指定されたフィルタリングを使用します。
bilinear
単純なバイリニアフィルタリングを使用します。これが最も高速なフィルタリングモードですが、フィルタリングの品質が最も低いです。
biquadratic
単純な2次フィルタリングを使用します(階数3フィルタリング)。
bicubic
単純な3次フィルタリングを使用します。
filtermode
をbilinear
, biquadratic
, bicubic
に設定すると、
いくつかの引数(例えば、filter
やwidth
)が無視され、代わりに固定された補間フィルタが使用されます。
他の引数(特に、lerp
やblur
のキーワード)は有効です。
(OpenImageIOで読み込まれた)他のすべてのフォーマット では、filtermode
に"filter"
(上記の"filter"
を参照)、"bilinear"
、"biquadratic"
、"bicubic"
のどれかを設定することができます。
"width
",
float
=1.0
Houdiniネイティブフォーマット では、これはXとYの両方向のフィルタ幅を設定します。
(OpenImageIOで読み込まれた)他のすべてのフォーマット では、これはOIIOのswidth
とtwidth
のオプションを設定します。
"xwidth
",
float
(通称uwidth
, swidth
)
X方向のフィルタ幅。
"ywidth
",
float
(通称vwidth
, twidth
)
Y方向のフィルタ幅。
"zwidth
",
float
Z方向のフィルタ幅(シャドウマップ用)。 これは、他の幅の引数とは違って、ワールド空間の単位を指定します。
"extrapolate
",
int
アンチエイリアス情報を計算する時に、微分による外挿法を使用するかどうか指定します。微分による外挿法がデフォルトで有効になっています。引数は0か1を指定します。
"lerp
",
int
Houdiniネイティブフォーマット では、RATファイルを異なるMIPレベル間で補間するかどうか指定します。
デフォルトでは無効になっています。補間を有効にすれば、.rat
ファイルの異なるMIPレベルにアクセスした時の不連続性を取り除くのに役に立ちます。
しかし、テクスチャ評価の結果は、少しだけソフトになり(つまり、ぼやけます)、時間がかかります。
この引数には3つの値を指定することができます。
0
MIPマップ補間を無効にします(最高速)。
1
MIPマップ補間を近似します(高速)。
2
最高品質のMIPマップ補間(遅いですが最高品質です)。
(OpenImageIOで読み込まれた)他のすべてのフォーマット では、0の値は単一MIPレベルが指定され、それ以外の値はトリリニア補間が指定されます。
"depthinterp
",
string
ディープシャドウマップの深度補間モードを指定して、マップが2つのz-record間でサンプリングされる時に返す不透明度の値を制御します。
引数は、文字列でなければなりません。
discrete
(デフォルト)サンプルポイントの前の最初のz-recordを返します。
linear
サンプルポイント前と後のz-recordの不透明度を線形的に補間します。
2つのモードの違いは、ディープシャドウマップを参照してください。
"beerlambert
",
int
ボリュームディープシャドウマップを評価する時、これは、不透明度に対してBeer-Lambert補間を有効にします。 Beer-Lambertは正確ですが、処理が重い補間形式です。
引数には、0または1を指定します。
"srccolorspace
",
string
テクスチャを格納するカラー空間を指定します。 テクスチャの値にアクセスすると、それらの値は、必要に応じてレンダリングのために、この空間から線形空間に変換されます。
auto
(デフォルト) ファイルに基づいてソースのカラー空間を決めます。 現在のところ、これは8ビットテクスチャに対してはsRGBカラー空間とみなし、他のテクスチャすべてに対してはリニアカラー空間と見なします。
linear
リニアカラー空間に変換します。これは、現在のところ8ビットテクスチャにのみ影響を与えます。なぜなら、他のテクスチャすべてが既にリニアカラー空間とみなされているからです。 このオプションを使えば、バンプマップやディスプレイスメントマップで使用するテクスチャを強制的に線形補間します。
sRGB
テクスチャのビット深度もチャンネル数も関係なく、強制的にsRGBカラー空間からリニアカラー空間に変換します。
rec709
Rec709カラー空間からリニアカラー空間に変換します。
gamma22
Gamma2.2カラー空間からリニアカラー空間に変換します。
raw
変換されていないマップカラーを使用します。
srccolorspace
引数には、OpenColorIOが認識できるものならどんなカラー空間でも指定することができます。
"face
",
Ptexテクスチャマップを使用する時、face
引数を使用してPtextureルックアップでフェースを指定します。
OpenImageIOフォーマットには何の効果もありません。
"ptexorient
",
int
Ptexテクスチャを使用する時、ポリゴンの暗黙のテクスチャ座標が(face
と組み合わせて)テクスチャルックアップの補間に使用されます。
しかし、別のソフトウェアではポリゴンの周回方向と向きの定義が異なることがあります。
このキーワードの引数は、Houdiniのポリゴンの向きの解釈を制御することができます。
ptexorient
には、ビットフィールドで構成された整数の引数が必要です。
-
ビット 0×01:
s
座標の補数を取ります。 -
ビット 0×02:
t
座標の補数を取ります。 -
ビット 0×04:
s
とt
の座標を入れ替えます。
例えば、6 (0×4|0×2)の値は、texture(map, s, t)
ではなく、texture(map, 1-t, s)
をコールすることと等価です。
デフォルトのptexorient
は0です。これは、http://ptex.usにあるサンプルで正しく動作します。
OpenImageIOフォーマットには何の効果もありません。
"iesnormalization
",
string
="maxvalue"
environment()
関数を介してIESマップの出力値を照会する際にその値を正規化する方法を選択します。
none
ヘッダー内のカンデラ乗数でスケールされたRaw値を使用します。
maxvalue
(デフォルト)最大値で正規化されます。これは、Mantraのデフォルトライトシェーダで使用されている古い挙動です。
preserveenergy
写角の累積値で正規化されるので、IESプロファイルは全体のエネルギー出力を維持しつつライトの形状に影響を与えます。
Examples ¶
surface mirror(vector refl_color=1; float bias=.005) { Cf = refl_color * reflectlight(bias, max(refl_color)); }
See also | |
surface |