次の項目は別ページに分割しました。
関連ページ:
シェーダー/マテリアルの一般的な使い方は次のページにまとめています。
概要
ドキュメント:
Unity で使用するシェーダー言語 | Unity 2018.4 マニュアル [公式]
基本構造
Shader "Diffuse Shader"
{
Properties
{
_Color ("Albedo", Color) = (0.9, 0.2, 0.1, 1.0)
}
SubShader
{
Pass
{
Material
{
Diffuse [_Color]
}
}
}
}
Code language: Arduino (arduino)
構文
ドキュメント:
サーフェスシェーダーの記述 | Unity マニュアル [公式]
導入
参考:
ShaderLab で Unity シェーダの下地作り | マルペケつくろーどっとコム
一つの GameObject で複数の描画をあなたに | 陰干し中のゲーム開発メモ
SubShader
グラフィックスカードおよびレンダリングパイプラインで適切に実行可能な最初のサブシェーダーが選択される。
タグ (Tags)
- Queue
- RenderType
- DisableBatching
- ForceNoShadowCasting
- IgnoreProjector
- CanUseSpriteAtlas
- PreviewType
URP / HDRP
- RenderPipeline
ドキュメント:
コマンド
レンダリングステート
パス
ドキュメント:
プロパティー (Properties)
属性
[HideInInspector]
:インスペクターにプロパティーを表示しない。[NoScaleOffset]
:Tiling と Offset の欄を表示しない。[Normal]
:法線マップテクスチャ[HDR]
:HDR テクスチャ[Gamma]
:sRGB で指定された値であることを示す。[PerRendererData]
:レンダラーからMaterialPropertyBlock
としてデータを読み書きするプロパティー[MainTexture]
:メインテクスチャ (_MainTex
以外の名前のテクスチャをメインテクスチャとしたい場合に用いる。)[MainColor]
:メインカラー (_Color
以外の名前のプロパティーをメインカラーとしたい場合に用いる。)
ドキュメント:
パス (Pass)
レンダリングステート
- Cull
- ZTest
- ZWrite
- Offset
- Blend
- ColorMask
固定関数シェーダー命令
- Lighting
- Material
- SeparateSpecular
- Color
- ColorMaterial
- Fog
- AlphaTest
- SetTexture
タグ (Tags)
- LightMode
ビルトイン
- PassFlags
- RequireOptions
ドキュメント:
Predefined Pass tags in the Built-in Render Pipeline | Unity 2019.4 Manual [Official]
参考:
複数のパスを持つ Shader を使うと何が起こるかを確かめる | ヨシムネ退屈日記
UsePass
ドキュメント:
参考:
UsePass で他のシェーダのパスを使う | LIGHT11
GrabPass
ドキュメント:
フォールバック (Fallback)
ドキュメント:
ShaderLab: Fallback | Unity マニュアル [公式]
テクスチャを適用する
メインテクスチャを適用する。
SetTexture [_MainTex] { combine texture }
アルファブレンディングを適用する。
SetTexture [_BlendTex] { combine texture lerp (texture) previous }
ドキュメント:
Texture Combiners | Unity マニュアル [公式]
ノーマルマップ (Normal Map)
参考:
シェーダーチュートリアル ノーマルマップ | Tsumiki Tech Times
Matcap にノーマルマップを適用する | LIGHT11
デフォルトのトゥーンシェーダにノーマルマップを実装する | 進捗どうですか?
バンプマッピング/法線マッピングをやってみる – Qiita
法線マップ | 知識0からの Unity Shader 勉強
自作シェーダーで法線マップを使うときに注意すること | ヤマヤタケシのブログ
接空間/タンジェント (Tangent)
参考:
座標変換
UnityObjectToClipPos
URP
座標変換に用いる関数は SpaceTransforms.hlsl
で定義されている。
Packages/com.unity.render-pipelines.universal/ShaderLibrary/SpaceTransforms.hlsl
参考:
Unity が勝手にシェーダーコードを書き換える?! | VirtualCast Blog
KeywordEnum
参考:
KeywordEnum がスクリプトから扱いづらい問題とその解決案 | LIGHT11
コードを共通化する
- マクロ
- CGINCLUDE
- UsePass
- インクルードファイル (.cginc) に切り出す
- シェーダーバリアント (
shader_feature
/multi_compile
)
参考:
CGINCLUDE ブロック
参考:
ファイルをインクルードする
プロジェクト内の cginc ファイルをインクルードするには Assets
フォルダ以下のパスを指定する。
#include "Assets/path/to/my_shader_lib.cginc"
参考:
Shader 書く人は .cginc があると幸せになれる – Qiita
Shader で cginc をインクルード | taskem
How can I make my own shader include file (.cginc or .glslinc)? – Unity Answers
How to specify my CGIncludes directories? – Unity Answers
include custom .cginc files – Unity Forum
メタパス
ドキュメント:
ライトマッピングとシェーダーメタパス | Unity 2020.3 マニュアル [公式]
参考:
まとめ
シェーダの基礎を勉強してみたのでやる気出してまとめてみた | 凹みTips
Surface シェーダーとフラグメントシェーダーの違いを軽くまとめてみた – Qiita
ドキュメント
ShaderLab 構文 | Unity マニュアル [公式]