📗

【Unity Summary】 Model

2025/02/15に公開

Model

details
  • 3D Object の形状や外観に関するデータを含むファイル
  • 様々なデータ(Mesh、Material、Texture、Animation)を加えることも可能

File type

  • 数多くの標準的な Model file 形式と proprietary(占有)形式をサポート
  • 内部的には、import chain として .fbx ファイル形式を使用
type note
.fbx 推奨
.dae (Collada)
.dxf
.obj

Performance techniques

Poligon 数を最小にする

  • Mesh の Poligon 数が少ないほど、Apllication の実行が速くなる
  • 画面に同時に多くの GameObject や Terrain(地形)Object がある場合は、Mesh 毎の Poligon 数を減らすことを検討

Material 数を最小にする

  • 「複数のパーツに異なる Shader を使用する」場合のみ、1Character に複数 Material を使用すること
    • Character Model の目に特殊な Shader を使用する場合など

1つの Skin Mesh Renderer を使用する

  • Skin Mesh Renderer を使用する「Animate された Character Model」では、Character 毎に 1 つだけ使用
    • Animation system は、Culling と Bounding volume の更新を使用して Animation を最適化する

Bone 数を最小にする

  • 余分な Bone は Build size を増加させる

Forward kinematics と Inverse kinematics を分ける

  • Animation import 時に、「Inverse kinematics(IK)」を「Forward kinematics(FK)」に Bake する
    • 上記より IK node は不要になる
    • 重複する IK node も削除可能
  • ただし Model に残っている場合は、 Animation には影響しないが計算には加えられてしまう

Animation Model

Animation system で使用できる Model は2種類

type description
Humanoid 人間の骨格に適合するように編成された少なくとも 15 個の骨を含む特定の構造
Generic(汎用) Humanoid 以外のすべて
  • どちらも Rigging と Skinning がされた Model が必要
    • Rigging:Skelton(Rig や joint の階層とも呼ばれる)の作成
      • Mesh 内の Bone を定義し、その動きを相互に関連付ける
    • Skinning:Skelton に Mesh を結合
      • 指定した joint を Animation 化したときに、 Character Mesh のどの部分が動くかを定義
  • 通常は 3D modeling soft でこれらの手順をすべて行い、出来上がった Model を export した状態で Unity に import する

import

property

details

Mesh Compression、Read/Write Enabled、Optimize Mesh、Keep Quads、Index Format、Weld Vertices

  • Resource の負担を減らし memory を節約する為に使用する

Import BlendShapes

  • 外部 3D Application(Maya や 3ds Max など)で作られた Model ファイル使用時に有効にする

Generate Colliders

  • 環境 Geometry の場合に有効にする

Preserve Hierarchy

  • Model ファイル(Animation のみを含む)の場合に有効にする
    • Skelton の階層不一致を防ぐ

Swap UVs、Generate Lightmap UVs

  • Lightmap を使用する場合に設定する

Normals、Normals Mode、Tangents、Smoothing Angle

  • Model の法線と接線をどのように処理するかを設定する

Model tab

Scene property

Scale Factor

  • import した Model に Global Scale を適用

Convert Units

  • Model file で定義された Model の Scale を「Unity の Scale」に変換

Bake Axis Conversion

  • 軸変換の結果を Apllication の Asset データ(頂点、Animation データなど)に直接 Bake する

Import Blendshapes

  • Mesh と一緒に Blend shape を import 可能にする

Import Visibility

  • MeshRenderer component が有効かどうか(表示されているか)を定義する FBX 設定を import する

Import Cameras

  • FBX file から Camera を import する

Import Lights

  • FBX file から Light を import する

Preserve Hierarchy

  • Model にルートが1つしかない場合でも、必ず明示的な Prefabe ルートを作成する
    • 通常、FBX importer は最適化の方法として Model から空のルート node を取り除く
    • 同じ階層の一部を含む複数の FBX file がある場合は、この option を使用して元の階層を維持することが可能
Sort Hierarchy By Name
  • 階層内で Game Object をアルファベット順に並べる

Import BlendShape

Import light

  • 以下 type の Light を import 可能
type
Omni light(Omni)
Spot light(Spot)
Directional light(Directional)
Area light(Area)

Meshes property

Mesh Compression

  • 圧縮率の level を設定して、Mesh のファイル size を小さくする
    • 圧縮率を上げると、Mesh 境界と component 毎に低い bit 深度を使用して Mesh data を圧縮する
      • これは Mesh の精度を下げることを意味する
  • settings
    • Off, Low, Medium, High

