Unity
Surface
HLSL
UE4

え~シェーダー書くの~

More than 1 year has passed since last update.

はじめに

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

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

たぶんこういうことだという個人的な見解

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

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

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
Unity Devide Light
sf_divedelight_972016.png

UE4 Multiply Light
UE4MultiplyLight.png
UE4 Devide Light
UE4DivideLight.png

Lerpデータ同士を混ぜる。Blendレイヤー合成。

Unity Lerp data mix
sf_lerpmixdataeachother_982016.png
UE4 Lerp data mix
LerpDataMix.png

1-x反転、情報を反転。

Unity color black one minus
sf_onemina_9102016.png

UE4 color black one minus
oneminus.png

UVマップをタイリング(スケール)し変形する UVの変形 拡大縮小

Unity UV Coord 10 Multiply Texture 2D(1/10にテクスチャーを縮小)
sf_uvmapmultiply_9182016.png

UE4 TexCord 10 Multiply MaterialExpressionTextureSampleParameter2D_1
UVmultiplyTexture2D.png

UVマップの掛け算と足し算でUVが動く timeを入れるとアニメーション
Unity UV Coord add time Multiply vector2 0 1 texture2d emission
sf_uvmapanimation_9202016.png

UE4 texturecoordinate add time vector2 0, -0.1 multiply texturesample
UVmultiplyAnimation.png

rotation,panner

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

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

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

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

Appendはベクトルの再合成

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

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

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

texture2つをleapでマスクする

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

Diffuse白黒