Skin Microstructure Deformation with Displacement Map Convolution项目小结
经常有人问我你最近在干什么,但一句话真的很难说明白,最近两个月一直在尝试将Skin Microstructure Deformation with Displacement Map Convolution这篇论文以离线渲染的形式搬运到现有三维工具中,优先就是maya。首先非常感谢论文发表团队无私的贡献了自己的研究成果及过程,附一个论文introduce:http://gl.ict.usc.edu/Research/SkinStretch/。
概述:在cg制作中脸部写实渲染一直是体现水准的领域,随着硬件、扫描技术及渲染器的进步,脸部写实的静帧渲染已经趋向完美,但脸部动作导致的皮肤微观结构拉伸挤压效果的模拟依然存在瑕疵,因为微观结构往往是由扫描贴图置换surface获得,而这个扫描贴图往往是单帧,静态的贴图只会跟着脸部顶点做缩放变换,并不能产生动态的拉伸挤压效果。Skin Microstructure Deformation with Displacement Map Convolution这篇论文就高效的解决了这个问题。但论文中采用的是实时的方案,这种方案虽然效率高,执行快,但对于vfx公司来讲,能够生成动态贴图序列并输出才是最佳方案。我解决的就是这个问题。
以下简要记录一下我的实现过程。
一:使用maya变形器的过程中一般会有原始shape及变形shape两个模型,首先要做的是提取任一shape的顶点信息,再迭代获取顶点相连的三角面列表,将单一三角面信息存储为向量信息,再将该三角面向量翻转到TangentSpace,这样就可以在uv空间中计算原始shape到变形shape的transform矩阵了,平均该顶点相连的三角面列表的transform矩阵即可获得当前顶点的transform信息。
二:利用顶点transform信息,即可计算拉伸轴s、t及拉伸量了。旋转矩阵的计算及拉伸轴的计算都可以通过svd分解获得,2x3矩阵及2x2矩阵的svd分解都可以不借助计算库完成,所以整个过程会很干净。
三:获得所有顶点的s、t轴及拉伸量后,即可将着手前片元处理了。在这里我并未利用opengl来绘制stmap图,而是自行写了一个片元方法来解决插值步骤,大致思路是对模型中所有三角面遍历,翻转三角面到uv空间中,沿y轴进行扫描,逐行计算st轴及拉伸量。此处略。
四:现在已经有了st片元信息,就可以开始后片元操作了。利用前片元信息,对原始置换贴图做两次卷积,即可获得动态贴图。实际上这一步是一个近似计算,因为此处只是近似的将二维卷积算子分解为两个一维算子,但考虑算法复杂度的大幅优化,这种近似是可以接受的。
这四步就是我的基本实现步骤,完成这个研发项目的过程波折不断,既要冒着项目失败的风险,也要顶住其他因素的干扰。在最后时刻惊险完成工具原型的同时,也离开了公司。
放几张成果图吧:



冒险是件很有意思的事,但就到这里吧。
Skin Microstructure Deformation with Displacement Map Convolution项目小结的更多相关文章
- 记一次SSM项目小结(一)
记一次SSM项目小结(一) ssm框架 环境配置 服务器配置 解决方法 拦截器重定向到localhost nginx和tomcat中session失效 mybatis的xml文件不生效 数据库用户创 ...
- [2017BUAA软工助教]个人项目小结
2017BUAA个人项目小结 一.作业链接 http://www.cnblogs.com/jiel/p/7545780.html 二.评分细则 0.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...
- [2017BUAA软工助教]结对项目小结
2017BUAA结对项目小结 一.作业链接 http://www.cnblogs.com/jiel/p/7604111.html 二.评分细则 1.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...
- ABP入门系列(2)——通过模板创建MAP版本项目
一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...
- ABP入门系列(1)——通过模板创建MAP版本项目
ABP入门系列目录--学习Abp框架之实操演练 一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包 ...
- mono for android 百度map binding项目(转)
好丫小子之前发布过百度地图android SDK的mono for android绑定dll,许多朋友看过之后说想理解是怎么绑定的,现我把绑定的代码发出来. 针对2.1.2版本百度地图android ...
- 1.通过模板创建MAP版本项目
1.选择mpa+ef+module-zero 取名字 2.用vs打开项目后,在解决方案上右键 还原nuget包 3.打开程序包管理器控制台,选择以EntityFramework结尾的项目,并执行upd ...
- GPS项目小结
GPS项目中涉及到的技术有地图纠偏,js与winform c#的交互等方面: 1 google地图纠偏,能够私下call我...QQ(964877814)....,事实上主要由于考虑到政治以及军 ...
- .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)
阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受保护方法的单元测试(Protected成员 ...
随机推荐
- 用Spring Boot去创建web service
1. 环境 JDK1.8 JavaSE1.8 web容器是 webSphere IDE是Eclipse 2. 创建一个空的 Maven Project 3. 打开pom.xml 配置相应的packag ...
- bottle 0.5中的key-value数据库
import anydbm as dbm import cPickle as pickle class BottleBucket(object): '''Memory-caching wrapper ...
- Linux命名空间
Linux Namespaces机制提供一种资源隔离方案.PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace.每个Namespace里面的资源对其他Namespa ...
- idea添加JPA导出实体类
https://blog.csdn.net/liu_yulong/article/details/72910588
- L2-007 家庭房产 (25 分)
L2-007 家庭房产 (25 分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤),随后N行,每行按下 ...
- Java 8 Lambda 表达式(二)
lambdas 实现 Runnable 接口 下面是使用 lambdas 来实现 Runnable 接口的示例: // 1.1使用匿名内部类 new Thread(new Runnable() { @ ...
- DG_Check检测
DG_Check检测 1) all 查询备库角色(确认主备关系)set linesize 140 col dbid for 9999999999 col name for a10 col databa ...
- 数据分析处理库--Pandas
Pandas库: pandas索引与计算:
- [转]如何正确学习JavaScript
原文:How to Learn JavaScript Properly(2014-2-7) 学习时长:6-8周 学习前提:中学水平,无需编程经验 更新(2014-1-7) 在Reddit上创建了一个学 ...
- Python3.7 练习题(三) 将指定目录下的图片进行批量尺寸大小处理
# 将指定目录下的图片进行批量尺寸大小处理 #修改图片尺寸 导入Image os 快捷键 alt+enter import os from PIL import Image def process_i ...