Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

3Dキャラクターの表示について

68 views
Skip to first unread message

T

unread,
Nov 27, 2024, 6:10:59 PM11/27/24
to 宴ユーザーグループ
宴のバージョン: 宴3.12.5
Unityの習熟度:簡単なプログラミング程度

こんにちは!お世話になってます。

現在vroid studioで作成した3Dキャラクターを使ってテクスチャ書き込みをして表示しようとしているのですが、Scaleを大きくして表示しようとすると髪がおかしなことになってしまう(髪が勢いよく上に上がってしまう)という事態にあっています。
色々試したところScaleを変えずに1のままであればこの現象は起きないようです。

Sampleにある3DプレハブRTを真似てScaleを大きくすればいい感じの位置とサイズにできるのですが、Scaleを1のままでは不可能でしょうか?
3DCameraの設定を変えたりすればうまく表示できたりするのでしょうか?

マッドネスラボ

unread,
Nov 27, 2024, 10:14:42 PM11/27/24
to 宴ユーザーグループ

テクスチャ書き込みをしない場合は、自作のカメラ(3DCamera)の方の設定を変えることで、一応対応は可能だと思います。ただ、カメラの設定によって、調整する箇所が違います。


テクスチャ書き込みをしている(3DプレハブRTを真似ている)場合は、描画用のカメラが自動生成されるので内部のプログラムを書きかえるしかないです。
書き換えたプログラムを作成しましたので、添付のパッケージファイルを適用してください。
(添付ファイルのダウンロード後に、拡張子が *. gzになっている場合は、*.unitypackageに変えてからプロジェクトに適用してください)
(宴3用なので宴4を使っている場合は、適用しないでください。宴4用は後日のバージョンアップに反映させます)

パッケージを適用すると、RenderTextureCustomPixelsToUnitsというコンポーネントが追加されるので、RenderTexureManagerにAddComponentしてください。

これは、テクスチャ書き込み時の「PixcelsToUnit」という値を書き換えるものです。
PixcelsToUnitは、3D空間上の1単位あたりの2Dピクセル数のようなもので、おおざっぱには3D空間と2D空間の倍率のようなもので、通常は100です。

RenderTextureCustomPixelsToUnitsの「Picxels To Units」を設定すると、テクスチャ書き込みを行う全てのオブジェクトの「PixcelsToUnit」が変更されます。
500に設定すると、テクスチャ書き込みの際に5倍の倍率で描画されます。
ss_1068.png

個別に設定したい場合は
Characterシートのほうに、任意の行(RenderTexturePixcelsToUnitsなど)を追加して、そこに値を設定し、
ss_1071.png

RenderTextureCustomPixelsToUnitsコンポーネントのほうを、100に戻して、Row Data Keyに追加した行の名前を設定してください。
ss_1069.png




2024年11月28日木曜日 8:10:59 UTC+9 T:
CustomPixcelsPerUnitForUtage3.unitypackage

T

unread,
Nov 28, 2024, 8:53:58 AM11/28/24
to 宴ユーザーグループ
対応していただきありがとうございます!
位置や大きさなどはうまく表示することはできたのですが、表示していると動きがぎこちない(負荷がかかる為?)のと一瞬だけほんの少し上に動いているように見えてしまうのですがこれはテクスチャ書き込みの仕様でしょうか?

テクスチャ書き込みをせずに表示すればどちらも起こりません。

フェードさせながらモデルを表示したいのでテクスチャ書き込みをしているのですが、テクスチャ書き込みせずにフェード表示は不可能ですか?
2024年11月28日木曜日 12:14:42 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Nov 28, 2024, 12:58:29 PM11/28/24
to 宴ユーザーグループ
>  表示していると動きがぎこちない(負荷がかかる為?)のと一瞬だけほんの少し上に動いているように見えてしまう

これは、Characterシートの「RenderTextuerScale」を設定しているせいかもしれません。
「RenderTextuerScale」を1より大きく設定していると、「RenderTexture」で設定したテクスチャの数倍の高解像度のテクスチャを内部で作成してそれを使用します。
あえて高解像のデバイスを想定して、負荷が高くなっても高解像度を使いたい場合の設定なので基本は設定しないで空欄にしてください。(サンプルだと2になっていますが、これは動作確認のために使っています)

