UE5笔记【十四】漂流者游戏制作【一】地形材质准备

news2024/9/26 5:12:59

针对游戏的剧情设计:角色流落荒岛,寻找食物和水,等待救援。只有按时找到才能存活。否则游戏失败了。

新建一个第三人称游戏。可以将项目名称命名为《CastAway》

 启动Landmass插件

 然后启用Water插件。

然后删除场景中不需要的东西。保留荒岛可用的光线、渲染、人物、后处理体积等。

 然后将当前场景保存。

新建Maps文件夹

 然后将当前关卡,保存到maps中,然后命名为CastAway。为我们的主关卡。

我们希望每次打开项目时,CastAway关卡为默认打开的关卡,而不是每次都是第三人称视角。

【项目设置】【地图和模式】【默认地图】将【开始地图】和【默认地图】设置为刚才保存的CastAway关卡。 

 然后保存所有。

准备工作做完了。接下来转入雕刻构建场景和地图。




地形LandScape

首先进入到地形模式中。

我们要创建一张材质:当垂直面时,它是岩石,当水平面时,它可以覆盖植被,当在底层时,他可以是一些砂砾。百度一张海岸风景。

为了做到这点:我们创造一种景观材料。

我们在内容抽屉中,新建一个文件夹【Materials】,用来存储材质。然后进入其中,右键新建材质,命名为ML_Landscape。然后双击进入材质编辑。

 这个LandscapeLayerBlend可以让我们编辑不同的地貌图层,并且混合在一起。

我们将需要3种不同的材质:SandRockGrass

我们可以从Megascans(Quixel Bridge)Library中获取。当前看来在左侧:当前图层数为零。 我们需要添加四个图层。分别是:Sand,Rock, Grass, Automatically combine。

 设置好图层之后,我们需要将所有图层的所需纹理摆在材质编辑界面中。但是这样会使的整个界面非常混乱和复杂。最好的做法:我们把每一层分解成他们各自的材料函数【Material Function】。所以我们从内容抽屉中,新建【材质和纹理】【材质函数】,然后命名为MF_Grass。



我们需要从Bridge中,选择一种草地的材质。然后作为基础材质,配置出我们想要的自己的草地材质。

 从内容抽屉中,将草地的diffuse、Roughness、NormalMap。拖入到编辑区域中,待用。

然后我们需要一个关于材质的属性结点,用于连接这些编辑项或者配置项。

 再配置纹理前,需要牢记一点,我们的场景很大,这种情况下,在部署纹理时,很容易导致草地纹理不断重复平铺的现象。有一个技巧:

你可以根据距离的远近来控制重复的次数:我们可以通过最小化纹理来实现。

为了控制远近,我们需要一个坐标系,来计算距离的远近。

添加一个LandscapeLayerCoord节点。景观层坐标节点。 

将坐标接入到Multiply节点。输入multiply或者快捷键M加鼠标左键。

同时需要一个Scalar。常量值,constant或者数字1加左键。然后将其参数化。右键转换为参数。

这个属性参数用来:根据我们与纹理的接近程度来改变纹理的大小。参数命名为:GrassClose。

我们希望所有的UV值跟随距离一起变化。所以Mulitply节点接入所有的UVs中。

如果我们远离Grass时,我们希望UV值也跟着改变,如何操作?复制上面的节点。重新影响UV值。将景观坐标节点重用。然后将常量参数节点复制,重命名为GrassFar。然后连接新的UVs值。

 我们将GrassClose默认值设置为0.5。然后将GrassFar默认值设置为0.005。


然后我们需要一个线性插值的结点。通过距离来控制画面的显示。

线性插值节点,快捷键:L+左键。每一个属性(Diffuse、Roughness、NormalMap)特征都需要一个插值节点。 

这个插值是从大向小(从近向远)之间的插值。所以。需要近和远的值,分别接入到线性插值的A点和B点中。

Diffuse的值,选择RGB即可。

至于Roughness。 我们点击查看发现,只有R通道信息最全。

 至于NormalMap。我们选择RGB。

 接下来,我们需要DistanceBlend。关于距离的过渡

