紙吹雪(confetti)popの質問
598
2
0
-
- makeinu
- Member

- 2 posts
- Joined: Aug. 2022
- Offline
初心者です、紙吹雪をテストで製作していました
地面に接した時に地面のノーマル方向に角度を変える(突き刺さらないようにする)挙動をやってみたかったんですが
// (前段の変数定義は同じ)
float duration = 1.0 / 8.0;
float fps = 1.0 / @TimeInc;
float amount_per_frame = 1.0 / (duration * fps);
float amount = 0.1;
// --- 処理の実行 ---
if (i@hitnum == 1) {
// 保存しておいた法線ベクトルから、目標の向きを生成
vector4 target_orient = quaternion(v@hitnml);
// 現在の向きから目標の向きへ滑らかに補間
@orient = slerp(@orient, target_orient, amount_per_frame);
// 回転を停止
@w = {0, 0, 0};
}
上記popwrangleをpostsolverに繋ぐと最初からY軸方向を向き続けます
geometry Spread sheetを見てもhitnumの挙動は正しいように見えるんですが、全フレームでif文が発火してしまっているように見えます
根本的な所で勘違いをしていると思いフォーラムに投げさせて頂きました
お手数おかけしますが、ご助言いただけると幸いです
Attachments:
confetti_help_mk.hiplc (331.0 KB)
-
- kazuyak
- Staff

- 7 posts
- Joined: March 2025
- Offline
パーティクルに@orientアトリビュートがないのが原因だと思います。
そのコードの挙動だと、@hitnumが1以外の場合の@orientは初期値がないので{0,0,0,1}のようなデフォルトの回転しない値が入ってしまって
Y軸方向の向きのままとなっていると思います。
パーティクルには@vアトリビュートがあるわけなので、
@orient=quaternion(@v);
のように初期値を入れてはいかがでしょうか?この場合、Velocityを軸にそのVelocityの大きさで回転させた向きが設定されます。
-
- makeinu
- Member

- 2 posts
- Joined: Aug. 2022
- Offline
初歩の初歩で勘違いしていました……!
ありがとうございます、修正できました!