Flowmatical::Mirroonce New Ocean Test 镜花水月新版本测试
New ocean test by :Flowmatical Mirroonce
Flowmatical是一个完整的GPU电影特效制作流程,Mirroonce是中文镜花水月的中翻英(该名词自己想的,因为实在难以接受英语字典上对中文“镜花水月”一词的翻译-_++),同时Mirroonce也是Flowmatical流程中的粒子引擎。现在段是一个基于Houdini的GPU粒子系统。
PS:谷歌镜花水月的英文,他会告诉你:镜花水月 : flower in the mirro and the moon in the water -__- 啊呸.....water你个毛....
由于 Houdini 的 HDK 帮助部分十分不完善,开发中总有这样那样的细节问题让人摸不着头脑,而且我使用CUDA每次从节点cpy数据到GlobalMem经过HDK做数据交换的时候会存在不少的性能下降(可能我现在没有好方法),所以新设计的粒子系统我彻底将HDK一脚踢开,完全用自己的容器,架构,引擎等。不过现在由于个人能力有限,还没有把UI做出来,软件在VC中的编译运行就等于动力学的解算工作了。很2,改进的镜花水月只有我一个人能用了。不过效率倒是比过去提高了不少。
我通过Houdini的Geo/Bgeo格式,和镜花水月终端以及GPU做通讯,首先在Houdini中完成粒子发射器,和模型序列的制作,提取模型上需要发射粒子的模型边界,创建需要调整形态用的属性,把这些文件输出成geo文件序列。接着,在镜花水月的IO终端将读取geo文件,通过geo记录的信息,初始化发射器和粒子的速度,并将其送至GPU,在GTX 275上完成粒子形态的计算,然后再写成geo文件送回CPU做渲染工作。
现阶段已经把动力学计算实现的差不多了,离线模拟可以轻松上2000万粒子,而且很快的把Geo文件吐出来(说起来蛮丢人,人家sonypictures 06年轻松上1亿了),粒子系统的细节上会写新的文章详细讲解实现细节,这里主要更新下我现在在做的项目的最终效果。
接着,上图上图:
Flowmatical是一个完整的GPU电影特效制作流程,Mirroonce是中文镜花水月的中翻英(该名词自己想的,因为实在难以接受英语字典上对中文“镜花水月”一词的翻译-_++),同时Mirroonce也是Flowmatical流程中的粒子引擎。现在段是一个基于Houdini的GPU粒子系统。
PS:谷歌镜花水月的英文,他会告诉你:镜花水月 : flower in the mirro and the moon in the water -__- 啊呸.....water你个毛....
由于 Houdini 的 HDK 帮助部分十分不完善,开发中总有这样那样的细节问题让人摸不着头脑,而且我使用CUDA每次从节点cpy数据到GlobalMem经过HDK做数据交换的时候会存在不少的性能下降(可能我现在没有好方法),所以新设计的粒子系统我彻底将HDK一脚踢开,完全用自己的容器,架构,引擎等。不过现在由于个人能力有限,还没有把UI做出来,软件在VC中的编译运行就等于动力学的解算工作了。很2,改进的镜花水月只有我一个人能用了。不过效率倒是比过去提高了不少。
我通过Houdini的Geo/Bgeo格式,和镜花水月终端以及GPU做通讯,首先在Houdini中完成粒子发射器,和模型序列的制作,提取模型上需要发射粒子的模型边界,创建需要调整形态用的属性,把这些文件输出成geo文件序列。接着,在镜花水月的IO终端将读取geo文件,通过geo记录的信息,初始化发射器和粒子的速度,并将其送至GPU,在GTX 275上完成粒子形态的计算,然后再写成geo文件送回CPU做渲染工作。
现阶段已经把动力学计算实现的差不多了,离线模拟可以轻松上2000万粒子,而且很快的把Geo文件吐出来(说起来蛮丢人,人家sonypictures 06年轻松上1亿了),粒子系统的细节上会写新的文章详细讲解实现细节,这里主要更新下我现在在做的项目的最终效果。
接着,上图上图:
镜头中这层是带Surface的体积水花,通常这种水花只会出现在小规模的海浪或者特写的时候,才会有这样景别的“白头浪”。水花的粒子是在Ocean表面上Noise的峰值浪尖除发射出来的。我将浪尖的模型序列做成发射器,然后输出成geo文件序列,镜花水月的终端读取geo文件序列作为发射器,初始化粒子,并把数据通过CUDA送到GPU上做形态的计算。
由于surface是基于Cube Marching的算法的ISO,现在本人还没有办法实现,所以,这里surface的生成是在Houdini里面使用ParitclesFluidSurface生成的,不过粒子形态是货真价实的GPU产物。这张图片中总共计算了120万左右的粒子。由于不是基于物理模拟的,基于经验的算法计算这种东西几乎是实时的,主要的时间是花费在艺术感觉的把握上。
海浪一个局部的单帧测试,这里在最后的2k镜头中证实了GPU计算并行的必要,在表现这种大规模大量粒子计算的时候。现在这个图是半高清960的。很多细节还没有体现出来。加上Surface那层ISO精度限制,使得水花比例显小了一些。不过整体的动态还不错,包括海浪翻滚的感觉,所以如果要满足A级别的电影需求,让艺术家多对场景进行分层处理,还是可以很好的表现出2012和后天中洪水和海啸的效果的。
海洋的shader是我的痛心之处,因为一直使用的是Houdini自带的一套shader完成海水质感的表现,我只能用最保守的方法 -- 所有元素全部分层,包括高光,SSS,反射阻塞,所以这个4800* 2400的海洋渲染了整整一个礼拜,也没有得非常令人满意的效果。但下一阶段我会尝试把各个通道都搬到GPU渲染出来。因为通道如果正确,并且完整,能保证后期人员的控制自由,那么出很真实的OceanSurface并不是一件难事。
再更新一张完整的效果,这个还是正在合成中的镜头,可以发现中间有一条船被海浪打翻了,现在船体还没有完成渲染工作,估计完整的镜头要周末可以给大家放出动态的,这是镜花水月Remix以来参与的第一个项目,呵呵,在界面都没有裸奔代码的境况下,经过N个礼拜的熬夜加班,完成了镜头。十分激动,经过这次锻炼,我想以后会更多思考如何更好的去把握艺术控制吧,主要是后期,一个人没有人帮忙,经常只能从VC玩到Nuke,虽然觉得要是自己有20个程序员都不嫌多的。但真正要想让程序员的研究能转换成实际商业价值,还是感叹少不了艺术总监和强大的后期合成组的帮忙的啊。
关于这次项目,又对GPU的理解加深了不少,回头有机会把CUDA建立粒子无网格计算的心得发到OpenHero勇哥的论坛,和大家讨论,我现在还不太会调试自己的程序,所以性能只是比Houdini快20-60倍就满意了,但实际上对于Houdini连MPI都不支持的POP来说是远远不够的,下一阶段,我会用QT完成镜花水月界面的制作。估计第一个版本的UI会和Nuke 4,XX的时候非常相似,也是节点连接操作性质的。
Ocean有机会很想把Houdini Ocean Toolkit的东西搬到GPU上去,主要现在HOT使用的是FFTW,如果使用CUFFT的话相信会有很大的性能提升。最后感谢环球影视提供项目,感谢王琦大哥执行艺术指导,感谢Len3D和勇哥一直以来对自己又问必答,希望我接下来能做更好的流体引擎,不让他们失望。