しおんの部屋

3DCG とか スクリプト とか…

脚の付け根にBBONEを使ってみた[ Blender 3DCG 女の子 ]

2024年08月14日 | Blender 3DCG

脚の付け根(股関節)は可動域がとても広い。
座った時は前方向に大きく曲がり、開脚時は横方向に大きく開く。
肘や膝のように1方向のみに曲がる関節とは比べものにならないほど bone の weight設定 が難しい。
結局実用性のない180度開脚(横方向への90度曲げ)を犠牲にしていた。
体操選手 や バレリーナ などを除けば通常90度位が限界なので…
ちなみに180度開脚すると…太もも側面が 腰の側面 に大きくめり込んでいた。

ここで関節について少し考えてみる。
ストローなどの円柱を90度曲げようとすると曲げた内側に凹状の深い溝ができる。
ところが関節を曲げてもそのような溝はできず、逆に曲げるための筋肉の筋が隆起することもある。肘、膝などがわかりやすい。
今回着目する脚の付け根(股関節)は目立つ筋が前・外・内とあらゆる方向に存在する。
関節の表面の皮膚だけ見ると、曲げた時の内側は縮み、外側は伸びるように見える。

股関節でこれをどう実現するか、色々と試してみた。(かれこれ3年位かかっている…)

➀腰から太ももに向けてstrech_toする補助bone
→ 脚が回転(膝の向きを変える等)したとき追従出来なかった…

➁太ももから腰に向けてstrech_toする補助bone と ➀ との組み合わせ
→ アニメーション動作時1Frame遅れる場合がある。weight設定が難しい。

➂腰を親として、太ももにstrech_toする補助のBendy_Bone
→ 一般的なBoneとの境目が不自然かな?と思っていたが慣れるとできそう…

ということで➂でそこそこうまくいったので概要を説明する。

腰 から 太もも上部 までを横から見た模式図を以下に示す。

腰 と 太もも のBoneは体の中心近くに位置しているが、今回用意する補助のBendy_Boneは体の表面付近に配置する。
向かって左が 腹から太もも前部にかけてのBendy_Bone 、向かって右が お尻のBendy_Bone となる。

曲げていくと 腹側は縮み、尻側が伸びていくのがわかると思う。

実際に採用したのが以下となる。



立った状態、座った状態、開脚した状態の全てで良い結果が得られている。
曲げた方向のBendy_Boneが縮み、反対側が伸びているのが確認できる。
但し問題が全て解決したわけではない。
開脚の方向は十分だが、前方向が120度あたりから破綻する。

BBONEのHEAD(腰側)が太ももの内、TAIL(太もも側)が腰の中、に入ったところでBBONEの形状が大きく変わり、曲げた部分に変な筋がでてしまう。
今後の課題だ…
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

水着まちゅり2024参加[ Blender 3DCG 女の子 ]

2024年07月12日 | Blender 3DCG
今年も水着まちゅりに参加しました。
今回は椅子に座ったポーズに決めていたのですが、なかなか思うようにならず何回かえたことか…
やっとこんな感じになりました。
久し振りに髪型も変えました。

今年は暑いので室内です。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

竜のウロコのテクスチャをノードで作ってみた[ Blender ]

2023年11月26日 | Blender 3DCG
来年の干支は 辰(竜)
竜 には ウロコ があるが、形状で作るのは大変そうなのでテクスチャを作ることにした。
但し 画像ファイル を用いると解像度に大きく左右されるので、Cycles の ノード で シームレス な プロシージャルテクスチャ を作ることにした。

一見複雑そうに見えるが、以下のように色分けした領域に分けて考えると、意外と単純になる。

緑の領域を見ると、4か所全てが同じであることがわかる。赤の領域も同様。
また、緑の領域 と 赤の領域 を比べると 左右反転しているだけであることがわかる。
この特徴を利用し作成したのが以下の Cycles の ノード である。

※ 剰余のノードは0をはさんで 負の値 から 正の値 に変わるとき連続性が途切れるで、UV座標は正の側で使う必要がある。

作った後で思ったのだが、竜 と言うより 鯉のぼり の ウロコ みたいだ・・・
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

blenderのedit_bonesのマトリクスについて

2023年10月28日 | Blender 3DCG
Blender ワンポイント情報?(説明が長くなってしまった…)


Blender には bones , edit_bones , pose.bones があり、それぞれ様々なマトリクスを持つ。
今回は edit_bones のマトリクスについて考える。

edit_bones のマトリクス関連の属性は以下1種類

