什么是视差映射?如何在UE5中创建视差映射!能有不错的效果(上部)...
映射UEGame艺视界原创 15692 0
实名

通过了实名认证的内容创造者

发布于 2022-3-23 16:57:58

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 Game艺视界 于 2022-3-24 18:36 编辑

089d5ad6f1cf2fc9b9d2f82e4055c717.png
本期内容
概念:视差映射
视差映射是一种类似于法线映射的技术,但基于不同的原理。就像普通贴图一样,它是一种技术,可以显着增强纹理表面的细节并赋予其深度感。虽然也是一种错觉,但视差映射在传达深度感方面要好得多,并且与法线映射一起提供了令人难以置信的逼真结果。因为该技术是法线映射的逻辑后续。请注意,强烈建议在学习视差映射之前了解法线映射,特别是切空间。
(后面我们单独出一篇文章聊一下这个视差、法线、置换之间效果)

继续我们今天内容将讨论里面映射,里面映射是一种让简单的形状看起来具有里面细节的方法,即由简单的平面多边形组成的建筑物具有复杂的里面,你在窗户中看到的里面空间实际上并不存在它们只是立方体中的细节通过使用视差效果


我们需要为今天和未来的视频,创建的立方体贴图因为这是一个复杂的效果,我们将把它分解为几个步骤,所以我们将结合立方体表面上的 uv 坐标以及相机矢量,这里我们有我们的立方体贴图,我们从纹理坐标开始我们需要稍微调整一下我们的 uvs,以便我们可以在这里将它们与我们的相机矢量结合起来

(1)所以首先我们要添加一个 frac 节点,这将防止我们的纹理坐标低于零或高于1,高于1它将返回到零,如果低于0它将返回到1。所以 frac 节点只返回数字的小数部分。
(2)现在我们需要扩展我们的uvs我们正在通过乘以2并减去1,所以我们要添加一个乘法和一个减法节点,然后我们要在这里添加常量,首先我们要乘以(2,-2)我们将减去(1,-1)这将做什么,将用于垂直翻转我们的uv坐标
(3)最后我们将使用附加节点,因为我们需要将通常是float 2数据类型的 uv 坐标转换为float 3以便我们可以将它们与我们的相机向量结合起来,这也是一个浮点数,所以我将在此处附加一个负值,以便我们的 uv 坐标的 z 分量将被反转所以让我们看看结果

3df63be4f327335b6583755afeec1cc1.png

我们乘以 2并减去 1 的原因是我们可以将 uvs 的中心放在我们的 uv 空间的中间,通常默认情况下,uv 中心在边缘但我们相乘减二然后减一这样我们就可以将我们的uvs 居中。这将更容易与我们的相机矢量相结合这也是居中的


因为我们的 uv 坐标在切线空间中或者它们相对于模型的表面,我们也需要将我们的相机向量转换到切线空间,所以我们要在这里添加一个变换向量节点,我们的变换向量当前是默认从切线空间更改为世界空间,我们需要翻转它因为我们的相机矢量从世界空间开始,所以我们要将源设置为世界空间,将测试目标设置为 tangent space 现在让我们看看如果我们将这个相机矢量连接到我们的立方体贴图

我将使用这个相机矢量连接到我们的立方体贴图,我将使用相机矢量作为我们立方体贴图的 uvs,我们将把它插入我们的基色在这里,您可以看到当我移动立方体时这是我们里面效果
我们看到里面有一个5但是它是镜像的所以我们要修复它

通过将我们的切线空间相机向量乘以 -1 的值来非常简单地修复它,还有一个它要做的是翻转我的相机矢量的水平轴

我们要做的下一件事,我们将使用相机矢量和我们的纹理坐标来创建一些视差运动这将模拟立方体里面的外观,所以我们需要做的第一件事是找到我们的相机矢量的倒数,我们将使用一个除节点来做到这一点倒数是1 除以输入值,所以我只是要设置我的除法节点输入1,然后我将取结果的绝对值,将结果更改为始终为正之前所学到的那样。所以如果这个向量的任何部分是负的,它将把它切换到始终为正的绝对值,那么我也将采用这个倒数,我将带入我的 uv 坐标结果,我是将我们的倒数乘以我们的uv 坐标在这里,然后是这两个值的结果我要重新计算我要从我得到的绝对值结果中减去这个乘法结果

