概要

ドキュメント:

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

ドキュメント:

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

コマンド

レンダリングステート
パス

ドキュメント:

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

プロパティー (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

ドキュメント:

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

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

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

参考:

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

UsePass

ドキュメント:

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

参考:

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

GrabPass

ドキュメント:

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

フォールバック (Fallback)

ドキュメント:

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

テクスチャを適用する

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

SetTexture [_MainTex] { combine texture }

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

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

ドキュメント:

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

ノーマルマップ (Normal Map)

参考:

シェーダーチュートリアル ノーマルマップ | Tsumiki Tech Times

ノーマルマッピング | LIGHT11

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)

参考:

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

CGINCLUDE ブロック

参考:

CGINCLUDE ブロックの使い方 | LIGHT11

ファイルをインクルードする

プロジェクト内の 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 マニュアル [公式]

参考:

ライトマップのベイクに対応する – Qiita

まとめ

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

ShaderLab ノート – Qiita

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

シェーダー開発方法のまとめと備忘録 – Qiita

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

シェーダチートシート | LIGHT11

シェーダースニペット集 | 黒鳥のメモ

ドキュメント

ShaderLab 構文 | Unity マニュアル [公式]

チュートリアル

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

記事をシェアする:
タグ:

コメントを残す

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

Protected by reCAPTCHA