这个DistanceBlend,有两个参数:一个是BlendRange,一个是:StartOffset。

常见做法是:新建两个常量,然后将其转为参数。数字键1+鼠标左键。然后右键:转换成参数。

分别命名为:BlendRangeStartOffset。分别设置默认值为10000和-3000。

我们将上图NormalMap和Roughness换一下位置。然后将Roughness的线性插值模块连接至输出设置属性的Roughness和AmbientOcclusion环境遮挡。然后将Diffuse的线性插值模块和BaseColor连接到一起。NormalMap和NormalMap连接。保存、编译。完成对Grass的配置。

然后回到Content Drawer中,然后复制粘贴材质,分别命名为MF_Rock和MF_Sand。 

 然后分别将材质更换。先更换Sand。按住Ctrl,然后多选,选中两个Diffuse。

选中长距离和短距离下材质的Diffuse然后将纹理更换为Sand对应的Diffuse。

然后是Roughness。

最后是NormalMap

然后是Rock。

 

 这样我们把材料函数MF配置好,然后插入到LandScape我们每一个图层的混合槽中。

然后添加一个BreakMaterialAttributes,

 这个BreakMaterialAttribute将把所有的材质,分解成单独的属性。

 接下来我们处理一下这个自动图层AutoLayer,自动图层根据地形的坡度决定前进的角度,然后在草地和岩石上Paint。为了实现这一点,我们将使用一个名为WorldAlignedBlend的节点。需要两个输入:一个是Blend Sharpness,这个就是斜率。第二个是Blend Bias,偏差,决定这些材料如何混合在一起。两个标量。

按1,然后左键。然后右键将其转换为参数。命名为Slope Angle。然后第二个标量转换为参数,然后命名为Blend Bias。

我们需要命名BlendMaterialAttributes的节点,将两个不同的函数融合在一起。

  然后将融合函数与AutoLayer图层连接。

 接下来,我们在内容抽屉中,找到StarterContent下的Materials下面的M_Metal_Gold。双击打开。

 这个材质有两个模块,一个是宏观纹理变量。另一个是降低宏对比度 。

这两个模块:有助于打破颜色,使其看起来更加真实。

我们将其应用到我们的景观纹理上,它将景观纹理分解,使它们看起来更可信。

将两个框,Ctrl + C,然后,复制到我们的LandScape材质中。

然后引入一个Multiply节点。如上图,通过multiply将两部分融合起来。

 最后应用保存。关闭返回到主界面中。

这里就是我们要设置地形材质的地方。但是在此之前,我们要确保这是一个材质实例。 

 将材料实例命名为:MLI_LandScape。然后双击,将我们设置的参数全部启用。

 关闭返回到主页面。然后将材质实例拖动,放入主页面的地形材质中。 

切换到地形编辑模式下。

切换到【绘图】选项,点击加号 + 。我们需要制定这些层是权重混合层还是非权重混合层。

所有这些材质图层都是权重混合图层。 将参数保存在默认路径下。

 设置完成后,整个页面风格开始改变。

 然后开始雕刻。雕刻时,我们在【Paint绘制】界面选择要绘制的图层(沙子,岩石,草地等),然后在【雕刻】界面中,雕刻出我们需要的地形结构。绘制岩石,切换到绘制界面下,点击岩石图层。绘制时,可以调整绘制刷子的大小。

 我将陡峭的地方绘制为岩石。顶端带有一点植被。山体用沙子雕刻而起。

如果不喜欢自己的作品,可以删除LandScape下的所有文件,删除LandScape。

 然后进入地形编辑模式,选择重新建一个地形。

 然后重新设置选择地形材质,MLI_LandScape。这次我们选择Auto图层。选中Auto图层,设置为权重混合图层。进行绘制和雕刻。如果我们可以直接利用之前的权重。也可以。

此时应该是Grass,而不应该是石头。因为,我们在材质实例中,并没有指定岩石何时开始倾斜。即指定岩石倾斜的角度。我们双击打开材质实例的配置项。

 如果我们把起始倾斜角度设置为30度。那么场景中。立马变成草地。

