【Unity/ShaderLab】HLSLでもUNITY_INITIALIZE_OUTPUTを使う

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Unity/ShaderLab】HLSLでもUNITY_INITIALIZE_OUTPUTを使う

2023-2-21 | , ,

UnityのHLSLを使ってるShaderLabでもUNITY_INITIALIZE_OUTPUTを使いたい!

併せて警告されるOutput value 'vert' is not completely initializedもなんとかしたい!

概要

この記事では、UnityのHLSLを使ってるShaderLabでもUNITY_INITIALIZE_OUTPUTを使う手順を掲載する。

警告Output value 'vert' is not completely initializedは、頂点シェーダーの戻り値の構造体を初期化しろや!みたいな感じ。

cgではUnityCG.cgincに宣言されてるUNITY_INITIALIZE_OUTPUTマクロを使って

UNITY_INITIALIZE_OUTPUT(v2f, o);

みたいな感じに初期化できるんだけども、hlslではこのマクロが存在しない。

仕様書

環境

  • Unity 2022.2.4f1

手順書

下記はhlslでもUNITY_INITIALIZE_OUTPUTマクロを使えるようにするサンプル。

#if defined(UNITY_COMPILER_HLSL)
#define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;
#else
#define UNITY_INITIALIZE_OUTPUT(type,name)
#endif

というか、わざわざマクロを使わず、下記のように直接処理を書いても良い。

v2f o = (v2f)0;

まとめ(感想文)

警告が消えてスッキリだ!

分かればなんてこと無いんだけども、初学者には厳しいような。

参考文献・引用

下記のフォーラムの記事を参考にさせて頂きました。
ありがとうございました。