投稿記事

テクニックの記事 (6)

riru/宝石小箱 2023/08/21 15:28

【備忘録】blenderでファイルをまたいでアニメーションをリンクしたりウェイト転送する

現在ドラゴン3Dの2種を作って、アニメーションも作ってそれぞれに適用する作業をしています。
その際アニメーション用はアニメーション用で一つファイルを用意し、そこから調整したウエイトをモデル用に転送、という方式にしたら使い回しとかUnityにエクスポート時楽なんじゃないかと思っていろいろ奮闘してました
(アニメーションはどのみちモデルから切り離して使うので、モデル用はアニメ削除したほうが軽くなる)
その工程を備忘録として記載します

<モデル用にアニメーション用のアニメをリンク>
モデル用のウェイトなどがちゃんとしているかな?などの確認で、アニメーション用のアニメを再生したいときの方法です。
ファイル→リンク を選択すると、blendeファイルを選択する画面が出てきます。
blendファイルを選択するといろいろフォルダが表示されるので、Actionを選択。そうするとアニメーションの一覧が出てくるので、リンクしたいアニメーションを選択すると、モデル用のボーンの中に選択したアニメーションがリンクされます。
一部だけしかモーションが反映されない!→ボーンの回転がアニメーション用はオイラー角なのにモデル用はクオータニオンとかになっていると反映されません。注意!

<アニメーション用のウェイトをモデル用に反映>
上記のリンクの下にあるアペンドを使用して、今度はObjectフォルダからウェイト転送したいオブジェクトを選択します。


そうするとボーンごとオブジェクトが入ってくるので
転送先(モデル用)→転送元(アニメーション用)
の順番でウェイトを転送するオブジェクトを選択し、オブジェクトデータプロパティで転送したい頂点グループを選択、頂点グループを選択したものにコピーを実行すると、ウェイトが転送されます。

8/22追記※転送先の頂点数が違う場合※
転送先(モデル用)の頂点数が違う場合、エラーが出ます。
その場合、
転送元(アニメーション用)→転送先(モデル用)
の順番でオブジェクトを選択し、転送先(モデル用)のオブジェクトをウェイトペイントモードに、ウェイト→ウェイトを転送でできます


がっつり背中から分離していた翼が…

ちゃんとくっついた!

参考サイト:【Blender】ボーンに割り当てられたウェイトを転送する
【Blender】別オブジェクトへウェイト転送する

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

riru/宝石小箱 2023/06/08 20:41

【備忘録】BlendArMocapでモーションキャプチャ―をして、アニメーションをつくる

自分なりに無料でblenderにてモーションキャプチャをし、そこからキャプチャしたアニメーションを普通のアニメーションにしてUnityで使えるようにする方法を模索していたので、その結果をメモ代わりに残そうかと思います。
なお一応実装レベルにはなっているはずですが、今後いろんなポーズをとらせたりするにあたって不具合が出る可能性があるので、参考にする場合は自己責任でお願いします。
2023月6月12日追記 やっぱりボロがいろいろでたので修正しましたーっ!

実際にキャプチャしたモーションで作ったアニメーションがこちら(ほぼ手直しなし)

<BlendArMocapの導入>
Blender内でモーションキャプチャ―ができるアドオンを入れます。
基本的には下記サイトの解説を参照にすれば大体大丈夫です
Webカメラの映像に併せて3Dキャラクターを動かせるBlenderアドオンを試してみた

一応簡単に手順を説明すると
1.アドオンをダウンロードする(自分はGitHubからしかできなかったのでGitHubから)。ダウンロード先はどこでも
2.[編集]メニューの[プリファレンス...]でプリファレンスを開き、[アドオン]タブから右上の[インストール...]をクリック、先ほどダウンロードしたZIPファイルを指定
3.その後[プリファレンス]ダイアログの[アドオン]タブに現れた[Development:BlenderArMocap]のチェックボックスをクリックして有効化し、その隣の[▼]アイコンをクリックしてパネルを展開、下の「設定」の[Install dependencies]ボタンをクリック