・matrix:armature空間でのボーンの位置と回転(※)を示すマトリクス
     ※ head,y軸方向,roll を含み length,sizeは含まない

マトリクス全般に言えることだが、4x4 計16個の値は一定の規則を満たす必要があり、矛盾する値を設定するとblenderが不安定になる。
よって編集モード時は edit_bones の回転や位置を matrix ではなく、以下属性で指定する。

・head:head位置(armature空間)
・tail:tail位置(armature空間)
・roll:Boneのy軸周りの回転角

matrix と head , tail , roll は相互変換が可能だが、matrix には length,size の情報は含まれないので、相互変換する場合は matrix と以下属性をセットで考える必要がある。

・length:boneの長さ(変更するとtail位置が移動)


ところで matrix を使うと何ができるのかというと、edit_boneのlocal空間 と armature空間 の変換を行うことができる。

<変換例>
armature空間 = matrix @ edit_boneのlocal空間
    head = matrix @ ( 0 , 0 , 0 ) # 原点 が headのローカル位置
    tail = matrix @ ( 0 , b.length , 0 ) # 原点からy方向にlengthの位置 が tailのローカル位置


blenderのpythonコンソール で matrix,length と head,tail,roll の相互変換を確認してみる。
用意した関数は以下2種類。

・matrix_length_2_head_tail_roll
・head_tail_roll_2_matrix_length
( webから得られた情報を組み合わせて作ったが、今のところ正しい結果を得られている )

上記関数内では以下関数を利用しているため、古いBlenderでは利用できない場合がある。

・bpy.types.Bone.AxisRollFromMatrix
・bpy.types.Bone.MatrixFromAxisRoll

  #
  # 確認用コード
  #   表示が全て 0 なら確認OK
  #   属性によっては 1e-7程度 の演算誤差が発生する
  #
  import numpy
  #
  # matrix と length を head と tail と roll に変換する関数
  def matrix_length_2_head_tail_roll( m , l ):
    a , r = bpy.types.Bone.AxisRollFromMatrix( m.to_3x3() )
    h     = m.translation
    t     = a * l + h
    return h , t , r
  #
  # head と tail と roll を matrix と length に変換する関数
  def head_tail_roll_2_matrix_length( h , t , r ):
    a = t - h
    l = a.length
    m = Matrix().Translation( h ) @ bpy.types.Bone.MatrixFromAxisRoll( a , r ).to_4x4()
    return m , l
  #
  # 一致確認用関数 ( 各要素の差を取り、最も大きい値を表示 )
  def f(p,q):return max([abs(a-b) for a,b in zip(numpy.ravel(p),numpy.ravel(q))])
  #
  # editモードに変更
  _ = bpy.ops.object.mode_set( mode = 'EDIT' )
  #
  # 選択されたedit_boneを取得
  b = bpy.context.active_bone
  #
  # matrix_length_2_head_tail_roll の確認
  h1 , t1 , r1 = matrix_length_2_head_tail_roll( b.matrix , b.length )
  print( f"name  {   b.name         }" )
  print( f"head1 {f( b.head   , h1 )}" )
  print( f"tail1 {f( b.tail   , t1 )}" )
  print( f"roll1 {f( b.roll   , r1 )}" )
  #
  # head_tail_roll_2_matrix_length の確認
  m1 , l1 = head_tail_roll_2_matrix_length( b.head , b.tail , b.roll )
  print( f"mat   {f( b.matrix , m1 )}" )
  print( f"len   {f( b.length , l1 )}" )
  #
  # boneの local空間 から armature空間 への変換の確認
  h2 = b.matrix @ Vector((0,0,0))
  t2 = b.matrix @ Vector((0,b.length,0))
  print( f"head2 {f( b.head   , h2 )}" )
  print( f"tail2 {f( b.tail   , t2 )}" )


最後に roll について触れておく。

roll は y_axis 周りの回転だが、roll=0 の時 z_axis や x_axis がどの方向になるのかが今までわからなかった。が、最近判明したので説明する。
まず boneのy_axis が armature空間のY軸 と一致しているなら、roll = 0 の時 boneのz_axis と armature空間のZ軸方向 も一致している。この状態のboneをhead位置を中心に、x_axis と z_axis の平面上任意の軸( x_axis z_axis そのものとは限らない ) まわりに 0以上180未満の範囲で回転させた場合、y_axis が真反対となる場合を除き、1回の回転でbone を全ての方向に向けることができる。この時の x_axis,y_axis,z_axis の方向が roll=0の時の方向となる。
例外として 回転角度が180度の場合は、回転軸によらず y_axis は正反対を向くが、x_axis と z_axis は 回転軸次第で 一定に定まらない。
よって、回転角度が180度の場合のみ z_axis を回転軸とする。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

