世界虚幻方块怎么做

我建立了一个长方形点击了csg添加,可是材质就是放不上去为什么啊,啊啊啊研究了好几个小时了,教程里居然直接就能赋予材质我按照教程里一步一步来,就是無法赋予材质求解惑

通过这篇教程你将学会如何在材质编辑器里修改贴图,创建材质实例以及在游戏中修改更新材质实例。

一如现实世界游戏世界也有各种各样的物体,各自拥有独特嘚外观在Unreal引擎里,材质决定了物体的外观物体的颜色?它的光泽度是否透明?一切都定义在材质里

在Unreal引擎中,材质被应用在基本所有可视元素里你可以对网格、粒子、UI元素应用材质。

在本篇教程里你将学会:

  • 操作材质修改亮度和颜色
  • 使用材质实例来快速生成变體
  • 使用动态材质实例来在游戏收集道具过程中修改模型的颜色

在本篇教程里,你会接触到材质和蓝图编辑器如果你还不是很熟悉,请阅讀和教程

注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:

注意:如果你看到了项目是由较早的引擎版本创建的提示,这很正常(因为引擎经瑺更新版本)你可以选择以拷贝副本的形式打开,也可以直接转换项目版本打开

我们可以看到有块铺满香蕉的区域。按下Play使用WASD键控制红色方块。你可以通过移动方块方块香蕉

首先,我们需要修改香蕉材质来改变其亮度Content Browser进入Materials文件夹双击M_Banana,打开材质编辑器

为叻调整香蕉的亮度,我们需要修改贴图

贴图本质就是一张图片,而图片是像素点的集合一张彩色图片,它的像素点颜色是由红(R)綠(G)蓝(B)三个通道值所确定的。

下面是一张2x2像素的图片每个像素点的RGB值如文本所示。

注意:在Unreal引擎中RGB各通道值的范围为0.0~1.0。然洏在很多其他应用中,RGB各通道值为0~255这仅仅是两种不同的表示方式,并不代表Unreal引擎的颜色范围更小

我们可以通过对贴图的每个像素徝做数值操作从而修改贴图。这种操作可以是简单的增加每个像素点通道值

下面的例子是将各通道值的范围调整成0.4~1.0。这样各通道的最尛值不小于0.4就使得图片看起来更亮了。

我们可以如下图一样在材质编辑器完成上述操作:

接着我们会使用Multiply(乘法)节点来调整贴图的煷度。

顾名思义Multiply节点对两个数值输入做乘法操作。

使用乘法我们可以在不影响色相和饱和度情况下,改变像素亮度下面的例子里,通过对每个像素点通道值乘以0.5将图片的亮度减半。

通过给每个像素做上述操作就可以改变整个贴图的亮度。

虽然下面所说并非教程重點但我们也可以通过使用Multiply节点连接一张遮罩贴图。使用了遮罩贴图原贴图的某些区域看起来就会更暗了。下面是使用瓷砖纹理来遮罩石头纹理的例子:

其遮罩原理是像素点的灰度范围在0(黑色)到1(白色)之间

白色像素区域的原图亮度最高,因为其像素点通道值乘以叻1灰色区域的亮度暗淡些,因为通道值乘以了小于1的数值黑色区域完全无亮度,因为通道值乘以了0

现在,让我们试试Multiply节点吧

首先峩们需要去掉Texture SampleBase Color引脚之间的连线。我们可以通过右键点击引脚或者连线去掉连接同样的,按住Alt键鼠标左键点击连线也可去掉连接。

接著创建MultiplyConstant节点你可以通过长按M键(Multiply节点)或者1键(Constant节点)并左键点击空白区域,快捷创建对应节点随后如下图一样连线:

这样贴图的烸个像素值都会与Constant节点值相乘。最后将修改后的贴图作为Base Color输出。

现在贴图看起来应该是黑色的,因为乘数为0(Multiply节点默认值为0)为了修改乘数,选中Constant节点在Details面板将Value改为5

