docs.unity3d.com
    目次を表示する/隠す

    Triplanar ノード

    説明

    Triplanar は、ワールド空間への投影によって UV 生成とテクスチャサンプリングを行う方法です。入力 Texture は 3 回 (ワールドの x、y、z 軸で各 1 回ずつ) サンプリングされ、結果の情報はモデル上に平面的に投影され、法線あるいはサーフェスの角度でブレンドされます。生成された UV は入力 Tile でスケール可能で、最終的なブレンドの強度は入力 Blend で制御されます。Blend は、法線が各平面サンプルのブレンドにどのような影響を与えるかを制御し、これは 0 以上である必要があります。Blend の値が大きいほど、最も法線の向きに合った平面からより多くの影響がサンプルに与えられます。(最大ブレンド指数は、プラットフォームとノードの精度によって、17 から 158 までの間になります。) 0 のブレンドでは法線の向きに関わらず各平面のウェイトが同等になります。投影は入力 Position および Normal をオーバーライドすることで修正できます。これは一般的に、地形などの大きなモデル (これらで、UV 座標を手動で作成すると問題やパフォーマンス上効率が悪くなる原因になります) にテクスチャを付けるために使用されます。

    入力 Texture の有効なタイプはドロップダウンメニュー Type で切り替え可能です。Normal に設定すると、法線がワールド空間に変換されるので、新しい接線を構築した上で出力前に接線空間に変換し戻すことが可能になります。

    注意: このノード は、Fragment (フラグメント) シェーダーステージ でのみ使用可能です。

    ポート

    Name Direction タイプ バインディング 説明
    Texture 入力 Texture なし 入力テクスチャの値
    Sampler 入力 サンプラー状態 なし 入力 Texture のサンプラー
    Position 入力 Vector 3 ワールド空間位置 フラグメント位置
    Normal 入力 Vector 3 ワールド空間法線 フラグメント法線
    Tile 入力 Vector 1 なし 生成された UV のタイリングの量
    Blend 入力 Vector 1 なし 異なるサンプル同士のブレンドの因子
    Out 出力 Vector 4 なし 出力値

    制御

    Name タイプ オプション 説明
    タイプ ドロップダウン Default、Normal 入力 Texture のタイプ

    生成されるコードの例

    以下のサンプルコードは、このノードの出力の一例を示したものです。

    Default

    float3 Node_UV = Position * Tile;
    float3 Node_Blend = pow(abs(Normal), Blend);
    Node_Blend /= dot(Node_Blend, 1.0);
    float4 Node_X = SAMPLE_TEXTURE2D(Texture, Sampler, Node_UV.zy);
    float4 Node_Y = SAMPLE_TEXTURE2D(Texture, Sampler, Node_UV.xz);
    float4 Node_Z = SAMPLE_TEXTURE2D(Texture, Sampler, Node_UV.xy);
    float4 Out = Node_X * Node_Blend.x + Node_Y * Node_Blend.y + Node_Z * Node_Blend.z;
    

    Normal

    float3 Node_UV = Position * Tile;
    float3 Node_Blend = max(pow(abs(Normal), Blend), 0);
    Node_Blend /= (Node_Blend.x + Node_Blend.y + Node_Blend.z ).xxx;
    float3 Node_X = UnpackNormal(SAMPLE_TEXTURE2D(Texture, Sampler, Node_UV.zy));
    float3 Node_Y = UnpackNormal(SAMPLE_TEXTURE2D(Texture, Sampler, Node_UV.xz));
    float3 Node_Z = UnpackNormal(SAMPLE_TEXTURE2D(Texture, Sampler, Node_UV.xy));
    Node_X = float3(Node_X.xy + Normal.zy, abs(Node_X.z) * Normal.x);
    Node_Y = float3(Node_Y.xy + Normal.xz, abs(Node_Y.z) * Normal.y);
    Node_Z = float3(Node_Z.xy + Normal.xy, abs(Node_Z.z) * Normal.z);
    float4 Out = float4(normalize(Node_X.zyx * Node_Blend.x + Node_Y.xzy * Node_Blend.y + Node_Z.xyz * Node_Blend.z), 1);
    float3x3 Node_Transform = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
    Out.rgb = TransformWorldToTangent(Out.rgb, Node_Transform);
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)