水着まちゅり2023参加[ Blender 3DCG 女の子 ]

2023年07月11日 | Blender 3DCG
今年も水着まちゅりに参加しました。

今回のコンセプトは「柱に寄りかかって笑っている女の子 」だったのですが、それだけだとつまらないので強めの風を吹かせてみました。
手で髪を抑えるとスカートを抑えられなくなるので、髪型は風に強いハーフアップにしました。(あれ?去年と同じ?)
そんな状態で満面の笑みというのも変なので、風に負けないクールな女の子という感じにしました。
最初のコンセプトとは少し違いますが、こういう感じも良いかと…
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

久しぶりのミディアムボム…2[ Blender 3DCG 女の子 ]

2023年05月06日 | Blender 3DCG
久しぶりのミディアムボム[ Blender 3DCG 女の子 ]の続き
前回は全体のイメージ固めで終わってしまったが、今回は細かいところに手を加えた。
・ほつれ髪
 まったく乱れていないとおかしい。
・内側の髪
 耳がそのまま見えているのはおかしいので・・・

ちょっとした差で、イメージがかなり違って自然になった気がする。

それにしても、ハーフアップと比べると子供っぽい?
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

久しぶりのミディアムボム[ Blender 3DCG 女の子 ]

2023年05月02日 | Blender 3DCG
久しぶりに、髪型をミディアムボムに戻してみた。
といっても、過去そのままではない。

なぜかというと、過去の髪型に戻したところ色々と違和感を感じたからだ。
・なんだかヘルメットみたい
・小顔に見えない

理由は・・・
・なんだかヘルメットみたい
→ 顔の輪郭から頭の輪郭までの幅が一定で、全体的にウィグを被ったみたい
・小顔に見えない
→顔の両側を髪で隠しているせいで、顔の輪郭(肌色の部分)が縦長となり、面長に感じる。

そこで以下のようにしてみた。
・頭頂周辺(天使の輪ができるところあたり)は、髪の毛の層の幅を狭くする
・髪の外側の輪郭は丸みをもたせ、首あたりが最も広がるようにする
・目の横から上のこめかみあたりは、顔の輪郭を多めに髪で隠す
・耳の下あたりからのあごの輪郭は、髪で隠さないようにする
結果はこれ。

今回の感想:「実はボムはバランスが難しい?」
人は顔に着目したとき、頭の輪郭を基準にバランスを判断する。
これをうまく利用したのがボムで、丸顔をうまく髪で隠して細面に見せるため日本人に合うらしい。

ところが、理想的な8頭身で顔の細い外国の人が、顔の両側を髪で隠すと、顔の輪郭(肌色の部分)が日本人にありえないほど縦長になる。日本人はこれを面長と感じてあまり良い印象にはならないようなのだ。外国の人自身がどう感じるかはよくわからないが、海外の女優さんなどはボムでもフェースラインをそのまま見せている人が多い気がする。

ということで、ひとくくりにボムといっても、顔の形によってバランスが大きく変わる個性豊かな髪型のようだ。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

水着まちゅり2022参加[ Blender 3DCG 女の子 ]

2022年07月03日 | Blender 3DCG
今年も水着まちゅりに参加しました。

背景の建物はサントリーニ島の教会をイメージしてみました。
実際の街並みは斜面に面していてもっと曲線が多いです。

水着はクロスシミュレーションで縫合したオーダーメードです。
体形をなるべく平面になるように分割し、メッシュで作ったメジャーをカーブに沿って変形して採寸し、その情報から作った型紙を元にクロスシミュレーションで縫合して作りました。
T字ポーズに近い状態で縫合後、実際のポーズに追従させるので、ボーンのウェイト調整の必要が無いのが良いです。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

巫女装束作れるかな? 番外編[ Blender 3DCG 女の子 ]

2022年04月25日 | Blender 3DCG
巫女装束作れるかな? その12.1 [Blender 3DCG]の続き
緋袴の作り方のリクエストがあったが・・・
確か2年以上前なのであまりはっきり覚えていない。
ただ何度か試行錯誤したので思い出す範囲で手順を書いてみる。