<キャプチャ>
こちらも詳しい解説は導入で使ったサイトに書いてあります。
アドオンが導入されるとアイテムとかツールとかがあるタブ群にBlendArMocapというタブが追加されます。タブが展開できない場合は、選択しているオブジェクトが合っていない可能性があるので他のオブジェクトにしたりモードを変えてみたりいろいろ試してみてください。


タブを展開したところです
BlenderArMocapはWebカメラを使ってリアルタイムでモーションをキャプチャーするやり方と、あらかじめ用意した動画のモーションをキャプチャするやり方があります。タイプのところで選択してください。
動画にすると動画のファイルパス、WebCamにするとWebcam Device Slot(複数カメラがつながっていれば0のままでいい)が求められます。
KeyStepは録画する間隔。ターゲットは全身をキャプチャするならポーズ、手を細かくキャプチャしたい場合はHandなど適切なものを選びます。
設定が終わったら、DetectClipを押してキャプチャを開始します。キャプチャを止めるときはDetectStopになっている同じボタンを押します。ちなみに再度キャプチャするときは上書きになるので気を付けましょう

<Rigの作成・紐づけ>
ここからは下記を参考にいたしました
普通のWebカメラでモーションキャプチャー、3Dモデルをさくっと動かそう!

元々Rigifyアドオンを使っている方も多いかと思うのでインストール手順は省きますが、動かしたいモデルがRigifyでない場合、あるいはそこからいじっている場合は新たに[追加]-[アーマチュア]メニューの[Human (Meta-Rig)]でmetarigを作成します。


そしてそのmetarigの画像の部分のGenerateRigを押してrigを作成します。
BlenderArMocapタブでそのrigをTransferのアーマチュアに、キャプチャをして生成されたcgt_DRIVERSをドライバーにセット(キャプチャでのBlenderArMocapタブ画像参照)し、TransferAnimationを押すとアニメーションがrigに反映されます。

<リターゲッティング>
ここからは下記を参考にいたしました
Blenderの標準アドオンでモーションデータのリターゲティング【Blender 2.8 2.9対応】

rigでそのまま操作する場合はここまででいいと思うのですが、自分自身rigの仕様が分からなかったので、元々のボーンにモーションをリターゲッティングするという方法をとりました。
使用するには、
Motion Capture Tools
Simplify Curves+
BioVision Motion Capture (BVH) format
の3つのアドオンが必要になります。
プリファレンスのアドオンから検索して有効にすることができますが、バージョンによってはMotion Capture Toolsが入っていない場合があるのでその場合は下記URLからダウンロードします
https://github.com/blender/blender-addons-contrib/tags
アドオンを導入したら、まずrig→rigを作成したmetarigの順にオブジェクトを選択します。モデルのmetarigで大丈夫っぽいです


そうすると画像の場所にこのようなリスト?ができるので、DEF-〇〇のところに〇〇と打ち込みます。
そして一番下のAdvancedRetargetにチェックを入れるかRETARGET!のボタンを押すとmetarigにリターゲットされます。
metarigを新しく作った場合は、同じように新しく作成したmetarig→モデルのmetarigで選択し、今度は同じ名前同士(要するにそのボーンと同じ場所のボーン)で紐づけてリターゲット完了です。
ポーズの場合ドープシードのアクションでcgt_hip_centerActionというアニメーションができていると思うので、それを再生してちゃんと反映されているか確認しましょう。(腕が変な方向になっているなどの場合は、モデルのボーンのIKを切ってみたりしてみるといいかも)

<アニメーション作成>
これはちょっと力業です。
モデルのmetarigがアニメーション通りに動くことを確認したら、普通のアニメーション作りと同様にアニメーションを新規に作成して、任意のフレームでキーを挿入していきます。手動で調整したい場合はこの段階で調整すると楽かも
いろいろやってたら不具合起きたので書き直し。調整はドライバーの中にあるエンプティオブジェクトからそれぞれ行うことができます。パーツごとにいちいちやらないといけないのでなんとかひとまとめにできないか模索してたんですが、なんか無理っぽい…

