2025-03-01 mixamo のモーションを blender に取り込む(rokoko使わないバージョン)

blender のアドオンの rokoko を導入してモーションとりこんでいたが、たまにキャラクターが空中にういたようなモーションになった。

そのため、rokoko を使わないで取り込む手順を模索してその結果を記載する。

 vrm,fbx読み込みの後から記載


blender 上部メニューの「アニメーション」にする

下部のタイムラインの欄は「ドープシート」を選ぶ

「ドープシート」から「アクションエディター」に変える

上部のキャラクターが表示されている欄を「オブジェクトモード」にする

いったん、右上のツリー内の適用先の「(オレンジ色)Armature」をクリックし、

モーション持っている側の「(オレンジ色)Armature.001」をクリックする


###「アクションエディター」欄のタイムライン内の「概要」の直下の Armature.001 から jump 等に名前を変える

右上のツリー内の適用先の「(オレンジ色)Armature」をクリック

「アクションエディター」欄の「+ 新規」の左隣りの菱形が逆三角形でならんでいるアイコンプルダウンを展開し

「F Armature.001|mixamo.com|Layer0」を選択する

でてきた「Armature.001」を任意の名前(jump等)に変える

blender 上部メニューの「スクリプト作成」を選択し、「新規」を押し下記スクリプトを実行する。


### スクリプト実行だけではまだです。スクリプト実行後も適用の手順続きます。

### ここから ###

import bpy


# --- 設定 ---

target_armature_name = "Armature"

source_armature_name = "Armature.001"


bone_names = [

    "mixamorig:Hips", "mixamorig:Spine", "mixamorig:Neck", "mixamorig:Head",

    "mixamorig:RightShoulder", "mixamorig:RightHand",

    "mixamorig:LeftShoulder", "mixamorig:LeftHand",

    "mixamorig:RightFoot", "mixamorig:RightToeBase",

    "mixamorig:LeftFoot", "mixamorig:LeftToeBase",

    "mixamorig:Chest", "mixamorig:UpperChest",

    "mixamorig:LeftUpperArm", "mixamorig:LeftLowerArm",

    "mixamorig:LeftIndex1", "mixamorig:LeftIndex2", "mixamorig:LeftIndex3",

    "mixamorig:LeftLittle1", "mixamorig:LeftLittle2", "mixamorig:LeftLittle3",

    "mixamorig:LeftMiddle1", "mixamorig:LeftMiddle2", "mixamorig:LeftMiddle3",

    "mixamorig:LeftRing1", "mixamorig:LeftRing2", "mixamorig:LeftRing3",

    "mixamorig:LeftThumb1", "mixamorig:LeftThumb2", "mixamorig:LeftThumb3",

    "mixamorig:RightUpperArm", "mixamorig:RightLowerArm",

    "mixamorig:RightIndex1", "mixamorig:RightIndex2", "mixamorig:RightIndex3",

    "mixamorig:RightLittle1", "mixamorig:RightLittle2", "mixamorig:RightLittle3",

    "mixamorig:RightMiddle1", "mixamorig:RightMiddle2", "mixamorig:RightMiddle3",

    "mixamorig:RightRing1", "mixamorig:RightRing2", "mixamorig:RightRing3",

    "mixamorig:RightThumb1", "mixamorig:RightThumb2", "mixamorig:RightThumb3",

    "mixamorig:LeftUpperLeg", "mixamorig:LeftLowerLeg", "mixamorig:LeftFoot", "mixamorig:LeftToe_End",

    "mixamorig:RightUpperLeg", "mixamorig:RightLowerLeg", "mixamorig:RightFoot", "mixamorig:RightToe_End"

]


def retarget_mixamo_animation(target_armature_name, source_armature_name, bone_names):

    """Mixamo アニメーションをターゲットアーマチュアにリターゲットします。"""


    try:

        target_armature = bpy.data.objects[target_armature_name]

        source_armature = bpy.data.objects[source_armature_name]

    except KeyError as e:

        print(f"エラー:オブジェクトが見つかりません: {e}")

        return


    if target_armature.type != 'ARMATURE' or source_armature.type != 'ARMATURE':

        print("エラー:指定されたオブジェクトはアーマチュアではありません。")

        return


    bpy.context.view_layer.objects.active = target_armature # ターゲットアーマチュアをアクティブにする


    for bone_name in bone_names:

        target_bone = target_armature.pose.bones.get(bone_name)

        source_bone = source_armature.pose.bones.get(bone_name)


        if target_bone and source_bone:

            # コンストレイントをクリア (既存のものを削除)

            if bone_name in target_bone.constraints:

                target_bone.constraints.remove(bone_name)


            # コピー変換コンストレイントを Bone に追加

            copy_transforms = target_bone.constraints.new('COPY_TRANSFORMS')

            copy_transforms.target = source_armature

            copy_transforms.subtarget = source_bone.name

            print(f"ボーン '{bone_name}' にコンストレイントを追加")

        else:

            if not target_bone:

                print(f"警告:ターゲットアーマチュア '{target_armature_name}' にボーン '{bone_name}' が見つかりません。スキップします。")

            elif not source_bone:

                print(f"警告:ソースアーマチュア '{source_armature_name}' にボーン '{bone_name}' が見つかりません。スキップします。")


    print("Mixamo アニメーションのリターゲット処理が完了しました。")