ミラーを使用するため、作成は右半分のみ。
① 足首の高さで裾の形を線形状で作成。それを胴(帯の下)の高さまで掃引する。
② 上側を楕円形にして胴に合わせる。この時ひだの折り返しで裏向きになる面の2点は1点に結合する(3角形になる)
③ 上の部分を胴に沿って伸ばす。(帯の内側に入る部分になる)胴から裾までの間は、水平方向に何分割かして、腰の突き抜けが起こらないように形を整える。
④ 脇の空いている部分を作る為、適当な高さまで胴から切り込みを入れ、前後に分ける
⑤ 脇の空いている部分を適当に縁取りや面割りをする。(サブディビジョンサーフェース時、空いている部分の下を鋭角にするのが目的)
・ この状態でミラーリングして、胴の部分に円筒の側面のみを2重にした形状で帯を作り、正面にリボンを付けたら行燈袴の完成。
⑥ ⑤を利用し膝より下、前中心と後中心の間に面を張る。
⑦ 中心側のひだを伸ばし、形を整える。
・ この状態でミラーリングして、帯を付けたら馬上袴の完成。

これ以上は実際に作り直してみないと思い出せないが、今作り直すとクロスシミュレーション版で全く別物になると思う。
(さらに試行錯誤が必要で時間がかかると思う。今すぐはむりだがいつかは作りたい・・・)
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

はいからさん [ Blender 3DCG 女の子 ]

2022年04月04日 | Blender 3DCG
着物(上半身)を作ろう…4 [ Blender 3DCG 女の子 ]の続き。
お世話になっている「創作庵寺子屋」が5月いっぱいで終了なので、急遽卒業をテーマとした作品を作ることにした。

寺子屋 と言えば 昔の学校。昔の学校 の女学生と言えば はいからさん!
という事で前回の着物に袴を合わせてみた。当然柄は矢絣。
初めてポーズをとらせてみたのだが、何だかよい感じに仕上がった。



創作庵寺子屋 の喜多川さん お疲れ様でした。
大変お世話になりありがとうございました。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

着物(上半身)を作ろう…4 [ Blender 3DCG 女の子 ]

2022年03月21日 | Blender 3DCG
着着物(上半身)を作ろう…3 [ Blender 3DCG 女の子 ]の続き。
前回の問題点は以下①~④
①身頃と袖の境目が上方向にとがっている
②模様がすごく細かい
③振り ( 振袖の体側:袖付け から 袖下 までの開いた部分 ) が 内側に回り込んでいる。
④振りの部分が お腹側にかかってしまった。( 背中側にしたい )
この中で今回は①と③④を直した。
結果はこんな感じ。

問題が解決すると、なんだかすっきりとした感じになった。
(クロスシミュレーションを使わないで作ったのと大差ない? 汗)

-直した内容-

①は、身頃と袖の境目 を 肩幅 に合わせた。
これにより、とがった部分が肩の丸みと一致し、無理なくなじむようになった。
巫女装束では、肩と力こぶの間あたりに境目があったりするので、それを意識しすぎていた。

③④は、一筋縄ではいかなかった。

まず腰あたりに板を置き、袖を背中方向に流そうとしが・・・

板の位置や向きが難しく、こんな感じでコリジョンとの接触による爆発など、色々問題が発生した。

また、③は全く改善しなかった。


色々試行錯誤した結果、板をやめて、腰(背中側)あたりに 棒 をおいてみた。

これが意外とうまくいった。

縫合の引き寄せる力により、振袖の部分が肩方向に跳ね上がるのだが


棒によって振袖の下の部分が抑えられ、手首方向にすぐに戻って安定した。


その後振袖部が重力によって下がると、振り の部分が棒に沿って背中側にうまく収まった。

最後に棒を縮小して引き抜けば完成。
棒 が消える寸前に腰の背中側で縮小して 小さな円柱 になっている。
③④が無事解決した。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

着物(上半身)を作ろう…3 [ Blender 3DCG 女の子 ]

2022年02月27日 | Blender 3DCG
着物(上半身)を作ろう…2[Blender 3DCG 女の子]の続き。
前回は数々の問題が一気に解決したので嬉しかったのだが、よく考えるとそこからが大変だった。
今の問題は…
・胸部の突き抜け
・振袖が前身頃に食い込んでいる
・背中のたるみ
・身頃と袖の境目が上方向にとがっている
・模様がすごく細かい
一気に解決するのは無理そうだったので上3つについて改善してみた。
・縫合力を調整する。
・身頃の巻き付け方向を調節する。
・腕の下げ肩を緩やかにして、振袖が身頃に食い込まないようにする。
結果はこんな感じ。


ほぼ思い通りにいったが、新たな問題も出てきた。
・振り ( 振袖の体側:袖付け から 袖下 までの開いた部分 ) が 内側に回り込んでいる。
・振りの部分が お腹側にかかってしまった。( 背中側にしたい )
前回の残った問題も含め、まだまだ試行錯誤が必要そうだ。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

着物(上半身)を作ろう…2[Blender 3DCG 女の子]

2022年02月19日 | Blender 3DCG
着物(上半身)を作ろう…1[Blender 3DCG 女の子]の続き。
前回問題となった突き抜けを直すため、色々とパラメータを変えて試行錯誤してみたがなかなかうまくいかなかった。そこで 2.93 のクロスシミュレーション を試す事にした。
(実を言えば 2.79b のクロスシミュレーション を使っていたので ^^;)
最初は全くうまくいかなかったのだが…
collision_settings.self_distance_min = 0.001
settings.tension_stiffness = 20
settings.shear_stiffness = 500
settings.bending_stiffness = 20
settings.mass = 0.7
上記設定をかえたところ、意外にあっさりとそこそこのレベルになった。

一番の成果は、衿の重ねの部分がほぼうまくいった事だ。
ここは布のテンションが高く、布の重なり や 縫合 など、難しい条件が重なっているからだ。
それでも胸部の突き抜けについては微調整すれば何とかなりそうなレベルだ。

問題なのは、振袖が前身頃に食い込んでいるところと、背中のたるみ(背骨の位置でとがっている)ところだろうか。

新たな試行錯誤が必要そうだ。
あともうひとつ、身頃と袖の境目が上方向にとがっているのが気になる。
よくよく考えると、袖に対して身頃側に角度があるため、とがるのは当たり前だ。
もしかして境目の位置がおかしい?
またまたもう一つ、なぜか模様がすごく細かくなってしまった。
調べないと…


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

着物(上半身)を作ろう…1[Blender 3DCG 女の子]

2022年02月05日 | Blender 3DCG
浴衣を作ろう6[Blender 3DCG 女の子]からの派生?
浴衣をクロスシミュレーションで作ろうとしたが、上半身がうまくいくと下半身がだめだったり、その逆だったりで、納得いく結果が得られなかった。そこで、比較的クロスシミュレーションしやすい洋服と、難しい和服の違いについて調べてみた。

最も違う点は、洋服は体に合わせて作られているのに対し、和服は直線的に作られていて着付けで身体に合わせるところだ。和服の着付けが難しいのは、体形によりさまざまな手法を使い分けるからだろう。その難しさを軽減するため、体形補正で身体の起伏を直線的にする方法もあるようだが、ずん胴で太って見えそうなので却下。

和服の着付けを調べ、クロスシミュレーションに関係しそうな部分をまとめてみた。
・まず衿を胸元から腰に向かい直線状に整える。胸元が開かないよう意識する。
・次に、横(前身頃と後身頃の境目)を山折りにして前身頃の皺ができないように脇腹の方に伸ばす。
・この山折りの位置を保ったまま、後身頃を皺ができないように前身頃の内側に折り込む。
・この状態を帯で固定する。
・脇の折り込みによる重なりはヒップの部分ですべてなくなるようにする。
・裾が開かないように帯の折り込み部分で調整する。

ここまで調べてふと思ったのだが、帯を境に上下別々のパーツに分ければクロスシミュレーションが楽そうだ。
上半身のみなら、前身頃と後身頃は縫われていない部分のみとなるので単純化できる。
下半身のみなら、長方形に近い形のみになりそうだ。

という事で上半身側から挑戦。
クロスシミュレーションすると・・・

コスプレのはっぴみたいになった(^^;
上のレンダリング結果ではわかりにくいが、重なり部分や袖の胴側がまだうまくいっていない。

急に色々変えすぎたかも(^^;
ちなみにクロスシミュレーション前はこんな感じ。

さてどう直そうか・・・
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

口と鼻と顎と髪と…4[Blender 3DCG 女の子]

2022年01月05日 | Blender 3DCG
口と鼻と顎と髪と…3[Blender 3DCG]の続き
一般的に日本人は上唇と下唇の幅がほぼ同じなので前回もほぼ同じにしたのだが・・・
なんとなく味気ない感じがしたので理由を考えてみた。
(といっても唇が整った有名人の写真を集めて見比べただけ・・^^;)
私が魅力的だと感じる唇を分類してみると、上唇に対して下唇の幅が狭い人が多いようだった。
それらの人は、口角部で下唇が上唇と比べ、口の内部に向かって多めに回り込んでいるようだった。
その結果、口角部で上唇の稜線(?)が下唇より前に出て目立つため、ふっくら感が増すようだ。
という事で直してみた。


なんだかよい感じ!
という事で採用。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする