コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】GPU パーティクルのビルボードで位置がズレる不具合に遭遇したので原因と解決方法メモ

修正前

pos.xyz *= _particles[iidx].scale;
pos.xyz = rotateWithQuaternion(pos.xyz, rotation);
pos.xyz += _particles[iidx].position;

v2f o;
o.pos = mul(UNITY_MATRIX_P, mul(UNITY_MATRIX_MV, float4(0, 0, pos.z, 1)) + float4(pos.x, pos.y, 0, 0));

修正後

pos.xyz *= _particles[iidx].scale;
pos.xyz = rotateWithQuaternion(pos.xyz, rotation);

float3 offset = _particles[iidx].position;

v2f o;
o.pos = mul(UNITY_MATRIX_P, mul(UNITY_MATRIX_MV, float4( offset.x, offset.y, offset.z + pos.z, 1)) + float4(pos.x, pos.y, 0, 0));
  • 位置を計算するタイミングが間違っていた