テクスチャ空間マッピング

テクスチャ空間マッピング シェーダは、テクスチャ空間の選択、作成、および再マッピング、基底ベクトルの計算、その他カラーまたはディスプレイスメントを適用する前に必要となる作業を行います。これらの機能の中には select パラメータを使用するものがあり、その値は次のいずれかになります。

0..63 テクスチャ ベクトルを選択します。この値が定義済みのテクスチャ空間の数字を越えた場合は、デフォルトで -1(空間内の点)になります。
−1 空間内の 3D ポイントを直接選択し、場合により空間ポイント変換を適用します。
−2 法線ベクトルを選択し、場合により空間ベクトル変換を適用します。
−3 モーションベクトルを選択し、場合により空間ベクトル変換を適用します。
−4 レイの方向を選択し、場合により空間ベクトル変換を適用します。
−5..−9 サーフェス導関数ベクトルを選択し、場合により空間ベクトル変換を適用します。値は、P⁄∂U、∂P⁄∂V、∂²P⁄∂U²、∂²P⁄∂V²、∂²P⁄(∂UV)です。 オブジェクトは導関数を含むように定義する必要があります。
−10 スクリーン左下で (0, 0, 0) である 2D バックグラウンド プレート座標を選択し、スクリーン右上少し外側で (1, 1, 0) を選択します。このモードでは selspace は無効です。変換は mib_lookup_background で行われるものと似ています。
−11 通常はタイプ テクスチャのパラメータを評価する時点でマテリアル シェーダによって入力され、テクスチャ シェーダに使用される状態にあるテクスチャ座標が選択されます。

空間変換では、投影の基になっているベクトルをオブジェクト座標、ワールド座標、カメラ座標のいずれかに変換することができます。selspace は以下のいずれかの値です。

0変換を適用せず、内部空間を使用します。
1ベクトルをオブジェクト空間に変換します。
2ベクトルをワールド空間に変換します。
3ベクトルをカメラ空間に変換します。
4現在のスクリーン スペース座標を [0,0 ... 1,1) の間隔で戻します。

project パラメータを設定することにより、結果となるベクトルに追加の投影が適用されます。

0投影を無効にします。
1可能な場合は UV 投影を選択します。
2正射 XY 投影を選択します。
3正射 XZ 投影を選択します。
4正射 YZ 投影を選択します。
5球面投影を選択します。
6円柱投影を選択します。正の X では U=0、正の Y では V=0 です。Y は円柱の軸でもあります。
7ロリポップ投影(テクスチャ ベクトルの正規化後にテクスチャの中心が X=0.5 Z=1 になり、コーナーがパラメータのコーナーになります)を選択します。球体では、ロリポップ ラッパーのように、テクスチャの中心は北極に、テクスチャ コーナーは南極になります。

テクスチャ頂点ジェネレータ

空間(XY、XZ、YZ)内の 3D ポイント、非正射投影(球面または円柱)の正射投影から派生したテクスチャベクトルを戻します。または、テクスチャ ベクトル リストから番号の付けられたテクスチャ ベクトルを戻します。オプションで、オブジェクト空間、カメラ空間、ワールド空間、スクリーン スペースのいずれかをベースにして計算することができます。

mib_texture_vector
    vector "mib_texture_vector" (
        integer         "select",
        integer         "selspace",
        integer         "vertex",
        integer         "project")
select
すでに説明したように、ルックアップする値を指定します。
selspace
すでに説明したように、投影に使用するソース空間を選択できます。空間の変換は、選択パラメータによって指定された投影の前に実行されます。selspace が 4(スクリーン スペース)である場合、select、vertex、project は無効になります。
vertex
頂点の位置を指定します。0 は交差ポイント、1、2、3 は交差した三角形の頂点です。select が -10 である場合は無効になります。
project
選択および空間変換の後に実行される投影を指定します。select が -10 である場合は無効になります。

テクスチャ頂点再マッピング

テクスチャ頂点を受け入れ、頂点のスケール、回転、移動、クロップ、結合を行います。操作の順序は、まずトランスフォームを行ってから繰り返し、alt、torus、そして最後に最小/最大のクロップです。結果が戻されます(state→tex に格納され、他のシェーダによって使用されます)。

