首先先要向一篇博文的作者致敬。两年前在想自己留学研究计划时,正好有幸读到Moli的博文《爱丽丝的发丝》。当时就觉得,实时的头发模拟可以做到这么逼真很不可思议。由着自己对物理模拟和图形学向往和那时的感动,就把自己的研究课题订为了头发模拟。正好也想做图形引擎(实际上称不上引擎,只是练习),又在学OpenGLES2,所以顺势把目标瞄准到了手机平台。后来就有接近一年断断续续写了个OpenGLES2的框架,支持自己Android和iOS移动平台上图形的研究。
Samsung GalaxyS3, 实时模拟4368根动态发丝
对于OpenGLES2框架的说明已经写在了前面的文章里,是个微型的主要使用C++编写的框架。接近开学时,框架已经8成完成了,就花了1个月用弹簧质点系统做了个头发模拟的程序,模拟都在CPU走,绘制使用GLES2。可以实时模拟大约100根头发。然后就把程序导入Android手机上拿给指导老师看,那时渲染还做得很差,老师说你可以试试把目标定为做到PC上模拟的质量,有些没有方向时实验室同学介绍给我一篇论文《Fast Simulation of Inextensible Hair and Fur》,后来按这这篇论文的思路改写了模拟的部分,大致性能提高了几十倍,基本上做到了手机上的实时模拟。
下面是相关的细节。
1. 头发实时模拟(含渲染)事件
这些大部分是显卡厂商的Demo,可以说是头发模拟游戏应用方面上的里程碑。这里顺便把模拟和渲染的方法也列举一下,模拟方法以弹簧系统为主流,Verlet-integration实现的类弹簧系统较为高效,另外PC上基本都用GPU来做模拟加速了。nVidia和ATI/AMD的Demo基本是开源的,可供参考的包括源码下载和TechnquePaper。
2004 ATI ruby hair
Simulation:Non
Rendering: KajiyaKay shading with highlight shift,Approximated depth-sorting
2004 nVidiaNalu hair
Simulation: spring system
Rendering:Marscher shading, OpacityShadowMap
2008 nVidiaRealTime hair
Simulation: spri