⚡
【URP14】EnumをHLSLコードに生成するGenerateHLSLを試す
環境
- Unity2022.3.31f1
- UniversalRP 14.0.11
概要
C#のenumをシェーダー上の定数に変換できる GenerateHLSL
アトリビュートについて紹介します。
Chapter1. GenerateHLSLを試す
enumの定義 (C#)
以下のようなenumを定義します。
Assets/Scripts/MySampleEnum.cs
using UnityEngine.Rendering;
[GenerateHLSL]
public enum MySampleEnum
{
Zero = 0,
One = 1,
Two = 2,
Twenty = 20,
}
HLSLの生成
メニューから Edit > Rendering > Generate Shader Includes を選択します
結果
スクリプトと同じ階層に、HLSLコードが生成されます。
かなり簡単にHLSLが生成されました。
Assets/Scripts/MySampleEnum.cs.hlsl
//
// This file was automatically generated. Please don't edit by hand. Execute Editor command [ Edit > Rendering > Generate Shader Includes ] instead
//
#ifndef MYSAMPLEENUM_CS_HLSL
#define MYSAMPLEENUM_CS_HLSL
//
// MySampleEnum: static fields
//
#define MYSAMPLEENUM_ZERO (0)
#define MYSAMPLEENUM_ONE (1)
#define MYSAMPLEENUM_TWO (2)
#define MYSAMPLEENUM_TWENTY (20)
#endif
Chapter2. 出力先を指定する
sourcePath
を利用することで、HLSLファイルを好きな場所に出力できます。
Assets/Scripts/MySampleEnum.cs
using UnityEngine.Rendering;
[GenerateHLSL(sourcePath:"Assets/Shaders/MyShaderInclude")]
public enum MySampleEnum
{
Zero = 0,
One = 1,
Two = 2,
Twenty = 20,
}
出力されるHLSLファイルのパスは
Assets/Shaders/MyShaderInclude.hlsl
となります。
リンク
GenerateHLSL完全に理解した - 太郎Work
https://tarowork.hatenablog.jp/entry/2022/12/06/231537
Class GenerateHLSL | Core RP Library | 14.0 - Unity
https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@14.0/api/UnityEngine.Rendering.GenerateHLSL.html
Synchronizing shader code and C# | Core RP Library | 12.0.0
https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@12.0/manual/generating-shader-includes.html
Discussion