关于教程
最近在回味以前的老歌,听到古惑仔电影原声音乐里的一首“我话事”,觉得很带感:
然后就想着如果找一个人物舞蹈加点特效应该会很好玩,就像很早以前写过的液体跳舞小人一样:
点击图片阅读原文
于是就有了今天的内容,我的想法是先用火烧小人,然后用液体浇小人,最后小人长出毛来。
由于我最近不是在学习XP的EFX么,所以烟雾模拟以及液体模拟我都是用的XP。
没有XP的鹿友其实是可以用TFD以及RF来代替的,只是可能某些细节会不一样没,长毛的话就是用的C4D自带的毛发就好了。
好了,废话不多说,进入今天的正题吧!
教程效果图
教程步骤
01 骨骼动画优化部分
首先打开C4D,导入一个骨骼动画,这个骨骼动画我是在mixamo上下载的,文后我也会分享给大家,然后将帧速率改为25:
可以看到这个骨骼动画是由两部分组成的,我们先将动画本身处理一下,将这两部分分别烘焙为点级别动画:
烘焙完毕以后你会发现对象的所有信息属于不可编辑的状态:
没关系,在场次里面,把mixamo自带的两个场次删了就好了:
现在我打算让模型关节的部分作为火焰烟雾的发射源,表面的部分作为碰撞,但是可以看到现在模型的面数有1W多个:
碰撞的面数太多了,模拟火焰烟雾可能会比较卡,所以添加一个减面生成器,面数我这里减到了800左右:
然后将它们连接成一个对象,现在点击播放键你会发现减面的部分没有动画了:
没关系,给减面后的对象添加网格变形器,把原来的表面对象拖进去,高级里面外部选择为表面,然后点击初始化:
点击播放键,现在减面后的对象就继承原来的动画了,然后再次将继承了动画后的对象烘焙为点级别动画:
再给场景里面添加一个曲面背景吧,我直接用的GSG的插件,自己做也可以哈,费不了多少功夫:
02 烟雾流体初调试
给关节对象添加EFX的发射源标签,取消勾选solid让它基于对象的表面发射。
由于我们的对象是有动画的,所以我这里把速度传输提高到了100,这样动画的速度也会传递到流体上:
给碰撞对象添加EFX碰撞标签,这个不用多说哈:
新建EFX容器,点击播放键烟雾和火焰就正常模拟了,不过现在烟雾和火焰没有消散,这不是我想要的:
所以适当的调整烟雾、燃料以及热量的消散值,同时我这里稍微提高了一点涡度、湍流以及湍流半径:
目前感觉好像还行,就是流体的精度我觉得稍微低了点,我这里把体素尺寸改为2。
这时你会发现由于动画的速度比较快,好像流体有点赶不上运动的感觉:
我们可以提高这个运动间隙填充的数值,这样就会有一定的改善:
现在的烟雾是一开始就有的,我希望它刚开始的时候有一个过渡,然后后来逐渐消失变成液体。
所以我在发射源标签的热量以及然后数值上K了关键帧,让它们一开始是0,到了25帧到150帧的时候是100,然后150帧到175帧的时候逐渐变成0:
再次点击播放键检查一下,截图上可能看不太出来,在对象运动比较快的时候,火焰会出现闪烁伪阴影的现象:
03 液体模拟初调试
这个需要增加子帧步幅才行,但是增加子帧步幅播放起来势必会更慢,所以我们后面再处理,暂时关掉EFX。
来搞液体吧,新建反射器,这次我以表面作为对象进行发射,从多边形区域发射:
发射的模式为射击,从150帧开始发射,然后持续发射150帧,每帧2000个粒子。
勾选无交叉,半径给到1就好,然后速度改为0,粒子半径我设置为2:
这里我建议先设置一下渲染尺寸,固定一下视角,如果是在视角外的粒子我们可以用杀死场杀死,这样可以节约点资源:
新建重力场,参数默认即可:
给地面以及碰撞都添加XP的碰撞标签,然后地面的摩擦稍微提高一点。
其实按理来说应该角色动画的两个部分都添加碰撞标签的,不过我觉得这个影响不大:
模拟液体我这里还是用的xpFluidFLIP,因为我觉得和场景里的对象发生碰撞那些用它好一点。
适当的调整容器的尺寸,体素是粒子半径的3倍6,然后我这里稍微提高了一点黏度、涡度以及表面张力:
接下来给场景中添加一个杀死场,杀死视窗外的粒子:
后面我希望将粒子速度越快的地方网格越薄,速度越慢的地方越厚。
所以粒子显示里我改为通过速度映射颜色,颜色改为黑白,通过控制台可以看到速度最大的粒子是460多,所以我这里设置为500感觉应该差不多:
接下来给粒子添加网格,体素尺寸以及点半径大家看着调整就好:
再添加两个滤镜:
标签里激活顶点变换颜色,平滑稍微给一点数值,这样后面就可以用它来控制网格的厚薄了:
04 进一步优化烟雾流体
液体差不多就先这样吧,接下来回过头进一步优化烟雾流体吧,首先给流体的网格也添加EFX的碰撞标签,让流体也能和烟雾产生碰撞:
回到烟雾流体播放观察一下,可以在显示里切换通道查看,差不多在200帧的时候,就没有了,只剩下一点温度这个影响不大:
所以我在EFX的启用上K了一下关键帧,让它在201帧的时候关闭,这样可以节约一点资源又不会影响效果:
接下来给地面也添加EFX的碰撞标签,不过这样当然模拟起来会更慢:
回到EFX里,我们前面留了一个伪阴影的问题还需要解决,这个需要提高子帧步幅来处理,这里的CFL数值和最大最小子帧步幅可以配合使用。
CFL值越小模拟越精准但是模拟越慢,百分比代表着百分之多少用最小帧步幅的数值,剩下的用最大子帧步幅。
我这里把最大最小子帧步幅都改成了50,代表着都用50来计算,然后CFL值我直接拉到百分之百这样可以略微计算快一点:
差不多这样就可以缓存了,记得把EFX改为VDB,然后取消勾选压缩缓存文件:
缓存时间一个半小时,其实还是能接受的,体积也不算太大:
缓存完毕播放一下,你可能会发现刚开始的时候莫名其妙会有烟雾,但是我们缓存之前看是没有的:
这个我个人认为可能是显示上的一个bug,我们回到EFX的显示里把显示切换为烟雾,可以看到烟雾通道是没有数据的,所以这个不会影响我们的渲染:
05 进一步调整流体形态
接下来进一步调整网格吧,因为我要用另外一台电脑渲染,所以我这里先将它烘焙成了ABC文件:
给ABC文件添加置换变形器,着色器里添加顶点贴图,把网格的顶点标签拖进去:
再修改一下置换里的数值:
最后再添加一个平滑变形器,数值大家看着调整就好:
06 毛发模拟
接下来就是模拟毛发了,我这里是用的表面这个对象添加的毛发,引导线的长度可以短一点:
毛发的数量我这里弄的比较多,有50W根毛发:
毛发的材质里我是直接用的自带的渐变预设:
毛发的粗细适当调整一下:
长度这里我K了一下关键帧,让它从300帧到325帧的时候逐渐生长出来:
卷发里适当的调整一下:
然后集束也调整一下:
毛发的启用里K一下关键帧,让它在301帧才打开:
给ABC文件添加一个毛发碰撞标签,同样也K一下启用关键帧:
把毛发缓存一下,前面缓存很快,在毛发开始启用的时候会卡一会儿,等一下就好:
07 渲染部分
接下来就是渲染部分了,将渲染器切换为RS,打开GI,这个不用说哈:
新建环境光,体积的贡献值给到1,这个也不用多说哈:
新建RS体积对象,导入vdb,动画里将帧速率改为25点击计算,同样这里你会发现烟雾的方向是反的:
所以轴向里把Z轴改为-1就好了:
新建RS的体积材质给体积对象,烟雾就用密度通道,参数默认就好:
发光通道我这里用的是燃料通道,强度适当降低一点:
调整火焰的颜色我这里分享一个小技巧,我们可以将调色的模式改为开尔文,然后最右侧的颜色把开尔文值改到4000的样子:
然后通过调整亮度值来调整火焰的亮度,我这里给到了200,别忘了把差值改为平滑,这样就能利用C4D自带的渐变色做出好看的火焰了:
网格的材质我本来是直接打算用RS预设的水材质,然后突然觉得加点颜色也挺好玩,所以就在传输颜色里修改了一下:
至于毛发材质,RS本身对C4D自带的毛发材质支持是很好的,所以就用C4D的毛发材质就好,只不过你现在会觉得毛发过白了一点:
这个是RS对高光的计算方式和C4D默认的计算方式不同导致的,官方建议是将毛发的高光强度改到2就好了:
地面和小人就是普通的反射材质,这个不用多说哈:
视情况再补两盏灯吧,这两盏灯我没有开体积贡献值:
采样方面统一采样我设置的是128,其他本地采样都是512:
最后渲染我是用的苦七的2080ti渲染的,前面火焰烟雾以及液体渲染基本差不多每帧1分钟或者不到1分钟。
但是由于我毛发数量给的很多,所以毛发渲染非常慢,平均一帧10多分钟,总时长26个小时,显卡满满的香气啊:
后面苦七又说应该让摄像机有点抖动,没办法,不想再重新渲染了,我就AE胡乱的加了点抖动。感觉液体模拟可以再调整一下,不管了,毛发渲染时间确实太长了。导出成品看看效果吧: