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获得,而这个扫描贴图往往是单帧,静态的贴图只会跟着脸部UV移动,并不能产生动态的拉伸挤压效果。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光栅化信息了,利用该信息,对原始置换贴图做两次卷积,即可获得动态贴图。实际上这一步是一个近似计算,因为此处只是近似的讲二维卷积算子分解为两个一维算子,但考虑算法复杂度的大幅优化,这种近似是可以接受的。

这四步就是我的基本实现步骤,完成这个研发项目的过程波折不断,既要冒着项目失败的风险,也要顶住其他因素的干扰。在最后时刻惊险完成的同时,也离开了公司。

放几张成果图吧:

冒险是件很有意思的事,但就到这里吧。

时间: 2024-11-06 12:53:25

Skin Microstructure Deformation with Displacement Map Convolution项目小结的相关文章

七款android地图 [Map] 开源项目框架分类总汇

七款android地图 [Map] 开源项目框架分类总汇: 1.AmapDemo仿照一号专车的地图界面 2.基于高德地图写的不同功能的地图应用 3.基于高德地图的gps.wifi.基站的智能选择定位 4.基于高德SDK搭建的出行类APP,高仿滴滴快的 5.高德地图便民搜索 6.百度地图 7.Android 高德地图gps定位

arm、linux、qt项目小结

QT资源文件 1.新建文件或工程 -> qt资源2.添加,资源名称(Image),选择路径,完成3,打开Image.qrc, 添加后缀,一般就是 /4.添加文件,添加图片5. 调用 (:/11.png) 转http://blog.sina.com.cn/s/blog_5c70dfc80100r257.html 在Qt中处理图片一般都要用到QImage类,但是QImage的对象不能够直接显示出来,要想能看到图片,初步发现有两种方法. 一.QImage转QPixmap,然后用QLabel::setP

项目小结及难点复盘

项目小结及难点复盘 1.程序总体框架结构 计算程序属于客户端,与服务端建立socket连接并实时获取需要计算的数据. 计算程序结果写入oracle数据库对应的表中,供前台界面读取并显示结果. 2.计算模块所处的位置及功能 完成数据socket通信.数据接收.数据解析.计算.结果写数据库操作. 3.使用技术 socket通信.线程同步.OTL.Oracle数据库查询.STL. 3.遇到的技术难点 1)Socket通信简单协议实现 实现中很像当年的中兴捧月的比赛题目,三次握手.保活连接&通信. 最终

GPS项目小结

GPS项目中涉及到的技术有地图纠偏,js与winform c#的交互等方面: 1   google地图纠偏,可以私下call我...QQ(964877814)....,其实主要因为考虑到政治以及军事安全的问题,所以国内的地图存在偏差,而且不同地方的偏差不同,但是相应的计算偏差的算法不可能公开的缘故,所以只能依靠一些纠偏数据来纠正. 纠偏数据可以自己获得,因为地图所谓的偏差值只是:(例加入使用google map 代码加GPS经纬度),明显,GPS经纬度不可能出现错误,人家是卫星各种东东定位,商业

set/multiset和map/multimap用法小结

二叉搜索树是ACM中经常需要用到的数据结构,熟练掌握map和set的用法很关键,现对其做一个简单的总结. 主要的功能有:插入元素,查找元素,删除,遍历/反向遍历. 现以map为例说明用法,multimap是可以插入重复键值的元素的map. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmat

一个WPF小项目小结

一:缘起 在10月中旬的时候在学校BBS上看到有人有做PC桌面客户端的需求,做的是能耗的计算和评估,要算能耗,就有很多环节,最后对这些环节数据进行一些简单计算.我想要是做的话就用比较熟的wpf,就去聊了下,对方给了1张比较复杂的Excel表格(其实对方的需求并不是很清楚,最后大概10来张EXcel表格),说是要做成软件呈现的形式,也没要求数据库,反正只要有功能,界面他们也没概念,给了个98年的老软件作为参考,最后EXcel表格弄懂结构后不复杂,计算都是加减乘除.我就答应了,这个软件算起来大概花了

项目小结一:在项目中使用 IScroll 所碰到的那些坑

最近做了个 WEB APP 项目,用到了大名鼎鼎的 IScroll,滚动的效果的确很赞,但是坑也是特别多,下面总结一下,希望自后来者有帮助. 该项目现已开源在 github 上,https://github.com/ansiboy/ChiTuStore 一. 使用 abstract 定位 顶栏和底栏最好不要使用 fixed 定位,应该使用 abstract 定位.我最初使用的是 fixed 定位,页面从右往左呈现的时候,经常会出现两个问题:1.顶栏时不时地会消失掉,2.新页面在移动的过程中,顶栏

【项目小结-2015年7月11号】--进入外包的工作的小结(一)

说到自己,带着一种很复杂的心情,开始了自己的外包工作生活.怎么讲,有时好恨自己,感觉这段时间对于我来讲,发生很多很多的事情,也渐渐失去我生命中最重要的人,我想挽回,但有时真的感到很无力,很无奈,总想着有些事情能够触手可及,但是我真的很笨,我像一个傻子,明知道你的城市在下雨,明知道你没有带伞,我却像个傻子依然拨通你的电话问你有没有带伞,我是不是很傻,自己总是走不出这道坎,自己总是不想失去,不想去认输,我该如何去做,你能告诉我吗? 我始终认为人和人在一起要相互坦然,相互信任,我也知道你是一个天使,我

项目小结二:APP 小红点中数字的处理

小红点,是 APP 中最常见的一个功能,我们先来看一下面的案例,下图中,待评价的商品有 2 个,点击“评价晒单”按钮进行评价后,那么待评价数量应该变成 1,那么这个功能是如何去实现的呢? 一般来说,实现的方法有三种: 一.刷新整个页面的数据 就是说,每显示一次,都重新从服务端把数据拉下来,这种方法虽然简单,但是,加大了服务端的负荷,并且由于要整页刷新,用户体验不好. 二.利用事件实现 比如说:增加一个名为 评价晒单 的事件,个人中心页面监听这个事件,而在用户进行评价晒单操作时,服务端返回待评价数