夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

ShaderGraphでクリッピング表現を行う。 その② Unityエディタ上でのコントロール

本日はShader学習枠です。

昨日は特定の範囲がクリッピング(くりぬき)される表現を実装しました。

redhologerbera.hatenablog.com

今回はこちらをさらに改造して、クリッピング範囲を任意に動かせるようにします。

〇クリッピング範囲の移動

BlackboardにVector3型の変数ClippingPositionを加えます。

f:id:Holomoto-Sumire:20220303203742p:plain

PositionノードとSplitノードの間にAddノードを追加し、Positionノードの値にClippingPositionを加算します。

f:id:Holomoto-Sumire:20220303204043p:plain

③これによってマテリアルのプロパティからクリッピングの位置を変えることができるようになりました。

f:id:Holomoto-Sumire:20220303204824p:plain

ClippingPositionはVector3型で定義していますが、マテリアル上ではz値も含んだVector4型で表示されています。ここではz値は表示されているだけで使用されることはありません。

〇スクリプトとShaderを対応させる。

①次のスクリプトを適当なゲームオブジェクトへアタッチします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class ClipSphere : MonoBehaviour
{
    [SerializeField] Material _ClipMat;


    // Update is called once per frame
    void Update()
    {
            UpdateShaderParam();
    }
    void UpdateShaderParam()
    {
        Vector4 pos = this.transform.position *-1;
        _ClipMat.SetVector("_ClipPosition",pos);
    }
}

f:id:Holomoto-Sumire:20220303205434p:plain

②ShaderGraphのBlackboardからClippingPositionを選択し、GraphInspectorウィンドウからReferenceの値を_ClipPositionを入力します。

f:id:Holomoto-Sumire:20220303205735p:plain

ClipSphereのMaterialに対象のShaderを適応したマテリアルをアタッチします。

f:id:Holomoto-Sumire:20220303211427p:plain

これによってClipSphereをアタッチしたオブジェクトの座標とくりぬかれる座標が一致しするようになります。

f:id:Holomoto-Sumire:20220303211700p:plain

〇[ExecuteInEditMode]

ExecuteInEditModeはUnityで提供されるアトリビュート(属性)で、これをつけたクラスは実行中ではなくても処理が動きます。

これによってコンポーネントをアタッチした座標とマテリアルのパラメータを同期させています。