ほかにも考えられる原因としては「AdvGraphicRenderTextureManager」の「Offset」の値が大きすぎるのかもしれません。
100くらいに設定してみて、改善されるか試してみてください。
これは、テクスチャ書き込みのために「いったん他のカメラに写り込まないようなはるか遠くにオブジェクトを置いて、そこでテクスチャに書き込む作業をする」ということを行っているため、どれくらい離れた場所に置くかという数字です。
OffsetをY座標とした位置に置くため、10000だと、(0,10000,0)という位置に置かれることなります。
ただ、離れすぎるとUnityの物理演算が低精度になってしまうという問題があるため、物理演算を使ったモーションがある場合はその影響がでてガクガクしてしまっているかもしれません。
ss_1081.png


>フェードさせながらモデルを表示したいのでテクスチャ書き込みをしているのですが、テクスチャ書き込みせずにフェード表示は不可能ですか?
これは難しいです。
どちらかというとCG描画における3Dモデルの半透明の扱いの難しさというCG全般においての根本的な問題です。
3Dモデルは基本的には半透明にすると、ポリゴンの裏表が透けて見えてしまう結果になりフェードっぽくはならなくなります。
また、各モデルが使っているシェーダーは、そもそも半透明描画をサポートしてないものも多くあります。
綺麗な半透明フェードをかけられるようなシェーダーを使っているモデルもあるとは思うのですが、基本的にはそのシェーダーやモデルの仕様に従って専用のフェード処理をなんらかの形で呼び出さなければならず、宴側で汎用的な処理をすることができません。
なので、基本的には無理です。

宴のテクスチャ書き込みはいったんテクスチャに描画したものを使うため汎用的にできることはできるのですが、
注意点として「元から半透明なオブジェクト」はテクスチャ書き込みをすると、その半透明部分がおかしな色になる可能性がありますので、ご注意ください。


2024年11月28日木曜日 22:53:58 UTC+9 T:

T

unread,
Nov 28, 2024, 5:44:28 PM11/28/24
to 宴ユーザーグループ
>ほかにも考えられる原因としては「AdvGraphicRenderTextureManager」の「Offset」の値が大きすぎるのかもしれません。
100くらいに設定してみて、改善されるか試してみてください。
こちらを試してみたところ直すことができました!

ご対応いただきありがとうございました!

2024年11月29日金曜日 2:58:29 UTC+9 マッドネスラボ:

T

unread,
Feb 28, 2025, 12:12:32 PMFeb 28
to 宴ユーザーグループ
いつもお世話になっております。
3Dキャラクターのモーション切替時(ポーズ変更)にフェードアウトをしている間に切り替え、モーション切り替えが完了したらフェードインをする感じにしたいのですが可能でしょうか?

2024年11月29日金曜日 7:44:28 UTC+9 T:

マッドネスラボ

unread,
Feb 28, 2025, 6:00:20 PMFeb 28
to 宴ユーザーグループ
フェードアウトというのは、FadeOutコマンド(画面全体のフェードアウト)のことでしょうか?
であれば、 
・FadeOutコマンド
・キャラクターのモーション変更
・必要に応じて、Wait系のコマンドでモーションの変更時間ぶん待機
・ FadeInコマンド
とすればよいかと思います。



2025年3月1日土曜日 2:12:32 UTC+9 T:

T

unread,
Mar 1, 2025, 1:59:00 AMMar 1
to 宴ユーザーグループ
返信ありがとうございます。

画面ではなくキャラクターだけをしたいと考えております。
3Dキャラクターはテクスチャ書き込みをして立ち絵みたいに表示しています。

2025年3月1日土曜日 8:00:20 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Mar 1, 2025, 3:42:17 AMMar 1
to 宴ユーザーグループ
キャラクター単位のフェードアウトは、 いったん 非表示にするしかないです。

キャラクターなどのオブジェクト単位のフェードは、WaitFadeObjectsコマンドで終了を待てます

・CharacterOffコマンドでフェードアウトする
・WaitFadeObjectsコマンドで、フェードアウト終了を待つ
・変更したポーズを指定して改めてキャラクターを表示する

といった流れになるかと思います。



2025年3月1日土曜日 15:59:00 UTC+9 T:

T

unread,
Mar 1, 2025, 6:41:43 AMMar 1
to 宴ユーザーグループ
試してみます!
ありがとうございました!

2025年3月1日土曜日 17:42:17 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages