unity 蒙皮的实现方式

2023-10-13 00:20
文章标签 实现 方式 unity 蒙皮

本文主要是介绍unity 蒙皮的实现方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原理:

蒙皮,三维动画术语,也用于3D游戏中。三维动画的一种制作技术。在三维软件中创建的模型基础上,为模型添加骨骼。由于骨骼与模型是相互独立的,为了让骨骼驱动模型产生合理的运动。把模型绑定到骨骼上的技术叫做蒙皮。

因为蒙皮动画要改动的是我们的骨骼的缩放,平移,渲染。是跟骨骼有关系的。但是我们的模型是一个mesh,是由很多顶点组成的,那么要让骨骼改动的时候mesh也变化的话就需要改动mesh上的顶点。那么自然就需要骨骼和顶点间有一个关联关系。

蒙皮一般是美术做出来的骨骼与顶点的关联关系,也就是说蒙皮就是骨骼与顶点间的关系。

实现方式:

在unity中,我们要获取这个关联关系可以通过Mesh下的boneWeights来获取,这里获取的是每个顶点的关联骨骼信息。就包括boneIndex0到3和weight0到3。分别是顶点的关联骨骼索引和关联骨骼索引的权重。unity支持4个关联骨骼。

要做蒙皮的话我们需要把骨骼的顶点与他的有关联的骨骼索引关联起来。所以需要做一次所有骨骼的坐标转换到动画做动画的坐标系,需要做一次矩阵左乘。

我们要获取骨骼的矩阵信息,首先需要获取骨骼坐标下的骨骼矩阵,通过Mesh的bindposes可以获取所有的骨骼坐标信息。然后左乘动画世界坐标bones[j].localToWorldMatrix * bindPoses[j]。这样可以转换到世界坐标下。

然后把顶点跟各骨骼索引矩阵相乘得到该顶点的矩阵信息后乘上骨骼索引的权重,让各权重加起来就可以得到蒙皮后的信息了

蒙皮方式默认是在cpu做的。当然也可以在gpu做,类似unity有gpuskinning,也可以自己些一些gpuanimation来实现(https://blog.csdn.net/llsansun/article/details/101790272)

优化:

如果在不需要控制骨骼的情况下可以开启Optimize GameObject。他能把部分主线程(Main Thread)里原来运行的函数,放到了子线程(Worker Thread)里来运行。因此主线程的压力得到了极大的缓解,所以优化性能看起来就非常大。

也可以指定一些骨骼让他显示出来控制

 

 

 

 

这篇关于unity 蒙皮的实现方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/199449

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch