游戏引擎架构----动画
生活随笔
收集整理的這篇文章主要介紹了
游戏引擎架构----动画
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.角色動畫類型
? 賽璐璐動畫(cel animation):基于幀的,電子版本為精靈動畫(sprite animation),可以設計成循環動畫(looping animation)?
? 剛性層階式動畫(rigid hierarchical animation):可能在關節處產生裂縫
? 每頂點動畫(per-vertex animation):網格添加動畫,數據密集
? 變形目標動畫(morph target animation):極端的網格姿勢+混合
? 蒙皮動畫(skinned animation):骨骼+皮膚
2.骨骼: 剛性 關節(joint)的樹形層級結構構成。骨骼只是關節間的空位,關節是動畫師控制的 內存中存儲:關節名字,父關節索引,關節綁定姿勢的逆變換矩陣(蒙皮綁定時關節的姿勢)
3. 姿勢: 關節相對模型參考系的位置、定向和縮放。用矩陣或者 SQT數據結構表示(縮放scale、四元數旋轉quaternion、平移translation) 綁定姿勢:參考姿勢、放松姿勢、T姿勢 局部姿勢:相對父關節的姿勢,SQT表示。每個關節定義了一個坐標空間。把關節姿勢變換Pj施于關節j坐標系表示的點時,得到的是父關節空間表示該點。即從子關節空間變換到父關節空間。Pj=P(j->parent(j)) 全局姿勢:在模型空間的姿勢。從關節到根關節,乘以局部姿勢得到。P2->m = P2->1*P1->0*P0->m
4. 動畫片段(animation clip) 互動:動畫 非互動:游戲內置電影(in-game cinematics IGC)、非交互連續鏡頭(non interactive sequence NIS)、全動視頻(full motion video FMV) 半互動: 快速反應事件(quick time event QTE) 動畫片段的采樣定義了連續函數。動畫片段是 SQT組成的通道函數(channel funciton),通道函數是連續的。游戲引擎使用分段線性逼近的方法插值。 4.1 局部時間線: 時間:0-T 關鍵姿勢(key pose)、關鍵幀+插值。t是實數,不一定是整數 時間比例(time scale):負值則動畫倒轉 幀:有時指一段時間,有時指一個時間點 采樣(sample):代表時間點,那相應的時間可以指幀了。非循環動畫:N幀有N+1個采樣、循環動畫:N幀有N個采樣 相位(phase):歸一化的時間,0表示開始,1表示結束 4.2 全局時間線: 播放動畫:局部時間映射到全局時間。循環就使用模除。起始時間、播放速率/時間比例、循環次數、持續時間 同步動畫時,由于通信系統的時間延遲,造成動畫不同步。使用全局時鐘可以同步動畫,將動畫的全局開始時間匹配即可。 4.3 動畫重訂目標(retarget): 動畫通常只兼容特定骨骼,此技術可以讓動畫適用于不同骨骼 4.4 元通道(metachannel): 非關節通道,如事件觸發器通道,定位器通道。 定位器用于記錄游戲中物體的位置和方向,也是一個仿射變換。可以設置攝像機的位置和角度
5. 蒙皮 網格每個頂點可以綁定至一個或者多個關節,再加權平均 蒙皮矩陣(skinning matrix):把網格頂點從綁定姿勢的位置變換至骨骼的當前姿勢的位置。蒙皮頂點的位置在模型空間定義的,所以變換前后的位置都在模型空間。 頂點在綁定至關節的位置時,在關節空間是不變的:頂點在模型空間的位置->頂點在關節空間的位置->關節變換->頂點回到模型空間 假設只有一個關節:則綁定姿勢的網格位置VmB, 關節在模型空間中的綁定姿勢B,關節在模型空間中的當前姿勢C可得到:VmB * B^-1 * C = VmC ? ? ?==> ?蒙皮矩陣:B^-1 * C:綁定姿勢的逆矩陣*目標姿勢的變換矩陣? 矩陣調色板(matrix palette): 一系列矩陣,每個矩陣對應了關節j的蒙皮矩陣。將網格頂點關聯的蒙皮矩陣取出,加權求和后,將頂點從綁定姿勢位置變成目標姿勢位置,由于C是每幀變化的,B^-1會緩存起來 將模型空間變化到世界空間:乘以矩陣Mm->w,可以預處理將B^-1*Mm->w緩存 動畫實例(animation instancing):多個角色同時播放單個動畫。此時不應該將B^-1*Mm->w緩存
6.動畫混合(animation blending) 將多個動畫片段混合,對角色最終姿勢起作用 6.0 無需混合 核心姿勢:站立、蹲下 確保每個動畫片段都以某個核心姿勢開始核心姿勢結束,就無需混合 6.1 線性插值混合 linear interpolation(LERP),混合百分比、混合因子=[0,1] 姿勢混合通常在局部進行 應用: 時間混合 動作連續性(淡入淡出):混合因子隨時間按三次函數變化:緩出曲線(ease out curve)、緩入曲線(ease in curve) 圓滑過渡:兩個片段的混合因子都同時變換,同時播放 凍結過渡:一個片段凍結,另一個片段一遍播放一遍增加混合因子 方向性運動: 軸轉移動(pivotal movement):按軸旋轉 靶向移動(targeted movement):面朝著一個方向,身體朝不同地方移動。制作三個基本動畫:朝前、朝左、朝右做一個半圓,按照移動方向和靶向的角度選擇混合因子 復雜的線性插值混合: 一維線性插值混合:多個片段的一維混合 二維線性插值混合:三個一維混合可得:x軸方向兩個,求出中間姿勢,y軸方向使用前面的兩個中間結果得到。 三角形的二維線性插值混合:a,b, 1-a-b的加權混合 泛化的二維插值混合:利用Delaunay三角剖分求出一組三角形,再找到對應的姿勢所在的三角形,最后用三角形的二維線插值混合得到結果 6.2 骨骼分部混合: 達到一只手做A一只手做B的效果 通過允許不同關節有不同的混合百分比實現。 混合因子為0,1時可以實現 混合遮罩(blend mask) 6.3 加法混合(additive blending): 區別片段(difference clip) 來源片段(source clip) + 區別片段 = 參考片段 目標片段 : 任何動畫,+ 區別片段 = 其他片段,也是加法混合的意義 來源于矩陣的乘法,除法 加法混合的應用 移動噪聲 瞄準及注釋:對最左最上最右制作區別動畫,混合至向前動畫就可以得到其他的瞄準動畫。(可以利用時間軸lerp)
7. 后期處理 布娃娃 逆運動學(inverse kinematics IK): 輸入是全局姿勢,稱為末端受動器,根據誤差最小化求出局部姿勢 正向運動學(forward kinematics FK):輸入是一組局部姿勢,輸出是一個全局姿勢以及每個關節的蒙皮矩陣。
8. 壓縮技術 通道省略:移除平移通道,減少存儲姿勢 量化:減少存儲為數。浮點數轉化為n整數表示 采樣頻率減少 選擇性載入
9. 動畫系統 9.1 動畫系統架構 動畫管道(animation pipeline):動畫片段和混合因子作為輸入局部骨骼姿勢作為輸出 動作狀態機(action state machine ASM) 動畫控制器(animation controller):每個控制器通常父子一個類型的角色行為,如掩護、跑步。能提供高層次的動畫管理接口 9.2 動畫管道 片段解壓以及姿勢提取->姿勢混合->全局姿勢生成->后期處理->重新計算全局姿勢->矩陣調色板生成 數據結構: 共享資源數據(shared resource data):骨骼、蒙皮網格、動畫片段。骨骼是中心,蒙皮綁定至骨骼,動畫應用于骨骼 每實體狀態信息(per-instance data structure):動畫片段的狀態(局部時鐘、播放速率)、混合方法、混合權重、局部姿勢、全局姿勢、矩陣調色板 混合方法: 加權平均法 混合樹:將6變成樹的結構,就是加法混和必須為一個葉子節點,而其他的混合可以而且是葉子節點和內節點。 淡入淡出: 加權平均法:調整片段權重、將片段邏輯分組,調節組權重 混合樹:加入一個二叉混合節點,混合原來的樹和新的樹 9.3 動作狀態機 每個狀態對應一個任意復雜的動畫片段集合,在混合樹架構中狀態對應一棵樹、加權平均法中狀態對應一系列權重何一組片段 過渡:定義狀態間的過渡矩陣 過渡方法:跳轉、淡入淡出(引入過渡狀態節點 transitional state) 狀態層: 預備動作(anticipation):由一個部位引領其他部位的動作,即要獨立操控不同部位,同時有多個狀態出現 引入狀態層:每層在某一刻只有一個狀態,不同層之間狀態是獨立的 9.4 約束 依附:依附點/ 定位器(locator):特殊的關節,僅僅為依附中的父子關系加入額外的變換 對準:多個角色參與一個動畫 利用定位器,使多個角色的動畫中的定位器在世界空間內重合 解決滑步的方法:動作提取:從動畫中提取出每幀角色重心到局部空間原點的距離(利用元通道),作為速度參數來移動角色。同時將局部空間原點移動到此幀的角色重心處
2. 腳步IK:腳接觸地面時,記下其在世界空間的位置,我們用IK去調整腿的姿勢,令腳能固定于正確位置
注視
掩護對準
2.骨骼: 剛性 關節(joint)的樹形層級結構構成。骨骼只是關節間的空位,關節是動畫師控制的 內存中存儲:關節名字,父關節索引,關節綁定姿勢的逆變換矩陣(蒙皮綁定時關節的姿勢)
3. 姿勢: 關節相對模型參考系的位置、定向和縮放。用矩陣或者 SQT數據結構表示(縮放scale、四元數旋轉quaternion、平移translation) 綁定姿勢:參考姿勢、放松姿勢、T姿勢 局部姿勢:相對父關節的姿勢,SQT表示。每個關節定義了一個坐標空間。把關節姿勢變換Pj施于關節j坐標系表示的點時,得到的是父關節空間表示該點。即從子關節空間變換到父關節空間。Pj=P(j->parent(j)) 全局姿勢:在模型空間的姿勢。從關節到根關節,乘以局部姿勢得到。P2->m = P2->1*P1->0*P0->m
4. 動畫片段(animation clip) 互動:動畫 非互動:游戲內置電影(in-game cinematics IGC)、非交互連續鏡頭(non interactive sequence NIS)、全動視頻(full motion video FMV) 半互動: 快速反應事件(quick time event QTE) 動畫片段的采樣定義了連續函數。動畫片段是 SQT組成的通道函數(channel funciton),通道函數是連續的。游戲引擎使用分段線性逼近的方法插值。 4.1 局部時間線: 時間:0-T 關鍵姿勢(key pose)、關鍵幀+插值。t是實數,不一定是整數 時間比例(time scale):負值則動畫倒轉 幀:有時指一段時間,有時指一個時間點 采樣(sample):代表時間點,那相應的時間可以指幀了。非循環動畫:N幀有N+1個采樣、循環動畫:N幀有N個采樣 相位(phase):歸一化的時間,0表示開始,1表示結束 4.2 全局時間線: 播放動畫:局部時間映射到全局時間。循環就使用模除。起始時間、播放速率/時間比例、循環次數、持續時間 同步動畫時,由于通信系統的時間延遲,造成動畫不同步。使用全局時鐘可以同步動畫,將動畫的全局開始時間匹配即可。 4.3 動畫重訂目標(retarget): 動畫通常只兼容特定骨骼,此技術可以讓動畫適用于不同骨骼 4.4 元通道(metachannel): 非關節通道,如事件觸發器通道,定位器通道。 定位器用于記錄游戲中物體的位置和方向,也是一個仿射變換。可以設置攝像機的位置和角度
5. 蒙皮 網格每個頂點可以綁定至一個或者多個關節,再加權平均 蒙皮矩陣(skinning matrix):把網格頂點從綁定姿勢的位置變換至骨骼的當前姿勢的位置。蒙皮頂點的位置在模型空間定義的,所以變換前后的位置都在模型空間。 頂點在綁定至關節的位置時,在關節空間是不變的:頂點在模型空間的位置->頂點在關節空間的位置->關節變換->頂點回到模型空間 假設只有一個關節:則綁定姿勢的網格位置VmB, 關節在模型空間中的綁定姿勢B,關節在模型空間中的當前姿勢C可得到:VmB * B^-1 * C = VmC ? ? ?==> ?蒙皮矩陣:B^-1 * C:綁定姿勢的逆矩陣*目標姿勢的變換矩陣? 矩陣調色板(matrix palette): 一系列矩陣,每個矩陣對應了關節j的蒙皮矩陣。將網格頂點關聯的蒙皮矩陣取出,加權求和后,將頂點從綁定姿勢位置變成目標姿勢位置,由于C是每幀變化的,B^-1會緩存起來 將模型空間變化到世界空間:乘以矩陣Mm->w,可以預處理將B^-1*Mm->w緩存 動畫實例(animation instancing):多個角色同時播放單個動畫。此時不應該將B^-1*Mm->w緩存
6.動畫混合(animation blending) 將多個動畫片段混合,對角色最終姿勢起作用 6.0 無需混合 核心姿勢:站立、蹲下 確保每個動畫片段都以某個核心姿勢開始核心姿勢結束,就無需混合 6.1 線性插值混合 linear interpolation(LERP),混合百分比、混合因子=[0,1] 姿勢混合通常在局部進行 應用: 時間混合 動作連續性(淡入淡出):混合因子隨時間按三次函數變化:緩出曲線(ease out curve)、緩入曲線(ease in curve) 圓滑過渡:兩個片段的混合因子都同時變換,同時播放 凍結過渡:一個片段凍結,另一個片段一遍播放一遍增加混合因子 方向性運動: 軸轉移動(pivotal movement):按軸旋轉 靶向移動(targeted movement):面朝著一個方向,身體朝不同地方移動。制作三個基本動畫:朝前、朝左、朝右做一個半圓,按照移動方向和靶向的角度選擇混合因子 復雜的線性插值混合: 一維線性插值混合:多個片段的一維混合 二維線性插值混合:三個一維混合可得:x軸方向兩個,求出中間姿勢,y軸方向使用前面的兩個中間結果得到。 三角形的二維線性插值混合:a,b, 1-a-b的加權混合 泛化的二維插值混合:利用Delaunay三角剖分求出一組三角形,再找到對應的姿勢所在的三角形,最后用三角形的二維線插值混合得到結果 6.2 骨骼分部混合: 達到一只手做A一只手做B的效果 通過允許不同關節有不同的混合百分比實現。 混合因子為0,1時可以實現 混合遮罩(blend mask) 6.3 加法混合(additive blending): 區別片段(difference clip) 來源片段(source clip) + 區別片段 = 參考片段 目標片段 : 任何動畫,+ 區別片段 = 其他片段,也是加法混合的意義 來源于矩陣的乘法,除法 加法混合的應用 移動噪聲 瞄準及注釋:對最左最上最右制作區別動畫,混合至向前動畫就可以得到其他的瞄準動畫。(可以利用時間軸lerp)
7. 后期處理 布娃娃 逆運動學(inverse kinematics IK): 輸入是全局姿勢,稱為末端受動器,根據誤差最小化求出局部姿勢 正向運動學(forward kinematics FK):輸入是一組局部姿勢,輸出是一個全局姿勢以及每個關節的蒙皮矩陣。
8. 壓縮技術 通道省略:移除平移通道,減少存儲姿勢 量化:減少存儲為數。浮點數轉化為n整數表示 采樣頻率減少 選擇性載入
9. 動畫系統 9.1 動畫系統架構 動畫管道(animation pipeline):動畫片段和混合因子作為輸入局部骨骼姿勢作為輸出 動作狀態機(action state machine ASM) 動畫控制器(animation controller):每個控制器通常父子一個類型的角色行為,如掩護、跑步。能提供高層次的動畫管理接口 9.2 動畫管道 片段解壓以及姿勢提取->姿勢混合->全局姿勢生成->后期處理->重新計算全局姿勢->矩陣調色板生成 數據結構: 共享資源數據(shared resource data):骨骼、蒙皮網格、動畫片段。骨骼是中心,蒙皮綁定至骨骼,動畫應用于骨骼 每實體狀態信息(per-instance data structure):動畫片段的狀態(局部時鐘、播放速率)、混合方法、混合權重、局部姿勢、全局姿勢、矩陣調色板 混合方法: 加權平均法 混合樹:將6變成樹的結構,就是加法混和必須為一個葉子節點,而其他的混合可以而且是葉子節點和內節點。 淡入淡出: 加權平均法:調整片段權重、將片段邏輯分組,調節組權重 混合樹:加入一個二叉混合節點,混合原來的樹和新的樹 9.3 動作狀態機 每個狀態對應一個任意復雜的動畫片段集合,在混合樹架構中狀態對應一棵樹、加權平均法中狀態對應一系列權重何一組片段 過渡:定義狀態間的過渡矩陣 過渡方法:跳轉、淡入淡出(引入過渡狀態節點 transitional state) 狀態層: 預備動作(anticipation):由一個部位引領其他部位的動作,即要獨立操控不同部位,同時有多個狀態出現 引入狀態層:每層在某一刻只有一個狀態,不同層之間狀態是獨立的 9.4 約束 依附:依附點/ 定位器(locator):特殊的關節,僅僅為依附中的父子關系加入額外的變換 對準:多個角色參與一個動畫 利用定位器,使多個角色的動畫中的定位器在世界空間內重合 解決滑步的方法:
總結
以上是生活随笔為你收集整理的游戏引擎架构----动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运行项目遇到:该网页无法正常运作,loc
- 下一篇: 网易称暴雪离婚不离身;苹果发布 M2 P