カテゴリ別 3Dモデリング最適化ガイド
18 分
本ガイドラインは、ユーザーがモバイル端末でゼペットをプレイする際にアプリがフリーズしないようシステムの安定性を確保し、レンダリング効率を最大化するための3dアセットの制作および最適化に関する指針をご案内するものです。 すべてのクリエイターは、審査の却下を防ぎ、円滑なプレイ環境を確保するため、以下に明記された事項を必ず遵守してアセットを制作する必要があります。 💡 共通:モデリングの最適化 ㅣ✔️ すべてのカテゴリーにおいて、ブレンドシェイプ(blendshape)の使用を禁止 zepetoにアップロードされるすべてのアイテムには、ブレンドシェイプ(blendshape)データを含めることはできません。 これは、クリエイターの皆様の精巧な表現を制限しようとするものではなく、すべてのユーザーが快適にワールドを楽しめるよう、モバイル環境を最適化するための 必須 事項です。 データ容量の指数関数的な増加(ファイルの過負荷) 隠れた座標データの蓄積: ブレンドシェイプは、メッシュの動きや形状の変化を記録するために、多数の頂点(vertex)の位置移動座標データを内部に追加で記憶する必要があります。 レイヤーの蓄積現象: このデータは、fbxファイル内部に アニメーションレイヤーが幾重にも積み重なったような 構造を持っています。これにより、アセット全体のデータ容量が過度に肥大化してしまいます。 リアルタイム演算の過負荷(デバイスの発熱およびラグの発生) モバイルにおけるリアルタイム演算の限界: 複数のアバターが同時に集まる3dワールド空間において、モバイル端末がこうしたブレンドシェイプデータをリアルタイムで処理することは、非常に大きな負担となります。 ハードウェア性能の低下: 結果としてハードウェアに深刻な過負荷がかかり、これがユーザー端末の極端な発熱やフレームドロップ(ラグ)につながります。 メモリ不足およびアプリの強制終了(クラッシュ) メモリ(ram)不足現象: ブレンドシェイプを含むアイテムがワールド内に同時に読み込まれると、モバイル端末の限られたram容量が瞬時に埋まってしまいます。 致命的な oom エラー: これにより、容量を超える oom(out of memory) 現象が発生し、スマートフォンのシステム(ios/android)がデバイスを保護するために zepeto アプリを強制終了(クラッシュ)させるという最悪の不具合を引き起こします。 ポリカウント(polycount) トライアングル(triangle)単位の厳守: すべてのカテゴリーにおけるトポロジー演算およびデータ制限の基準は、クワッド(quads)ではなくトライアングル(triangles)です。 エクスポート(export)前の確認: blender、maya、3ds maxなどのツールでfbxエクスポートを行う前に、3dビューポート内のレイアウトで、tri( triangle )カウントがカテゴリーごとの最大制限値以下であることを必ず確認してください。 バックフェイスカリング(backface culling)対応のモデリング バックフェースカリング環境への準拠: zepetoエンジンは、レンダリング演算の最適化のため 、基本的にバック フェースカリング方式を採用しています。 構造的な仕上げ処理が必須: アニメーション再生時に内部が露出する可能性がある衣装の袖の内側、スカートの内側、襟(collar)などは、法線方向が反転して透けて見える現象を防ぐため、面を完全に閉じるか、物理的な厚みを持たせるオブジェクト仕上げモデリングで処理する必要があります。 不良メッシュデータの整理(クリーンアップ) モデリングデータ内に「不良な部分」が残っていると、グラフィック処理エラーを引き起こし、エンジンのクラッシュ(crash)の原因となります。提出前に 「 クリーンアップ (clean up )」 を行い、こうした不要なデータを必ず整理してください。 面(face)を形成せずに宙に浮いている頂点(isolated vertices)や、長さが0のエッジ(edge)は、不要な演算コストを発生させるため、事前に削除してください。 ノンマニフォールド(non manifold)構造の禁止: 数学的には計算可能ですが、現実世界には存在し得ない構造です。 以下の4つの 主要なタイプを確認し、モデリング作業の際にクリーンアップを行ってください。 ノンマニフォールドの4大不具合タイプ 1本のエッジ(線)に3つ以上の面が幾何学的に噛み合って隣接しているy字型またはt字型の構造 2つ以上の独立した面が、面を共有せず、頂点(vertex)をたった1つだけ共有して交差して接続された砂時計状の構造 完全に閉じたメッシュ空間の内部に、外部からは見えないゴースト面が横切っている構造(主にメッシュの結合・抽出エラーによって発生) 連続したメッシュの流れの中で、特定の面の法線ベクトル(normal vector)の方向だけが逆に反転し、隣接する面と方向が一致しない状態 見えない面の削除 基本ボディメッシュのカリング: 衣装の外側やアクセサリーアイテムの装着により内側に配置され、 基本アバターボディ(base body)に完全に隠れてしまうメッシュ面は 、 思い切って 削除する必要があります。 リソースの確保: 不要な内部メッシュを削除すると、gpuへの負荷が軽減され、レンダリング性能が向上します。これはゲームの快適なプレイを助け、メモリ使用率の削減に大きく寄与します。 関節部のトポロジー密度の最適化 膝、肘、肩のように動きの多い関節部位は、スキニング後にメッシュが自然に曲がるよう、 最低3本以上のループエッジ(loop edge) を配置してください。逆に、形状の変化がほとんどない固定された部位は、不必要に面を細かく分割せず、 できるだけシンプルに 整理することで、アバターの動作性能を向上させることができます。 ㅣ✔️ 衣類類 (dr, top, otr, btm) 最大トライアングル数 モデリング仕様 dr(1着の衣装): 最大 10,000 トライアングル top(トップス)/otr(アウター): 最大6,000トライアングル btm(パンツ、スカート): 最大5,000トライアングル モデリングガイド シームライン(seam line)の頂点整合: トップス(top)とボトムス(btm)が接するウエストの境界線は、アバターが動く際に最も変形しやすい部分です。そのため、 トップスとボトムスの境界面に位置する頂点の数と線の流れ(トポロジー)を、互いに完全に 一致させてください。 もし境界面の頂点構造や法線(normal)の方向がずれていると、アバターが動く際に服の間に隙間ができたり、内部が透けて見える不具合が発生します。境界面のメッシュが1枚の服のように自然に繋がるよう、入念に調整することが重要です。 関節部の3 loopエッジ構造: 膝、肘、骨盤のように動きの大きい関節部位は、曲がる際にメッシュがねじれたり歪んだりしやすくなります。このような現象を防ぎ、滑らかに動くようにするため、 関節が曲がる部分に3~4本以上のエッジ(edge)を密に、均等に 配置してください。 服の端部分の仕上げ(厚みをつける): 袖口や裾のような服の端部分は、単に一本の線で終わらせず、内側に布を重ねて、 実際の服のように厚みのある 仕上がりにしてください。 ただし、服の奥深くに入り込んで 外部からは絶対に見えない 面は 、 あえて残しておく必要はありません。こうした隠れた面はきれいに切り取ったり整理したりして、ゲームのパフォーマンスを低下させる不要なポリゴンの浪費を必ず防いでください。 ㅣ✔️ ヘア類 (f hair, m hair) 最大トライアングル数 モデリング仕様 f hair(女性用ヘア): 最大 10,000 トライアングル m hair(男性用ヘア): 最大10,000トライアングル モデリングガイド 二重構造モデリング(solid base mesh + alpha plane mesh) :視覚的な完成度とモバイル機器のパフォーマンスの最適化を両立させるため、ポリゴン全体の70%は頭蓋骨を覆う形の閉じた構造の不透明メッシュとしてモデリングし、ボリュームを確保します。 残りの30%のポリゴンは、髪の毛の先端部分、産毛、サイドの髪などを表現するためのアルファプレーン(alpha plane)形式で、外周に配置してください。 z fighting防止のための間隔の確保: 3dグラフィックエンジンには、透明な平面が複数重なっていると、カメラの視点によってどの平面が前、後ろにあるかを計算する順序が混乱してしまうという根深い問題があります。 アルファプレーン間の距離が近すぎたり、メッシュの束が互いに交差したりすると、カメラの角度によっては透明な面がちらつく ソートの 問題が発生します。アルファプレーンメッシュ間には、物理的に最低限の距離を保つようにモデリングしてください。 ㅣ✔️ 体に密着する小道具および変形する小道具類(sox、glove、nail、tail、wing、shoulder) 最大トライアングル数 shoulder(ショルダー): 最大 5,000 トライアングル glove(手袋)/bag(バッグ): 最大4,500トライアングル wing(翼): 最大 4,000 トライアングル sox(靴下): 最大 3,500 トライアングル tail (しっぽ) 最大 2,000 トライアングル nail (ネイルアート) 最大 1,500 トライ モデリングガイド 指のトポロジー同期 :グローブ(glove)およびネイル(nail)のモデリングにおいて、指の関節が曲がる位置は、ゼペットのデフォルトガイドダミーのフィンガー ジョイントのオフセット座標と、わずかな誤差もなく一致している必要があります。関節ごとに 最低3 本のエッジを維持してください。 接触面の最適化: ネイルアートや手袋の内側など、指の皮膚に完全に密着し、物理的に100%埋め込まれる内側面は、最適化のために完全に削除してください。 ㅣ✔️ 装着型小物類 (sh、headwear、eyemask、glasses、bracelet、necklace、earring、ring) 最大トライアングル数 sh(靴)/headwear(ヘッドウェア): 最大4,000 tris eyemask(マスク): 最大 3,000 トライアングル glasses ~ ring(メガネ、ブレスレット、ネックレス、イヤリング、指輪): 最大 2,000 トライアングル モデリングガイド 円柱型モデリングの最適化 :指輪(ring)、ブレスレット(bracelet)、メガネフレーム(glasses)など、曲線状のリジッド小道具を作成する際は、最初の円柱型基本形状の側面数(sides)を 6~8個に 制限し、ローポリゴン構造を確立してください。 不足している曲面のシルエットは、ソフトエッジおよび法線マップを用いて補う必要があります。 ㅣ✔️ 特殊体型類(mask、body) 基本アバターの固有の外形(頭部および全身メッシュ)そのものを完全に上書きしたり、体型変化を誘導したりする、最高難易度のテクニカルカテゴリーです。 最大トライアングル数 body(特殊体型・胴体): 最大 10,000 トライアングル mask(特殊体型・顔): 最大 5,000 トライアングル モデリングガイド ネックシームライン(neck seam line)のマッチング :顔マスク(mask)と体(body)が接する首の境界線領域は、ゼペットのデフォルトボディモデリングの頂点インデックス番号、絶対3d座標値、そして頂点法線方向まで完全に一致している必要があります。この溶接ラインが0 001mmでもずれると、首が分離して隙間が見える不具合が発生します。 参考)アイテムの最適化に向けたカテゴリー別データ すべてのデータは 上限値(maximum limit) を基準としています。 dr(セットアップ)を除くすべてのカテゴリーは、テクスチャ1枚を基準とします。 max triangle count (tris) 推奨 / max max texture resolution (map size) 推奨 / max max material (属性ごとの追加シェーダーを許可) dr one piece outfit 10,000 512x512 (2 images) 4(推奨) top top 6,000 512x512 3(推奨) otr outerwear 6,000 512x512 3(推奨) btm pants, skirts 5,000 512x512 3(推奨) sox socks 3,500 / 4500 256x256 / 512x512 3(推奨) sh shoes 4,000 256x256 / 512x512 3(推奨) f hair women's hair 10,000 256x256 / 512x512 3(推奨) m hair men's hair 10,000 256x256 / 512x512 3(推奨) headwear headwear 4,000 256x256 / 512x512 3(推奨) shoulder shoulder 5,000 512x512 3(推奨) glasses glasses 2,000 256x256 / 512x512 3(推奨) bracelet bracelet 2,000 256x256 / 512x512 3(推奨) necklace necklace 2,000 256x256 / 512x512 3(推奨) earring earrings 2,000 256x256 / 512x512 3(推奨) bag bag 4,500 256x256 / 512x512 3(推奨) glove glove 4,500 256x256 / 512x512 3(推奨) ring ring 2,000 256x256 / 512x512 3(推奨) nail nail art 1,500 / 2000 256x256 / 512x512 3(推奨) eyemask mask 3,000 512x512 3(推奨) wing wing 4,000 512x512 3(推奨) mask special face shapes 5,000 512x512 3(推奨) body special body types 10,000 512x512 3(推奨) tail tail 2,000 / 3000 256x256 / 512x512 3(推奨)
