Closed7

Bevyでデクストップマスコットを作る#2

notelmnotelm

デスクトップマスコット
https://github.com/not-elm/desktop_homunculus
VRMのライブラリ
https://github.com/not-elm/bevy_vrm1

本題に入る前に、どうしてもアウトライン描画周りのバグが気になったため修正しました。

仕様書によると、transparentWithZWriteがtrueの時かつアルファモードがブレンドの時は深度バッファの書き込みをオンにするようです。
あと固有のレンダリングの順番が決められていたためそれに合わせるように修正しました。
後他にもアウトラインパスを色々と修正しました。

before after
notelmnotelm

ついでにpreludeモジュールの定義とかもしっかりと行い0.2.0としてリリースする予定です。
それが終わったらようやくまともにVRMが描画できるようになるため、このアプリの開発に戻れます...!長かった...いや本当に、UnityとかだったらUniVRMとかで済むのでしょうがマイナーなエンジンだとこういうところがきついですね。まぁこのライブラリ開発も結構楽しめたのでいいのですが。

notelmnotelm

rust-fmtを使うと以下のようなフォーマットになるの好きじゃない...!

app.add_plugins((VrmaRetargetingBonePlugin, VrmaRetargetExpressionsPlugin))
    .add_systems(Update, request_redraw.run_if(playing_animation));

こうなって欲しい。

app
    .add_plugins((
        VrmaRetargetingBonePlugin,
        VrmaRetargetExpressionsPlugin,
    ))
    .add_systems(Update, request_redraw.run_if(playing_animation));
notelmnotelm

色々と細かい修正とかしまくってようやくv0.2.0のリリース完了!

ようやくホムンクルスの開発作業に着手できます。
現状ほとんどプロトタイプのような感覚で作っていまして、そろそろ仕様を練って本格的に作っていきたいのですが、その前に3点ほどやりたいことがあります。

1点目は奥行きの表現ができるようにすること。
2点目はドラッグがうまく機能しない時があるので修正
3点目は座っている時に前にウィンドウが出てきたら移動する

まずは1点目から考えます。
現状正投影カメラというものを使っていまして、ざっくりいうと遠くても近くても同じ大きさになります。
ですが、デスクトップメイトみたいにドアップで表示されるようにしたいので奥いきっぽいものを実装します。
https://www.youtube.com/watch?v=Kq0xfQUq9ag

とりあえず単純にZの大きさによってスケールを変更する方法で試してみます。

notelmnotelm

スケールを挙げるとスプリングボーンの挙動がおかしくなる...
一旦保留
ただ、HipsのZ座標をマスコットのスケールと同期させることでVRMAを介してスケール調整ができることまでは構想できました。

notelmnotelm

丸一日かけてボーンアニメーションのトランジションを実装していました。(大変だった)
現在再生中のVRMAから別のVRMAを再生する際に次のポーズまでを自然に補完できるようになりました。

ただし、遷移するVRMAの初期ポーズがそれぞれ違う場合うまく補完できていません。

notelmnotelm

なぜこんなことをやっていたのかというと、ドラッグ時のアニメーションを滑らかにしたかったからです。
この1秒にも満たない瞬間のために1日を潰しました...。

このスクラップは22時間前にクローズされました