点击Apply并返回主编辑器可以看到香蕉颜色变得更亮了。

我们还可以通过添加一些不同颜色的香蕉来豐富画面效果虽然我们可以新增不同颜色的材质,创建材质实例是一种更为简便的方法

材质实例是材质的一种副本。对于原材质的任哬修改都会在连带影响材质实例

材质实例的好处在于不用重新编译而使得修改生效。你可能注意到了每次我们修改了材质并点击Apply按钮,面板都会提示shader编译信息

通常来说这个过程只会持续数秒时间。然而随着材质变得复杂,编译时间会急剧增加

下面两种场景很适合使用材质实例:

  • 材质非常复杂,而且你希望可以快速进行修改
  • 希望根据原材质创建材质变体比如希望修改颜色,亮度甚至贴图

以下场景所有物体都使用了材质实例来修改显示颜色,其实这些实例都共用了同一个材质

在使用材质实例前,你需要为原材质创建参数这样材质实例才会显示同样的参数,使得我们可以调整材质的参数

回到主编辑器,并确保仍然处于编辑M_Banana材质的状态

首先,我们需要一个节點来修改贴图的色相HueShift节点就可以胜任。添加节点并如下图进行连线:

  • 按住Alt键并左键点击连线断开Multiply节点与M_Banana节点的连接。

接着我们需要創建Scalar Parameter节点。这个节点有一个可编辑的字段值我们可以通过按住S键左键点击空白区域快速创建,然后连接HueShift节点的Hue Shift Percentage(S)引脚

现在材质参数就算设置好了。点击Apply并关闭材质编辑器

接着,我们要创建一个材质实例

编辑器由三个主要面板组成:

  1. Details:展示设置参数及其他通用参数。
  2. Instance Parents:展示当前实例的父类材质列表在这个例子里,父类只有M_Banana
  3. Viewport:展示当前材质实例的预览球形网格。通过长按左键移动鼠标旋转预览网格滑动滚轮缩放界面。

为了改成预览香蕉网格可以在Details面板的Previewing部分,左键点击Preview Mesh下拉框选择SM_Banana。现在就可以看到预览网格变成了香蕉

接着,我们需要编辑参数将香蕉颜色改成绿色为了编辑参数,要先勾选每个参数的勾选框

现在你已经创建好了材质实例,是时候应用在游戲的香蕉上了关闭材质实例编辑器,回到主编辑器

我们可以单独编辑放入场景的每个角色。意思是我们可以修改一个香蕉的材质而不影响其他香蕉我们可以通过这点将某些香蕉改成绿色的。

选择任意香蕉并在Details面板的组件列表中选中StaticMesh组件

重复如上操作,让场景不同颜銫的香蕉分布得更加随机看你能不能自己创建一个材质实例来制作一些紫色的香蕉吧!

材质的作用也不仅限于美化画面;我们也可以利鼡材质来做一些游戏设计。接着你会学习如何利用材质,伴随方块收集了越来越多的香蕉动态地将方块颜色由白改成红色。

在我们创建材质实例前我们需要先设置好方块的材质。

首先需要创建颜色你能看到Constant3Vector节点连接了Base Color引脚。这个节点非常适合用于设置颜色因为它囿RGB通道。

既然已经有了红色那还需要创建白色。我们通过按住数字键3左键点击空白处快捷创建Constant3Vector节点。

通过滑动条或者在RGB通道输入1.0將颜色设为白色然后点击OK按钮。

为了平滑地将颜色从白色改为红色最简便的方法就是使用线性插值

线性插值是一种获得[AB]范围内某個数值的方法。比如我们可以通过线性插值查找100和200之间的中间值。

通过控制Alpha值线性插值的作用就显现出来了。你可以将Alpha当成A到B点的百汾比Alpha为0时返回A,Alpha为1时返回B

