藍と淡々

物作り冒険譚


【Unity本】「Unity 5 実践シェーダプログラミング入門」を読んでみた

こんにちは(๑◔‿◔๑)

先日紹介したUnity本の中で気になって買ってみた、
「Unity 5 実践シェーダプログラミング入門」を読んでみたので、レビュー的なものを書いていこうと思います!٩(๑´3`๑)۶

*シェーダーの「シ」の字も知らない人からみた本の評価です。


個人的な感想を先に言うと、
「シェーダー初心者の方、買うのはちょっと待って!٩(๑òωó๑)۶


2015.10.5 *追記ーーーーーーーーーーーーーーーー
9月23日に本のアップデートがあったので、現在の書籍の内容と、ここでのレビューの内容が異なる点があります。
Amazonの商品の説明欄の、[改訂第一版での変更点について] にも書かれていますが、
特に、
詳細説明の加筆
テクスチャのダウンロードが可能になった
テッセレーションが利用できる環境の明記
が加わっていました。
なので、この記事のレビューはあくまで参考程度に、実際の購入は試し読みされてからの方が良いかと思います。
ーーーーーーーーーーーーーーーーーーーーーーーー


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

「Unity 5 実践シェーダプログラミング入門 [Kindle版]」
価格:1,080円


・どんな内容?

シェーダーをオブジェクトに割り当てる方法から始まり、シェーダーの機能を一つ一つサンプルコードで試しながらこんなことできるよ、といった紹介がメインとなっています。


例えば、これは本で紹介されているコードではありませんが、

Shader "Example/Diffuse Simple" {
    SubShader {
      Tags { "RenderType" = "Opaque" }
      CGPROGRAM
      #pragma surface surf Lambert
      struct Input {
          float4 color : COLOR;
      };
      void surf (Input IN, inout SurfaceOutput o) {
          o.Albedo = half3(1.0, .5, 1.0);
      }
      ENDCG
    }
    Fallback "Diffuse"
}

というシェーダーの場合、

 #pragma surface surf Lambert

struct Input {
     float4 color : COLOR;
};

o.Albedo = half3(1.0, .5, 1.0);

などの役割を解説して、実際には、

f:id:MegumiSoft:20150918191917p:plain:w350

のような見た目になるよ、といった説明がされています。


こんな感じで、①サンプルコード②簡単な解説③実際の見た目といった順でサーフェスシェーダーと頂点シェーダーを紹介しています。

そして最後には付録として、シェーダーに関するリファレンスが載っていました。


(紹介されている内容が知りたい方は、Amazonの「商品の説明」欄に詳しい情報が載っています。)
Unity 5 実践シェーダプログラミング入門 [改訂第一版]


 
・グッドだった点

*一つ一つのシェーダーの機能ごとにしっかりまとめてあって、このまとまりでは何をするのかがはっきりしていて分かりやすい。

写真が豊富で、実際の見た目が本とあっているか確かめやすい。

*紹介している内容が、シェーダーを初めて触る人にとって刺激的で面白いものが多い。(モチベーションが上がる)

*Kindle版のみだけど、1,080円と、Unity本の中ではかなり安いのでお財布に優しい。


・イマイチだった点

*サンプルコードに関する解説が少ないので、この本を読んで自分でオリジナルシェーダーを書く、という点までShaderの理解は進まない。

*シェーダーにテクスチャを貼り付けてみる、法線マッピングを貼り付けてみる、といった解説があるのに、肝心の付属ファイル等がなく実際に自分で試してみることができない

*テッセレーションの解説では、自分の環境がMacだったために試すことができなかった。初心者向けなので、テッセレーションが「DirectX 11」環境下で動くという説明が欲しかった。。



・個人的な感想まとめ

はっきり言ってこの本は、この本を読んで自分でシェーダーを書いてみよう!、というのを期待している方にはお勧めできません

初心者向けにしてはあまりに解説が少なすぎて、最後までサンプルコードを見ながら本の見た目とあっているかの確認をするだけでした。

これがこういう働きをするのか!というのを理解できれば応用が利くのですが、この本でそこまでに至ることは無理があると思います。


また、テクスチャ、グレースケールのビットマップ、法線マッピング、キューブマップテクスチャなど、自分で試してみるのに必要なファイルが用意されてなく
実際に本の通りの見た目にすることができないというのが残念でした。。
(自分はKindleアプリを使ってMacで読んでいたので、スクショでなんとかしました)


それとテッセレーションの紹介ページが多いので、初心者向けの本であれば、Macでは(DirectX 11環境下でなければ)テッセレーションは使えないということを一言添えて欲しかったです。。
もしくは冒頭に、本を書いたときに使用した環境を記載して欲しかった(;´༎ຶД༎ຶ`)


この本を読んだあと、ネットで色々シェーダーに関して調べてみたのですが、自分の場合、こっちの方がはるかに勉強になりました・・・꒰⁎×﹏×⁎꒱՞༘✡

docs.unity3d.com
tips.hecomi.com
izmiz.hateblo.jp
unitech.hatenablog.com
などなど。


しかし、全く無駄になったわけではなく、一応サンプルコードを真似て書けばこんなシェーダーが作れるんだよ、というのを一つ一つ画像付きで紹介してあったのは、勉強になりました。


全くシェーダーに関する知識がないのであれば、とりあえず紹介されている通りにコードを書いてみて、シェーダーでどんなことができるのがを知ってみる、というには役立ちます。

その上で詳しい知識は別の本なりで身につける、というのも使い方の一つとしてアリかなと思います。

シェーダーは数学的な知識を必要として難しく、奥が深いので、一つの本を読んで理解する、というのは無理かなーと実感しました。



といった感じでこの本のレビューを終わります。

興味のある方は、まずサンプルを読んでみてから自分で判断するのがベストだと思います。
(自分は面倒臭がってしまった・・・'(<◉>◞౪◟<◉>)'ウェイ)

それから、この本を読んでみて、シェーダーの理解に数学の知識は欠かせないと感じたので、お次は「ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで」を読んでみようかなーと思っています。


こちらも読んだらレビュー予定( ⓛ ω ⓛ *)ソレデハ


ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで

ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで