码迷,mamicode.com
首页 > 其他好文 > 详细

GPU Skinning 结合 Instanced 高效实现大量单位动画

时间:2019-10-27 13:08:24      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:prope   实时   能力   ali   sample   http   com   包含   格式   

GPU Skinning 与 Instance

蒙皮动画

技术图片

计算骨骼信息

蒙皮

GPU Skinning

CPU Skinning 与 GPU Skinning 实现方式

Skinning 类型 优点
CPU Skinning 各平台相似稳定
无 CPU/GPU 传输损耗
---- ----
GPU Skinning 多核并行计算
访存速度更快
浮点运算能力更高

Unity GPU Skinning 与 自定义 GPU Skinning 实现方式

目前 Unity 拥有一套 GPU Skinning 的流程,通过勾选 Project Setting 中的 GPU Skinning 选项即可。在 GPU 要支持 Texture Float 格式( Sample2D_float )下,通过 Skinning Mesh Renderer 进行 Transform feedback 结合 Geometry Shader 对 Vertex Buffer 重写来实现。

技术图片

Skinning 类型 优点
Unity GPU Skinning 需要 OpenGL ES 3.0
CPU 计算骨骼信息
GPU 蒙皮
支持 Unity 原生工具链
---- ----
自定义 GPU Skinning 需要 OpenGL ES 2.0
不需要计算骨骼信息
GPU 蒙皮

自定义 GPU Skinning

总的来说,GPU Skinning 分成两部分:

  • 第一部分通过离线采样过程,把对应骨骼信息和动画矩阵烘焙在一张 Texture 上

  • 第二部分通过运行蒙皮过程,通过 Shader 实时计算顶点坐标。

(1)离线采样过程

技术图片

GPU Skinning Sampler

  • Animation
  • Mesh
  • Material
  • Texture

技术图片
技术图片

其中 GPU Skinning Animation 数据比较复杂,包含骨骼信息和动画矩阵。

技术图片

仔细观察,之前介绍 Texture 上已经存在骨骼信息和动画矩阵,这里 Animation 包括多余动画矩阵数据,主要是为了实现在 CPU 端获取骨骼点实时位置,用于实现类似特效挂点之类。

技术图片

(2)运行蒙皮过程

技术图片
技术图片

在 GPU 端获取当前动画帧和 Texture 上的动画矩阵来计算顶点坐标。

技术图片
技术图片
技术图片

GPU Instance

使用少量 DrawCall 一次性绘制大量相同 Mesh 且具有不同参数的对象。

DrawMesh 与 DrawMeshInstanced 实现方式

技术图片

Instance 接口 优点
DrawMesh 简单
---- ----
DrawMeshInstanced 材质改变时候可以合批
深度排序时候可以合批
一次最多绘制 1023 个

MaterialPropertyBlock

MaterialPropertyBlock 相对于修改 Material.SetXXX 性能更优,并通过避免调用 Renderer.material 导致产生新 Material,从而节省内存。

  • 针对 [Per-Renderer-Data]
  • 性能较好
  • 新的 DrawCall

UWA https://blog.uwa4d.com/archives/1983.html

Shader

实现 Instance 通常需要三个步骤:

  • 定义数据缓冲区

UNITY_INSTANCING_BUFFER_START(name)

UNITY_DEFINE_INSTANCED_PROP(float4, _Property)

UNITY_INSTANCING_BUFFER_END(name)

  • 定义 SV_InstanceID

UNITY_VERTEX_INPUT_INSTANCE_ID

UNITY_SETUP_INSTANCE_ID(v)

  • 根据 ID 访问缓冲区数据

UNITY_ACCESS_INSTANCED_PROP(name, property)

GPU Skinning 结合 Instanced 高效实现大量单位动画

标签:prope   实时   能力   ali   sample   http   com   包含   格式   

原文地址:https://www.cnblogs.com/smallrainf/p/11746909.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!