而且草地上的草也是特别的大。我们修正一下草的大小。修改参数GrassFar参数。 

 此时的草地也会出现平铺的现象。

我们将参数设置如下:

 如果此时我们开始雕刻,会发现:还是无法出现岩石,我们需要将BlendBias设置为-10。 

 我们实现了这种陡峭位置岩石光秃,然后平整位置草地的雕刻图层Auto效果。




 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DoIP协议从入门到精通——诊断通信

DoIP(Diagnostic on IP)是基于IP(车载通信总线介质)为实现诊断诊断通信搭建通信桥梁的过程。从车辆连接-车辆声明-激活通信,都在前面几篇文章有过分享: 在专栏中可以找到文章! 如下述将DoIP协议内容映射到计算机OSI七层通信模型中,其作用就是将物理层接收到的收据,准…

(十) Docker微服务实战

Docker微服务实战一、IDEA新建一个普通微服务模块二、通过dockerfile发布微服务部署到docker容器2.1、打包模块2.2、编写 Dockerfile以及上传jar包2.3、构建镜像2.4、运行容器一、IDEA新建一个普通微服务模块 建Module docker_boot Pom文件 <?xml version"1.0" e…

2022年技术自媒体经验分享 —— 开始尝试认真做 B站 的一年后的复盘

文章目录前言一、回顾过去1、进驻B站2、进驻知识星球3、做全网最强的算法星球4、付费是道砍二、星球简介1、星主介绍2、星球简介三、星球内容1、九日集训2、付费专栏 - 免费阅读3、每月算法集训4、每日作业5、个人规划6、更优质的朋友圈7、向我提问 - 深思熟虑你的问题8、持续创…

微机原理真题错题整理2018,2019年

目录 2017年 选择 填空题 2018年 选择 填空题 编程题 2017年 选择 1:若一SRAM芯片的容量是10248位&#xff0c;除电源和接地外该芯片的其他引脚最少应为&#xff08;&#xff09; A:23 B:22 C:21 D:20 10242^1010根地址线 8位8根数据线 …

【SV】为什么需要异步复位?同步输入/异步输入、异步复位/同步复位(bad)、异步复位同步释放、同步系统/异步系统

【SV】为什么需要异步复位&#xff1f;同步输入/异步输入、异步复位/同步复位&#xff08;bad&#xff09;、同步系统/异步系统 1. 同步输入/异步输入&#xff08;synchronous and asynchronous inputs in sequential system&#xff09;为什么需要异步复位&#xff1f;1.1 异步…

k8s之基本环境准备

写在前面 本文看下学习k8s需要的基础环境&#xff0c;包括运行环境&#xff0c;docker等。 1&#xff1a;准备linux运行环境 环境&#xff1a;win10 虚拟化工具&#xff1a;VMware-workstation-full-15.1.0 linux&#xff1a;ubuntu-22.04.1-desktop-amd64.iso 。 安装完毕…

6)Django Cookies/Session,中间件,Nginx+uwsgi安装配置

目录 一 Django cookie 与 session Cookies Django 中 Cookie 的语法 Session(保存在服务端的键值对) 工作原理 实例 二 Django中间件 自定义中间件 自定义中间件类的方法 process_request 方法 process_response process_view process_exception 三 Django Nginxu…

【值得收藏】机器学习实战项目汇总(初级、中级、高级)

大家都知道&#xff0c;教科书上所学与实际操作还是有出入的&#xff0c;那关于机器学习有什么好的项目可以实操吗&#xff1f; 这次给大家分享一个涵盖面向初学者&#xff0c;中级专家和专家的23种机器学习项目创意&#xff0c;以获取有关该增长技术的真实经验。这些机器学习…

opencv-python常用函数解析及参数介绍(三)——图像滤波

图像滤波前言1.制作噪声生成椒盐噪声生成高斯噪声2.滤波均值滤波框滤波高斯滤波中值滤波总结前言 很多时候我们能拿到的图片并不是十分干净&#xff0c;有时会有一些噪声&#xff0c;这时我们就应该采用滤波的方式对他进行处理&#xff0c;本文将在一张干净的图片上生成噪声并…

OpenWrt19.07设置mac地址为芯片内置出厂地址

