您的位置:首页 > 产品设计 > UI/UE

Unreal Engine 4 —— 禅意花园项目中的水池

2016-08-23 17:46 936 查看
这篇博客介绍了禅意花园项目中的水的效果实现方法。

禅意花园

禅意花园是Epic Games的官方项目,现在已经开放在Market Place中自由下载。这个项目中使用了特别的方法来实现水池,效果如下:



水面表现

整体的水池效果分成水面与池底两块,针对于水面来说使用了Cubemap + noise,原本不是十分特别的地方,但是针对于Cubemap反射这一块有个黑魔法,值得一看:



这个函数写的很复杂而且不好阅读,应该是美术写的。但是如果把它翻译成代码其实不难理解——它处理的是以场景设计师在关卡中放置的一个点为反射点,通过这个反射点、水面像素和相机位置的计算来获得一个反射向量。这个反射向量在对应的CubeMap中采样,从而获得水面的反射效果,效果如下:



目前这个材质的实现似乎还有点小问题,可以进行修复。这里不方便将修复后的材质放出,读者可以自己进行实现。

总体来讲这个想法很新颖,可以在仅仅使用Emissive Color与Opacity通道的情况下来实现很好的水面的效果,尤其在反射效果上的效果很不错。

因此,这个水面效果可以在移动平台上兼顾性能和效果。

水底

禅意花园中水池的水底效果的脑洞也开的很大。在正常情况下想要表现水底的效果通常是使用Refraction通道。但是Refraction通道在某些设备上表现的不太正常,性能也是一个必须考虑的问题。

因此水底的模型是让水底本身使用World Position Offset通道来对顶点进行位移操作,这种操作主动让池底的网格模型进行浮动,这样一来也就会比较好适配大部分的设备。

这种做法是很新颖的,另一方面效果也很不错。

后记

看到了Epic Games提出的一些解决问题的方法,感觉到提出这些方法的人似乎已经到了另一种境界。《孙子兵法》说“以正合,以奇胜。”大部分人似乎花了太多的功夫在“正”上,例如不停地去钻底层,硬碰硬的提高效率和表现。但是是否能够在“奇”这一块来解决实际的问题,这种“奇”的能力又该怎么去培养?是值得我们深思的……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息