概要

参考:

Unity で使用するシェーダー言語 | Unity 2018.4 マニュアル [公式]

基本構造

Shader "Diffuse Shader"
{
    Properties
    {
        _Color ("Albedo", Color) = (0.9, 0.2, 0.1, 1.0)
    }

    SubShader
    {
        Pass
        {
            Material
            {
                Diffuse { _Color }
            }
        }
    }
}

構文

参考:

サーフェスシェーダーの記述 | Unity マニュアル [公式]

導入

参考:

ShaderLab で Unity シェーダの下地作り | マルペケつくろーどっとコム

一つの GameObject で複数の描画をあなたに | 陰干し中のゲーム開発メモ

SubShader

グラフィックスカードおよびレンダリングパイプラインで適切に実行可能な最初のサブシェーダーが選択される。

タグ (Tags)

  • Queue
  • RenderType
  • DisableBatching
  • ForceNoShadowCasting
  • IgnoreProjector
  • CanUseSpriteAtlas
  • PreviewType

[URP / HDRP]

  • RenderPipeline

参考:

SubShader | Unity マニュアル [公式]

コマンド

レンダリングステート

パス

参考:

Commands | Unity 2019.4 Manual [Official]

プロパティー (Properties)

属性

  • [HideInInspector]:インスペクターにプロパティーを表示しない。
  • [NoScaleOffset]:Tiling と Offset の欄を表示しない。
  • [Normal]:法線マップテクスチャ
  • [HDR]:HDR テクスチャ
  • [Gamma]:sRGB で指定された値であることを示す。
  • [PerRendererData]:レンダラーから MaterialPropertyBlock としてデータを読み書きするプロパティー
  • [MainTexture]:メインテクスチャ (_MainTex 以外の名前のテクスチャをメインテクスチャとしたい場合に用いる。)
  • [MainColor]:メインカラー (_Color 以外の名前のプロパティーをメインカラーとしたい場合に用いる。)

参考:

Properties | Unity マニュアル [公式]

パス (Pass)

レンダリングステート

  • Cull
  • ZTest
  • ZWrite
  • Offset
  • Blend
  • ColorMask

固定関数シェーダー命令

  • Lighting
  • Material
  • SeparateSpecular
  • Color
  • ColorMaterial
  • Fog
  • AlphaTest
  • SetTexture

タグ (Tags)

  • LightMode

[ビルトイン]

  • PassFlags
  • RequireOptions

参考:

複数のパスを持つ Shader を使うと何が起こるかを確かめる | ヨシムネ退屈日記

Pass | Unity マニュアル [公式]

Pass 内のタグ | Unity マニュアル [公式]

Predefined Pass tags in the Built-in Render Pipeline | Unity 2019.4 Manual [Official]

UsePass

参考:

UsePass で他のシェーダのパスを使う | LIGHT11

UsePass | Unity マニュアル [公式]

GrabPass

参考:

GrabPass | Unity マニュアル [公式]

フォールバック (Fallback)

参考:

ShaderLab: Fallback | Unity マニュアル [公式]

テクスチャを適用する

メインテクスチャを適用する。

SetTexture [_MainTex] { combine texture }

アルファブレンディングを適用する。

SetTexture [_BlendTex] {
    combine texture lerp (texture) previous
}

参考:

Texture Combiners | Unity マニュアル [公式]

カメラ深度テクスチャ

DepthTextureMode

  • Depth:深度テクスチャ
  • DepthNormals:深度と法線をまとめたテクスチャ (RG:ビュー空間法線/BA:深度)
  • MotionVectors:モーションベクトル (スクリーン上の動きを表すベクトル/RG16)

参考:

カメラの深度テクスチャ | Unity マニュアル [公式]

深度テスト (ZTest / ZWrite)

事前デプスパス (Pre-pass Z Write)

Pass
{
    ZWrite On
    ColorMask 0
}

(出典:Unity マニュアル

(出典:Unity Forum

参考:

Culling と Depth Testing | Unity 2018.4 マニュアル [公式]

ShaderLab Command: ZWrite | Unity 2019.4 Manual [Official]

Transparency Shader with ForwardBase and ForwardAdd? – Unity Forum

How can I add an extra pass to a Shader Graph? – Unity Forum

Question about ZWrite and transparency – Unity Forum

KeywordEnum

参考:

KeywordEnum がスクリプトから扱いづらい問題とその解決案 | LIGHT11

コードを共通化する

  • マクロ
  • CGINCLUDE
  • UsePass
  • cginc ファイルに切り出す
  • シェーダーバリアント (shader_feature / multi_compile)

参考:

シェーダ共通化テクニックまとめ | LIGHT11

CGINCLUDE

参考:

CGINCLUDE ブロックの使い方 | LIGHT11

まとめ

参考:

Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた | 凹みTips

Unity ShaderLab ノート – Qiita

Surface シェーダーとフラグメントシェーダーの違いを軽くまとめてみた – Qiita

Unity Shader まとめ | ゆにてく備忘録

ドキュメント

参考:

ShaderLab シンタックス | Unity 2018.4 マニュアル [公式]

チュートリアル

参考:

チュートリアル:ShaderLab と固定関数シェーダー | Unity マニュアル [公式]

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です