Weitere ähnliche Inhalte
Ähnlich wie Unity dojo amplifyshadereditor101_jpn-jp (13)
Unity dojo amplifyshadereditor101_jpn-jp
- 1. Unity道場 Special
Amplify Shader Editor 101
~Amplify Shader Editorをつかって学ぶシェーダー入門~
基本操作とよく使われるノード編
Unity Technologies Japan合同会社
コミュニティエバンジェリスト
小林信行
2017/03/14
- 2. 自己紹介 : 小林 信行
ユニティテクノロジーズジャパン合同会社
コミュニティエバンジェリスト
UnityやMayaをはじめとする各種3Dツールの研究、ゲーム制作のノウハウの普及
をしてます。『ユニティちゃんプロジェクト』の言い出しっぺの一人でもあります。
前職は『涼宮ハルヒの追想』『涼宮ハルヒの約束』『とらドラ・ポータブル!』などの
原作付きキャラクターゲームの企画&監督(クリエィティブ・ディレクター)。
結果、Motion PortraitやLive2Dに代表される2.5D系キャラクター表現が、多くの
コンシューマゲームに導入されるきっかけを作りました。
最近は暇があると、Shader Forgeでいろいろなシェーダーを作ってます。
元々は統計を使った経済学を研究していたのですが、コンテンツ業界に入る
きっかけがGAINAXに入ったことだったので、アニメーションの制作技術に関して
もむやみに詳しいです。
- 3. 本コースを受講することで得られる知見
• 本コースは、「Amplify Shader Editorを使ってシェーダーを学ぶ」のが目的で
すので、 Amplify Shader Editorの全機能を紹介するものではありません。
• 本コースでは、 Amplify Shader Editorの基本的なオペレーションと、よく使う
ノードについて学びます。
• よく使うノードの機能を学んだ後は、実際にシェーダーを組んでいく上で、し
ばしば使われるパターンを実際に見ていきましょう。
- 7. 絵画における「質感」を構成するもの
• 色 (材質およびそれに当たる光の色の表現)
• 陰影 (光が当たっている面の陰影の出方による立体表現)
• タッチ (材質の表面状態の表現)
⇒絵画は、「色+陰影+タッチ」の組み合わせで、様々な「質感」を表現する。
Unite 2016 Tokyo 『Unityとアセットツールで学ぶ「絵づくり」の基礎~ライト、シェーダー、イメージエフェクト~』
シェーダーはこの全てに
関わっている
- 8. 3DCGにおいて「質感」に影響を与えるもの
• マテリアル (マップおよびシェーダー)
• ライト (直接光と間接光、ホワイトバランス、ソフトネス、アングル)
• カメラ (HDRとフォーカス、スクリーンスペースでのイメージエフェクト)
⇒絵画における「色+陰影+タッチ」の組み合わせは、3DCGの場合には、
「マテリアル×ライト×カメラ」の各設定として、設計される。
Unite 2016 Tokyo 『Unityとアセットツールで学ぶ「絵づくり」の基礎~ライト、シェーダー、イメージエフェクト~』
シェーダーを使った絵づくりを学ぶためには、これら要素を切り分けて理解することが大切。
各々の役割をごっちゃにしないこと!
- 9. 特に、「マテリアル = マップ × シェーダー」
u 物理ベースシェーダー(Standardシェーダーなど)の場合
• 「物理ベースシェーダー」としての機能面は、Standardシェーダーなどのゲームエンジンがデフォルトで提
供しているシェーダーが受け持っている。
• 従って、絵づくりはシェーダーに割り当てる、各ワークフローに則ったマップ(テクスチャ)の作り込みとライ
ティングが中心となる。
• マップ(テクスチャ)は、Substance DesignerやSubstance Painterなどで制作する。
u Amplify Shader Editorが担当するのは、「シェーダーの機能面の作成」で、マップの作り込み
ではない
• Amplify Shader Editorを使いこなすことで、自分だけのカスタムシェーダーを作成することができる。
• カスタムシェーダーは、自分だけの独自の絵づくりの一翼を担うもの。
ここに様々なマップやライティングを組み合わせることで、最終的な絵づくりが完成する。
目的に合わせて、ツールも使い分けましょう!
- 11. ノードベースのシェーダーエディタでシェーダー
を学ぶ利点
l シェーダーのコード記述特有の「めんどくささ」が回避できる。
• シェーダーのコード記述には、お約束のルールが結構ある。
• 同じことを繰り返して書かなければいけないことが結構ある。
⇒ノードベースのシェーダーエディタでは、この辺りの「めんどくささ」を意識しないでよい
l 通常のプログラミングよりは、ノードのバリエーションが圧倒的に少ない。
⇒ビジュアルプログラミングの場合、ノードが複雑になると、ロジックが見づらくなるが、
シェーダーはグラフィック処理に特化している分、それほど複雑にならないですむ
l 一度憶えると、他のDCCツールやゲームエンジンでも同じようなノードやセマンティクス(シェーダー
入力/出力に付加される指定文字列のこと)があるので、相互運用がしやすくなる。
l リアルタイム向けのノードベースシェーダーエディタの場合、「変更が即、グラフィックに反映される」
ので、イタレーションがしやすい。
⇒「トライアンドエラーがしやすい」ということは、「学びやすい」ということでもある
- 13. Unityエディタへのインストール 1
• Amplify Shader Editorは、Asset
Storeから購入することができます。
• すでに購入が済んでいる時には、
UnityエディタのAsset Storeウィンド
ウからImportボタンをクリックするこ
とで、各プロジェクトにインストール
することができます。
- 14. Unityエディタへのインストール 2
• Import Unity Packageウィンドウが
開いたら、右下のImportボタンを押
してください。パッケージがUnityエ
ディタにインポートされます。
• インポートが無事終了すると、ツー
ルバー>Windowメニューに新規に
Amplify Shader Editor項目が追加
されます。
• またProjectウィンドウのAssetsフォ
ルダの直下にAmplifyShaderEditor
フォルダが生成され、中に必要な
ファイルがインストールされます。
- 19. 既存のシェーダーファイルをオープンする
• Amplify Shader Editorで作成した既存の
シェーダーファイルを、ノードエディタで開く
場合には、シェーダーファイル本体もしくは、
それから作成したマテリアルをProject上で
指定し、Inspector上の「Open in Shader
Editor」ボタンをクリックします。
• なお「 Open in Shader Editor」ボタンは、
Amplify Shader EditorをUnityエディタにイン
ストールしていないと表示されません。
- 26. マスターノードのプロパティについて
• 特にMaster Nodeが選択され
ている時、Node Propertiesに
は、シェーダーの基本的な機
能を決める重要な設定が現
れます。
• またマテリアルを作成した時
に、Inspector上に表示される
外部プロパティの順番などは、
このNode Propertiesから設定
します。
• ここでは特に、Shader Nameと
Available Propertiesをきちんと
設定しておきましょう。また
シェーダーの基本的な機能を
設定するものとして、使用す
るLight Modelも確認しておき
ましょう。
• 他にもカリング設定や計算精
度、影の設定などができます。
詳しくはUnityのシェーダーリ
ファレンスを確認してください。
- 27. Light Modelについて
• Light Modelは、Master Node
のMain Propertiesから選択で
きます。
• 選択したLight Modelに応じて、
Master NodeのInput側の端子
が変化しますので、注意して
ください。
• 「Smoothness」と呼ばれる値
は、「1-Roughness」のことを指
しています。
• Input側のノードの端子に繋が
れるマップの仕様は、おのお
ののライトモデルのそれに応
じます。従って、Standard
Specularに使われるPBR用の
SpecularマップとBlinn Phongに
使われるSpecularマップは、名
前は同じでもマップ自体の定
義が違うことに注意してくだ
さい。
Standard
(PBR)
Standard
Specular
(PBR)
Lambert /
Blinn Phong
(Legacy)
- 30. テクスチャを貼る 1
Texture Coordinates [U] Texture Sample [T]
ノード名は変更可能
注意:Texture SamplerノードにはUVポートがありますが、このポートに
は必ずしもTexture Coordinatesノードを接続する必要はありません。
もし接続しない場合には、Texture SamplerノードプロパティのUV Set
設定に合わせて、最適なUVが設定されます。
Texture Coordinatesノードは、
Texture SamplerノードのUVポートに接続す
ることで、複数のTexture Coordinatesノード
間でUVを共有する場合に使います。
- 71. Clamp 0-1 / Saturate
0以下、または1以上の値を切り捨てるノード。
マスクなど、 0~1の範囲内にある必要がある数値の調整用
に用いられる。
使用時に、Node PropertiesのMin=0、Max=1を入れること。
この使い方をする限り、Saturateノードと同じ機能になる。
※Shader ForgeのClump 0-1ノードは、
コードではSaturate関数に変換される。
- 89. 内積(Dot Product)とは?
A
→
B
→θ
A
→
| | B
→
| |cosθA
→
B
→
・ =
このオレンジ部の長さは、 A
→
| |cosθ
特に、 が長さ1の時、オレンジ部の長さはcosθとなる。A
→
内積とは、2つのベクトルがなす角度の状態を示すスカラー値のこと。
特に2つのベクトルがノーマライズされている場合には、内積が即、
2つのベクトルの内角のcosθの値となっている。
- 107. Texture2DArrayとして使うテクスチャは、
同じサイズ、同じ圧縮形式に揃えておく必要がある。
詳しくはリファレンスを参照。
TextureArray 2
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SetTextureArray : MonoBehaviour {
public Material _mat;
public Texture[] _Arr = new Texture[4];
void Start () {
//Initialization
//Texture2DArray _texArr
// = new Texture2DArray(sizeX, sizeY, amountOfSlices, textureformat, mipMapsOrNot);
//Graphics.CopyTexture( inputTextureObject, inputSliceIndex, inputMipIndex,
// _texArr, desiredSliceIndex, desiredMipIndex);
Texture2DArray _texArr = new Texture2DArray(512, 512, 4, TextureFormat.DXT5, false);
for (int i = 0; i < 4; i++ ) {
Graphics.CopyTexture(_Arr[i], 0, 0, _texArr, i, 0);
}
_mat.SetTexture("_TextureArray", _texArr);
}
}
Texture2DArrayとして読み込まれている
- 122. Amplify Shader Editor活用のポイント
l Amplify Shader Editorは、Unity向けのビジュアルシェーダーエディタとしては新しいものですが、すでにその
完成度は高く、安心して使える印象です。
更新頻度も速いので、Unityアセットストア側での更新だけでなく、パブリッシャーのWikiも日頃からチェック
すると、常に最新の情報が得られます。(WikiのURLについては、参考文献リストに載せてあります。)
l 最新バージョン(v0.5.1)では、待望のアウトライン機能も付きました。
これらの機能には、マスターノードのNode Propertiesからアクセスします。
この他にも、「P」キーで各ノード内での処理がビジュアルで見られる「ノードプレビュー」機能が追加されま
した。これは特に初心者が各ノード内でどんな処理が行われているか、直感的に把握するのに優れていま
すので、勉強の際には大変役に立つ機能です。
l 筆者はShader Forgeも使っていますが、SFとASE、両方使ってみての感想として、SFではアクセスのしにくい
機能に簡単にアクセスできる設計になっているのが、ASEの強い点であり特長です。
特にPBR系シェーダーのカスタマイズには、ASEは向いていると思います。
付属するシェーダーサンプルも含めて、ASEは、あなたのUnityでの表現力を間違いなくアップしてくれるこ
とでしょう。
- 123. 参考文献
l Unity Products:Amplify Shader Editor / Manual
http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Manual
l ASEの各ノードについては:
http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Nodes
l Shaders 101 – Foundational Shader Concepts for Tech Artists
Ben Cloward (CG Supervisor Bioware) / GDC Vault
http://www.gdcvault.com/play/1023152/Technical-Artist-Bootcamp-Shaders-101
l プログラマブルシェーダーについては、
『ゲームつくろー!』「プログラマブルシェーダ編」
http://marupeke296.com/ProShader_main.html