最終更新:ID:MCG7A2qQIw 2017年12月03日(日) 17:49:24履歴
基本的な考え方としてunity(プログラム)はまとまっているデータを一括で処理する場合は処理が軽く、データが分割されるほど処理が重くなります。
詳細はunityリファレンス:パフォーマンスと最適化を参考にしてください。
具体的にどうするのかといいますと…
・アバターのマテリアル数を減らす。(マテリアルを1つにする)
・テクスチャサイズを小さくする。テクスチャはアルファ値を使わないようにする。
・シェーダーを軽くする。(cubeシェーダー等を使用する)
・不要なボーンを削除する。(MMDなら捩りボーン等)
・別々に分かれている複数のメッシュを結合する。
・処理の重いコンポーネントを外した軽量版のアバターを用意する。(パーティクルを外したバージョンのアバターも入れておく)
などの方法があります。
VRChatではポリゴン数が2万に制限されていますが、ポリゴン数を減らしても最適化にあまり貢献しません。(多すぎれば重くなる)
詳細はunityリファレンス:パフォーマンスと最適化を参考にしてください。
具体的にどうするのかといいますと…
・アバターのマテリアル数を減らす。(マテリアルを1つにする)
・テクスチャサイズを小さくする。テクスチャはアルファ値を使わないようにする。
・シェーダーを軽くする。(cubeシェーダー等を使用する)
・不要なボーンを削除する。(MMDなら捩りボーン等)
・別々に分かれている複数のメッシュを結合する。
・処理の重いコンポーネントを外した軽量版のアバターを用意する。(パーティクルを外したバージョンのアバターも入れておく)
などの方法があります。
VRChatではポリゴン数が2万に制限されていますが、ポリゴン数を減らしても最適化にあまり貢献しません。(多すぎれば重くなる)
複数のマテリアルを1つにまとめるのは最適化に大きく貢献しますが、最適化の難易度が高いです。
何故なら、モデリングソフトとペイントソフトで再度UVマップとテクスチャを設定する必要があるからです。
手動である場合はモデルの作成/設計の段階でやるのが現実的です。
実際にやる場合はBlenderのプラグインやMesh Bakerのような自動で結合処理をしてくれるプログラムを使用しましょう。
この最適化によるデメリットは、マテリアル単位でのシェーダーの分割ができなくなる事。(例えば装備とアバターで別々のシェーダーを使う等)
1つのアバターに対して複数の服装差分がある場合、
共通の部分と服装差分でマテリアルを分けるといった事ができなくなり、アバターの管理と作成が難しくなる事が挙げられます。
何故なら、モデリングソフトとペイントソフトで再度UVマップとテクスチャを設定する必要があるからです。
手動である場合はモデルの作成/設計の段階でやるのが現実的です。
実際にやる場合はBlenderのプラグインやMesh Bakerのような自動で結合処理をしてくれるプログラムを使用しましょう。
この最適化によるデメリットは、マテリアル単位でのシェーダーの分割ができなくなる事。(例えば装備とアバターで別々のシェーダーを使う等)
1つのアバターに対して複数の服装差分がある場合、
共通の部分と服装差分でマテリアルを分けるといった事ができなくなり、アバターの管理と作成が難しくなる事が挙げられます。
解像度が低くなるので、アンチエイリアスの影響を受けやすい細かい柄のテクスチャでは見た目に影響してしまう。
グラデーションのようなぼわっとしたテクスチャであれば見た目の印象は大きく変わらない。
グラデーションのようなぼわっとしたテクスチャであれば見た目の印象は大きく変わらない。
最も軽いのは unlit/texture ですが欠点があります。
暗いワールドでも光の影響を受けない為、明るく表示されてしまいコントラスト比を上げてしまいます。
暗いと瞳孔を絞るので、より明るく感じてしまう為目に負担がかかります。
また、ポストエフェクトのブルーム(発光させる画面効果)の影響を強く受ける為、なにかと眩しいという問題があります。
普段はcubeシェーダーやリッチなシェーダーを使い、高負荷時には unlit/texture に切り替える等の対応がマストだと思われます。
暗いワールドでも光の影響を受けない為、明るく表示されてしまいコントラスト比を上げてしまいます。
暗いと瞳孔を絞るので、より明るく感じてしまう為目に負担がかかります。
また、ポストエフェクトのブルーム(発光させる画面効果)の影響を強く受ける為、なにかと眩しいという問題があります。
普段はcubeシェーダーやリッチなシェーダーを使い、高負荷時には unlit/texture に切り替える等の対応がマストだと思われます。
簡単にできる上に最適化の貢献度も大きいです。
Blenderの場合はctrl+Jで別々のオブジェクトを1つに結合できます。【Blender】オブジェクトの分割と結合方法
メッシュの管理が大変になりますが、完成しているモデルであれば再度手を加えたりする事は多くないのでデメリットもあまりありません。
Blenderの場合はctrl+Jで別々のオブジェクトを1つに結合できます。【Blender】オブジェクトの分割と結合方法
メッシュの管理が大変になりますが、完成しているモデルであれば再度手を加えたりする事は多くないのでデメリットもあまりありません。
代表的な例はMMDをコンバートした際の捻じれボーンです。
捻じれボーンとはMMDで腕を回転させた際に、不自然な変形を整える為のものなのでunity(VRChat)では必要ありません。
また、MMDで動かした場合の見た目を整えるウェイトが設定されているだけなので、VRChatの場合は削除した事による弊害も特にありません。
捻じれボーンとはMMDで腕を回転させた際に、不自然な変形を整える為のものなのでunity(VRChat)では必要ありません。
また、MMDで動かした場合の見た目を整えるウェイトが設定されているだけなので、VRChatの場合は削除した事による弊害も特にありません。
代表的なのがCPUのリソースを使うパーティクルシステムです。
パーティクルに関してはパーティクルを使用しない差分のアバターを推奨します。
DynamicBoneも多くのプレイヤーが居て大量にアタッチされてる場合は負荷になります。
DynamicBoneがアタッチされてない軽量版のアバターも用意すると最適化できます。
しかし、優先順位としては最適化の効率がよく見た目に影響しないメッシュの結合や、不要ボーンの削除になります。
DynamicBoneを切るのはその分見た目に与える影響も大きいのでトレードオフとなります。
DynamicBoneには最適化できる DistantDisable というオプションがあるので、それにチェックを入れる事は推奨します。

パーティクルに関してはパーティクルを使用しない差分のアバターを推奨します。
DynamicBoneも多くのプレイヤーが居て大量にアタッチされてる場合は負荷になります。
DynamicBoneがアタッチされてない軽量版のアバターも用意すると最適化できます。
しかし、優先順位としては最適化の効率がよく見た目に影響しないメッシュの結合や、不要ボーンの削除になります。
DynamicBoneを切るのはその分見た目に与える影響も大きいのでトレードオフとなります。
DynamicBoneには最適化できる DistantDisable というオプションがあるので、それにチェックを入れる事は推奨します。

最新コメント