前回の記事でUE4のアニメパースマテリアルを作りましたが、
Unityでも、あれと同じような頂点シェーダを書けば実現できます。
こんな感じに。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void anime_perspective(inout float4 v) { | |
float3 cameradir = float3(-UNITY_MATRIX_V._m02, -UNITY_MATRIX_V._m12, -UNITY_MATRIX_V._m22); // カメラの方向ベクトル | |
float3 viewdir = WorldSpaceViewDir(v); // 頂点からカメラへのベクトル | |
float len = length(viewdir); // 頂点とカメラとの距離 | |
float maxv = 2; // アニメパースをかける最大距離 | |
len = clamp(len, 0.0, maxv) / maxv; // アニメパースをかける距離を0~1の範囲にする | |
len = pow(1 - len, 4.0); // カメラとの距離の逆4乗となるようにする | |
float factor = 1.25; // まぁいい感じの係数 | |
v.xyz += mul(_World2Object, (-cameradir) * len * factor + (viewdir-cameradir) * len * factor); // 頂点をずらす | |
} | |
// Vertex shaderでv.vertexをanime_perspectiveに渡す | |
v2f vert( appdata_base v ) | |
{ | |
anime_perspective(v.vertex); | |
// あと省略 |
Unityでもアニメパースシェーダーつくってみました。アニメパースシェーダーを有効にしてるのが左、無効にしてるのが右です。 #unity3d pic.twitter.com/dRyjHKvP0g
— tatsunoru (@tatsunoru) 2015, 11月 29