接下来我需要做的是找出三个组件中最小的哪一个,因为我的相机矢量是浮点数3,所以我的结果也是浮点数3,我需要弄清楚这三个组件中的哪一个是最小的,所以我要添加一个拆分组件节点,以便我可以将这个 vect3 分成它的 xy 和 z 组件是 rg 和 b,然后我要添加最小节点,我要比较这个这会告诉我红色和绿色通道中哪个更小,然后我将获取结果并添加另一个最小节点,这将告诉我哪个和蓝色通道是最小的,所以现在用这个简单的小操作,我知道这三个组件中的哪一个是最小的,我要取它的结果让我在这里重新排列一下图表,因为它开始变得有点大,所以我要取它的结果我要乘以它由我原来调整的相机矢量

有我的相机矢量调整的结果我将在这里使用这个添加节点,我将把所有这些的结果添加到我的 uv 坐标中

现在我们的立方体的里面非常酷,当我移动它时,它看起来像是在看盒子的里面,但这只是基于我生成的坐标的错觉,查找这个立方体贴图现在有一个问题你可能已经注意到了立方体的侧面,所以我的立方体没有正确旋转它,基本上旋转了90度并且它在它的一侧,这是一个相当容易解决的问题我只需要重新排列我的着色器的组件

我要添加另一个拆分组件节点
然后我将添加一个make float 3节点,实际上是我需要做的是重新排列这些组件,所以我要把我的红色通道连接到 y,我要把我的绿色通道连接到z我要把我的蓝色通道连接到 x,所以结果是zxy swizzle和所做的基本上是将我的立方体的里面旋转90度


如果我现在将它连接到我的立方体贴图中你可以看到我的整个背部,我的立方体和侧面我有一个漂亮的天花板和一个漂亮的地板

好了,这就是完整的着色器,或者说是使用立方体和一些 uv 坐标创建视差的效果,这些 uv 坐标已经用视图矢量修改,给人一种我们现在有一个里面的错觉,我们将为此添加一些额外的效果下面我将向你展示如何制作


今天我将向您展示如何创建和使用噪声Hash让我们开始,在今天的视频中做两件事我将向您展示如何创建噪声Hash,然后我们将使用它来改进我们一直在研究的里面贴图着色器。在处理噪声之前我要告诉你为什么我们需要它,噪音和着色器有很多用途,但今天我们将使用它来随机我们虚拟室内的房间,现在我们的着色器只有一个房间,所以我们需要添加一个参数来控制我们想要多少个房间,这真的很容易我所要做的就是添加一个参数我只需按住 2 键并单击鼠标左键。然后我可以使用这个参数乘以我传入的纹理,然后我可以输入我想要的单词房间的数量垂直和水平,假设我想要我的建筑物中的四乘四房间的网格我可以输入四和四乘以我的纹理坐标和然后把这个值传进去

所以我可以在这里使用这个值来控制我们要添加的房间数量,如果我将 8 乘以 8 相加,你会看到现在我有一座相当大的建筑,里面有很多房间,但是你可以看到这就是你开始看到我们现在需要噪音散列的原因,我在这栋楼里的每个房间看起来都完全一样,它们都使用后墙的一个值,左墙的四个值 以及右墙的三个值,所以所有这些房间与其他所有房间完全相同

因此如果我可以随机选择使用一二三或四作为后墙并随机选择其他墙壁,我的建筑物看起来会更加逼真,这就是我们今天要做的事情我需要创建一个生成随机数的方法,这样我就可以把每个房间的每一面墙上显示的是什么

现在我们在这里获取像我们的 uv 坐标这样的传入数据,我们对其进行加扰,以便它是随机的,所以它是尽可能随机的,我们必须以一种方式进行加扰不会创建重复模式,所以让我们继续开始吧,我要在这里打开我的内容抽屉,我要右键单击并选择一个新的材质函数,我要调用这个函数我叫它Hash23

因为我们在这里输入一个向量 2 值我们的纹理坐标,我们将得到一个颜色一个随机颜色,它是一个向量 3 值所以这是我全新的函数,我们要开始构建,我们需要的第一件事是我们的输入值,我要做一个输入过滤器并引入一个函数输入设置为矢量 2 的大小