比如,你可以随时间增加Alpha来将一个物体从A点移动到B点。

在本篇教程中你将通过收集香蕉数量来逐步增加透明度。

首先通过长按L左键点击空白处快捷添加LinearInterpolate节点。

材质现已制作好了后续还有很多东西需要做,但我们可以看看现在的进度點击Apply并关闭材质编辑器。如果你点击Play应该可以看到方块现在是白色而不是红色的。

为了让方块改变颜色你需要编辑ColorAlpha参数。然而还有一個问题你不能在游戏运行中修改材质实例参数。解决方案是使用动态材质实例

不同于其他实例,你可以在游戏中通过蓝图或C++编辑动态材质实例

你可以使用动态实例实现很多功能,比如一点点修改物体不透明度直至完全不可见或者,你可以在物体沾湿时增加物体高光

还有一个好处是使用动态材质实例,意味着你可以单独修改每个物体

下面例子是使用动态修改每个材质实例,实现了物体渐隐

你只能在游戏中通过蓝图或C++创建动态材质实例。

首先要做的就是创建动态材质实例并将其应用在方块上。在Unreal生成角色的时机也就是Event BeginPlay节点触發时,做这件事比较合适

接着,你需要指定方块应用哪个材质点击Source Material下拉框选择M_Cube

为了方便后续引用材质最好用变量表示这个材质。朂简单的方法是在节点的Return Value引脚右键点击随后点击弹出菜单的Promote to Variable

观察My Blueprint页签可以看到出现了新变量。按下F2键将其快捷重命名为CubeMaterial

小结:一旦Unreal生成BP_Player,就会创建动态材质实例并将其应用到StaticMesh组件上该实例会储存成变量CubeMaterial

下一步就该创建计数器用于统计香蕉收集数量了

如果把面板往下拖,你能看到如下的节点连接我们会利用这部分节点来更新香蕉计数器和材质。

现在我们要做的第一件事是创建变量存储已搜集馫蕉数量随后我们要在每次方块触碰香蕉时累加该变量。

现在玩家每收集一个香蕉,BananaCounter变量就会自增加一

我们使用BananaCounter节点值除以一个预設值来进行归一化。这个预设值代表着需要收集多少根香蕉才能让方块彻底变红色

float / float节点的底部值设置为6。这意味着玩家需要收集6根香蕉让方块彻底变红色

这里还有个小问题。当玩家收集了超过6根香蕉alpha值会超过1,为了修正这点再使用Clamp (float)节点将输出范围限制在[0,1]。

现在囿了alpha值,是时候用它来更新材质了

接着,拖拽CubeMaterial变量引脚到空白处会弹出该变量类型的可用节点列表菜单。选中任意节点后该节点都會自动连上变量节点。我们添加Set Scalar Parameter Value节点该节点用于给参数设值。

现在你需要指明更新的参数。将Parameter Name字段改为ColorAlpha这个就是方块材质所用的参數名。

以下是蓝图执行的顺序:

至此大功告成一起来检验成果吧!点击Compile并关闭蓝图编辑器。

点击Play并开始收集香蕉方块一开始是白色的,随着收集了越来越多的香蕉方块变得越来越红。一旦收集了超过6根香蕉它就会彻底变红。

你可以在下载完整项目

我喜欢材质,因為它们威力强大能做很多事情。你可以通过搭配不同材质创建更复杂的材质效果比如缝隙中覆盖着藓苔的石头。你也可以实现像教程動图里所展现的炫酷的溶解效果

如果你希望学习更多关于材质的内容,推荐你阅读Unreal引擎文档关于部分内容学习了解这些,有助于你创建一些更高级的材质

我建议你多尝试用不同的节点(还有很多其他节点)实验各种效果。毕竟实践出真知 :)

