LoginSignup
1
0

maya で接地をとりたい2

Last updated at Posted at 2023-12-24

前回のshrinkWrapを使用してもう1ネタ
https://qiita.com/9boz/items/a18da4f498c7345542bf

これを転がしてみようかと思います。

image.png

ざっくり設計

箱を回転させた際に、地面にめり込まないように勝手に上下に動いて欲しい

ので

転がしたい箱 と同じ形状(又はそれをリダクションしたもの)を用意し
それをその場で回転させて最下部の位置を取得

取得した最下部の位置を回転jointの位置へ適用

うん 文字だと伝わりづらいですね

まずは準備

箱の中心に回転用のjoint(rot_jnt)を設置し、
その親にrot_jntと同じ位置のjoint(rotSpace_jnt)を設置する
image.png

image.png

箱の接地ポイント取得用に

  • cube_geoと同じサイズのメッシュ(cubeDummy_geo)を用意
    image.png

  • rot_jnt を複製したrotDummy_jntを用意
    image.png

  • shrinkWrapを適用するためのmesh(botSampler_geo) を用意
    image.png

  • 接地位置を取るためのlocatorを用意(botPointParent, botPoint)
    image.png

組んでいく

  • rot_jnt から rotDummy_jnt へ rotateをコネクト

image.png

  • botPoint を botSampler_geo でpointOnPolyConstrain
    ※この際botPointがbotSampler_geoの最下部か最上部になるように UV値を調整

image.png

image.png

  • cubeDummy_geo で botSampler_geo をshrinkWrap
    ※オプション参考はこんな感じ reverse をonにしないと天井に張り付くので注意
    image.png

  • botPoint のtranslateY を -1.0を掛けて rot_jntのtranslateYへ接続
    ※今回は rot_jntがワールド向きなので translateYですが、rot_jntの向きにあわせて接続する軸を調整
    image.png

最後に

  • cube_geo を rot_jntでバインド
  • cubeDummy_geo を rotDummy_jntでバインド

挙動確認

こんな調子ですね
※root_jntを移動させてます

  • rot_jntを回転させる
  • rotDummy_jntが回転する
  • cubeDummy_geoが回転する
  • botSampler_geoがcubeDummy_geoの最下部にひっつく
  • botPointがbotSampler_geoに追従してcubeDummy_geoの最下部に移動する
  • botPointが移動した分、rot_jntが上方向に移動する

image.png

設計ミス

0 45 90 とかは問題ないですが、中途半端な角度の時にうーん・・・・

image.png

基本的に箱の辺以外では接地してほしくないなぁ
※面は辺4つで接地のイメージ

改修

  • cubeDummy_geo をなるべくほっそーくしてしまう。
    理想はエッジのみですが、エッジのみにしてしまうとshrinkできなくなってしまうのでほっそーく。
    箱がベベルされてたりしたらその面残しとかでいけますね
    image.png

  • shrinkWrap調整
    botSampler_geoのshrinkWrapはそのままだと初期位置ではshrinkされないので
    image.png

shrink先が見つからないときはとりあえず最近接点へオプションにチェック
botPointが真下ではなく、奥のエッジに行ってしまいますが
結局上下方向しか取らないので問題ないです。
image.png

再確認

cubeDummy_geoの幅の分だけ若干沈みますが、割と理想的な動きになりました。

image.png

あー・・・・・
image.png

もはやヤケクソ
image.png

よし!
image.png

もっとスマートな方法は沢山あると思いますけどね!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0