Unity の Shader をそこそこ書けるようになるまでやったこと
2017年末の現状
Unity の3Dを触り始めて約1年。そこそこちゃんとした Shader が書けるようになってきました。 レンダリングサンプルはこんな感じ。
ケータイゲームに使うすごく軽いシェーダー完成しました!、最新ゲームとくらべ悪くならないよう無茶したんですけど、くまき(@kumak1)さんのほうでPBSの機能は持つくらい持って最大軽く出来るように無茶してもらったのが現実です、私は二つのアルゴリズム作っただけですぅ(キャラ△8000) pic.twitter.com/3L0gUo7yXJ
— D.K (@dkground) 2017年11月11日
全編スクラッチしており、Normal Map や Matcap の設定はもちろん、アーティスティックな光や影の色を設定で作れるようになっています。
なんでまとめ記事書くの?
年末なので振り返り。
あと、よくゲーム開発系の話をする、同僚の いも@EFB~相手は死ぬ~ (@adarapata) | Twitter さんに 「ところでシェーダ書くのにどの辺を調べました?」と聞かれ、返答ながなが書いたら これコンテンツになるやつじゃん
って気づいたため。
もともと持ってた技術
やったこと
- WebGL を 用いて Shader を用いてできることの全体像を掴む
- wgld.org
- 2016年 週3 ランチでハンズオンしつつ読み進めた
- これだけで丸1年かかって2017年になってしまった・・
- Unity の全体像を掴む
- 有名な猫本(https://www.amazon.co.jp/dp/B01H4ONR86)をみながら Unity 入門
- Unity の Shader 処理の全体像を掴む
- esprog.hatenablog.com
- Unity で Shader を扱う際は
ShaderLab
という、Cg/HLSL
(一般的な Shader 言語) をラップしたものを使う - Unity の用意したライブラリやら方言やらに慣れなきゃ作れない(SQLとかにも通じるものがある)
- やりたい事別の Shader の処理を理解する
- esprog.hatenablog.com
- alfa.hatenablog.jp
- 「
Surface Shader(コードをそんなに書かなくてもプリセットでそこそこ綺麗に出力)
を、スクラッチで書いた場合」を見比べながら理解する。 - 私が表現したいものは Unity が用意したものでは実現できないので、色々自作できるように知識をつける。
- たとえば、光源の位置から影となる箇所を算出するなど、色々ある
- Standard Shader を読み解く
- unity3d.com
- あとは、ユニティちゃんシェーダーとか。
- Web フレームワークとか OSS とかでもそうなんだけど、詳細知りたいなら公式の実装を見る事のが一番!
- 逆に、公式が使っていない(サンプル公開していない)機能を使うのは危険だよね。いつオミットされてもおかしくない。
- 実際に Shader を書いて見る
- ここは 4. 5. を行き来しながら進めてる。
- アイデアと関連付け能力の見せ所
- 数学的な知識があると、より表現の幅が広がる〜〜と実感している
まとめ
まずは全体像をみて脳内に目次を作る。次に実装・資料確認を繰り返し、細かい所のナレッジを溜めていった。 web ほど流行り廃りは早くない世界なので、どっしりと落ち着いて学習を進めていける。 こういった再利用可能な描画技術の蓄積は、表現の豊かさに直結するので、気になったアナタもぜひこの沼に浸かりましょう。