Rendering-UE4-制作星球和外太空

目录

Planet Lanscape 星球

Cloud 云

Moon 月亮

Eclipse 月食

Star 星空

Galaxy 银河

Foliage && Grass 植被

VolumetricClouds && SkyLight RealTimeCapture


参考官方视频: From Ants To Outer Space | Inside Unreal

看国外的一些视频或者demo,经常感叹于它们的想象力和创造力,有别于国内大部分不管是美术还是程序,能感觉到他们真的有在把玩这些工具或者说是玩具,先不管性能好坏,效果真的有的还挺好的

比如有一次看到 UE 商城里面一个 雨丝的做法,看 Preview 视频效果类似这样(商业产品,就不贴图和说哪个资源了)

一看实现,发现居然是用 GrassType 来做的,每一个 grass instance 都是一个十字雨丝面片,不断往下滚,只要刷的够密,效果居然还不错,包括下面的水花也是一个个的 Grass Instance,不断的播放一张flipbook,而且还可以刷 landscape 权重来控制地面上哪块有雨丝,哪块没有,甚至还可以做遮挡判定,对于一些小场景来说,好像真的这么来做也不是不可以

诸如此类,不知道是不是自己看的太少,这次也是,看到官方的星球啊,太空啊,月亮啊,星星啊之类的,做法有很多很trick的地方,甚至大部分很多都不能直接用到实际项目里面去,但看看还是觉得挺好的,下面就是主要整理了一下官方视频里面一些制作星球和外太空用到的一些比较trick的方法。

Planet Lanscape 星球

Landscape 使用 world creator 创建了 Landscape用到的 heightmap,创建一个 平的小的 Landscape,这也是主要布景的地方,其他的地方都是假的

然后 一整个 planet,剩下的都是拿一些边缘能接起来的 mountain mesh 拼出来的

一堆平的大mesh 拼的球形远景,其实中间布景这块是和shpere有接缝的,为什么这块是平的,后面解释

能变球形,其实是在材质里做了 顶点偏移,做了球形变换

没改变之前,都是纯平的,顶点变形后覆盖住半个球

下图是实际位置和 wpo 之后的位置,所以有个问题是如果相机凑到地面的 mesh 上,但它的原点其实在相机之外,bound可能被裁剪掉,所以把bounds scale调大了,注意碰撞如果有的话,还在原地

只有这几块大mesh是形变的,其他重点展示的布景的 区块 foliage 还有小块mesh 都是 0,0点周围,而且是没有形变的,比如 foliage 什么的

之所以这么做,用形变而不是真是的一个巨大的 sphere,是因为这个planet其实并不大,大小设置成了1000km,另外又限于精度问题,为了做到效果,相机靠近地面,看起来地就是 平的 ,离远了到太空来看又是球形的,所以做了这个fake,相机在地面布景区域看,landscape 是平的,形变程度可以很小,离远了,再deform成一个球形

 

做了场景资源和 地形的颜色过渡,比如下面石头靠近地形的灰色渐变,这样可以方便的统一场景表现,不用每个材质模型单独调整

这是材质,采样 world position 的 z 值 判断离地高度(直接写死值),然后采样一个 color gradient,非常trick,更普遍一些,可以采样 rvt (如果地形使用了 RVT) 来做。

 

Cloud 云

外面这层云也是一个 大 mesh,和地形半径一样大的mesh

然后边缘做手动 fresnel,出现上图边缘的那层炫光

Moon 月亮

按现实距离来摆放,所以放置的单位都非常大,并不能用于实际项目,一般的gamePlay,如果没有开启rebase,肯定会有精度问题

另外,camera 移动到外太空,记得要把 fog 的density 调成0,不然都是雾

Moon 上的 光照都是材质里算的,本身是 unlit 的

传进来太阳角度,算一下是否有lighting

Eclipse 月食

太阳位置传进来检查是否遮挡

夜间提高亮度

下面部分是用 Camera Position 是用来检查相机是否在外太空

 

Star 星空

一般用一个 skydome就可以,这里由于要做外太空,放太远精度不够,所以用的pp来做的

用light direction 采样,假装太阳转的时候,星空也转...(其实可以不转..)采样四张 star 的 cubemap ,实际应用一张就够了

根据亮度,检查是否是白天,白天不要显示

因为是后期,所以没有深度值的才填充,在外太空的话也填充,而且外太空会提高对比度,不做外太空也不用管了

 

Galaxy 银河

超出 float 浮点精度能够表达的范围

官方除了外太空,还想做整个银河,但放弃了,出于gameplay 考虑,引擎有max world pos 限制,但要自定义修改,把所有精度都改成 double,可能会比较多

而且离得太远,也能看到 z fighting 的问题,会有flicker闪烁。

Foliage && Grass 植被

就是很常规的做法,但是也有一些 tricks

制作远景 foliage有个问题是,ViewDistance 设的太远太耗,太近推相机又能看到它们消失

所以它把每种 GrassType 都加两个一样的 mesh,一个的 CullDistance 在远处范围,走近没有,这个就可以把 density 设置的比较小,远景也会能看到,不会看到光秃秃的 landscape,一个在近处,density 就可以密一些,模型精度高一些,之所以不用lod,是因为 lod 远景要有foliage,且要看起来密,拿远处lod 就需要变成 merge到一块的一些 grass种类,效果再一些边缘斜坡一类的区域表现不一定太好,因此这里选用了这种,但并不是表示实际项目用这种就好

还有一个防止 突然消失的 trick,适合 grass 之类低矮的foliage

可以随着 camera distance,逐渐偏移 z offset,慢慢压到地底下,也不会有视觉上的 popping。

 

另外一个是 想让 草的根部 align to normal,但是又想让草垂直往上长,而不是垂直于附着平面,像这样

做法是首先mesh 是平的,然后刷顶点色,top->bottom,g通道从 1 到 0

然后material 里偏移,top往上偏50,让top顶点立起来,很trick

VolumetricClouds && SkyLight RealTimeCapture

这两部分在这个视频里讲的并不是重点,也没有很trick相关的东西,所以之后可能会在另外的地方再说明一下这两个东西。

 

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值