人气 1905

[图文教程] 游戏中的云海效果是怎样实现的? [复制链接]

Dopsscala 2017-12-7 17:05:14

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在一些游戏中看到了云海效果,对这些云海是如何做出来的比较好奇。大概是像这样:
(截图分别为崩坏3与sky光遇)
我在网上搜索到一些体积云相关的资料,大多是很写实的效果,而且相对比较平面,没有上图这样很卡通,很有体积感的感觉。后来我自己在引擎中使用粒子系统模拟了一下这样的效果,做出了一朵比较类似感觉的
但是由于粒子数量过多以及大量的透明混合,造成性能十分差,放了几朵之后在电脑上就感觉到很卡了,更不可能在移动平台上实现,而且粒子云很难控制它的形状。后来试用了truesky这款插件,效果也和想象中的有些差距。
于是就想请教一下,如开头两张图那样的云海有什么比较好的实现方式吗?是否可以通过3D模型+贴图+顶点扰动的shader来实现呢?如果是用建模方式的话,如何实现边缘透明度较高,比较像云的那种柔软的感觉呢?
回复

使用道具 举报

陶勾 2017-12-7 16:55:01
这个要分是真实感渲染还是非真实渲染了,差别挺大的。

真实感渲染的话主要方法基本就是地平线和Ace Combat这种,靠ray marching和基于物理的公式去做。这种就不细说了,资料非常多,但要做得好还是很花功夫的。这种方法被用于目前很多3A游戏的天空渲染,但因为主要是靠噪声生成,所以难以控制形状,渲染出来的效果比较局限(也因为碍于性能),有非真实感需求的不容易实现。

非真实感的话方法就各显神通了,我了解到的可以分为几种。

一种是纯mesh,类似switch上的马里奥赛车里的,还可以配合一些假的sss效果,但问题是很假,没有云那种软绵绵的感觉。

一种是粒子或者配合mesh插片,这种既可以保证形状又可以实现一定的风格化,应该算是最流行的做法了,比较容易玩出花来。比如动画短片Paths of Hate():
hJXNzwP0rrJlpW0s.jpg



游戏的话,例子也非常多,这里暂且只说一个例子,The Witness(),插片再配合假的sss:
FTU5BX5usoZxB7n7.jpg



当然这种做法的问题是overdraw,所以尽可能使用大面片,每个面片算光照的计算尽可能少。另一个问题就是排序了,可以在GPU上排序提高性能,但在旋转的时候不可避免还是会有少量穿帮,不过索性云这种渲染基本颜色都比较相近,不会发生太明显的突变。The Witness则是使用了A2C+AlphaBlend的方法来解决排序和减少overdraw,具体方法参考他们文章。这个游戏目前也上线iOS了,值得一看。
还有一种靠ray marching的方法,比较少见。目前看到实现比较好的有风格化效果的就是VR小电影Allumette了():
P3mK33zZ3SpztEsd.jpg



这种跟之前真实感渲染里的ray marching主要不同的是,提前在渲染软件(如Houdini)里做好特定形状的云并渲染,直接导出体素信息再到引擎里渲染,从而可以实现控制云的形状同时又不会非常费,但问题是光照不能动态变化(颜色什么的还可以靠trick去变一变),因为渲染都是提前烘焙好的。影视级别的云(包括很多卡通云)大多都是这么在渲染软件里做的。

我个人经验,主流游戏里不是第一种就是第二种,远边天空动态变化的云一般是用raymarching,需要在云里来回穿梭、对形状或者风格要求较高一般就是第二种插片,插片使用的贴图对最后渲染出来的效果有很大影响,所以容易实现一些特殊风格的效果,比如渲染油画风格():
aEE347TUQ9TcEzFj.jpg




坐等光遇上线(*๓´╰╯`๓)
回复 支持 反对

使用道具 举报

DavidDug 2017-12-7 17:01:23
远处用片儿。
中处用多个片儿。
近处用体积雾或粒子。





后补充:
突然想到一个槽点。

之前面试,一个制作人号称我们要把我们的游戏画面表现上做出一个门槛来,然后疯狂问我,作为一个客户端主程能够做些什么,我愣了一下,说是可以做xxx的优化,ooo的表现,心想,在现代3d引擎(unity,ue)的支持下,我一个主程还能做什么?上法线和不上能一样么?

后来我回去看了一下他们公司之前做的产品,于是就拒了那家公司的offer,你们还是拿聘我的钱,找一个好一点主美吧。
回复 支持 反对

使用道具 举报

陶勾 2017-12-7 17:07:39
Sky光遇这游戏并没有出,但光从视频看,它的边缘的柔化效果并不是很真实,很像多个(<=3)透明层叠加产生的,再考虑到是手机游戏,我觉得这样做的可能性比较大。



我其实很想知道true Sky具体是怎么实现的,它那个效果你有啥不满啊,除了跑不动之外。
回复 支持 反对

使用道具 举报

583261986 2017-12-7 17:15:00
你看到的一切都是颜色,所以说我们可以来思考一下,云都有哪些颜色。
原则上讲,云是一个区域,就是某个区域里都有云,然后这个区域里会有四种颜色:
1,没有云的地方,光是透过来的,也就是透明的颜色
2,云的受光面和背光面,需要那个点的法向量和位置,其实有了位置就可以计算出法向量,位置可以通过3D perlin noise来生成。
3,云的自阴影,这个可以用额外一个pass的shadow map来计算出来。
4,光透过云层经过散射之后出来的颜色,这个颜色的计算主要是要计算从入射光到相机的距离中都穿过了多少云层的体积,这个可以用个近似的算法来模拟。


以上四个颜色相加得出最终颜色就是你要的体积云的效果。


当然,也有比较取巧的方法,就是让美术做好放那,一般观察角度变化不大的话,看起来还是很逼真的,比如说楼主说的崩3里面的云,这种角度来观察可以直接让美术做好。
回复 支持 反对

使用道具 举报

liujiajia796 2017-12-7 17:21:24
用做植物的方法 Clouds
回复 支持 反对

使用道具 举报

Davidzen 2017-12-7 17:28:26
视点移动范围小的,应当可以用billboard取巧吧?
真正能随便环视、钻进去内视的云雾特效(我玩战雷),还是会比较耗处理力的(我显卡R9 390),不可能在手机上跑得动。而且依然不会太细腻。
回复 支持 反对

使用道具 举报

向日葵 2017-12-7 17:35:00
蹦三是N多billboard堆出来的,图二像是模型,记得unity有款插件是模型+贴图rgb通道控制细节。
体积雾目前用手游还是蛮费的.
LiLM3OY93so2H3Y2.jpg



MpVmuBe05XbM0aBI.jpg



o0hTn0153v7F00F5.jpg




WpQ7gzxg8EHECdzx.jpg



视频截图里是之前用mesh做的。这个方法相对省时省力用在手机也不会太费。
回复 支持 反对

使用道具 举报

九艺网 2017-12-7 17:41:49
没人说天刀的体积云吗?https://www.zhihu.com/question/24370165/answer/264520251
现在pc端很少会用面片特效去做了吧。siggraph我记得有不少,15年horizon的ta也分享过美术的制作流程。
ray marching本身蛮成熟的,这方面主要考虑是upsample的technique
回复 支持 反对

使用道具 举报

Thomassourl 2017-12-7 17:48:27
抓个帧就都知道了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-3-28 23:07 , Processed in 0.079779 second(s), 26 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.