海の底または近海を漂うナニカ?

きのむくままにいろいろかくですよー(≧◇≦)

Study!シェーダー!unityのやつ! うむむわかるようなわからんような(@_@。 その2

ちょっと、完璧に余談ですが。昨日はそこそこ大きめの人数でVRchatに集まりとても楽しかったです。

皆さんのアバターを見ていると、なんというかテクスチャがとてもきれいですね。エッジがパリッとしてるというか、メリハリがある感じのテクスチャですごいなぁと思いました。あと目の表現なんかも、きれいな方が多くて私も見習いたいと思いました。

 

ってわけで前置きはこんなもんで、シェーダーの続きいってみます!

なんかいろいろ間違えてたので修正(20180610)

 

シェーダーの続き!(≧◇≦)

 

前回は、

 

こんなんでした。

シェーダーとはなんぞや?みたいな雰囲気で初めて、軽くunlite/Texture のシェーダーの頭の部分の(プロパティまで)勉強したです。

 

 今回は、その続きとしていよいよ、お絵かきする本体部分に関して勉強するです!

 

てっでー前回もお出しましたが、シェーダー全体が下のやつですね。

f:id:matasaburou1999:20180605195212p:plain


前回プロパティの説明は終わりましたので、いよいよ Vertex シェーダー と Fragment シェーダー ってなんなのかなーってのを見てみるです。(@_@;)

Vertexシェーダー

こちらのシェーダーは、頂点の位置を操作するものらしいです。

3DCGは、点の集まりでできています。その点が今回画面に表示する、絵を描く時どこにあるのかー!っていうのをこのシェーダーに書いてある内容で決めるらしいです。

そして、ここでやる大きな仕事としては、モデルの場所合わせがあるみたいです。

f:id:matasaburou1999:20180607204415p:plain

例えばですが、3DCGがあったときに、それがどっち向いてるかーとか、世界のどこにあるのかーっていうのは、モデルだけではわかりません。

モデルを置く場所だったり、向きだったりとか、そういうのをきっちり決めないとちゃんと描画することはできないのです。

ここに!ってそれを決めるのがvertexシェーダーの大きな仕事の一つらしいですね。

 

(20180610追記) そして更に、見てる人の視点の位置を決めて、その人に見える、モデルの頂点の位置を決めるまでがvertexシェーダーの仕事らしいです。

 

ちなみに、機能的には頂点の位置を決めるですので、いろいろなことができるようです。ちょびっとまた今度かけたら書くです。

 

Fragment シェーダー

Vertexシェーダーでは、モデルの点が世界のどこにあるのか、どっち向いてるのか、みたいなのを決めました。しかし、まだそれだけでは、絵をかくことができません。

なぜなら、そのモデルを見ている人が決まっていないからです。つまり、どこからそれを見ているのか、というのが欠けているのかわからないので、どういう風に書けばいいのか決めれないのです。

Fragment シェーダーでは、その見ている人の場所を決めて、ここからこんな風に見ているのだー!って感じに決めるらしいです。

要するに、見てる人に合わせて、モデルや世界から絵を描くのがここの仕事だと私は理解しました。

 

Fragment シェーダーの説明の一部が、 Vertexシェーダーでの処理が混じっていたようで、ごめんなさいします。m(_ _)m

正確には、Vertexシェーダーで決めた画面上に見えるモデルとかの点の位置について、複数のモデルが置かれているときの重なりであったりだとか、透明度だとか、を考慮した上で、画面上に絵を描いていくみたいな感じらしいですね。

 

先日おだしした、下の図で言うところの、見てる人から視線に映るモデルの頂点の位置を決めるまでは、Vertexシェーダでのお仕事でした。

Fragment シェーダでは、画面上に見えるすべての場所、に対して様々な条件(モデルや背景の色、モデルの重なりや、透明度)などを考慮して見えている色を決める、という作業を行い、最終的に画面に表示される絵を書く、という仕事をしているようです。

f:id:matasaburou1999:20180607205454p:plain

ちなみに、このシェーダーでは、どんな感じに書かれているか決めることができます。テクスチャから色を拾ってくれば、そのまま作ったモデルの通りに、そこにライトの位置から影をかけば光の表現ができるらしいです。自分で好きな色にすることもできるですし、好きなように絵作りをすることができるらしいです。いろいろ勉強したら面白そうですね。

 

ってわけでぼんやりと説明しましたが、私も正直まだまだあやふやです。

ってわけで次回あたり、ちょびっと実例を交えてみようかなーと思っております。

てっでー(≧◇≦)/

 

続く!

deep-or-near-sea.hateblo.jp

 

付録 曖昧ですが、コードに出てきた文章について説明?

SubShader

unityでのシェーダーを書くときにここからここまでがシェーダーの処理だよ!って宣言するやつです。{}の中のに従ってこの対象の絵を書いてねってことになるですね。

Tags

描画の順番だったり、とかその物体がどういうものかを説明する?

画像の Opaque ってのは、不透明なものですよ!って指示らしいですし、これをTransparentにすると透明なオブジェクトですよー!ってするらしい。

(よくわかってない)

ShaderLab : SubShader 内の Tags - Unity マニュアル\

LOD

3Dの描写は負荷がかかります。それに関連してどの程度まで描画できるよて目星?(ンゲーム機事に描写能力が違うので、これで分けたりするとかってのを見た気がします。)(何となくわかったような気がする)

 

わからないことばかりで嫌になりそうですね。でも、調べると何となくわからんでもないような気がするので頑張りたいです。(@_@。