# スクリプト実行

retarget_mixamo_animation(target_armature_name, source_armature_name, bone_names)


### ここまで ###

#########################

blender 上部メニューの「レイアウト」を選択し「ポーズモード」にする

右上のツリー内の適用先の「Armature」をクリック

左枠のキャラクターのそばの空いてるところで「A」キー

「ポーズモード」枠のメニューの「ポーズ」「アニメーション」「アニメーションをベイク」を選ぶ

最終フレームの欄に、モーションの最終フレームの数字をいれ、

「ビジュアルキーイング」「コンストレイントをクリア」「現在のアクションを上書き」に追加でチェック入れる


### あと始末

右シーンコレクション内に追加していたコレクションを

丸ごと削除する

Armature.001 のようなものが残ったら、それも削除する


2025-02-26 vroid studio → blender → mixamo → godot

Blender に VRM ファイルを取り込む前に、
右シーンコレクション内の「シンコレクション」以下を全て削除
上部メニューの「ファイル」「インポート」「VRM (.vrm)」を選択し vrm
ファイルを取り込む VRM取り込み後、 ICO球を削除(見当たらなければ放置)
glTF_not_exportedを削除(見当たらなければ放置) オレンジ色のArmatureを展開
緑色のArmatureを展開
ウィンドウ上部のメニュー欄の「レイアウト」を選び「オブジェクトモード」にする
左の人物が表示されている枠内で何かボーンをクリックしオレンジ色にする
左上の「オブジェクトモード」を「編集モード」にする
右シーンコレクション内の「Root」以下を展開
右シーンコレクション内の「Root」だけを選択 左ステージ内にマウスを動かして delete
キー(Rootのボーンを削除)
ウィンドウ上部のメニュー欄の「Scripting」を選ぶ(かなり右側にある) 「+
新規」を押す。 下記のスクリプトを貼り付け 右上の実行ボタンを押す


#---------- スクリプトここから ----------
import bpy

for x in bpy.context.object.data.bones:
    x.name = x.name.replace("J_Bip_C_", "mixamorig:")
    x.name = x.name.replace("J_Bip_L_", "mixamorig:Left")
    x.name = x.name.replace("J_Bip_R_", "mixamorig:Right")
    x.name = x.name.replace("LeftUpper", "LeftUp")
    x.name = x.name.replace("RightUpper", "RightUp")
    x.name = x.name.replace("mixamorig:Chest", "mixamorig:Spine1")
    x.name = x.name.replace("mixamorig:UpperChest", "mixamorig:Spine2")
    x.name = x.name.replace("LowerLeg", "Leg")
    x.name = x.name.replace("LowerArm", "ForeArm")
    x.name = x.name.replace("UpArm", "Arm")
    x.name = x.name.replace("LeftIndex", "LeftHandIndex")
    x.name = x.name.replace("LeftThumb", "LeftHandThumb")
    x.name = x.name.replace("LeftRing", "LeftHandRing")
    x.name = x.name.replace("LeftMiddle", "LeftHandMiddle")
    x.name = x.name.replace("LeftLittle", "LeftHandPinky")
    x.name = x.name.replace("RightIndex", "RightHandIndex")
    x.name = x.name.replace("RightThumb", "RightHandThumb")
    x.name = x.name.replace("RightRing", "RightHandRing")
    x.name = x.name.replace("RightMiddle", "RightHandMiddle")
    x.name = x.name.replace("RightLittle", "RightHandPinky")

#---------- スクリプトここまで ----------


右シーンコレクション内の
緑色のArmatureを展開、名前を変更する際に狭く
見えにくいので、右シーンコレクションを広げておくことを推奨