mib_texture_remap
    vector "mib_texture_remap" (
        vector          "input",
        transform       "transform",
        vector          "repeat",
        boolean         "alt_x",
        boolean         "alt_y",
        boolean         "alt_z",
        boolean         "torus_x",
        boolean         "torus_y",
        boolean         "torus_z",
        vector          "min",
        vector          "max",
        vector	        "offset")
input
テクスチャベクトルを戻す mib_texture_vector などのジェネレータからのテクスチャ ベクトルです。このシェーダが mi_call_shader_x の中でゼロ以外の arg パラメータを指定して呼び出されると input は上書きされます。再マッピング パラメータがこれらすべてについて同一である場合に、複数のテクスチャ座標の再マッピングに役立ちます。
transform
残りのパラメータが適用される前にテクスチャ ベクトルに適用される一般的なトランスフォームです。transform[3][3] が 0.0 である場合は、行列は無効になります(通常 transform[3][3] は 1.0です)。
repeat
テクスチャベクトルとの乗算が行われる X、Y、Z の反復係数が含まれます。たとえば、値が 2 の場合は、テクスチャが縮小されて [0, 1) の間隔に 2 回収まるようになります。この間隔の外部では、繰り返しは無効です。反復係数による乗算の後、整数部分が削除されます。このアルゴリズムにより、トランスフォーム パラメータによって決定された間隔における有限な反復が可能になります。反復の値が 0 の場合は、この値があたかも 1 であったかのように、対応するコンポーネントにおける反復がオフになります。
alt_*
反復の 1 つおきのコピーを反転し、後に続くテクスチャのコピーが正反対の方向に交互にトラバースされるようにするかどうかを指定します。 代わりのフラグが有効になるのは対応する反復コンポーネントが 1 よりも大きい場合のみで、[0, 1) の間隔内でのみ動作します。
torus_*
テクスチャ空間を範囲 [0, 1) にマッピングし、0 よりも小さい値および 1 以上の値は整数部を切り捨てることによってこの範囲に含まれるようにします。
min
max
考慮するテクスチャの範囲を指定することによってイメージまたはボリュームの切り取りを実装します。この範囲の外にあるテクスチャ部分はトリムされます。repeat を使用する場合は、1 つのコピーの最大ポイントが次のコピーの最小ポイントに結合されます(alternation がオンになっている場合を除く)。min は包括的、max は排他的です。min コンポーネントが対応する max コンポーネントと等しい場合は、いずれも無効になります。
offset
テクスチャルックアップの前にテクスチャベクトルに追加されるベクトルです。

サーフェス方向の回転

ある角度を使用してサーフェス法線を中心としてサーフェス方向を回転します。正射投影ベクトルのペアが戻され、このペアが回転後の方向を(ペアの双方にとって正射投影である法線を使用して)定義します。これは特に異方性反射に便利です(以下参照)。

mib_texture_rotate
    struct {
        vector          "u",
        vector          "v"
    } "mib_texture_rotate" (
        vector          "input",
        scalar          "angle",
        scalar          "min",
        scalar          "max")
u
v
戻される正射投影ベクトルです。
input
回転されるテクスチャ ベクトルです。内部空間で予期されます。
angle
回転として解釈されるスカラーです。min に等しい値では回転は行われず、max に等しい値では 360 度の回転が行われます。角度には、たとえばテクスチャ ルックアップからの強度などを使用します。
min
max
回転なし、および完全な回転に対応する限度値を指定します。角度値 α は、まず α∗(max−min)+min にマッピングされます。min と max がいずれも 0 である場合は、デフォルトは 0 と 0.25になり、それぞれ 0 度と反時計回りの 90 度を意味します。

バンプ基底ジェネレータ

交差ポイントを指定して、投影方法(上記の UV、XY、XZ、YZ、球面、円柱)に基づいてバンプの基底ベクトルのペアを計算します。

mib_bump_basis
    struct {
        vector          "u",
        vector          "v"
    } "mib_bump_basis" (
        integer         "project",
        integer         "ntex")
project
上で説明したように、実行する投影を指定します。すべての投影は、オブジェクト空間への変換後、3D ポイントに基づいて行われます。このパラメータはバンプの基本の向きを決定するために使用されます。
ntex
使用するテクスチャ空間で、範囲は 0 ... 63 です。投影が UV(5)または無効(0 または負の値)である場合にのみ使用されます。それ以外の場合は、ntex は無効です。

