📗
【Unity Summary】 Model
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 のどの部分が動くかを定義
- Rigging:Skelton(Rig や joint の階層とも呼ばれる)の作成
- 通常は 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 の精度を下げることを意味する
- 圧縮率を上げると、Mesh 境界と component 毎に低い bit 深度を使用して Mesh data を圧縮する
- 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 するより効率的
- tessellation shader を使用する場合、有効にすると便利
- 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 として保存する場合は無効にする
- ルート回転を bone の動きに Bake する
- Based Upon
- ルート回転の base
- Original
- source ファイルの元の回転を維持
- Root Node Rotation
- ルート node の回転を使用
- Body Orientation
- 上体を前方に向けたままにする(Animation Type が Humanoid の場合のみ使用可能)
- Original
- ルート回転の base
- Offset
- ルート回転の offset 値(角度単位)
Mirror
- Clip の左右を反転
Additive Reference Pose
- 追加 Animation layer の base として使用される参照 pose の frame を設定
- Pose Frame
- 参照 pose として使用する frame 番号を入力
- timeline で青のマーカーをドラッグして、値を更新することも可能
- Additive Reference Pose が有効な場合のみ使用可能
- 参照 pose として使用する frame 番号を入力
- Pose Frame
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 する
- Model に Material がない場合
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 として抽出 |
Discussion