Read/Write Enabled

  • Mesh data を以下両方に保持する
    • 「GPU で処理可能な memory」
    • 「CPU で処理可能な memory」
  • Runtime に Mesh data にアクセス可能、つまり script からアクセス可能になる
  • 無効(default)にすると、Mesh data を以下のように処理する
    • 「GPU で処理可能な memory」にアップロード
    • 「CPU で処理可能な memory」からは削除

Optimize Mesh

  • Mesh で三角形がリストされる順序を決定する
    • GPU パフォーマンス向上が目的
type note
Nothing
Everything Polygon 及び 頂点 並び替え(Default)
Polygon order Polygon 並び替え
Vertex Order 頂点 並び替え

Generate Colliders

  • Mesh は自動的に attach された Mesh Collider と一緒に import される

Geometry property

Keep Quads

  • 「4つの頂点を持つ Polygon」を三角形に変換するのを阻止する
    • tessellation shader を使用する場合、有効にすると便利
      • Quads を tessellation する方が、poligon を tessellation するより効率的
  • Unity はどんな種類の Polygon でも(三角形から N 角形まで)import 可能であり、「4つ以上の頂点を持つ Polygon」は、この設定に関係なく、常に三角形に変換される
    • ただし、Mesh に quads と三角形(または三角形に変換された N 角形)がある場合、Unity は quads と三角形を分離するために2つの Sub Mesh を作成する
    • 各 Sub Mesh には、「三角形のみ」または「quadsのみ」が含まれる

Weld Vertices

  • 空間の同じ位置を共有する頂点を結合可能
    • 頂点は全般的に同じ property を共有できる(UV、法線、接線、頂点色など)
    • Mesh 数を削減して頂点数を最適化

Index Format

  • Mesh index buffer の size を定義
setting note
Auto
16 bit
32 bit

Legacy Blend Shape Normals

  • Smoothing Angle の値に基づいて法線を計算

Normals, Blend Shape Normals

  • 法線を計算するかどうかを定義
setting note
Import Deafult
Calculate 以下に基づいて法線を計算
- Normals Mode
- Smoothness Source
- Smoothing Angle
None

Normals Mod

  • 法線の計算方法を定義
setting note
Unweighted Legacy 法線を計算する古い方法(version 2017.1 以前)
Unweighted weight 設定なし
Area Weighted 面の範囲を weight として使用
Angle Weighted 各面の頂点角度を weight として使用
Area and Angle Weighted 各面の表面範囲と頂点角度を weight として使用

Smoothness Source

  • Smoothing 動作(どの edge を滑らかに、または鋭くするか)を決定
setting note
Prefer Smoothing Groups (可能であれば)Model ファイルから Smoothing group を使用
From Smoothing Groups Model ファイルからの Smoothing group のみを使用
From Angle Smoothing Angle の値を使って、滑らかにする edge を決定
None Hard edge で頂点を分割しない

Smoothing Angle

  • 頂点が Hard edge に分割されるかどうかを制御
    • 値が高いほど頂点数が少なくなる

Tangents

  • 法線の計算方法
setting note
Import - FBX file から頂点接線を import
- Mesh 接線がない場合は、法線 map した shader とは使用不可
Calculate Tangent Space MikkTSpace を使って接線を計算
Calculate Legacy 以前のアルゴリズムで接線を計算
Calculate Legacy - Split Tangent - UV chart 全体を分割して、古い非推奨のアルゴリズムで接線を計算
- 法線 map の light が Mesh の継ぎ目によって壊れている場合などに使用
- 通常 Character にのみ適用
None

Swap UVs

  • Mesh の UV channel を入れ替える
    • 最大 8 つの UV channel をサポートするが、全ての 3D Apllication が 2 つ以上の UV を export するわけではない

Generate Lightmap UVs

  • Light Map 用の2つ目の UV channel を作成

Rig tab

  • import した Model の Mesh にどのように deformer(変形するもの)をマッピングするかを定義し、 Animation 化できるようにする
    • Humanoid Character の場合、「avator の割り当てや作成」を意味
    • 非 Humanoid (Generic)Character の場合、「skelton のルート bone の特定」を意味
  • Default では、Project view で Model を選択すると、選択した Model に最も一致する Animation Type が Unity によって決定され、Rig tab に表示される
type note
None
Legacy
Generic Rig が 非 Humanoid である場合
Humanoid Rig が Humanoid(脚が2本、腕が2本、頭が1つ)の場合

Animation tab

Animation Clip

details
  • Animation の最小の構成要素
  • RunLeft、Jump、Crawl などの独立した motion を表す
  • 様々な方法で操作し組み合わせることで、活気のある Animation を生み出すことが可能
  • import した FBX データから Animation Clip を選択可能

Asset property

Import Constraints

  • Constraint component(GameObject の位置、回転、scale)の import

Import Animation

Bake Animations

  • kinematic な Key frame を転送するために、IK や Realtime な計算で作成された Animation を Bake する

