コガネブログ

平日更新を目標にUnityやC#などのゲーム開発アレコレを書いていきます

【Unity】「Shader Forge」を使用してみる

使用方法

  • Unityのメニューの「Window>ShaderForge」を選択
    f:id:baba_s:20150609112151p:plain
  • 新規でシェーダーを作成する場合は「New Shader」を選択
  • 既存のシェーダーを読み込んで編集する場合は「Load Shader」を選択
  • 上記以外のボタンはWikiやfeedback center、ShaderForgeのサイトにアクセスする
    f:id:baba_s:20150609112503p:plain
  • 「New Shader」を選択した場合はシェーダーファイルの作成場所を選択
  • 「Load Shader」を選択した場合は編集するシェーダーファイルを選択
  • その後、下記のウィンドウが表示される
  • (機能によってはPro版でしか選択できないものもある)
    f:id:baba_s:20150609112159p:plain

オブジェクトプレビュー機能説明

  • ノードを構築して作成したシェーダーをオブジェクトに適用して確認可能
  • Consoleにはエラーや警告が表示される
    f:id:baba_s:20150609112206p:plain

① 新規作成か読み込みのウィンドウに戻る

② ノードプレビューに影響する設定

項目 説明
Hierarchal Node Move 選択されたノードの子階層にあるノードを一緒に動かす場合はオン
Auto-Update Node Previews 自動でノードプレビューを更新する場合はオン
Use scroll in the quickpicker 不明
Show variable name & precision ノードの下に型とプロパティ名を変更するためのメニューを表示する場合はオン
Show node browser panel ノード一覧パネルを表示する場合はオン

③ 現在のノードを構築したシェーダーをコンパイルして適用する

  • 「Auto」がONの場合は自動で選択される

④ ノードプレビューを変更した場合に自動でシェーダーをコンパイルしてオブジェクトに適用する場合はオン

  • ノードプレビューを変更すると毎回コンパイルがかかり、大がかりなものだと時間がかかるため、その場合はオフにする

⑤ シェーダーを適用するメッシュを指定

⑥ 背景色を指定

⑦ ⑧で表示しているオブジェクトを回転させる場合はオン

⑧ シェーダーを適用したオブジェクトを表示

  • マウスホイールで画面が拡縮可能
  • オブジェクトをクリックしてマウスを動かすとオブジェクトの移動が可能
  • 画面にカーソルを移動させると出てくるカメラマークを選択するとスクリーンショットを出力可能

⑨ シェーダーの名前やプラットフォームなどの設定

項目 説明
Path シェーダーのパス名
Fallback ノードで構築したシェーダーが非対応だった場合に代わりに使用されるシェーダーの指定
LOD(Level Of Detail) シェーダーを適用するLODの閾値を設定(値が小さくなればなるほどカメラから遠くに存在するオブジェクトは構築したシェーダーが適用されなくなる)
Target renderers シェーダーを適用するプラットフォームをオンにする

⑩ 現在追加されているプロパティの一覧

⑪ ライティングの設定項目

項目 説明
Render Path レンダリング方法を設定可能。基本はForwardベースなのでForwardで良いと思います。DeferredレンダリングはPro版のみの機能なので、Pro版ではない場合は自動的にForwardになるようです
Light Model Unityが用意しているどのライティング方法を適用するかの設定
  Unlit/Custom:ライティング設定がほぼない設定
  Blinn-Phong:ブリンフォンライティング用の設定が可能
  Phong:フォンライティング用の設定が可能
  PBL:物理ベースレンダリング用の設定が可能
Double incoming light ライトの強さを2倍にするかどうかのフラグ
Shader変更点 LightMode=ForwardBaseのfloat attenuation = LIGHT_ATTENUATION(i)*2;
indirectDiffuse += UNITY_LIGHTMODEL_AMBIENT.rgb*2; // Ambient Light
LightMode=ForwardAddのfloat attenuation = LIGHT_ATTENUATION(i)*2;
Remap gloss from [0-1] to [1-2048] 光沢の再マッピングを調整するためのフラグ。すべてのシェーダーに対してデフォルトでオンになっている
Fresnel term(PBLのみ) フレネル項の計算処理をするかどうかのフラグ
Visibility term(BLのみ) 可視性項の計算処理をするかどうかのフラグ
Energy Conserving(Cutom以外設定可能。PBLは自動設定) 省エネルギーモードを切り替えるかどうかのフラグ(処理が軽減されるが見た目も軽いものになる)
Light Count ライト数によって、処理を変更する
  Single Directional:ライトが1つの場合の処理。ForwardBaseのみの処理をする
  Multi light:複数ライトの場合の処理。ForwardBaseとForwardAddの処理をする
Normal Quality 法線方向を正規化するかどうかのフラグ
Lightmap support ライトマップをサポートする処理を追加するかどうかのフラグ
Light probe support ライトプローブをサポートする処理を追加するかどうかのフラグ
Receive Ambient Light AmbientLightを考慮した処理を追加するかどうかのフラグ
Mask directional light specular by shadows(MainNodeのSpecularへNodeを繋げている場合のみ有効) 鏡面反射のマスキングを有効にできる(ディレクショナルライト使用時のみ)

⑫ ピクセルのクオリティの設定

項目 説明
Per-pixel screen coordinates ピクセル単位のスクリーン座標や頂点単位のスクリーン座標を切り替えることができるフラグ(基本がピクセル単位のスクリーン座標なのでチェックを入れておく)
Per-pixel light probe sampling ピクセル単位でライトプローブサンプリングを適用するかどうかのフラグ(ライトプローブを活用する場合はチェックを入れておく)

⑬ ブレンディングに関連する設定

項目 説明
Blending シェーダーで設定されているブレンディングモードを選択
  Alpha Blended:アルファブレンド(透過処理)
  Additive:(加算合成処理)
  Screen:スクリーン(乗算の逆、明るくなる)
  Multiplicative:乗算処理(暗くなる)
  Custom:ブレンディングを独自に設定可能
Face Culling 表面のカリング方法の設定
  Backface Culling:裏面をカリング
  Frontface Culling:表面をカリング
  Double Sided:表面を少しカリングすることで裏面が見えるようなる
Dithered alpha clip アルファクリップへディザリングをかけるかどうかのフラグ
Offset Factor&Units オフセットの設定
Receive Fog フォグの処理をするかどうかのフラグ
  Override Fog Mode:チェックするとフォグの種類を設定可能
  Override Fog Color:チェックするとフォグのカラーを設定可能
  Override Fog Density:チェックするとフォグの深さを設定可能
  Override Fog Range Near&Far:チェックするとフォグのニア&ファープレーンを設定可能
Auto Sort 描画順を自動で設定するかどうかのフラグ(チェックを外すことで独自に設定することも可能)

⑭ シェーダモデルを2.0に変更するためのフラグ

  • チェックしているとシェーダモデルを2.0(モバイル用)に変更して処理も変更する
  • 機能が動作しない場合が多いのでコードの確認が必要

ノードプレビュー機能説明

  • 追加したNodeをMainNodeに連結することでシェーダーを作成する
  • 自分で数値やテクスチャを設定したい場合はノード一覧のPropertiesのNodeを追加すれば設定可能
  • 選択しているNodeは水色の枠で囲まれる

基本コマンド

項目 説明
Ctrl + Z Undo
Ctrl + Y Redo
Nodeを選択した状態で Ctrl + C Nodeをコピー
Nodeを選択した状態で Ctrl + V Nodeをペースト
Nodeを選択した状態で Delete Nodeを削除
左クリックしながらマウスを移動 画面の移動
マウスホイールを操作 画面の拡縮

Nodeの追加方法

  • ノード一覧からNodeをドラッグしてノードプレビューへドロップ
    f:id:baba_s:20150609112244p:plain
  • 右クリックして項目を選択する
    f:id:baba_s:20150609112248p:plain
  • ノードプレビューでNode名の頭文字のアルファベットのキーを押し続けると下記の画像のようなリストが表示される
    対応キー(1,2,3,4 & Y,G,J,K,Z,X以外のアルファベット)
    f:id:baba_s:20150609112254p:plain
  • リストの欄移動はマウスホイールで行うことができる

Nodeの繋がりを切る方法

  • MainNodeの付箋のようなところをクリックし続けた状態でBackspaceキーを入力
    f:id:baba_s:20150609112301p:plain
  • Altキーを押しながら右クリックで線を引くことでNodeとの繋がりを切ることも可能
    • 複数のNodeの繋がりを一気に切ることもできる

コメント追加方法

  • Nodeを右クリックをすることで下記のメニューが表示される
    f:id:baba_s:20150609112308p:plain
項目 説明
Edit Comment Nodeへコメントを追加(記号は使えないので注意)
What does Node名 do? WikiのNodeの説明へジャンプ

ノード一覧

その他機能

  • ShaderForgeをUnityプロジェクトに追加するとシェーダーのInspectorに下記の画像のような表示が追加される
    f:id:baba_s:20150609112411p:plain

Open in Shader Forge

  • ShaderForgeのノードウィンドウを開く
    ShaderForgeで作成したシェーダーではない場合、警告が表示される
    f:id:baba_s:20150609112420p:plain

  • この状態でクリックしてShaderForgeのノードウィンドウでコンパイルすると上書きされてしまうので注意

Open source

Open compiled

参考サイト様

公式サイト

説明付サイト

参考動画

Shader Forge Wiki