(この記事の使用環境: Unity5.5.0f3 Personal、Windows10

【注意(2017/10/26追記)】現在、教材の中で使用する素材のダウンロード先がなくなっているとの情報をいただきました。素材提供が再開されるまで、(特にシェーダ初挑戦の方は)購入を控えたほうがいいかもしれません。


今回は教材レビューです。やってみたのはこのKindle本。


概要
Unityのシェーダ解説本。「サーフェースシェーダ」と「頂点シェーダ・フラグメントシェーダ」を中心に、利用例をカタログ的に紹介している。
説明は「こう書く」という程度の短いもので、使用する変数・関数等についてそれが何を意味しているのか懇切丁寧には教えてくれないが、Unityのシェーダについて解説された数少ない本であり、まずこの本から手を付けてみるというのは悪い選択肢ではないと思う。シェーダに関して、いきなりUnityのマニュアルを読み解くのはかなり難解であり、マニュアルを読む前にこの本にそっていろいろ試してみるのは良い準備運動になると思う。
また、単純にサンプル集として、この本をひととおりこなした後に手元にライブラリが残るという意味だけでも価値はある。

成果物
本に沿って各種シェーダをコーディングする。一部紹介するとこんな感じ。
スクリーン キャプチャ1


一部のシェーダは時間経過とともに変形する。こんな感じ。



良いと思った点
  • Shaderをシンプルに利用する各種パターンを簡潔に説明しているので、順に試していくだけでなんとなくShaderの概要を掴める。
  • 本書で作成するShaderを保存しておけばほかのオブジェクトにも適用可能で、自分でシェーダを作る際のベースにもなると思うので、作っておいて損はない(※保存しておくために下記「留意点」参照 )

改善要望のようなもの
  • Shaderのコード中にコメントがいっさいない。変更箇所等をコメントで示してもらえると読みやすかったと思う。後半はコードが長くなるので、どこが変更されているのか頭から追うだけでけっこう大変だった。
  • ところどころ「ライトを追加する」「キューブマップを利用する」等の記述があるが、確認するためにShaderスクリプト外での作業が必要だということが分かりにくかった。もう少しだけ手順で示してもらえるとありがたかった。
  • 使用しているUnityのバージョンについて記載してほしい。自分は今回 Unity5.5.0f3 で試したが、設定項目が異なる箇所がいくつかあった。こういうのは避けられないことで、やむを得ないと思うが、この本が前提としているUnityバージョンの記載がないために少しモヤモヤした。タイトルに「Unity5」とあるが、Unityの場合はマイナーバージョンでも結構変わるのだなと思った。この辺は自戒も込めて。
  • (要望)利用者の都合だけ言えば、本書で紹介しているShaderをダウンロードできるよう公開しておいてもらえれば、とても利用しやすいと思った。自分でコーディングするのはすごく手間がかかったので(特に終盤)。

教材を進めるうえでの留意点(けっこう重要)
本に書かれているとおりに進めると、"Custom/MyShader" を改変し続けることになる。これではせっかく書いたコードが残らない。もったいないので、名前を変えて保存すべき。

→ たとえばこんな感じで:
Shaderファイル名を本の章立てにあわせて変更する(例:MyShader_2_5)。
それにあわせてShaderのコード1行目も変更する(例:Shader "Custom/MyShader_2/2_5 ")。/(スラッシュ)で区切るとフォルダ分けされる。
また、コード内に // でコメントできるので、冒頭にでも概要説明を書いておくとよい。
全画面キャプチャ 20170124 162424

こんな感じにフォルダ分けすれば再利用しやすい。名前も分かりやすく変えておけばより良い。
SnapCrab_NoName_2017-1-24_20-37-59_No-00

記載内容のままでは動かす、変える必要があった設定
(※ バージョンによる差異の可能性あり。自分は Unity5.5.0f3 で試した。なお下記は「とりあえず動く」ようにすることを意図して行った設定であり、必ずしも最適解とはいえないので注意)
  • 「2-6」で使用する「bmptest.bmp」の設定で、Inspectorで「Texture Type」を「Normal Map」にするだけでは紹介されているイメージのとおりにはならなかった。その下の「Create from Grayscale」にチェックを入れた後、「Apply」するとイメージのようになった。
  • 「3-3」で使用する「Atmosphere.bmp」で、Inspectorに表示される設定項目が異なる。自分はこんな感じに設定して試した。
    全画面キャプチャ 20170123 115446
  • 「5-7. Phongテッセレーション」で、そのままではPhong値の変更が見た目に反映されなかった。確認用のモデル「ball.fbx」のImport Settingsで、Normals&Tangents > Normals の値を「Import」から「Calculate」に変更したところ、見た目に反映されるようになった。
    全画面キャプチャ 20170123 172039

補足(Unityのシェーダ関連情報ありか)
本書を読み終えたら、各自、下記の公式情報等を参考にシェーダをいじってみるとよいかと思います。

今回は以上です。


Unity 5 実践シェーダプログラミング入門 [改訂第一版]