目录7628芯片的mac地址openwrt源码修改验证关联问题随机地址在何处生成mac地址生成时机最近发现所使用的openwrt19.07系统在htlk7628核心板上运行时&#xff0c;一旦恢复出厂设置或者重刷固件后对应的mac地址就会改变&#xff0c;猜测系统生成mac地址方式并非使用了芯片内部的m…

复习篇【类的构造方法与代码块的执行】

复习篇【类的构造方法与代码块的执行】&#x1f34e;一.构造方法&#x1f352;1.1 基本语法&#x1f352;1.2 this关键字&#x1f34e;二.代码块执行&#x1f352;2.1 什么是代码块&#x1f352;2.2 普通代码块&#x1f352;2.3 构造代码块&#x1f352;2.4 静态代码块&#x1…

VBScript (vbs) 脚本实例

欢迎小伙伴的点评✨✨ 文章目录前言一、vbs是什么&#xff1f;二、简单使用VBScript实例2.1、msgbox实例2.2、VBScript 的变量三、VBScript 输出文本及键盘按键到cmd3.1、cmd的FOR循环3.2、cmd的ping指令3.1、VBScript 批量输出到cmd命令代码实例四、总结前言 本文将会给大家带…

(二十九)Vue之回顾本地存储webStorage

文章目录webStorageLocalStoragesessionStorage改造TodoList案例为本地存储Vue学习目录 上一篇&#xff1a;&#xff08;二十八&#xff09;Vue之组件化编码流程 webStorage 使用HTML5可以在本地存储用户的浏览数据。 早些时候,本地存储使用的是 cookie。但是Web 存储需要更…

力扣2. 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

java实现随机获取封面图片

大家好&#xff0c;我是雄雄。 前言 最近阳的很多&#xff0c;大家都注意身体啊&#xff1b; 今天给大家分享一篇&#xff1a;java如何实现随机获取七牛云obs中的图片&#xff0c;主要用于给文章随机添加封面&#xff0c;因为固定一个封面的话&#xff0c;会显得很单一&#x…

企业注册信息如何识别真假?企业四要素API有什么好处?

企业注册信息越来越多&#xff0c;如何才能识别企业的真假&#xff0c;就需要有一套检验信息真伪的工具&#xff0c;这里我们分享的《企业四要素》就是用以检验企业真假的一种新型防伪应用供大家选择&#xff1a; 1、企业名称&#xff0c;2、法人名称&#xff0c;3、法人身份证…

第十三篇 1+X考证 Web前端测试题Laravel篇(新)

*Laravel中文网&#xff1a;Laravel 中文网 为 Web 工匠创造的 PHP 框架 单选题 1、Laravel中入口文件所在路径是&#xff08; B &#xff09; A、项目/app B、项目/public C、项目/routes D、项目/vendor [ 知识点&#xff1a;如图 ] 2、下面哪个是Laravel闪存数据的方法…

js实现九九乘法表(两种方法)

方法一&#xff1a; 观察规律&#xff1a; 第一个数每行都是自增1。 我们发下第二个数都是从1开始&#xff0c;依次递增1&#xff0c;永远不大于前面的数。 前面数字每自增一次&#xff0c;后面数字自增一轮。 我们可以用双重for循环&#xff0c;外层初始值设为i&#xff0…

高并发内存池项目(C++实战项目)

文章目录&#x1f384;项目介绍◎项目来源▶项目源码◎内存池相关知识1、池化技术2、内存池3、内存池主要解决的问题4、malloc&#x1f384;设计思路◎第一阶段–设计一个定长的内存池适应平台的指针方案◎第二阶段–高并发内存池整体框架设计1.线程缓存&#xff08;thread cac…

第十二届蓝桥杯嵌入式省赛试题以及题解

原题展示 通读本试题后&#xff0c;可以知本试题所涉及到的模块有LCD显示、LED指示、按键切换、串口收发、定时器的PWM输出五个部分&#xff0c;试题的总体变化不大。在试题要求的所有功能中&#xff0c;串口这部分是侧重点&#xff0c;它既要负责收发数据&#xff0c;又要对数…