Unitのシェーダー最近触り始めた者です。
シェーダーグラフでオブジェクトごとにホワイトバランスを適用しているのですが
オブジェクトが持つ変数の値に応じてホワイトバランスの調整値を変更できるようにしたいです。
どのような方法を使えば実現できるかざっくりとでもご教示いただけますと幸いです。
宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
ホワイトバランスのパラメーターをプロパティとして公開し、外部から変更できるようにする必要があるでしょうね。
マニュアルのUse properties to edit the graphの節がご参考になるかと思います。
たとえば下図のようにTemperature
やTint
を外部に見せて...
オブジェクトに下記のような補助スクリプトをアタッチし、これのtemperature
やtint
を操作すればオブジェクトごとにホワイトバランスを変えられるんじゃないでしょうか。
C#
1using UnityEngine; 2 3[RequireComponent(typeof(Renderer))] 4[ExecuteAlways] 5public class WhiteBalance : MonoBehaviour 6{ 7 private static readonly int TemperatureProperty = Shader.PropertyToID("_Temperature"); 8 private static readonly int TintProperty = Shader.PropertyToID("_Tint"); 9 10 public float temperature = 1.4f; 11 public float tint = 0.3f; 12 13 private float previousTemperature = float.NaN; 14 private float previousTint = float.NaN; 15 16 private new Renderer renderer; 17 private MaterialPropertyBlock materialPropertyBlock; 18 19 private void OnEnable() 20 { 21 this.renderer = this.GetComponent<Renderer>(); 22 this.materialPropertyBlock = new MaterialPropertyBlock(); 23 } 24 25 private void Update() 26 { 27 if ((this.temperature == this.previousTemperature) && (this.tint == this.previousTint)) 28 { 29 return; 30 } 31 32 this.materialPropertyBlock.SetFloat(TemperatureProperty, this.temperature); 33 this.materialPropertyBlock.SetFloat(TintProperty, this.tint); 34 this.renderer.SetPropertyBlock(this.materialPropertyBlock); 35 this.previousTemperature = this.temperature; 36 this.previousTint = this.tint; 37 } 38}
投稿2020/10/18 22:22
総合スコア10811
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/19 10:39