Resample Curves

  • Animation Curve を Quaternion 値として再 sample し、 Animation の各 frame に新しい Quaternion Key frame を生成
    • Default:有効

Animation Compression

  • Animation を import するときに使用する圧縮の type
type description note ¥
Off 圧縮無効 Key frame 数を減らさないため精度の高い Animation になるが、パフォーマンス低下 & memory size 肥大(非推奨)
Keyframe Reduction 冗長な Key frame 削減 file size(Runtime memory)と curve の評価方法の両方に影響
Keyframe Reduction and Compression Key frame 削減 & Animation ファイル保存時に Key frame 圧縮 - file size にのみ影響
- Runtime の memory size は Key frame Reduction と同じ

Animation Compression Errors

  • 圧縮時の許容誤差設定
type description note
Rotation Error 回転 curve 圧縮の許容範囲を(度数で)設定 回転 curve の key を削除できるかどうかを決定
Position Error 位置 curve の 圧縮の許容誤差を(%で)設定 位置 curve 上の key を削除できるかどうか決定
Scale Error Scale curve 圧縮の許容誤差を(%で)設定 Scale curve 上の key を削除できるかどうかを決定

Animated Custom Properties

  • カスタムの user property として指定した FBX property を全て import

Clip property

Loop Time

type note
Loop Pose Motion を seamless にループ
Cycle Offset 時間をずらして Animation ループの cycle を開始する場合、cycle の offset として使用

Root Transform Rotation

  • Bake into Pose
    • ルート回転を bone の動きに Bake する
      • ルート motion として保存する場合は無効にする
  • Based Upon
    • ルート回転の base
      • Original
        • source ファイルの元の回転を維持
      • Root Node Rotation
        • ルート node の回転を使用
      • Body Orientation
        • 上体を前方に向けたままにする(Animation Type が Humanoid の場合のみ使用可能)
  • Offset
    • ルート回転の offset 値(角度単位)

Mirror

  • Clip の左右を反転

Additive Reference Pose

  • 追加 Animation layer の base として使用される参照 pose の frame を設定
    • Pose Frame
      • 参照 pose として使用する frame 番号を入力
        • timeline で青のマーカーをドラッグして、値を更新することも可能
        • Additive Reference Pose が有効な場合のみ使用可能

Curves

  • AnimationClip の Animation curve を管理
    • より詳細な Animation 化したデータを import した clip に加えることが可能
    • Animator の状態に基づいて他のアイテムのタイミングを Animation 化するなど

Events

  • AnimationClip の Animation Events を管理
    • import した clip にデータを追加して、 Animation 中に特定の action を発生させるタイミングを決定可能
    • Animation 化した Character の場合、歩行と走行のサイクルに event を加え、音を再生するタイミングを示すなど

Mask

  • AnimationClip の Avator Masking を管理
    • clip 内の Animation データの一部を破棄することができ、Object や Character の全体ではなく一部だけを Animation 化可能
    • 投げる Animation を持つ Character の場合など
      • 投げる Animation を走る、しゃがむ、ジャンプするなどのさまざまな他の体の動きと組み合わせて使用できるようにしたい場合は、投げる Animation の Mask を作成して、右腕、上半身、頭だけに制限
      • 上記より、Animation のこの部分は、base になる走る Animation やジャンプする Animation に重ねた layer で再生される

Clip property(All)

type note
Motion import した全ての clip のルート motion node を管理
Import Messages Animation の import に関する情報と option の Retargeting Quality Report を表示

Sampling Euler Curve(Euler曲線)

  • Unity は内部では Quaternion で回転を表す
  • 外部 soource からの Animation を含むファイルを import すると、import されたファイルには通常 Euler 形式の Key frame Animation が含まれる
  • Unity は、これらの Animation を Quaternion 値で Re-sampling し、 Animation の全 frame に対して新しい Quaternion の Key frame を生成

Materials tab

  • Model imoport 時、Material と Texture を処理する方法を変更可能
    • Model に Material がない場合
      • Unity の拡散 Material が使用される
    • Model に Material がある場合
      • sub Asset として import する

Material Creation Mode

Model の「Material 生成」または「import方法」を定義

value description
None
Standard
Import via MaterialDescription(Experimental) import 時に、FBX ファイルに埋め込まれた Material description を使用して Material を生成(推奨)

sRGB Albedo Colors

Gamma 空間の Albedo color を使用する場合

Location

Material と Texture へのアクセス方法を定義

type description
Use Embedded Materials import した Material を import した asset の内部に維持(Default)
Use External Materials (Legacy) import した Material を外部 asset として抽出

SketchUp Import Settings window

SpeedTree Import Settings window

Discussion