Skip to content

Instantly share code, notes, and snippets.

@tatsunoru
Last active September 9, 2021 13:26
Show Gist options
  • Save tatsunoru/4575bdfbd1cbbba4eafc to your computer and use it in GitHub Desktop.
Save tatsunoru/4575bdfbd1cbbba4eafc to your computer and use it in GitHub Desktop.
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);
// あと省略
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment