第一个,好吧,除了最开始的模型的建模之外,其他的全部美术相关流程都是我一个做的,其中使用到了各种DCC软件,第一个自己做的特效,很开心~
国际惯例,先上最终效果:
![e534631abed07ea5dbc04560b2c5b445.gif](https://i-blog.csdnimg.cn/blog_migrate/d35e339f449a619cea2b2726d68a0076.gif)
拿到需求,先按分析美术想要的效果,然后拜托场编小哥哥帮忙建了个模型,当然,这个模型很正经,点都是合在一起的:
![d1ec0723e1ea81fadf0319ce2367703a.png](https://i-blog.csdnimg.cn/blog_migrate/f51183e3a6b6cd84038b6ea7feaeee50.jpeg)
然后我开始用Blender去分开成单个面:
![5ac4870ef2d16c468a93a7a14aa72003.png](https://i-blog.csdnimg.cn/blog_migrate/43d2c0854da01afdacf9c286ad247376.jpeg)
![781b95c247a5884b5a8b2850ea3ec8a0.png](https://i-blog.csdnimg.cn/blog_migrate/00cd9758b82bb00c05b036e138fc0456.jpeg)
![2275dee277b2b8e90fa7f23238721ab9.png](https://i-blog.csdnimg.cn/blog_migrate/16d273fc18014c4ac9ea706b5f724bd7.jpeg)
![50b545a6c5d6bd13ff9e8f473f3c20ef.png](https://i-blog.csdnimg.cn/blog_migrate/42dfa734ef6cda26685c172fd5a945c3.jpeg)
注意:因为Max的单位和houdini的单位不一样,所有要么在max里面缩小0.01,再导出,要么直接在导入houdini之后,用Transform去scale一个0.01。houdini的单位是米,max一般是厘米。这里我是在max里面去缩小了0.01之后导出模型的。
导入模型到houdini,在Houdini中添加动画:
![9943a23aad06f2b951bc5a1107e6a382.png](https://i-blog.csdnimg.cn/blog_migrate/a425e23e21b36e6a4c813e5e7128ae19.jpeg)
用attribwrangle节点,添加简单的Vex语句去做每个三角面的每个顶点的移动,对每个primitive去获取primpoints,遍历primpoints,去设置顶点的位置,顺便随机计算了个顶点色,用于后面材质的颜色变化:
![a1119e25652458d5cd680d0b7688651b.png](https://i-blog.csdnimg.cn/blog_migrate/caf757dd6a39adaa65f186ab66c6d81b.jpeg)
这里遇到一个问题,我本来是想直接用 setprimattrib(0, "P", i, Pos) 的做法去每个面片的Prim去位移的,但是,好像只有设置位置的attrib是无效的,换成cd的话,setprimattrib确实是能给每个Prim去设置颜色,如果有哪位大佬知道,请赐教哈~
在VEX里面添加一个参数,用于控制位移大小的,就是用这个参数去做Key帧,实现面片各种飞的效果:
![a3bef6d6a58222ea985f15b5d9af193a.png](https://i-blog.csdnimg.cn/blog_migrate/9229f901bbcc45e1ceee316d62b9bd10.jpeg)
得到一个动态效果:
![d7741eda90a90b3b5b9af215166d0b75.gif](https://i-blog.csdnimg.cn/blog_migrate/ae1c4ba4b10d33b60162557b8d213344.gif)
在最后一定要导出一个NULL节点,给VAT节点用的:
![389bb6aa962511f4d4bbf3f7859bfc3d.png](https://i-blog.csdnimg.cn/blog_migrate/05943a0db04303c6dbcbfdcab5953b15.png)
做好动态的效果后,添加VAT的节点:
![ffd8cec0e7c2cb1e9af36af5b9dc34f5.png](https://i-blog.csdnimg.cn/blog_migrate/70f7daa7bd41dadec5d2cb83536521f3.png)
把上面的NULL节点拷贝粘贴到SOP Path里,然后按一下Initialize for Engine,面板其他一般不需要改,默认的就可以了,然后也可以设置一下输出的路径,最后点击Render:
![0bf9f06e8a0076ccb6762cad8b0046cf.png](https://i-blog.csdnimg.cn/blog_migrate/e4ccabafd7bcce9ec91652613163f810.jpeg)
这里Render之后,会生成fbx和exr的贴图,其中fbx是添加了新的UV1,UV0还是模型之前的UV0,UV1是用于采样VAT的新的UV,所以在UE里面用的话,需要用houdini导出的模型和VAT:
![da7911b2aec0c29fbbdda5171ff57947.png](https://i-blog.csdnimg.cn/blog_migrate/f215bb31cad37c7ac956cdc252f1a174.jpeg)
VAT贴图的设置:
![e630d2dc0941ac9c4d8f8221fa3bac26.png](https://i-blog.csdnimg.cn/blog_migrate/34fa5f4e114a0cf6d1d5431238a5e5d4.jpeg)
![33c3262aa143bad251606c197e13dbae.png](https://i-blog.csdnimg.cn/blog_migrate/f5c5f1356e93de6e16003e295f7ba504.jpeg)
把Houdini里VAT的Shader Code拷贝出来贴到UE4的Material Function里:
![92f97dd955131448825a02d0f4f9af19.png](https://i-blog.csdnimg.cn/blog_migrate/188da7178fd292f5aec336c13c01e523.png)
![9144a2963030b2d784a4a30dc3b19f6b.png](https://i-blog.csdnimg.cn/blog_migrate/938fd8e06fced50456d3fb1b3d0c877c.jpeg)
直接新建一个Material Function,粘贴Houdini的Shader Code:
![3500df0006d51a3991aa0d56a63d56c1.png](https://i-blog.csdnimg.cn/blog_migrate/1df24adb265fc4ded6528ae54153bf4a.jpeg)
给fbx模型添加材质:
![2d1c2cab9fedcf81642504aaa76fe764.png](https://i-blog.csdnimg.cn/blog_migrate/0d16f8260e9f067cc451ae4f19a09f45.png)
![22f496231c89908ee6360a3692aade8d.png](https://i-blog.csdnimg.cn/blog_migrate/b56f8bd5c5fe8f8c88b5928f57eb5385.png)
![0bf1483d7cf7672ca2173530abf0e43f.png](https://i-blog.csdnimg.cn/blog_migrate/1d9fca7400155ba3450455fe7d9f6380.jpeg)
创建材质实例,要把Houdini的VAT面板中的几个数据同步到材质实例的参数里,按名字一一对应:
![0bc44d072662fe11c42cc872872a0104.png](https://i-blog.csdnimg.cn/blog_migrate/e4e6e66fe83914a83fad7e4fb908c2dc.jpeg)
![a9cc810753a53db6f2db5898e1c67c4d.png](https://i-blog.csdnimg.cn/blog_migrate/98ee84021da7a59d3c13bcf26d67ee8b.jpeg)
以上是基础的设置,到这里,就能直接在场景里面看到模型的动态效果:
![fd7ae317b284c877ffb80709320d2840.gif](https://i-blog.csdnimg.cn/blog_migrate/7ea22be4396bee7cc0670ad3fbe1834a.gif)
开始制作贴图:
一开始场编小哥哥在建模的时候,我就有交代要这样分这个UV:
![8b45e2d29a9f0e75eeb38c897185967a.png](https://i-blog.csdnimg.cn/blog_migrate/72b3f947bf6b8913eba234b798dd83a3.jpeg)
然后在PS里面一顿操作之后,得到一张这样的图(其实是按我想要实现的材质效果,各种图层渐变叠加得到一个适合自己用的图):
![a50ce1a0700568f984467fdeed96df1f.png](https://i-blog.csdnimg.cn/blog_migrate/f73a2a47601ec9305d3c0da108a219a6.jpeg)
![eb596110e89d3fdc42b5a524bbdd6556.png](https://i-blog.csdnimg.cn/blog_migrate/ae1860510f83fe31abd8c799627bf7bc.png)
得到初步效果:
![873f91713cf9b06808bd33763ddf7862.gif](https://i-blog.csdnimg.cn/blog_migrate/495bc3123a4f45ea2e16c98ba58aff41.gif)
添加全息投影类似的计算,用屏幕空间坐标去采样一张条纹图,再计算一个距离的衰减:
![6984dc338cda5a54b68581ea6420d628.gif](https://i-blog.csdnimg.cn/blog_migrate/6ce5fa8069499f44da2c64029c372d0c.gif)
因为还有很多动态参数要做调整,也需要配合其他整体效果,于是,需要把这个模型用到UE4的Particle System里面,刚好在这里我就玩了一下Particle System,还挺好玩,也挺好上手,好玩~
加入到Particle System,就需要这个VAT的帧数需要按播放的帧数来,不再是不断循环的,这里需要修改上面那个Material Function的计算:
![051167780b442c899500d6567dc1f69f.png](https://i-blog.csdnimg.cn/blog_migrate/136df31e84403707adfcf4e7e5c7ac82.jpeg)
刷新一下Particle System 右键-添加Dynamic项,就会自动关联到材质会用到的参数名字:
![630b720fc65ef56b58f654d2570ebd6e.png](https://i-blog.csdnimg.cn/blog_migrate/1bfbd7ac3dd55dc923b1b7244a1b5460.jpeg)
每次在材质里面修改添加,在面板里Refresh一下就能更新到材质的数据:
![5d402cea206e31cd572afbd9a43c70a3.png](https://i-blog.csdnimg.cn/blog_migrate/772329cde8cc66be6fe17024cc03c676.png)
然后设置帧数:
![7766a9e9b9c9651009f3a10384c2a097.png](https://i-blog.csdnimg.cn/blog_migrate/d52c9f5f7ab931c4a60773c27a12f2ed.jpeg)
再叠加一些其他的特效,最后得到最终效果:
![e534631abed07ea5dbc04560b2c5b445.gif](https://i-blog.csdnimg.cn/blog_migrate/d35e339f449a619cea2b2726d68a0076.gif)
总结:
各种软件工具各种用,很好玩~
不过有问题百思不得其解,就是一开始我的模型是有两套UV的,但是经过测试,无论是VAT导出的模型,还是普通的Houdini导出模型,都会导致UV1和UV0互换顺序,虽然VAT应该是会出错的,但是是直接把采样VAT的那套UV放置到原来的UV0,原来模型的UV0被放置到UV1了,只有模型只带UV0的情况下,VAT的导出模型UV顺序才能是正确的。如果哪位大佬知道为什么或者两套UV的模型怎么在Houdini里面加VAT又不会出错,希望能赐教呀~
所以后来我只能在max里面先去掉UV1:
![f7654254fe2ef3462c4da6ac5ce55cef.png](https://i-blog.csdnimg.cn/blog_migrate/d90af67fd6ef5894a6d61c9849811e2f.png)