默认情况下它将接受我们的uv坐标,我可以添加常规纹理坐标节点作为默认输入。我将把我的纹理坐标节点连接到预览套接字中,当它没有连接时它将使用常规纹理坐标作为默认值,所以我们需要获取这些纹理坐标并立即将它们全部打乱。所以我要做的第一件事是创建两个组件掩码,一个用于红色通道或u坐标,一个用于绿色通道或v坐标,现在我将使用这两个输入坐标创建三个唯一的三通道向量

我将使用我的附加许多节点,我将创建三个这样的向量,所以我将创建三个xyx yxx 和 xyy我基本上只是以三种不同的方式加扰了我的两个传入向量

现在对于其中的每一个,我将在向量本身之间做一个点积。这就是排序一个半随机数对于这些中的每一个,我都会做一个点产品我将在一秒钟内创建这些随机数,但首先我想做另一个追加我将使用这些中的每一个作为一个新向量的x,y和z分量,我已经用这些向量创建了一个新向量我已经打乱了,所以对于每一个我都需要另一个随机数,所以按住3键并单击鼠标左键创建三种随机数,然后完成这些点积可以看到我是如何扰乱我传入的 uv 坐标的分量,然后我把它们的结果放在一起

现在我要做更多的置乱处理,我要取结果并通过正弦函数传递它,然后我要取结果并将其乘以另一个一种半随机数不可能比这更随机

我们将这里的符号结果乘以那个疯狂的数字然后得到结果。在我们要做的所有事情中我们将通过一个 frac 节点传递它该节点将只返回小数部分,所以如果那里有任何整数值或整数它会将删除并返回小数点,看到我得到了一些非常好的随机噪声


我将向您展示如何使用它我们回到里面贴图着色器中,我只需要添加我创建的散列材质函数我打开我的内容抽屉,并添加我的hash23函数现在该函数需要一个 vect 2作为传入向量我将在这里将我的纹理坐标乘以我的房间计数值,我需要做的第一件事是添加一个基本上向下舍入的地板节点,我要向下舍入我的纹理坐标值然后我将把它传递到我的Hash23中这将根据我传入的 uv 坐标给我随机数然后 一旦我有了这个随机数据

我将很快将它连接到我的基色这样我就可以向你展示我们得到了什么

我希望每个房间都有随机值的红色绿色和蓝色通道我希望它们是 0 或 1不仅仅是一些随机数我将在这里添加一个圆形节点而不是使用 hash23 数据以便我们向上或向下舍入这样我的每个红色绿色和蓝色通道都将是要么是 0 要么是 1

我需要使用这个随机数据我将要做什么?我将把它用于两个不同的事情,我将选择一个随机的一面或一个随机的墙是背面和侧面。我还将随机化是否镜像墙以便它显示它的倒数,我会以这种方式获得更多随机值以便做到这一点。我要添加另一个拆分组件节点现在我需要设置我的随机镜像。这样就可以随机镜像每一边我需要在这里添加几个 lerp 节点我将添加更多这些vect3 值,我要取这些值并将它们相乘,然后我将把我刚刚创建的这个数据乘以从这里出来的结果,我用它作为我的坐标来查找我的立方体map。我将在这里取这个最终值并将它乘以我的随机值让,我们看看我们是否将它用于我们的立方体贴图查找而不是我们之前得到的。你可以看到我们得到1或2在每种情况下1或2要么是镜像的要么不是镜像的,所以我们这里有一些非常酷的随机数据我们使用1或2值是翻转或翻转

我们可以做更多的随机化我们可以使用三个或四个在这里再添加一个lerp

不管它是否错误,它的作用是让每个房间在我的建筑中看起来都是独一无二的。它给了我更逼真的外观效果,我们还有很长的路要走,如何创建纹理并实际创建着色器使建筑物看起来像一座建筑物而不是一堆随机镜像的一个 两个 3 和 4 的数字。所以我们要给着色器添加一点点润色让它真正达到我们想要的效果




原帖地址:什么是视差映射?如何在UE5中创建视差映射!能有不错的效果(上部) (qq.com)

         

本帖被以下画板推荐:

微信公众号:Game艺视界
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表