Unityと数学の学習帳

Unityと数学の同時学習を目的としたブログ

UnityのShader作成用抽斗

Cg/HLSL でシェーダープロパティーを参照する
https://docs.unity3d.com/ja/current/Manual/SL-PropertiesInPrograms.html

成分ごとの演算 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509634(v=vs.85).aspx

tex2D等の組み込み関数 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509611(v=vs.85).aspx

メモ:「ベクトル×行列」等の積の演算は「*」は無理でmul()関数を利用する

UnityObjectToClipPos等のビルトインシェーダーヘルパー機能
https://docs.unity3d.com/ja/current/Manual/SL-BuiltinFunctions.html

_Time等のビルトインのシェーダー変数
https://docs.unity3d.com/ja/current/Manual/SL-UnityShaderVariables.html


Shader Unity Support
VisualStudio2015にインストールすると.shaderファイルに対してコード補完やハイライト表示が利用できるようになる
(VisualStudio2017には現在未対応)

機能:

  • 「.shader」内の「.cginc」ファイルのコード補完(UnityCG.cginc内の宣言や関数のコード補完に対応している)
  • C/C++スタイルのキーワードハイライト表示
  • 「.cginc」 「.shader」「.compute」ファイルをサポート
  • 括弧のマッチング

https://marketplace.visualstudio.com/items?itemName=MarcinODev.ShaderUnitySupport



グラフィックスコマンドバッファ
https://docs.unity3d.com/ja/current/Manual/GraphicsCommandBuffers.html

コンピュートシェーダー
https://docs.unity3d.com/ja/current/Manual/ComputeShaders.html

GPU インスタンシング
https://docs.unity3d.com/ja/current/Manual/GPUInstancing.html

カスタムシェーダー GUI
https://docs.unity3d.com/ja/current/Manual/SL-CustomShaderGUI.html

[Unity] シェーダを書く準備
http://qiita.com/edo_m18/items/b13f6a51f16ec5d72419

用語
https://msdn.microsoft.com/ja-jp/library/ff604996(v=xnagamestudio.40).aspx


単語・用語
Tranforms position 変換座標
homogenous space 均質空間(相同空間)
homology 相同性 共通の祖先を持つ共通の構造。相似の対義語(相似と相同は明確に違う)


リファレンス

Unity - マニュアル: 内蔵のシェーダー include ファイル
Unity - マニュアル: シェーダーのデータタイプと精度

資料

レンダリングパス
https://docs.unity3d.com/ja/current/Manual/RenderingPaths.html
https://docs.unity3d.com/ja/current/Manual/SL-RenderPipeline.html

フレームデバッガ
https://docs.unity3d.com/ja/current/Manual/FrameDebugger.html

サーフェイスシェーダー
ライティングに作用するシェーダーを書く場合
unity独自のあらかじめ用意された組み込みサーフェイスシェーダーのパーツを利用、流用して楽に自作シェーダーを作成出来る
(unityのライティングを利用したシェーダーを1から自分で組むのは大変らしい)
https://docs.unity3d.com/ja/current/Manual/SL-SurfaceShaders.html

リットシェーダー → 自分で作ったシェーダーの事を指すらしい?


頂点シェーダーとフラグメントシェーダーのプログラミング
フラグメントシェーダーは#pragmaステートメントでどのシェーダー関数を使ってコンパイルするかを示す
それぞれのスニペットには最低でも頂点プログラムとフラグメントプログラムが含まれていなければいけない
https://docs.unity3d.com/ja/current/Manual/SL-ShaderPrograms.html


セマンティクス
セマンティクス (DirectX HLSL).
セマンティクスは、シェーダー入力またはシェーダー出力に付加されている文字列で、パラメーターの使用目的に関する情報を伝達します。セマンティクスは、シェーダー ステージ間で渡されるすべての変数に指定する必要が あります
https://msdn.microsoft.com/ja-jp/library/bb509647(v=vs.85).aspx


<要点>
VisualStudioでHLSLファイルに対してインテリセンスやオートコンプリートを利かせるにはdirectXをインストールする必要がある
UnityやVisualSutdioのインストール方法によってインストールし忘れする事があるので注意


入力セマンティックと出力セマンティックがある。出力は"out"として宣言する
必要なセマンティックが足りない場合、シェーダーは異常終了する

セマンティックは、データがどこで生成されたかを識別します。セマンティックは、シェーダーの入力と出力を識別するオプションの識別子です。
セマンティクスは、次のいずれかの位置に記述します。

  • 構造体メンバーの後。
  • 関数の入力引数リスト内の引数の後。
  • 関数の入力引数リストの後。

組み込み関数 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509611(v=vs.85).aspx



成分ごとの演算 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509634(v=vs.85).aspx


フロー制御 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509600(v=vs.85).aspx


POSITION は頂点位置、一般的には float3 か float4 です。
NORMAL は通常の頂点で、一般的には float3 です。
TEXCOORD0 は、第 1 の UV 座標で、一般的に、float2, float3, float4 です。
TEXCOORD1, TEXCOORD2, TEXCOORD3 は、それぞれ第 2、第 3、第 4 の UV 座標です。
TANGENT は、(ノーマルマッピングで使用される)接線ベクトルで、一般的には、 float4 です。
COLOR は、頂点ごとの色で、一般的には、 float4 です。