ウィンドウ上部のメニュー欄の「レイアウト」を選び「編集モード」にする
足の指にあたるボーン(丸豆だけでなく三角錐)をクリックし選択状態にして、
そのボーンを右クリックして「細分化」
(足の左右を実施する)

右上の 緑色のArmatureを展開していき
細分化した、「mixamorig:LeftToeBase.00?」を「mixamorig:LeftToe_End」にリネーム
細分化した、「mixamorig:RightToeBase.00?」を「mixamorig:RightToe_End」にリネーム

######## ここまで必須 ########
######## 手の指関節追加は任意 ########
手の指にあたるボーン(丸豆だけでなく三角錐)をクリックし選択状態にして、
そのボーンを右クリックして「細分化」
(左右の手を実施する)

右上の 緑色のArmatureを展開していき
細分化した、「mixamorig:***3.001」を「mixamorig:***4」にリネーム
任意の指の数だけ実施

######## 手の指関節追加は任意ここまで ########



右シーンコレクション内の「シーンコレクション」配下に
「コレクション」を一段作り、その中に
コライダー(Colliders)やら Armature やら Body や Face 等
すべて移動
「コレクション」のプルダウンを閉じる

右シーンコレクション内の「シーンコレクション」配下に
「コレクション」を一段作り、その中に
fbx ファイルをインポートする。
アドオンの「Rokoko」のメニューを出す

rokokoを使わないバージョンもあります。


「Retargeting」のプルダウンを広げる
ソース: に、今読み込んだ方の Armature(たぶん 001 が付いている)を選ぶ
ターゲtット: に、もともとの Armature(たぶん無印)を選ぶ
「Build Bone List」のボタンを押す
リストが出るので、左と右に同じ名前が入っているか確認する
たまに、間違えているので注意する。
入ってなければ入れる。
「Retarget Animation」を押したいが、その下の「保存」を押しておくと
次回以降の Bone List が間違いなくなるので「保存」を押しておく
「エクスポート」を押しておくと、Json ファイルが出力できる。(PC故障して交換したとき等は、Jsonファイルを読むと楽なはず)
あと、インポートしたファイルと、モーション適用先のポーズを「REST(T-Poseになるはず)」にして、
モーションの左右向き、上下向きを合わせておかないとおかしなモーションを取り込むことがある。
「Retarget Animation」を押す。


ウィンドウ上部のメニュー欄の「アニメーション」を選ぶ
ウィンドウ下部の左隅にある菱形のマークを含む模様(アイコン?)
の1マスのプルダウンを展開し、
ノンリニアアニメーションを選択する
もともとの Armature(たぶん無印)の直下にあるオレンジ行の
「~~ Retarget」の横にある、下向き三角と四角2個が書いてあるアイコンをクリックする
<アクションなし>が増える
<アクションなし>の真下の行の名前を、今読み込んだ行動の任意名称に変更しておく。
これで読み込まれたはず

<アクションなし>をクリックし右の方に出た
「新規」の左隣の菱形のマークを含む模様(アイコン?)をクリックする
「~~ Retarget」を選択する。
右シーンコレクション内に追加していたコレクションを
丸ごと削除する
Armature.001 のようなものが残ったら、それも削除する

また、右シーンコレクション内の「シーンコレクション」配下に
「コレクション」を一段作り、その中に
fbx ファイルをインポートする~~を繰り返す

blender は vrm ではなく glb 出力
glb 出力する前に、
ウィンドウ上部のメニュー欄の「レイアウト」を選び「オブジェクトモードにして」
キャラクターがいる欄の何もないところを一旦クリックし
「a」キーを押して全選択状態にしてからエクスポートする


顔の表情をシェイプキーの設定の情報だけの状態ではなく、
Armature(オレンジ色) のアニメーションと同等に、godot 内から
アニメーションとして扱いやすくする方法が下記。
(godot で作る内容次第なので必須ではない)

右シーンコレクション内の「シーンコレクション」配下に
下向き三角形(オレンジ色)の「Face」の選択状態にし、
ウインドウ右下のいろんなアイコンが縦に並んでいるタブの
緑いろの下向き三角形を選び
「アニメーション」の欄を展開して、シェイプキーの下にある「+ 新規」を押す
任意の名前を付ける(今回は d-eyes-closeとする)、
その入力欄の右にある2重の四角形(新規アクション)のボタンを押す


