• Stars
    star
    443
  • Rank 97,860 (Top 2 %)
  • Language
    C#
  • License
    MIT License
  • Created over 5 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

游戏中捏脸的实现

游戏中捏脸的实现

本项目关于捏脸的实现主要参考了《楚留香》和《完美世界》手游, 目前主流的游戏关于捏脸的实现主要集中在两个方面:

  1. 更改脸部骨骼,捏出不同脸的外形

  2. 妆容,在基础的脸型上叠加不同的效果。

Version

项目使用的unity版本是2018.2.1f, 打开unity工程,运行Example这个scene。

编辑器工具

Hierarchy窗口中选中Nose这根骨骼,随便调整Transform一个属性,比如说Position-X 拖拽到骨骼调动的最小值,然后在Inspector的BonesControl对应的面板点击 对应的左边按钮,然后拖拽Position-X到调动的最大值,点击对应属性右边的按钮。点击按钮点击之后,会把记录的值序列化到磁盘当中。 拖拽进度条,就可以预览效果。

Init按钮是保存fbx骨骼参数的初始值,Reset按钮是丢弃捏脸数据,恢复到初始值。



Hierarchy窗口中选中Fbx,即脸部的根节点。设置好每个部位对应的贴图和贴图在MainTexture中的偏移。运行Unity,调整Inspector中TextureToRT脚本里的参数(饱和度、 色相、浓淡),即可预览到对应的部位变化。



骨骼

事先需要做好脸部骨骼的划分,哪些是由蒙皮动画控制的,哪些由程序调整的,然后需要把所有的骨骼都需要绑定到SkinedMeshRender上。

而捏脸控制的就是后者,这些骨骼不能再由Animation来改动。这里我们调整的骨骼参数是位置、旋转、缩放,其中旋转需要指定旋转的轴向。



妆容

事先把脸划分五个部位,分别是眉妆、眼影、瞳色、唇齿、面纹。 妆容的实现是由一张基础的脸型,然后在之基础上堆叠上部位的贴图。而调整的参数 就是色相、饱和度、浓淡三个参数。 调整好参数之后使用FaceMakeupShader,后处理生成一张RenderTexture, 然后把这张RT(RenderTexture) 再赋给之前的材质。



FaceMakeupShader中对贴图的计算是基于线性空间的,所以妆容贴图的设置需要:



说明

本项目旨在展示捏脸的实现原理,在实际的项目开发过程中,其复杂度远远不止于此。 我们需要将预处理好编辑过的骨骼,导出编辑过的数据到二进制文件, 也不会直接在gameobject上挂载脚本。关于如何组织,就看读者的code 能力了。

再比如说,你需要写一个工具,能自动裁剪妆容所在的区域,并导出偏移数据。

随着手机性能的提高,捏脸出现在越来越多的大型手游上,比如说《楚留香》和《完美世界》。在笔者看来捏脸相对于其他模块,还是比较吃性能的,像我所在的项目, 光是脸部的骨骼都达到了100多根。 脸部使用了一张动态生成的RT,大小也是无压缩512的。手机屏也就那么大,游戏运行时,如果不是特意的拉近镜头,脸的细节根本察觉 不到。所以做这块性价比还是比较低的,在资源的分配上一定要做好合理的规划,以不至于这块成为游戏性能的瓶颈。

此项目还有姊妹篇《基于神经网络捏脸》, 主要在游戏之外使用上传图片就能生成生动的捏脸参数。

最后贴出下在游戏中运行的效果



联系方式

Email: [email protected]

Blog: https://huailiang.github.io/

More Repositories

1

face-nn

游戏捏脸,基于神经风格迁移框架生成逼真人脸
HLSL
473
star
2

LipSync

LipSync for Unity3D 根据语音生成口型动画 支持fmod
CMake
380
star
3

seqence

剧情-技能编辑器
C#
223
star
4

terrain_proj

unity 大地形切割、加载、AB
C#
211
star
5

unity_pose3D

Unity中还原抖音视频的动作
Python
175
star
6

pbr_proj

Shader of PBR for Unity
C#
113
star
7

lod

unity中lod分级减面工具SimplyGon, lod预览工具
C#
81
star
8

game_net

Unity游戏和C++服务器 socket通信demo, 数据格式采用google protobuf
C++
65
star
9

hud

游戏血条
C#
62
star
10

timeline

timeline of unity2019
C#
55
star
11

OpenGLEngine

基于OpenGL实现的渲染引擎
C++
52
star
12

batch_build

shell 自动化出包&补丁持续集成工具 适用于unity平台 Jenkins依赖脚本
CMake
37
star
13

Parabola

游戏中用于生成抛物线的编辑器, 如炮弹等投射物的轨迹, 不到100行代码
C#
33
star
14

MultipeerConnectivity

集成wifi、蓝牙直连的端对端unity的sdk, 类似于苹果设备上的airdrop,不需要中转服务器通信
Java
32
star
15

ai_bird

强化学习-游戏AI Trainning
C#
30
star
16

game_sdk

Unity游戏接入外部sdk框架
C#
29
star
17

ConnectPy

unity 和 Python TCP/UDP 通信
Python
24
star
18

ulua_proj

为你的游戏定制lua, 升级ulua底层库到lua53, 彻底地解决你的烦恼
C
23
star
19

nnStyle

a neural network style transfer for video game
Python
21
star
20

ibl_proj

在Unity中实现 LearnOpenGL中公式实现的 PBR 渲染, 包含生成辐射度贴图、预滤波环境贴图、镜面brdf积分贴图
HLSL
18
star
21

watermark

去除抖音、微视水印的脚本工具
Python
17
star
22

ray_tracing

gpu-ray-tracing-in-unity implements by three-eyed-games
C#
17
star
23

Astc

unity 使用原生astc兼容性和性能测试
CMake
15
star
24

video-face-recognition

视频人脸识别
Python
12
star
25

Variants_Proj

Unity 中Shader 和ShaderVariantCollection 生成 Assetbundle 案例测试
C#
10
star
26

game_pb

unity 集成c++ protobuf
C++
10
star
27

Vertex-Animation

C#
9
star
28

WebCam

支持Unity中的WebCameraTexture访问Android原生层Camera2的能力, 比如说变焦、曝光度、ISO等参数
Java
9
star
29

AREngineDemo

AREngine background rendering for URP
C#
8
star
30

swig

自动化导出c++各个平台库
C#
7
star
31

reverse-onepiece

破解《航海王燃烧之血》
Python
4
star
32

wx

微信小程序
JavaScript
2
star
33

SideScroll

使用UE5复现类似马里奥效果小游戏-youtube
2
star
34

huailiang.github.io

huailiang blog
JavaScript
1
star
35

lgRenderEngine

soft render engine based on SDL2
C
1
star