え～シェーダー書くの～

#はじめに
私がUnityを使い始めるのが１年遅れた理由の一つとして、シェーダーを書かなければイケなかったというのがあります。シェーダーって言葉くらいは聞いたことありますよね？いろいろな種類があるようですが、先人の人がまとめたりとかされております。
http://tips.hecomi.com/entry/2014/03/16/233943

私の理解ではこれでテクスチャを実装するとGPU側に命令セットが渡りCPUのみで実行されるより高速に実行できると思っています。ただし実装しだいです。GPUの構成も重要です。

#たぶんこういうことだという個人的な見解
Unity AssetであるShader Forgeでは、Surface Shaderのイメージグラフを作成することができます。
知っている人が見るとまんまUE3のイメーグラフです。これを元に作成されたそうです。

テンプレタイプの自動生成１スクリプトファイルが生成される
イメージと使いかたはいずれ...

UE4側はMaterialをcustom HLSLをイメージグラフで作成することができます。
テキストは
#defineなどの設定で、インクルードファイルが多く複数のファイルにまとまれいるよう。
イメージと使いかたはいずれ...usfでファイル検索をすると実装部が見つかる

これがどう使われるかもエディターかパッケージ化したものかによって変わってくるので、いずれ...

#結局理解しないとだめ

法線マップからUVマップの逆を生成し、カメラ側から見た絶対座標をUVマップで描画することをしました。
動かないカラーマトリクスと動くカラーマトリクスの物語的な話だと思ってください。
覚えると色々なことができます。今度、半透明でエッジ部分だけを輝かせるとかチャレンジしようと思っています。

#数式は単なる演出のパターンでしかなかった（ここ重要）
2016.08.28のUnity道場11 Shader Forge 101に参加しました。
http://www.slideshare.net/nyaakobayashi/unity11-shader-forge-101-shaderforge


イカメモ

Unity道場11

Surface Shader

シェーダーラボ

サーフェース。ライティングの計算をunityに任せる

バーテックス、フラグメントは自分でやる。

コンピュートシェーダー（GPUに近い側）


Shader Forgeは、サーフェースのノードベース。
.shaderを生成する

ライト、オブジェクトのシェード、カメラに分類


参加して思ったのは、始めて聞いた人は本当についていけたのだろうか？という疑問です。
私はここら辺の知識をUE4から得たので、こういう風に普通は言うんだなぁと思いました。
UE4は他とは違う言い回しで、全て書かれています。


##シェーダーの基本的なテクニック

###掛け算 輝度さがる。 割り算 輝度上がる。
Unity Multiply Light
![sf_multiplelight_972016.png](https://qiita-image-store.s3.amazonaws.com/0/25895/63bc1775-b9b4-952c-2422-1eb646dd47dd.png)
Unity Devide Light
![sf_divedelight_972016.png](https://qiita-image-store.s3.amazonaws.com/0/25895/5c82c670-d0fd-8831-62fa-473410047de5.png)

UE4 Multiply Light
![UE4MultiplyLight.png](https://qiita-image-store.s3.amazonaws.com/0/25895/c367e665-5011-9c3b-ba60-41848ef1191f.png)
UE4 Devide Light
![UE4DivideLight.png](https://qiita-image-store.s3.amazonaws.com/0/25895/ab29dfdd-a6d7-bff3-1978-28e8d7bee029.png)

###Lerpデータ同士を混ぜる。Blendレイヤー合成。
Unity Lerp data mix
![sf_lerpmixdataeachother_982016.png](https://qiita-image-store.s3.amazonaws.com/0/25895/f7789e47-bcc8-aac0-7016-1ff8f7d2a3af.png)
UE4 Lerp data mix
![LerpDataMix.png](https://qiita-image-store.s3.amazonaws.com/0/25895/221977d9-e108-cf21-3b52-29c4e8ef0c93.png)


###1-x反転、情報を反転。
Unity color black one minus
 ![sf_onemina_9102016.png](https://qiita-image-store.s3.amazonaws.com/0/25895/f88abb9f-2fba-9150-233d-9215894546c3.png)

UE4 color black one minus
![oneminus.png](https://qiita-image-store.s3.amazonaws.com/0/25895/6136013d-81a2-6820-f7fd-a05d17bca48f.png)


###UVマップをタイリング（スケール）し変形する UVの変形 拡大縮小
Unity UV Coord 10 Multiply Texture 2D（1/10にテクスチャーを縮小）
![sf_uvmapmultiply_9182016.png](https://qiita-image-store.s3.amazonaws.com/0/25895/2313152b-fd0e-e83e-f50b-babbfab55994.png)

UE4 TexCord 10 Multiply MaterialExpressionTextureSampleParameter2D_1
![UVmultiplyTexture2D.png](https://qiita-image-store.s3.amazonaws.com/0/25895/96c430c7-e1e2-286c-0b0b-794e04a56e49.png)
 

UVマップの掛け算と足し算でUVが動く timeを入れるとアニメーション
Unity UV Coord add time Multiply vector2 0 1 texture2d emission
![sf_uvmapanimation_9202016.png](https://qiita-image-store.s3.amazonaws.com/0/25895/16196409-3f49-2017-35fd-b3e7ca07b6eb.png)

UE4 texturecoordinate add time vector2 0, -0.1 multiply texturesample
![UVmultiplyAnimation.png](https://qiita-image-store.s3.amazonaws.com/0/25895/5c270ce2-cc0b-256f-6be7-791bd02a7db6.png)


rotation,panner

Opacityアルファ抜き、パンチのあるのはOpacityClip

Frac関数で少数以下を繰り返す0~1

Floor関数でコマ送り一定の範囲

CompマスクでXYZのベクトルのUV要素を取り出す

Appendはベクトルの再合成

Time関数を使い時間を制御する




!!環境ブレンディング!!

雪やコケなどの上下関係をしたい

texture２つをleapでマスクする

ノーマルマップのワールドスペース化で、方向のベクトルを使う
タンジェントスペース



Diffuse白黒