嗷,在课上写博客好像有些羞耻。

但反正闲着也没事,今天我们就来复习一下场景通用材质的内容吧。

唔,其实这次的内容有些像是地编的基础。

很多方面提到了如何快速地生成一块场景,也有一些mesh和Terrian(不知道我打错了没)的对比。

太细节的我估计记不太起来,

果然这棵还是得多看几次。

总之,哈吉马路哟~

Material Blend

想要实现通用的地面材质,材质混合的运用是不可避免的,通过材质混合,我们就可以实现地面材质更自然的呈现了。

嘛,大概效果是要做到这样子的。

可以看到不同材质(应该说是贴图)之间,不是简单的叠加或覆盖,而是比较自然地混合了起来。像是草是从石头的间缝中钻出来的,石头高的部分能露在沙子外面。

这就引出MaterialBlend的两个方向了,一是叠加混合,一是权重混合。

上面这种就是权重混合的结果了。

至于叠加混合,课程一开始有演示过,我就只讲下思路好了,(主要是没保存之前的版本)

叠加混合的话,获取每个layer的值,然后lerp应该就好了,在layer多的情况下,就lerp再lerp,显得比较繁琐了。出来的效果也不算好,会出现一张贴图直接覆盖在另一张贴图的情况。当然,这不意味着这种方法没有用,在一些明确是覆盖关系的地方,像雪地之类的就可以。

在多种材质需要自然混合的时候就要用到权重混合了。

这一部分就可以轻松一点了,贴图片就完事了。

先来张最后的组合图,让我们知道大概的框架是什么。

唔很基础,主要这里用的是Customlighting,不太熟啊。

把节点上需要的连上去就好了。

那么就让我们看看它是怎么做到权重混合的呢?

先来个权重吧啊喂。

这里我们采样了一张BlendMask来做三个layers的控制,后面的操作其实是不难的,就是联系那看得可能有点烦,首先将blendmask的rgb与三个layer的height相加取最大的,减去我们设置的BlendContrast,再依次于每个原来的相加后的结果相减,减完每个权重先保证大于0,再组合成一个三维向量,与他们之和相减即可。

唔,看字不如看图。

那么得到权重以后,我们就可以放心的去得到每一个layer的信息再混合了。

下面是获取layer信息的样例。

HRA贴图就是每一个通道有不同的信息,R对应Height,B对应Roughness,B对应AO,这个下次就不讲了。

不过R经常在G通道上,似乎图片压缩时,对G通道的损失比较小。

至于下面比较特殊的是Height的获取,用来一个CheapContrast来提高对比度嘛,可能。

混合嘛,就很简单。每个layer乘以对应的权重,再相加即可。

总结我们这边使用了BlendMask来控制,本质上就是对一张贴图绘制,来实现权重对比,这需要我们在刷贴图时采用权重模式,保证三个通道相加等于1。当然用vertex color来控制也是可以的。

地形搭建

先放一下我们的效果图。

关于地形的创建,课程里比较了两个方法,一个是mesh,一个Terrain。

左边那个上了材质的是mesh部分,右边则是Terrain,通过import raw创建的,对比面片数,确实可以感受到内置的Terrain远远少于mesh差不多100k,而mesh则达到了6M左右。

不过用Terrain好像材质混合会有点麻烦,更具体的对比就去看看视频吧。

我们这里的地形所用的shader,就是上面的那个MaterialBlend。

水体渲染

地形模块结束后,就到我们熟悉的水体渲染环节了。

贴一张效果图,从区区一张图片中,我们就可以看到三个关于水的shader了。

分别为,river,foam以及相对静止的water。

其中water是之前CS18里改的,整体的连线就不贴了。

与之前不同的是,我们的反射从对反射贴图采样,改为了从发射探针中获得信息。

上面的连线没什么要注意的。

但反射探针这需要注意一下,box projection需要勾选一下,才会获得较为正确的反射效果,这个也可以由我们自己实现,不过要在下一节课了。

设置好以后,烘焙结束就能得到漂亮的反射效果了。

之后,浮沫这边应该也改了点。但好像也没改,放在这边和River的Foam做个对比好了。

River部分

River较于water来说,流动性的表现更为重要。

相较于原来,这里使用本身的uv来采样,water使用worldPosition的xz分量来采样。

两者的区别有点感觉,但不知道怎么说出来。

大体上确实没什么区别,主要表现在参数的差异上。

然后是Foam部分

这部分上半部分用Noise得出Foam的大概形状(应该?),下半部分获得了Foam的Range。之后,进去Height Lerp就结束了。Height Lerp这么牛啊,我还是要去看看原理了。

当当,应该就到最后一块了。

FoamShader,就作用在河流和湖交接的模型上。

这一块需要我们自己写了,虽然有些复杂,但比较短,硬记也是没问题的,虽说并没有那个必要。

这边其实也没什么,使用Panner让uv流动起来,采取不同的参数,实现层次化的效果。

后面就是放到HeightLerp中,我去搜了一圈,好像大家也都没怎么讲原理。

sad,那就看看就好了。

您必须 登录 才能发表评论