虚幻4中的程序化生成【1】程序化生成河流。

来源:互联网 发布:美工常浏览的网站 编辑:程序博客网 时间:2024/06/06 20:38

给自己立了很多flag,由于时间原因很多系列都还在写,算是循序渐进的总结。在程序化生成系列里,将会有如下记述:

【1】程序化生成河流

主要内容有@1 shader的自动调整(如河流的深浅,河水的波涛程度)

                  @2 河流形状的调整,我们只需要编辑一条样条线,河流根据这条样条线自适应形状。

【2】程序化生成森林

主要内容有:@1用随机种子随机生成森林。减少美术工作量。

                      @2 程序化生成藤曼,减少美术制作藤曼的痛苦。

【3】程序化地形

主要内容有:主要是上面那中方法的高级应用。


现在先来看看程序化生成河流

这个主要包含两部分,第一部分为河流shader,第二部分为让河流模型匹配样条线。


shader我完全用的是虚幻的材质编辑器来制作,如果有必要,想制作caustic的话,虚幻也可以用自己的功能开启distancefield来完成。

水的材质的程序化主要体现在shader会根据水在场景中的深浅来自己调节深度,反射度,泡沫纹理的插值强度,和水边缘高亮强度。


虚幻材质编辑器里刚好提供了一个简便的方法,DistanceFeild。我用了两个distancefeid,和红,蓝,绿,黑三种颜色先制作了四个mask,然后用这个mask来制作水面不同深度的各个效果。

上图为我把红蓝两个mask拆开后的结果。


完成了Mask的制作之后剩下的就是调效果啦,不过这里主要把精力集中于程序化上,所以其他就不赘述了。

完成了shader部分的程序化工作之后,剩下的一步就是让河流平面模型匹配样条线。

首先我们需要建立一个脚本,然后在里面添一个样条线组件slinecomponent。再声明一个splinemeshcomponent。这里需要注意一点,splinemeshcomponent准确翻译应该是一个样条线段模型组件,而不是样条线模型组件。因为实际上splinemeshcomponent只会覆盖样条线的一个线段而已。

逻辑都比较简单,就一个for循环往样条线上加SplineMeshComponent然后对这个组件设置它的切线和位置。挺简单的,脚本就能完成都不需要动用c++。所以我这里就不帖代码了,直接截取了脚本的一部分。

原创粉丝点击