水是一种复杂的物质,具有反射和折射等特定特征。 在本章中,我们将研究如何从头开始创建一条动画且逼真的河流。
我们将学习如何使用 Glass BSDF 和 Transparency BSDF 来实现真实水所具有的反射和折射。 我们将学习如何创建和切换着色器,以及更改着色器的颜色以获得漂亮的水面。
然后,我们将使用噪波纹理向水面添加波浪效果。 最后,我们将学习如何通过将关键帧插入时间轴编辑器来为表面上的波浪设置动画。
在本章中,我们将讨论以下主题:
创造一条逼真的自然河流
动画水流
技术要求
本章需要能够运行 Blender 3.0 或更高版本的 Mac 或 PC。
创造一条逼真的自然河流在上一个场景中,我们创建了雪和岩石景观。 现在,让我们填充细节 - 首先在场景中添加一条河流。
让我们添加一个代表场景中水的平面:
在 3D 视口中,按 Shift + A 并创建一个平面对象。
按 S 缩放平面对象,使其适合景观尺寸。
向下移动平面对象,直到它与景观的底部曲线完美碰撞。 我们只需要在表面上显示一点点平面即可。 看一下图 7.1,它显示了放置我们创建的平面对象的位置:
图 7.1 – 将平面拟合到景观的底部曲线
现在我们已经将平面对象放置在景观的底部,我们需要创建一个水材质并将其分配给这个平面。
创建水材质现在我们有了飞机,让我们向它添加一种名为“水”的材质:
选择平面对象。
转到材料属性。
将名为“水”的材质添加到平面对象。
将Blender的底部菜单切换到Shader Editor,以便我们可以编辑材质。
以下是我们的 Blender 场景中显示的前述步骤:
图 7.2 – 添加水材质到河流平面
首先要做的是删除 Principled BSDF 节点; 我们不需要它来创建我们的水材料。
选择 Principled BSDF 节点,按 X,它将被删除。 我们将只剩下材质输出节点:
图 7.3 – 材质输出节点
为了创造水,我们需要混合两种效果:反射率和透明度。
让我们添加一个 Glass BSDF 节点。 在着色器编辑器中按 Shift + A 进行搜索。 该节点的工作原理类似于玻璃着色器。 它用于创建能够折射和反射以特定角度穿过的光的材料。
为了实现透明度,我们将搜索名为透明 BSDF 的节点。 透明 BSDF 用于在没有折射的情况下添加透明度,直接穿过表面,就好像那里没有几何体一样。
图 7.4 显示了 Glass BSDF 节点、透明 BSDF 节点和材质输出节点:
图 7.4 – 玻璃 BSDF 和透明 BSDF
在 Glass BSDF 中,我们有一个称为 IOR 的值,它代表折射率。 IOR 是光线从一种介质传递到另一种介质时弯曲程度的度量。 每种材料都有自己的 IOR(水、玻璃、塑料等)。
如果你用 Google 搜索水的 IOR,你会发现它等于 1.33:
图 7.5 – 显示水的 IOR 的搜索
让我们用水的 IOR 1.330 替换 IOR 默认值 1.450。
图 7.6 – Glass BSDF 节点
下一步是合并透明度和反射; 为此,我们搜索一个名为 Mix Shader 的节点。
图 7.7 – 混合着色器节点
混合着色器节点用于混合两个着色器。 您可以将第一个着色器连接到顶部插槽,将第二个着色器连接到底部插槽。
Fac 控制混合物的流动方式。 默认值 0.5 意味着混合均匀,即输出着色器将具有第一个着色器的 50% 和第二个着色器的 50%。 如果将其设置为 0.25,则意味着输出着色器将具有第一个着色器的 75%,而只有第二个着色器的 25%,依此类推。
让我们将 Glass BSDF 连接到 Mix Shader 的顶部,将透明 BSDF 连接到底部。 然后,我们将混合着色器的右侧插槽连接到材质输出。
将 Glass BSDF 右侧插槽连接到材质输出上的 Surface 插槽。
对于 Fac 数量,我们将选择 0.25,这意味着我们将使用 25% 的透明 BSDF 和 75% 的玻璃 BSDF。
图 7.8 – 使用混合着色器混合玻璃 BSDF 和透明 BSDF
接下来,我们需要调整水材质的颜色。 为此,我们需要执行以下操作:
添加 ColorRamp 节点。
将 ColorRamp 的右侧颜色插槽连接到玻璃 BSDF 和透明 BSDF。
图 7.9 – 添加 ColorRamp 节点并将其连接到 Glass BSDF 和透明 BSDF
在 ColorRamp 中,我们需要使用四个手柄,因此让我们通过单击加号添加另外两个手柄。
图 7.10 – 向 ColorRamp 节点添加两个附加手柄
确保四个手柄之间的距离相同。
下一步是给我们的水着色。 为此,我们将使用下图所示的水彩调色板,它根据水的深度为我们提供了各种海洋颜色。
图 7.11 – 用于创建河水的海洋蓝色调色板
这种海洋蓝色调色板由多种蓝调组成,其中包括海洋颜色,从深蓝色(海洋最深处的颜色)到浅灰蓝色(我们在海洋表面看到的颜色)。
我们需要将这个海蓝色调色板提供给 ColorRamp 节点以实现逼真的水着色器。
因此,让我们将带有颜色十六进制代码的四个蓝色阴影添加到 ColorRamp 节点中。
笔记
请记住,这种方法并不能真正代表现实生活中水的工作原理。 事实上,感知到的水的颜色是来自环境的折射光和反射光的复杂组合。 在这里,我们只是试图创建一个漂亮的水影,在我们的景观环境中看起来尽可能真实。
选择第一个手柄并单击底部颜色。
图 7.12 – 更改十六进制颜色代码
切换到十六进制并为四个手柄颜色分别输入以下十六进制代码:颜色 1:深蓝色 – #112945 颜色 2:耶鲁蓝 – #4C6381 颜色 3:绿松石蓝 – #5E6F82 颜色 4:浅蓝色 – #D6DEFF
图 7.13 – 添加四种颜色到 ColorRamp
现在,如果我们通过按 3D 视口上的 Z 跳转到渲染视图,我们将看到这些颜色应用于水面。
图 7.14 – 有河流的景观场景的渲染预览
然而,水面看起来100%平坦光滑,所以我们需要添加小波浪,使其看起来像真正的河水。
在水面上添加波浪要向水中添加波浪,我们需要使用“噪波纹理”节点:
在着色器编辑器中按 Shift + A 并搜索噪波纹理。
图 7.15 – 噪声纹理
要将噪波纹理连接到位移节点,让我们搜索位移节点。
图 7.16 – 位移节点
将噪声纹理的 Fac 插槽连接到位移的高度插槽。
图 7.17 – 将噪声纹理连接到位移槽
这是噪声纹理节点应用于水的效果; 它的表面奇怪地扭曲了。
图 7.18 – 有河流的景观场景的渲染预览
之所以看起来像这样,是因为“噪波纹理”上的“缩放”下的缩放比例较低,因此我们需要将“缩放”增加到200.000左右。 根据您自己的设置,它可能是不同的值,因此只需协调调整,直到获得好看的波浪效果。
图 7.19 – 增加噪声纹理的比例
但问题是,这种噪音对水面的影响太强了; 我们需要削弱它的强度。 从图中您可以看到,水波无法很好地反映水面上的景观。
图 7.20 – 有河流的景观场景的渲染预览
为了解决这个问题,我们将 Displacement 节点的 Scale 值减小到 0.400。
图 7.21 – 删除噪声纹理和材质输出之间的位移节点
让我们通过按 3D 视口上的 Z 跳转到渲染视图; 我们会看到那些美丽的波浪施加在水面上。
图 7.22 – 有河流的景观场景的渲染预览
现在,这就是我们的水材质的外观; 它的表面有微妙的波浪效果,看起来很棒。 但是,如果我们在制作动画时注意水面,波浪效果就会被固定,看起来不自然,所以我们需要对波浪进行动画处理。
动画水流我们将看到一个很酷的技巧,它可以让我们为水面设置动画,让波浪移动:
添加映射和纹理坐标节点。
将纹理坐标节点上的生成槽连接到映射节点左侧的向量。
将映射节点的右侧矢量槽连接到噪声纹理上的矢量。
图 7.23 – 将映射和纹理坐标节点添加到噪声纹理
现在,如果您更改“映射”节点上 Z 位置的值,您会注意到“噪波纹理”正在移动。
要在映射上设置 Z 位置值的动画,我们需要访问时间轴编辑器,因此将鼠标悬停在右下角窗口上,单击左键,然后向上拖动。
这将为您提供一个新的着色器编辑器复制窗口。 让我们将其切换到时间轴编辑器并跳到第一帧:
时间线由时钟图标标识; 它用于操作关键帧。 关键帧提供有关特定对象在特定时间的特定信息。 可以将其想象为一个人拿着 GPS 设备从一个地方走到另一个地方,从咖啡店到餐馆,然后到停车场。 每次,我们都可以找到他们的位置并记下该人在那里的时间。
在时间轴编辑器中,您可以将关键帧视为菱形。 我们没有看到它们,因为我们没有插入任何对象的任何详细信息。
让我们从“着色器编辑器”窗口切换到“时间轴”,如下图所示:
图 7.24 – 切换到时间线
现在,转到“着色器编辑器”窗口,找到“映射”节点,然后右键单击 Z 位置值:
图 7.25 – 突出显示映射节点的 Z 位置
通过右键单击 Z 位置值,您将可以访问此菜单:
图 7.26 – 插入 Mapping 节点 Z 位置的关键帧
单击“插入关键帧”,您将在时间轴编辑器的第一帧中插入一个新的关键帧。 这意味着,在动画的第一帧中,Mapping 节点的 Z 位置设置为 0 米。
立即,关键帧将以黄色菱形的形式显示在时间轴编辑器中。
图 7.27 – 在时间轴编辑器的第一帧中插入一个关键帧
如果您没有看到它,则意味着未选择映射节点。 确保左键单击着色器编辑器中的映射节点,以便能够在时间轴编辑器中看到关键帧菱形形状。
现在,让我们跳到第 100 帧。
图 7.28 – 在时间轴编辑器上跳转到第 100 帧
我们右键单击 Z 位置并选择“插入关键帧”,将“映射”的 Z 位置增加到 1 m。
现在,我们插入了两个关键帧:
第一个关键帧位于第 1 帧; 它将 Mapping 节点的 Z 值设置为 0 m
第二个关键帧位于第 100 帧; 它将 Mapping 节点的 Z 值设置为 1 m
插入两个关键帧后,时间轴编辑器将为关键帧 1 和 100 提供两个菱形形状,如下所示:
图 7.29 – 将第二个关键帧插入时间轴编辑器上的第 100 帧
一般来说,关键帧对实际时间有贡献。 在“输出属性”选项卡中,我们有一个名为“帧速率”的设置 - 它控制时间线帧数与实际时间的关系。
默认情况下,我们将帧速率设置为 24 fps,这意味着每秒有 24 帧。
图 7.30 – 检查输出属性下的帧速率
因此,在我们的示例中,我们以 4 秒的时间间隔(100 帧除以 24 fps)将水面波浪移动 1 米。
水动画会停在第 100 帧,但是如何让它循环且连续呢? 让我们弄清楚这一点。
创建连续循环的动画最后要做的就是使我们的波浪运动连续。 到目前为止,它停在第 100 帧,这意味着在第 100 帧,即播放动画后 4 秒,水会再次结冰。
要使该动画循环,请在时间轴编辑器上按 Shift + E,然后选择“制作循环”(F-修改器)。
图 7.31 – 在时间轴编辑器上按 Shift + E 使动画循环
基本上就是这样。 我们的动画现在是循环的。 我们可以按时间轴编辑器右上角的播放图标来播放动画。
概括在本章中,我们完成了创建逼真的水着色器并将其应用到河流的过程。 我们学习了如何混合玻璃 BSDF 和透明 BSDF 节点来创建漂亮的反射和折射表面。 然后,我们使用噪波纹理在水面上添加了微妙的波浪效果。 最后,我们学习了如何通过将关键帧插入时间轴编辑器来为表面上的波浪设置动画。
在下一章中,我们将通过使用两种纹理来改善景观的纹理:泥土和草。 我们将学习如何使用纹理涂料将漂亮的泥土和草刷到我们的景观上。