kumak1’s blog

kumak1のイラストや技術ログ

Unity の Shader をそこそこ書けるようになるまでやったこと

2017年末の現状

Unity の3Dを触り始めて約1年。そこそこちゃんとした Shader が書けるようになってきました。 レンダリングサンプルはこんな感じ。

全編スクラッチしており、Normal Map や Matcap の設定はもちろん、アーティスティックな光や影の色を設定で作れるようになっています。

なんでまとめ記事書くの?

年末なので振り返り。 あと、よくゲーム開発系の話をする、同僚の いも@EFB~相手は死ぬ~ (@adarapata) | Twitter さんに 「ところでシェーダ書くのにどの辺を調べました?」と聞かれ、返答ながなが書いたら これコンテンツになるやつじゃん って気づいたため。

もともと持ってた技術

  • 情報系大学卒
    • CG技術系の基礎知識あり
    • 認知化学とかもやってた
  • 現職 web エンジニア
  • 色彩検定2級もってる程度の色知識
  • 趣味で絵を嗜む程度の Photoshop 知識

やったこと

  1. WebGL を 用いて Shader を用いてできることの全体像を掴む
    • wgld.org
    • 2016年 週3 ランチでハンズオンしつつ読み進めた
    • これだけで丸1年かかって2017年になってしまった・・
  2. Unity の全体像を掴む
  3. Unity の Shader 処理の全体像を掴む
    • esprog.hatenablog.com
    • Unity で Shader を扱う際は ShaderLab という、 Cg/HLSL (一般的な Shader 言語) をラップしたものを使う
    • Unity の用意したライブラリやら方言やらに慣れなきゃ作れない(SQLとかにも通じるものがある)
  4. やりたい事別の Shader の処理を理解する
    • esprog.hatenablog.com
    • alfa.hatenablog.jp
    • Surface Shader(コードをそんなに書かなくてもプリセットでそこそこ綺麗に出力) を、スクラッチで書いた場合」を見比べながら理解する。
    • 私が表現したいものは Unity が用意したものでは実現できないので、色々自作できるように知識をつける。
    • たとえば、光源の位置から影となる箇所を算出するなど、色々ある
  5. Standard Shader を読み解く
    • unity3d.com
    • あとは、ユニティちゃんシェーダーとか。
    • Web フレームワークとか OSS とかでもそうなんだけど、詳細知りたいなら公式の実装を見る事のが一番!
    • 逆に、公式が使っていない(サンプル公開していない)機能を使うのは危険だよね。いつオミットされてもおかしくない。
  6. 実際に Shader を書いて見る
    • ここは 4. 5. を行き来しながら進めてる。
    • イデアと関連付け能力の見せ所
    • 数学的な知識があると、より表現の幅が広がる〜〜と実感している

まとめ

まずは全体像をみて脳内に目次を作る。次に実装・資料確認を繰り返し、細かい所のナレッジを溜めていった。 web ほど流行り廃りは早くない世界なので、どっしりと落ち着いて学習を進めていける。 こういった再利用可能な描画技術の蓄積は、表現の豊かさに直結するので、気になったアナタもぜひこの沼に浸かりましょう。