ウィンドウ上部のメニュー欄の「アニメーション」を選ぶ
ウィンドウ下部の左隅にある菱形のマークを含む模様(アイコン?)
の1マスのプルダウン(アイコン?)を展開し、
「ドープシート」を選択する。
その1マスのプルダウン(アイコン?)の右隣のプルダウンは
「シェイプキーエディター」を選択する
その下にタイムラインのようなものと、「概要」を展開すると
Fcl_~みたいなリストが並んでいるはず。
0.000 から 1 に変えることで、設定済の表情(顔の部位の変更)ができる
(今回は、Fcl_EYE_Close を 0.000 から 1 に変える)
先ほど、「シェイプキーエディター」を選択したやや右に
「ストリップ化」があるので押す


顔の表情を増やしたい場合は、
右シーンコレクション内の「シーンコレクション」配下に
下向き三角形(オレンジ色)の「Face」の選択状態にするところから繰り返す。
(ちなみに、表情を増やしたい (NLAトラックが増えていきます) 場合は、
「シェイプキーエディター」で変更したままの状態(表情)になっているので、
新規の表情を作るときは、前の表情を戻すことを実施)

glb の出力
出力方法は、「レイアウト」タブにして「オブジェクトモード」、
左枠内の何もないところでクリック後に「a」で選択した状態でエクスポート。

Animation を godot に取り込む方法(.resファイルにする)までは一緒
.res を取り込んだ後に、AnimationPlayer で、
表情の Animation についている「顔以外の動作」(T-Pose)になっていると思うが
Animation のトラック内に表示されている、〼 Face 配下の「緑丸 Fcl_~」は残し、
「Skeleton3D」配下の 赤紫マークから始まるの mix~ だったり
茶色十字からはじまる行は削除(ゴミ箱マークをクリック)しましょう
目を閉じるアニメーション等、表情が変わるアニメーションを選んで、表情が変わることを確認したあとに、
ジャンプなどのアニメーションをえらんで、表情が戻ることなくそのままでジャンプなどの動作を
実施していることを確認する

2024-06-30 Godot で Starter-Kit-FPS をダウンロードして取り込み、debug/編集できるようにするメモ