バンプ マッピング

複数のポイントにおけるテクスチャを評価することによって U グラディエントおよび V グラディエント(基底ベクトルと乗算され、元の法線と結合され、正規化されたうえで書き込まれる)を計算し、法線ベクトルに対してテクスチャを適用します。法線も戻されます。state→tex は未定義のままにしておきます。

mib_bump_map
    vector "mib_bump_map" (
        vector          "u",
        vector          "v",
        vector          "coord",
        vector          "step",
        scalar          "factor",
        boolean         "torus_u",
        boolean         "torus_v",
        boolean         "alpha",
        color texture   "tex",
        boolean         "clamp")
u
v
バンプの基底ベクトルです。mib_bump_basis などの別のベースシェーダから生成することもできます。
coord
バンプの計算対象となるテクスチャ座標です。
step
座標に対するオフセットです。シェーダはサンプリングを 3 回((coord_x, coord_v)(coord_x + step_x, coord_v)(coord_x, coord_v + step_v) の 3 箇所)行います。結果となる U グラディエントおよび V グラディエントには、それぞれ u および v 基底ベクトルが掛けられた後にこの係数が掛けられ、最後に法線に追加され、再正規化されます。ステップコンポーネントが 0 である場合は、デフォルトの 0.01 になります。
factor
エフェクトの強度をコントロールします。0 の場合は、デフォルトで 1 になります。
torus_u
torus_v
座標に step が追加された場合に、その結果(X、Y、Z)をラップして間隔 [0 ... 1) に収めます。
alpha
true の場合は、カラーテクスチャの強度の代わりにアルファ コンポーネントを使用します。
tex
3 回にわたってルックアップするカラー テクスチャまたはシェーダです (割り当てられたシェーダがシェーダを戻す場合は、「=」注釈を使用したシェーダ割り当てだけを使用します)。
clamp
true の場合は、バンプ マッピング領域を [0, 1] テクスチャ座標範囲に制限します。

以下のシェーダはパラメータを含めてこれまでのものと同じですが、ベクトルの代わりにカラーを戻します。このカラーは変更されません。このため、実際のマテリアル シェーダの先頭にこのシェーダを追加することによって、マテリアル シェーダ リスト内でこのシェーダを使用することができます。この設定では、このシェーダは最初に呼び出され、マテリアル シェーダが法線ベクトルを使用してイルミネーションを計算する前の状態で法線ベクトルを修正します。同時に、計算された結果となるカラーには一切影響しません。

mib_passthrough_bump_map
    vector "mib_passthrough_bump_map" (
        vector          "u",
        vector          "v",
        vector          "coord",
        vector          "step",
        scalar          "factor",
        boolean         "torus_u",
        boolean         "torus_v",
        boolean         "alpha",
        color texture   "tex",
        boolean         "clamp")

パラメータの説明については、上記を参照してください。


これはバンプ マップ シェーダのもう 1 つのアプローチであり、state→normal を変更してから color 入力に接続されているすべてのシェーディング グラフを評価するという点が先ほどのものとは異なります。このようにしてかき乱された法線は、接続されたシェーダまたはツリーには可視になります。Phong などのイルミネーション シェーダは、color パラメータに接続するのが普通です。

バンプ マップは、テクスチャ空間 0 を使用して、テクスチャから 3 つのテクスチャ サンプルを見ます。戻された 3 つの値の相違は法線のベンドを表します。法線は bump_vectors が存在する場合はその方向にベンドされ、それ以外の場合は導関数の方向にベンドされます。変更された法線は state に保存され、続いて color の評価が呼び出されます。color にアタッチされているすべてのシェーダではこの変更された法線が使用されます。法線は最後に元の値に戻されます。

    
    color "mib_bump_map2" (
	scalar          "factor",
	scalar          "scale",
	color texture   "tex",
	color           "color"	)
  
factor
バンプの強度を決定します。
scale
最初のテクスチャ座標を使用してバンプ マップを反復する回数を決定します。
tex
法線の摂動をルックアップするテクスチャを指定します。
color
イルミネーション シェーダのアタッチ先にするカラーです(Phong など)。

Copyright (©) 1986-2008 by mental images GmbH