<Unityにインポート>
rigと新しく作ったmetarigは直接必要ではないので、それ以外の必要なオブジェクトをすべて選択します。
fbxにエクスポートを選び、ファイル名などを選ぶ際右の内容で選択したオブジェクトにチェックを入れ、Unityにエクスポートします。
そうするとアニメーションが大量についてくる可能性があります。アニメーションが髪や顔などのモデルのオブジェクトについていると、それぞれキャプチャしたアニメーションがくっついてしまいます。多すぎるとエクスポート時フリーズしてエクスポートできないので、不必要ならアーマチュア以外のアニメーションは消してしまいましょう。
Unity上では、blenderで作ったアニメーションをCtrl+DでFBXの外に出します。この方法だとblender上では1つのファイルに1つしかアニメーションを作れないため(一応前のパートでアニメ新規作成したが、結局エンプティオブジェクトが動いているのをmetarigトレースしているだけなので新しくキャプチャしたらそれに上書きされる)、これで独立したアニメーションとして保存することができます

お疲れさまでした!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

riru/宝石小箱 2022/10/28 00:09

Androidアプリ更新格闘録

googleさんから課金システムを11月入るまでにGooglePlay Billing Library4以上にしてね、あと対象 API レベルを上げてねと言われたので対応をしていたのですが、まーーーーーーーーーー大変だったのでその格闘の記録を…
全部対応完了するまでまるまる1週間費やしました。この時間があればドラクリどれだけ進められたかとか考えてはいけない。(一応ビルドとかの合間にちょろっとやったりしたけど、細切れ過ぎて集中できなかった)
基本的に私が脳みそからっぽのままちゃんとエラー文読まずに調べてたことが原因ですが、時期的に悩んでいる方もいるかもしれないので少しでもお力になれば幸いです。

ただ試行錯誤しすぎて何を調べて何を試して何が効いたかあんまり覚えてないので、とりあえずこんなエラーが出てこんな対処をしたよなどつらつら書く方式になります。
課金システム更新の必要があり、広告がいろいろなものを使っていたりフォルダの構成も昔のままで一番時間を要したFairyGarden、比較的最近だったけどUnityのバージョンがちょっと昔だったからなんだかんだいろいろ変えざるを得なかったひつじObject、前2つよりはましだけどビルド形式が違うためこれはこれで苦戦したツクール作品系の3本立てでお送りします
(ツクール作品系は今まで作ったフリゲアプリ化計画の記事の方にも追記をしています)


<FairyGarden(そこそこ昔で課金システムの更新が必要だったもの)編>

いいたいこと。まずは
プロジェクトフォルダ\Library\PackageCacheから来るエラー文が消えない場合は、大人しく新しくプロジェクト作ってPlugin/Android以外のAsset以下を移植したほうが手っ取り早い!!

とりあえずUnityバージョンを上げてみたんですが、core@1.4.0みたいなところから「API21は廃止されました。API22以上にしてください(意訳)」的なエラーが2つ現れ、調べても消し方がわからずバージョンを戻しました。
でもそれはそれでいろいろなエラーが出て、結局新しいプロジェクトにぶっこむことになりました。
まぁその先でもいろんなエラーが出たわけですが…
ちなみにUnityIAP(課金システム)については最新バージョンに上げるとUnityIAPも最新のバージョンにできるようになってるので、それを適用すると自動的にGooglePlay Billing Library4以上になるらしいのでこれでOK。
ただそうすると課金を取り扱っているスクリプトで
builder.Configure<IGooglePlayConfiguration>().SetPublicKey
の部分がエラーになったので、思い切ってコメントアウトしたらなんとかなりました。
参考ツイート→https://twitter.com/HyperMamu/status/1565524303700930561

その他いろんなエラーはこちら