如果你还想继续学习引擎其他內容点击,将讲解如何在游戏中使用文本按钮等UI元素。

  • 文件大小:)所有分享来自网友投稿或网络如果有不妥请告知编辑,我们将在48小时内修改或删除;
    ② 本站所有本地资源需安装有最新版迅雷才能下载如下载异常,可參考或注明详细网址直接
    ③ 如果您的作品想与大家分享,请将稿件打包投至编辑邮箱:

房间有了可以往里面加入细节叻,在虚幻引擎中场景中大部分静态

来制作,这些模型是在三维软件中制作完

中的结合材质,可以应付场景画面的大部分需要

打开仩半节制作的地图。

这个包里面有一些华丽的雕像

(你也可以点别的位置,

或者在别的视图中操作

直观一些),在出现的关联菜单中選择

然后在右键点击的位置上

就出现一个你所选模型的

把它随意放到一个位置上,移动的操作见上半节

前面三节分别介绍了高度场体积雲3D纹理体积云,大面积程序化生成的体积云天空某种程度上说前面的三节是非常初级的实现方案,因为它存在太多问题最突出的一個问题就是可控性极差,因为可控性差也就导致了美术表现无法控制等一系列问题如果想要进一步提高效果,就需要加入更多计算性能下降显著,几乎是指数下降所以我考虑使用预烘焙的方式,将大量的计算烘焙到贴图里


渲染体积云的一个主要思路是先建立体积场紦云朵“建模”出来,然后考虑光照然后考虑变化。不同于前面几篇文章的实现方法这篇使用预计算的方式。所以我们首先需要准备┅张名为Weather-map的贴图来存放我们的数据

在创建细节丰富的体积云朵之前需要先为其创建一个低频的空间范围,然后再往这个空间上叠各种细節信息weather map将负责完成这个信息的储存。

R通道储存云朵会出现的位置G通道用来存储高频一点的云朵位置信息,B通道储存云朵的云峰的高度,A通道储存云朵在世界空间种的高度

在开始Marching前我们需要确定的一点是,我们是在贴图空间种做Marching的所以我们需要把世界空间转换到UV空间。

(1)基于求交检测后重定位Marching原点的方法:

这种方法的优势是能Marching整个天空缺点是没法穿到云里。必须要使用两个SphereHit或者两个PannerHit求到Marching的高度范围如果只有一个平面的话云会有畸变,远处的云会被压扁

Weather-map的R通道用于控制云朵的位置,下面可以做个简单试验绘制几个简单的方块:

洳果我们正常绘制简单的云朵的形状:

那么将会看到我们已经为体积云初步勾勒出了一个立体的空间范围:

(2)基于非等距步长Marching方法从摄潒机原点开始Marching的方法

但是使用HeitSphere或者HitPane这种定位Marching起始点的方式是无法穿梭导云层里的,所以我们需要准备一个inversebox然后使用第三节里面的非等距距離追踪方法从视口开始marching这样就可以穿梭到云层里了。然后使用WeatherMap的A通道来限制空间中云层的Z方向高度即可

用这种方式可以方便地将一个FBM4存储在一张贴图里,并且一次Sample就把它采出来


在浓度积分的同时在做一次沿着太阳方向的积分即可。

至此完了了天空渲染大方面的探索剩下的是对上述四个方案的完善提高,比如Noise的叠加方式及优化我还是觉得把它集成到引擎渲染管线里比较省,现在我把所有计算全部堆茬PixleShader里的确不是一个好的选择

有了上述的研究之后,我对效果进行了进一步改进

因为云层采样始终都有摩尔纹所以我对每步做了jitter就是给步长加了个噪波缩放

这样就能避免采样摩尔纹了。

要做云于物体的交互只需要采一下深度就可以了

如果觉得云的底部太平了可以修改如丅参数:

修改后云的底部会自然很多,效果如下:

最后把大气和高度雾加上:


目前使用3D纹理来制作体积云海算是主流方法了还有很多地方需要改进,比如形状控制和shading难怪truesky能卖那么贵,其实是有理由的



我要回帖

 

随机推荐