ページ

2024年2月7日水曜日

アバター「クロノスちゃん」のSDK3.7&Unity2022LTS移行手順

karekitsuneさん制作「クロノスちゃん」は2019年9月1日発売のVRChat SDK2アバターです。

当時珍しかった独自シェーダーによる涙演出や発射パーティクル等をいち早く搭載して話題になり、同年Vket3にも出展しました。
Vket3 九龍帝国城下町-欠番街

狐家オリジナル3Dモデル「クロノス」 - karekitsune

一時期リメイクの話もありましたが、作者karekitsuneさんの体調不良が長引いているため、先しばらくは難しいと思われます。

こちらのバグ報告CannyのUp Voteご協力お願いします
Issue with some skirts

追記(2024/05/10): SDK3.6とUnity2022.3.22f1も問題なさそうなので題名変更しました。

追記(2024/05/25): EternitynoobさんがPrefabを用意してくれたのでご活用ください!
クロノス SDK3.0対応化プレハブ - Eternitynoobの物置

追記(2024/08/22): SDK3.7も問題なさそうなので題名変更しました。

(LemonKajuのフレンドさんはぜひDMください!)


🛏️眠ったままのクロノスちゃん、目覚めさせてみませんか🌅⌚
9月にクロノスちゃん集会をやるので、ぜひ準備して来てね!🤗

最低でもアバター改変ちょっとわかる位の人を対象に書いた記事になります
移行作業にかなりの時間を要しますが、お付き合い頂けると幸いです!🌟
(個人差ありますが1~4時間を想定)

最近復帰して浦島太郎状態の方は、まずVRChat Creator Companion(以下VCC)をインストール

BOOTHの購入履歴からクロノスちゃんをダウンロード


導入するパッケージ

必須級

  • SDK系: 基本は最新バージョンで問題ない 必須パッケージ
  • Gesture Manager: PlayModeを使ったテストで多用 必須
  • VRCAvatarEditor: 表情再設定や編集で使う ほぼ必須

あるといいかも

手順 (通常版をSDK3に移行してアップロード)

SDK2のプロジェクトがあるならGameObjectExporter (https://booth.pm/ja/items/2282806) などでいい感じにアバターのPrefabを.unitypackageで抽出
Boothの商品ページに使い方がのってるのでそちらを参考に抽出してください

セットアップ

  1. 通常通り「Unity2022 Avatar Project」でプロジェクトを作成
  2. Gesture ManagerなどのVCCパッケージをインポート
  3. Dynamic Bone → (必要ならUTS2) → CopyComponentsByRegexなど各種パッケージ → アバターのunitypackage の順番でインポート
    Window → Package Manager → 画面上部の Packages: In Project のプルダウンからMy Assetsを選択してDynamic BoneをImport
    • CopyComponentsByRegexとFakeDynamicBoneComponentsは導入がちょっとだけわかりづらい
      Projectウィンドウの中の適当なフォルダを右クリックしてShow in explorerしたあと、「Assets」フォルダの直下にいることを確認して
      zipの中身のフォルダ (CopyComponentsByRegex-masterなど) をそのままAssets直下に配置
    • アバターをインポートするとき、UTS2が同梱されているため、「Toon」フォルダを探して除外
      たぶん結構古いバージョンなので今使おうとするといろいろおかしくなりそう

SDK2→3移行

SDK2のプロジェクトがあるなら表情設定をあらかじめスクショとかしておくと後がちょっと楽になります 今回は1から移行していくため苦行の道を歩む

  1. Prefabsフォルダの中の「kitsuneya_Chronos」をHierarchyにドラッグ
    「kitsuneya_avatar」直下のそれはFBXファイルです (段ボール箱みたいなアイコンのやつ)
    Prefabとは違うので注意

  2. アバターを右クリックして「Prefab」の中にある「Unpack Completely」を押してPrefabを完全解凍
    もう更新が来ない (であろう) アバターなのでSDK3仕様で再度Prefabを作り直し、今後の改変のベースを作る (今後改変するときはこのPrefabをベースにPrefab Variantを作る感じ)

  3. アバターについている「Script」が「None (Mono Script)」になっているComponentを削除する
    該当Componentの右上あたりにある縦三点リーダーを押してRemove Component

  4. もう一度アバターを右クリックして「Rename」をクリックし、分かりやすい名前をつける (Chronos_sdk3などのように)
  5. つけたらProjectウィンドウでkitsuneya_avatar/Prefabsフォルダを開き、HierarchyのChronos_sdk3をProjectウィンドウにドラッグしてPrefab化する
    以降はこの作ったPrefabを改変していく

  6. 先ほど作ったPrefabを選択し、Inspector右上にある「Open」ボタンを押してPrefabを開く

  7. おそらくArmatureが開かれてHierarchyが大変なことになっている 落ち着いてArmature左の逆三角形を押して閉じる これでHierarchyに平穏が訪れる
    一度閉じればその子になっているGameObjectも全て閉じられたことになるため、Prefabを開きなおすことでArmatureを開いても大変なことにならなくなる

  8. Chronos_sdk3 (以降「アバターroot」) をクリックし、Inspector下にある「Add Component」をクリックし、「VRC Avatar Descriptor」をアタッチ

これで超絶最低限アバターとしての形はできた しかし目は動かないし表情も変わらないしで実用には程遠い
ということで次は表情を蘇らせたりしていく

Avatar Descriptorの設定

一番手間がかかる作業

基本的にアバターrootを常に見ていることを前提 なぜならAvatar Descriptorをさわりまくるため

  1. View Positionを戻す
    「View」の折り畳みをひらき、View PositionのXYZの各値をこの値にする: X: 0, Y: 1.2, Z: 0.07
    これでView PositionがSDK2と同じになった VRで見ても違和感がなくなるはず
  2. リップシンクを取り戻す
    「LipSync」の折り畳みをひらき、「Auto Detect!」ボタンを押す
    すると自動的にアバターに適したリップシンクの設定になる おそらくViseme Blend Shapeのはず
    もし何かおかしくなっていそうなら以下のスクショの設定に手動で変更する
    これでリップシンク設定もSDK2と同じになった しゃべると口パクしてくれる
  3. 自動で目がきょろきょろ動くあの設定 お好みで
    「Eye Look」の折り畳みをひらき、「Enable」ボタンを押す
    勝手に開いているTransformsの折り畳みの中にあるLefy Eye Bone, Right Eye Boneの枠の右端にある二重丸をしたボタンを押し、それぞれ「Eye_L」と「Eye_R」を入れる
    これだけで勝手に目が動いてくれるはず 過剰に動くように感じるならEye Movementsの折り畳みを開き、2つのスライダーをそれぞれCalm, Shy寄りにすれば落ち着くはず とはいえデフォルト設定で問題ないとは思う
    まばたきもしてほしいなら下にある「Eyelid Type」を「Blendshapes」に変更し、「Eyelids Mesh」に「Body」をドラッグし、「Blink」を「Face_blink」にして他は「-none-」にすることでまばたきしてくれるようになる
  4. 表情と手を取り戻す
    1. 「Playable Layers」の折り畳みをひらき、「Default Gesture」と「Default Non-Transform」をクリックしてどちらも「None (Runtime Animator Controller)」の状態にする

      ProjectウィンドウからPackages/VRChat SDK - Avatars/Samples/AV3 Demo Assets/Animation/Controllersまで移動し、「vrc_AvatarV3HandsLayer」を2個複製する

      Assets/kitsuneya_avatar/Animationsに新しく「Controller」という名前のフォルダを作り、先程複製した2つの「vrc_AvatarV3HandsLayer」を配置し、それぞれ「FX」と「Gesture」にリネーム
    2. さきほど複製してきた「FX」と「Gesture」をアバターrootのPlayable Layersの対応するスロットにセット

      FXの方をダブルクリックして開く Gestureはもう触ることはない セットした時点で手は取り戻せている
    3. アバターマスクを外す
      「AllParts」レイヤーの歯車をクリックし、「Mask」に入っている「vrc_HandsOnly」をクリックしてBackspaceキーを押してデタッチする これをAllParts, Left Hand, Right Handの計3レイヤー分行う
      この際Projectウィンドウの方でvrc_HandsOnlyのある場所が開かれてしまうため、嫌なら横の二重丸を押して「None」を選択してもよい
    4. 表情アニメーションを再設定の準備
      Write Defaultsがオフなのでデフォルト表情を作る Left HandとRight HandそれぞれのレイヤーにあるIdleステート (オレンジ色のやつ) にセットされているMotionをデタッチし、かわりに何もないアニメーションをセットする
      適当なフォルダで右クリック→Create→Animationで作ったアニメーションを放り込むだけでいい でもどこに置いたかは覚えておこう
      個人的なおすすめはAssets/kitsuneya_avatar/Animations/Override 表情アニメーションが置いてある場所なので
    5. デフォルト表情を作る
      上で作ったのとはまた別のアニメーションを作る 同様の手順でアニメーションファイルを作成し、名前を「DefaultFace」などわかりやすいものにする
      作ったアニメーションをAllPartsの中に放り込み、Write Defaultsのチェックを外す (忘れると何かが壊れます)

      次にデフォルト表情の中身を作る
      画面上ツールバーから「VRCAvatarEditor→Editor」を開き、「None (VRC Avatar Descriptor)」となっているところにアバターをドラッグする

      Layerのプルダウンを「Left Hand」から「AllParts」に変更し、さきほど追加したDefaultFaceの右のEditボタンを押す

      画面下にある「ToggleAll」のチェックを2回押して(必ず2回押すこと!)、全部のチェックマークにチェックを入れた後、Wing, Hair系のシェイプキーのチェックを外す

      完了したら、必ず「Set to Left & Right Hand Layer」のチェックを外して「Create AnimFile」を押す

      残りは表情を好きな感じに割り当てていくだけ
      FistからThumbs Upまでの7つ × もう片手の分で計14個ステートを編集しなければならないためちょっと面倒
      表情の出し方と実際の表情の対応はこちら → https://docs.vrchat.com/docs/touch ページはQuest向けだけどサイドバーからVive Wandとかデスクトップモードとかのも見れる
      SDK2アバターだった頃の名残で表情アニメーションで手が動くため、必ずセットしたい表情のアニメーションファイルを開き「Animator」から始まるキーを削除すること! おそらく手が壊れる

      表情割り当てに正解はないため各個人でお好きな感じの表情割り当てを探ってみてね
      表情をセットしない場合はそのステートにセットされてるアニメーションを上で作った何もないアニメーションをセットしよう
      「tere」など、一部マテリアルのパラメーターを変更することによって表現を変えるアニメーションの場合はこのままだとマテリアルパラメーターの変更は戻らないため、DefaultFaceのアニメーションを編集して該当するパラメーターも0の状態にしてやる必要がある
      「DefaultFace」をアバターにドラッグしてアニメーションの録画を開始し、Bodyマテリアルの中にある「tere_power」を0にして録画を止め、自動生成されたアニメーターを削除するだけ

      仕上げに表情の埋まりを解消する
      Gesture Managerなどでテストするとわかるが、現在の状態では左右別々の表情を出すとぐちゃぐちゃに混ざってしまう
      デフォルト表情を作ったときと同じ要領でVRCAvatarEditorを開き、Left HandとRight Handそれぞれ全てのアニメーションでToggleAllでチェックをつけたあと余分なチェックを外し、Create AnimFileする
      文章にするとわかりづらい 要はデフォルト表情でやったことと同じことを全てのアニメーションで行う 手間がかかる作業
      左右両方とも同じ表情を設定しているなら「Set to Left & Right Hand Layer」のチェックは入れたままでOK
      バグなのかはよくわからないけど、下にある「State」と「HandPose AnimClip」が連動して変わらないっぽい 手動で変えてあげよう
      この方法でアニメーションを修正するとマテリアルのパラメーターを操作するキーがなくなるため、元のアニメーションファイルから該当するキーをコピペして引っ張ってくる

ここまでの行程が全て完了していれば表情と手を取り戻せたはず
もし何かがおかしかったら何かを間違えている もう一度確認したほうがいいかも

Locomotionレイヤーをセットする (もしかしたらいらないかも)

ProjectウィンドウからPackages/VRChat SDK - Avatars/Samples/AV3 Demo Assets/Animation/Controllersまで移動し、「vrc_AvatarV3LocomotionLayer」を複製する
上で作成したAssets/kitsuneya_avatar/Animations/Controllerに配置し、「Base」にリネームする
リネームした「Base」をアバターrootのPlayable Layersの対応するスロットにセットして完了

DBからPBの変換

ぶっちゃけワンボタン押すだけだから超簡単
Prefab編集画面から抜けた状態である必要がある オーバーライドがないことも確認しよう もしあるならApplyかRevertして消化

アバターを選択した状態で画面上ツールバーから「VRChat SDK→Utilities→Convert DynamicBones To PhysBones」をクリック

「DynamicBoneが消えてPhysBoneに自動変換される」という旨の警告が出てくる 問題ないなら「Proceed」を押すと自動的にDBがPBに変換される

変換完了したらアバターのオーバーライドをApplyすることでPB変換を適用する

変換したまんまの値はちょっと揺れ方がおかしい 自分で試行錯誤していい感じの値を見つけてみよう
髪のPBは「Armature/Hips/Spine/Chest/Neck/Head/Hair」に
ヘイローのPBは「Armature/Hips/Spine/Chest/Neck/Head/Halo_1」にある
おすすめ値↓

髪PBが頭に貫通しないようにする

Headに「VRC Phys Bone Collider」を追加して、大きさ(Radius)と位置(Position)を調整
おすすめ値↓
Radius: 通常版は0.07 V2Beta版は0.089
HairのPB設定「Collision→Colliders」で「Size 1」にしたらHeadを選べるようになる

アップロード

ここまでの行程が全て完了していればPB対応のSDK3クロノスちゃんのできあがり
通常通りSDKからアップロードすれば完了
以降は普通のSDK3アバターと同様の手順で改変したりできる


karekitsuneシェーダーに明るさ下限機能を追加

一部ワールドの暗い場所でアバターが真っ黒になるのを回避する方法

  • karekitsune_shader.shader : 181行目
  • karekitsune_onepiece.shader : 89行目

にそれぞれ
_LightColor0.rgb = max(_LightColor0, float4(0.05, 0.05, 0.05, 0.05));
を追加

「0.05」部分を変更で調整出来る


標準スカートのClothを調整

「onepiece_cloth」の「Cloth」で調整します
Selectによるドラッグ範囲選択時に裏側の選択忘れに注意
おすすめ値↓

V2版をアップロード (V1をベースにV2をアップロード)

上記の方法でV1をSDK3 + PB化している必要がある (各種コンポーネントをV1から移植するため)
また必要パッケージもV1セットアップ時にすべて導入しているものとする 何か足りないものがあるなら今のうちにインポートしよう

V2をプロジェクトに導入

Assets/kitsuneya_avatarの中に「v2」という名前でフォルダを作り、その中に「kitsuneya_avatar_Chronos_V2.fbx」と「tex」フォルダをまるごとドラッグする
fbx (青い段ボール箱みたいなやつ) をクリックし、Inspectorの上の方にある「Materials」タブをクリックし、「Location」のプルダウンを「Use External Materials (Legacy)」に変更

「Rig」タブをクリックし、「Animation Type」プルダウンを「Humanoid」に変更してApplyをクリックする これでUnityとVRCSDKが人型アバターとして扱ってくれるようになる

Assets/kitsuneya_avatar/Materials/karekitsune_shaderまで移動し、「Body」マテリアルを選択し、縦三点リーダーから「Copy Material Parameters」をクリックする

Assets/kitsuneya_avatar/v2/Materialsまで戻り、「Body」マテリアルを「Target material」にドラッグして「Copy Sorce => Target」をクリックする

これを「Eye」「onepiece」「mech」マテリアル分繰り返す 「mech」は「Clock」オブジェクトの中にある

ここまで出来たらfbxをHierarchyにドラッグする
うまくできてたら正しくテクスチャの当たったクロノスちゃんが出てくるはず
どこかが黒く暗転してたりなんかテクスチャがおかしそうなときは大体マテリアルの設定ミスだからもう一度見直そう
時計がV1と比べて暗く見えるのは仕様 何か仕様がかわったのかも?

ここまでできてたらあとはV1からコンポーネントを移植してくるだけ あと一息

コンポーネントを引っ張ってくる

V1を右クリックして「Copy Components by RegEx」をクリック
V1を選択した状態で「正規表現」の入力欄に「VRC|Cloth|Anima」と入力して「Copy」ボタンをクリック

そのままV2を選択して「Paste」ボタンをクリックし、「VRC Avatar Descriptor」や「Animator」がInspectorに現れれば完了
「VRC_Pipeline Manager」にBlueprint IDがひっついていることがあるので確認 上書きされたくないなら「Detach」をしておこう

V1のPhysBoneの設定を変えた場合は同様の手順で正規表現「VRC Phys」でコピペすればPhysBoneコンポーネントだけ持ってこれるはず
その際は「コピー先に同じコンポーネントがあったら削除」にチェックを入れるのを忘れないよう PBコンポーネントが増殖する

アップロード

ここまでの行程が全て完了していればPB対応のSDK3クロノスちゃんV2ができあがったはず
通常通りSDKからアップロードすれば完了
以降は普通のSDK3アバターと同様の手順で改変したりできるはず
ただし一部のシェイプキーの構造が変わった (Bodyから髪の毛などのシェイプキーが分離した) ため、表情アニメーションの改変によっては動作しなくなるかも
その際はVRCAvatarEditor等を使って直そう


対応衣装アクセサリ紹介

まだ買える!クロノスちゃんに対応した衣装やアクセサリの紹介👚👗👓🩱🩳🧢🎀🛒

クロノスちゃんカフェGroupにご参加ください!

毎年9月のクロノスちゃん集会などに使うグループです!
https://vrc.group/CCC.6619
クロノスちゃんを持っている事が分かるようにプロフィールやTwitterで画像を載せる等して頂ければ参加申請を通しますので、ぜひご参加ください!

謝辞

以下の協力者によりこの記事を用意する事が出来ました、ありがとうございました!

  • あさると (本文全般協力)
  • Lepton (改変方法全般協力)
  • ふら (シェーダー改変方法協力)
  • 月猫いるや (スカートCloth調整協力)

0 件のコメント:

コメントを投稿