さて、前回の復習から進めていきます。
前回、Shaderは「画像およびモデルをカメラの見える位置に置くように計算する」といいました。これにはワールド座標とかローカル座標みたいなものも出てくるんでしょうけどよくわかっていないです。
「画像がX:10/Y:10の座標ならそれをカメラから見てX:10/Y:10の位置に置けるように計算する」
っていうのがだいたいの意味合いです。
そして私たちが普段見ている2D画像は「3Dでできた三角形の板を二枚組み合わせたものに画像を張り付けている」とも言いました。
この三角形の板、3D上では「ポリゴン」と呼ばれています。
そう、みんなが大好きなあの子もこの子も、ゲームに登場する際は2つのポリゴンに体を打ち付けられているのです。興奮しますね。
そういえば、Shaderは位置を計算すると何度も言ってますが、じゃあその
位置の計算のために何をShaderに渡しているんでしょう?
これをいう前に少し前提条件を書いておきます。
というのもUnityにはその位置の計算をする必要がないように作られたShaderがあるのです。
位置やそのほかの計算を勝手にやってくれるShader、「Surface Shader」と
Unityでは書かれていますが、私がUnityでShaderを書く際は全てVertex/Fragment Shaderを使います。
Vertex/Fragmentは位置の計算を自分でやる必要があります。
でもUnityではその位置の計算も簡単にできるようになってるのであんまり難しいわけではありません。
ええ……難しいわけないのです……難しくなんかないもん……。
で、何を渡してるかですけどここで、前回の画像を上げてみます。
ポリゴンというのは三角形でできています。
そしてその三角形の角は「頂点」と呼ばれポリゴンの形を動かす大事な情報になっています。
この画像はポリゴン二つなので頂点は6つ!ではなく、
つながっている部分の頂点は共有することができるので、頂点は4つです。
さて、Shaderには何を渡してるかわかったでしょうか?
位置の計算はポリゴンの頂点、英語でいうとVertexがVertex Shaderに渡されています。
VertexをわたすからVertexShader。わかりやすいですね。
じゃあこれで完成!1024x1024の画像を渡すと1024x1024でカメラに映るんだね!
ではないです。
Shaderは位置の計算をします。カメラの都合のいい位置にVertexを計算します。
つまり、カメラに対して1024x1024のサイズになるようにVertexを計算するので、
今度は画像を「計算されたポリゴンに張り付ける」計算を行います。
Pixel Shaderとも呼ばれていますけどUnityではFragment Shaderでそれを行います。
特に難しいわけでもなく画像、正確に言えば色を頂点の中に置くように計算するのがFragmentの役割です。
ポリゴンの中は0から1として扱われています。なので画像も0から1の間で計算され、
それにあたる位置の色を取得して最終的には色として出力します。
これを表示する分だけ一斉に計算します。
1024x1024なら1048576回、色の計算をします。(そんなにやってないと思う)
「一斉」にです。Shaderが計算に使っているGPUと呼ばれるものは、
そういった膨大な計算を一斉に行う並列処理にたけたものなのです。
こうしてこの計算をフレーム単位で何万回も行って、やっとゲーム画面に画像やモデルが出てきてるんですね。
皆さんが大好きなあの子の痴態も、その柔肌の色を散々、しかも一斉に計算されつくして
やっと皆さんの前に見せているんです。そう考えると興奮しますね。(真顔
一応これで概念的なものは話したつもりです。
というより私はこんな感じでShaderを認識しているって形なので
ひょっとすると全く違うかもしれません。
実際私もShaderのことに関してはこんな感じでしかわかってないですしうまく書けているわけでもないです。
でも、少なくてもShaderの意味や概念、どんなふうに計算されているんだろうっていうのが
分からなかった頃の私から比べると少しだけ成長したんじゃないかなって思っています。
さて、じゃあ次回やるときはやっとコードを書くことになると思います。
Surface Shaderのことについてもこの時に話すかもしれません。
ではでは……
ちなみ之を描いてる時に艦これ(最近ちょっとやってる)をしてたのですが
建造で女教師さんが手に入ったので彼女とケッコンするまでは頑張ろうと思います。
Android版も来るのでサクサクできるかもしれないね!
PR
COMMENT
カレンダー
最新記事
(02/05)
(01/22)
(06/01)
(12/18)
(12/18)
最新コメント
プロフィール
HN:
あい。
年齢:
30
性別:
非公開
誕生日:
1994/01/09
自己紹介:
仕事でunityしつつ、3Dとかやるので
そろそろどこに向かってるのか分からなくなってきた人
めーるあどれす:
nokutan_aiあっとyahoo.co.jp
このブログはリンクフリーです。
バナーのURL
"https://blog.cnobi.jp/v1/blog/user/ffb3f4a3a70931da92ac361f9c87596b/1408110435"
になってると思います。
@AI_nohito からのツイート
そろそろどこに向かってるのか分からなくなってきた人
めーるあどれす:
nokutan_aiあっとyahoo.co.jp
このブログはリンクフリーです。
バナーのURL
"https://blog.cnobi.jp/v1/blog/user/ffb3f4a3a70931da92ac361f9c87596b/1408110435"
になってると思います。
@AI_nohito からのツイート
カウンター