Godot(ゴドーと読むっぽい)の使い方がいくつか紹介されているが、Starter-Kit-FPS について日本語で書かれている記事がないようだ。 未来の自分向けにメモを残すことにする。
まず、Godot を起動する。 Godot のダウンロードやインストールは他の方の紹介ページに任せ省略する。 起動後に「+ 新規」を押して、新しいプロジェクトを作る。
プロジェクト名を入力して、レンダラーは互換性を選びバージョン管理なんとかを適当に選んで「作成して編集」を押す。
プロジェクトのフォルダが出来たので、一旦×で終了。
Kenney 様にて公開されている Starter-Kit-FPS (https://github.com/KenneyNL/Starter-Kit-FPS) をダウンロードする。Github からのダウンロードは他の方の紹介を参考に。 素晴らしいテンプレートを公開されている Kenney 様に感謝!(生活が落ち着いたら寄付します)
ダウンロードしたものを解凍/展開する
解凍/展開したら、中にフォルダがあるのでその中を表示する
ここまで表示したら、邪魔にならないように最小化等で一旦よけておく
godot で作成したプロジェクトの保存先を表示して、中身を全部削除する
Kenney 様が作られたファイル/フォルダを全部コピーして、空にしたプロジェクト内に貼り付ける
ここで、Godot の起動オプションを変えるため、Godot のプログラムを右クリックして godot のショートカットをつくる
作成したショートカットのプロパティを表示する
リンク先の先頭に「"」(半角のダブルクォテーション)を入れ、リンク先の末尾に「" 」(半角のダブルクォテーション&半角スペース)と「 --rendering-driver opengl3」を追記して適用を押し OK を押す
作ったショートカットをダブルクリックで Godot を起動して、先ほどのプロジェクトをダブルクリックする(プロジェクト名が変わっていてもキニシナイ)
Godot4.1 とか Godot4.2 とか聞かれるけど OK を押す
プロジェクトの内容が読み込まれたら、上部メニューの「プロジェクト」を押し「プロジェクト設定...」をクリックする
一般タブの左ツリー内の「レンダリング」>「レンダラー」を選択し、レンダリングメソッドを「gl_compatibility」に変更(プルダウンから選び)保存し Godot を終了/起動する
次回起動は、ショートカットからではなく普通にプログラムから起動/読み込みできるはず
上部右側にある、右向きの▲から実際に動作を確認できる。 以上、完了

2020-10-24 emacs の company と yasnippet

emacs を使っていて、補完の機能を auto-complete から company に乗り換えてましたが
yasnippet と連携させる方法がわからず悩んでおりました
ですが、すばらしい先人がおりました! company-yasnippet.el と言うものがありました!
導入方法を記載します

~/.emacs.d/site-list 配下に company-yasnippet.el を作ります
company-yasnippet.el の内容は、先人が用意してくれております

 # company-mode/company-yasnippet.el
<https://github.com/company-mode/company-mode/blob/master/company-yasnippet.el#L111>

その後、~/.emacs.d/init.el の (setq company-backends '((company-*** に
「company-yasnippet」を足してください、完了です

company の補完リストの中に、yasnippet の単語も含まれるはずです
 # 「if」を補完する場合は、「if -> if」と表示され選択すると
 # 展開されます
 # company の設定と yasnippet の設定は割愛します

2018-12-14 emacs + evil の環境で Help-mode のキーバイド変更

emacs + evil の環境で、どうしても Help-mode で、
space キーによるページ送りをしたかったが、
いくら設定してもページ送りの設定ができなかった
四苦八苦していた
# (define-key help-mode-map とか
# (define-key Helper-help-map とか
# あまり詳しくないので設定できませんでした...

evil の Lisp を眺めていると、
evil-vars.el 私の答えが見つかりました
help-mode は、evil-motion-state らしいです
...なぜ!?

### /usr/share/emacs/****/evil***/evil-vars.el
(defcustom evil-motion-state-modes
  '(apropos-mode
    Buffer-menu-mode
     :
     :
    help-mode
     :
     :
ちょっと強引に解決しました
.emacs で、help-mode を抜いた (defcustom evil-motion-state-modes を
再定義しました

その後、
(define-key help-mode-map とかやってみた


ふぅ...思ったとおりに動きました

2018-08-28 スマホのゲームのトルネコ系その後

いやー、5-3クリアしてから全然やってないです、はい
面白さが分からなかったです
アンインストールします

2018-08-07 スマホのゲームのトルネコ系

スマホのゲームの世紀末デイズを試している
以前のトルネコやシレンを試して「面白さが分からなかった」が、スマホのゲームになり、面白さを伝えるさらなる工夫がされているか期待している

ステージ4をクリアして、
今のところ、まったく面白くない

いやいや
この先に面白さがあるかもしれない

もう少し続けてみます

2017-11-27 blueborne 対策してほしい

blueborne の脆弱性が発表されてから、bluetooth を off にしつつ、
メーカー(vaio)からパッチの提供を待って、
提供されたらvaioスマホを買おうと思ってましたが、
11月になっても提供されなかったので、
対策済の他メーカーの端末を買いました

日本の製品にセキュリティ求めるのはダメなのか...?

それとも、独自に対策済だったのかな...?

2017-05-16 postgresql の起動時のエラー

postgresql を最小リソースで起動させようとしたら、
下記メッセージが出力されて起動できず、
webに同例事象が少くて困ってました

Starting PostgreSQL 9.4 database server: mainThe PostgreSQL server failed to start. Please check the log output: 2017-05-14 12:36:17 JST [*****-1] FATAL: サーバプロセスを起動させるために利用できるファイル記述子が不足しています 2017-05-14 12:36:17 JST [******-2] 詳細: システムでは16使用できますが、少なくとも20必要です ... failed!
failed!

調べた結果、max_files_per_process に割り当てる値が少なかった模様
次の説明をみつけた

17.4.3. カーネル資源使用
max_files_per_process(integer)
    それぞれのサーバ子プロセスが同時にオープ
    ンできるファイル数の最大値をセットします
    。デフォルトは1000です。もしもカーネルが
    プロセス毎の安全制限を強要している場合、
    この設定を気にかける必要はありません。し
    かし、いくつかのプラットフォーム(特にほ
    とんどのBSDシステム)では、非常に多くの
    プロセス全てが多くのファイルを開こうとし
    た時に、カーネルは個々のプロセスがシステ
    ムが実際にサポートできるファイル数より多
    くを開くことを許しています。もしも"Too
    many open files"エラーが発生した場合、こ
    の設定を減少してみてください。このオプシ
    ョンはサーバ起動時のみ設定可能です。

備忘のため残します

2017-03-23 emacsclient の日本語入力

emacs を --daemon 付きで(serverを)起動し、emacsclient から文字入力したところ、日本語を入力するとカーソルがページトップに移動したり、(文字は出力されず)行が増えたりしていた
  # emacs内の skk 等は使わず、OS側の ime で入力していた

解決方法は
emacsclient は -tty -nw で起動すること
だった

google で検索しても情報が少かったが、
emacs ユーザの暗黙知なのだろうか...?
それとも、man にある...?