Caused by: java.lang.NoClassDefFoundError: com/android/tools/lint/LintCliClient
プロジェクト設定>player>公開設定
でビルドの
カスタムベーステンプレートにチェックを入れる。
それによってできたbaseProjectTemplate.gradleの
dependencies
の中に
classpath 'com.android.tools.lint:lint:26.3.2'
を追加
参考サイト→Android build returns "java.lang.NoClassDefFoundError: com/android/tools/lint/LintCliClient"

Duplicate class
要するにクラスが重複してるということらしいです。
プロジェクト設定>player>公開設定
でビルドの
カスタムメインテンプレートにチェックを入れる。
それによってできたmainTemplate.gradleの
dependencies {
の中に
implementation ('com.google.android.gms:play-services-ads:19.5.0')
みたいなのがあると思うので、それを
implementation ('com.google.android.gms:play-services-ads:19.5.0'){

exclude group: 'androidx.core', module: 'core'
exclude group: 'androidx.documentfile', module: 'documentfile'
exclude group: 'androidx.loader', module: 'loader'
exclude group: 'androidx.localbroadcastmanager', module: 'localbroadcastmanager'
exclude group: 'androidx.print', module: 'print'
exclude group: 'androidx.legacy', module: 'legacy-support-core-utils'

}
みたいに変える。
Duplicate class~と続く文には必ず()が2つあり、少なくともどちらかは
(androidx.core:core:1.2.0)
みたいな:(コロン)で区切られたものが出てくると思います。
の区切られた最初をgroupに、2番目をmoduleに入れるとエラーが消えます。
参考サイト→Android Studioで Duplicate classes エラーの対処法
これでもエラーがなくならない場合は
プロジェクト設定>player>公開設定
でビルドの
カスタムGradleプロパティテンプレートにチェックを入れ、それによってできたgradleTemplate.propertiesに
android.useAndroidX=true
android.enableJetifier=true

を追加してみよう


お客様のアプリにはポリシーを遵守していない SDK バージョンが含まれています
AndroidManifest.xmlの
<manifest ... >となっている下に
<uses-permission android:name="com.google.android.gms.permission.AD_ID"></uses-permission>
参考サイト→targetSDKVersionが31以上のアプリでビルドする場合の対応について


<ひつじOjject(課金とかはないけどちょっと昔のプロジェクト)編>

gradleのバージョンはUnityのバージョンによって変わってくるらしいです。
なので古いバージョンのUnityを使っていて、諸々の更新をするために必要なプラグインのバージョン(baseProjectTemplate.gradleファイルの中にある classpath 'com.android.tools.build:gradle:x.x.x' のx.x.x部分)を変える場合はUnity自体のバージョンアップが必要となるかもしれません。
下記のようなビルドエラーが出たときはそういう意味です

What went wrong:
A problem occurred evaluating project ':launcher'.
> Failed to apply plugin [id 'com.android.internal.version-check']
> Minimum supported Gradle version is 6.1.1. Current version is 5.6.4. If using the gradle wrapper, try editing the distributionUrl in E:\HD-PEU2\RPGVX\Unity\HitsujiObject\Temp\gradleOut\launcher\gradle\wrapper\gradle-wrapper.properties to gradle-6.1.1-all.zip


<その他ツクール作品系(cordovaでビルドしているもの)編>

Could not find an installed version of Gradle either in Android Studio
昔のプロジェクトだとフォルダ構造が変わってビルドするときにエラーが起こるときがあります。
そのときはandroidフォルダを消してコマンドプロンプトで
cordova platform add android@6.2.3
と打つとフォルダが再構成されます。
2022年11月5日追記 これでビルドを行うとビルド自体は成功するものの、起動すると”Admob is not defined”というエラーが出て進まなくなります。なので代わりにプロジェクトフォルダでコマンドプロンプトをだして
cordova platform remove android
と打ってコマンドからandroidフォルダを消し、
cordova platform add android@8.0.0
でandroidフォルダを再構成します

参考サイト→ionic build android failure :Execution failed for task ':CordovaLib:compileDebugJavaWithJavac'
参考サイト→【Cordova】プラグイン追加時に発生した「Could not find an installed version of Gradle either in Android Studio」エラーの対処法

このファイルは Android 12 以降にはインストールできません
アプリは無事ビルドできたけど、GooglePlayConsoleにアップロードしたら下記のようなことを言われた場合
アップロードされた APK または Android App Bundle には、インテント フィルタを使用するアクティビティ、アクティビティ エイリアス、サービス、またはブロードキャスト レシーバが含まれていますが、'android:exported' プロパティ セットは使用されていません。このファイルは Android 12 以降にはインストールできません。
AndroidManifest.xmlのactivityの中に
android:exported="true"
を追加する
参考サイト→【Unity】GooglePlayConsoleにて「アップロードされた APK または Android App Bundle には、インテント フィルタを使用するアクティビティ、アクティビティ エイリアス、サービス、またはブロードキャスト レシーバが含まれていますが、'android:exported' プロパティ セットは使用されていません。このファイルは Android 12 以降にはインストールできません。」というエラーが出た時の対処法

広告IDの取得
targetSDKVersionが31以降の場合、広告IDの権限が付与されてないよー、IDがゼロでかえっちゃうよーというエラーがGoogleplayにアップロードするときに警告される時があります。
その時はAndroidManifest.xml(基本的にはplatforms\android\app\src\mainにあるのでいいと思う)のmanifestの下あたりに
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
をつけてみてください

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

riru/宝石小箱 2022/10/24 17:13

【Steam】リリース準備時にひっかかりそうなところのメモ

時間が経って忘れてるところもありますが、Steamのリリース準備を進めていくうえでちょこちょこ苦戦したところがあったので備忘録としてメモしておきます。思い出したら追記していくかも

<SteamPipeGUIでアップロードできない>
ゲームデータをSteamにアップロードするために使うSteamPipeGUI。
でもエラーが出てアップロードができませんでした。
理由は単純明快、指定したパスに日本語が入っていたからでした。
場所は外付けでも大丈夫だったので、とりあえず日本語の入っていないところにsteamworks_sdkは置いておきましょう。


<起動オプションの書き方>
ゲームデータのレビューが通ったのに、アプリをリリースのボタンが出てこない。
どうした?と思ってチェックリストを見ると、デポのところだったかに新しく項目が追加されている。
なんか起動オプションがちゃんと設定できてないっぽい。結局ディレクトリどこから書けばいいんだ?ってなってました

結論から言うと、ゲームのexeファイルまでのパス-steamPipeで設定したビルドパスになります
ヴェルタのビルドパスはこれ


exeファイルまでのパスはこれ

なのでこの場合は、
velta_sora\Star Child Velta and the Road to the Sky.exe
と、記入すればよいです

見切れてるけど、実際の記入例はこんな感じ
ちなみに起動アプションはSteamworks > アプリ管理 > アプリを選択(この場合は星の子ヴェルタと空への道)>Steamworks設定を編集>インストール>インストール全般 にあります

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

riru/宝石小箱 2022/04/13 14:43

【Unity】ビルドしたスマホアプリが起動時繰り返し停止するときの対処法

Android用アプリを作ってビルドしてさぁ実機でテストしよう!と思ったら起動せず、「アプリが繰り返し停止しています」というアラートが出ることがあります。
というか私は毎回やらかしている気がするので、備忘録も兼ねてブログに残しておこうと思います。

原因はずばりAdmob。Admobのアセットを入れたにもかかわらず、settingでアプリIDを入れていない(AndroidManifestにアプリIDの記述がない)と起こるらしいです。
ちゃんとアプリIDの設定があると、AndroidManifestのapplicationの中に
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="アプリID">
と記述されているはずです
ちなみに設定でGoogleAdmobのEnabledにチェックを入れてなくてもなるので、導入はアプリIDを作ってからにしよう!

参考サイト:Unityでアンドロイドのアプリを実機に落とせずにはまった話

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

« 1 2

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索