2015年11月30日月曜日

Unityで動的なアニメパース効果をつける



前回の記事でUE4のアニメパースマテリアルを作りましたが、
Unityでも、あれと同じような頂点シェーダを書けば実現できます。
こんな感じに。



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ちゃんステージのシェーダーに埋め込んだのがこちら

0 件のコメント:

コメントを投稿