一.凹凸偏移和视差映射
1.偏移映射
这需要一个高度图并且它的分辨率很低,只有256*256,事实上,如果高度图的分辨率比较低并且有点模糊,效果反而会更好
然后将高度图输出到BumpOffset节点的height插槽中, 之后利用得到的UV进行贴图采样。现在移动摄像机的时候有一些视差移动,表面看起来不是平的,纹理坐标正在根据我的视角在移动。
下面是分别使用两种方法效果的对比,后者看起来更有起伏感
2.视差遮挡映射
这个方法更加消耗性能,但是效果也更好。
这里的Texture Obkect这个节点是告诉它我想用什么纹理,但是并没有采样,而Texxture Sample节点是对这个纹理进行了采样。因为纹理采样实际上在ParallaxOcclusionMapping节点中发生了多次,所以选择用Texture object。事实上它会在场景中进行光追,并且测算光线会碰到物体的什么位置,并且进行多个光线采样用于计算表面的最佳形状。HeighrMapChannel 表示用纹理的哪个通道,因为这是灰度图,所以哪个通道并不重要,给的值是R通道HigRatio表示突起的高度离表面有多远,另外minsteps和maxsteps分别决定了我竖直向下看和水平看的采样次数。HIghRatio越大应该给更多的采样次数来保证形状的完好。采样越多就会越消耗性能,但总的来说这非常节省性能了。
、即使视角很低也可以看到明显的凹凸效果
二.纹理压缩设置
首先在引擎中查看一个纹理。右上角会出现一个细节面板。
第一个已导入表示导入纹理时的大小,也就是原始纹理的大小。下面两项表示引擎或者游戏中显示的纹理的大小,再下面一项表示纹理所使用的内存数量,所以在当前的压缩设置下,我的2k纹理占用2m多一些。然后一项表示纹理没有alpha通道。已动态载入表示当角色在游戏中移动时,如果带有这种纹理的物体靠近角色。该纹理将被动态加载并流送进纹理流送池。如果该物体离屏幕足够远或者在屏幕之外,那么纹理将从内存中流出或移除,这是管理内存的最有效方式。下一项内容是正在使用的纹理压缩格式。当你将一个纹理导入虚幻引擎的时候,它会创建一个Mipmap链,例如导入一个2k的纹理,还会自动创建1k,512,256等等的纹理副本,然后每一个副本成为Mip,使用哪一种Mip等级来采样,它取决于看物体时相机的距离,或者取决于你观看物体的视角
然后是下面的compression。
第一个表示是否要忽略Alpha通道,如果纹理并没有Alpha通道,那么应该勾选这个选项。
然后是compression settings,DXT1是你可以使用的最有效的压缩设置,如果一个四个通道的纹理,一个未压缩的图像在内存中的大小将是压缩后的大小的8倍,因此DXT1的压缩比是8:1,它通过将纹理分割成4*4的像素块来进行压缩,然后存储其中的两个的完整的值,就像16个像素块中最极端的两个,然后所有其他像素都沿着一个像素和另一个像素之间的直线进行映射
如果是将法线贴图进行压缩,最好是使用DXT5,它的压缩比是4:1,它将会应用一些特定的压缩设置来让法线贴图看起来尽量好
下面是我们之前使用的一个Mask贴图,它的RGBA分别代表了ASMR。它的大小是5m左右,大约是漫反射纹理的两倍,这是因为它是四通道的纹理并且使用DXT5进行压缩,所以一半的数据进入RGB,一半的数据进入Alpha通道,也就是说Alpha通道在所有数据中是压缩的最少的,所以我们的重要数据更应该存储在Alpha通道中。
在使用DXT5格式进行压缩时,纹理的存储方式会影响数据的分配和压缩效率。DXT5采用的是一种块压缩技术,每个4x4的像素块被压缩成一个固定大小的字节。具体来说,DXT5格式的压缩结构包括:
-
RGB部分:每个块首先存储了两个RGB颜色(用来定义颜色渐变),接着是一个颜色索引表(用于存储每个像素的颜色索引),这样可以有效地表示多达16种颜色。
-
Alpha通道:DXT5格式的Alpha通道是单独处理的,它允许每个像素有8位的透明度信息。这意味着在一个4x4的像素块中,可以存储更精细的透明度变化。
由于DXT5的设计,Alpha通道的存储空间相对较小(8位),而RGB部分的存储空间(每个像素3个通道)在整体数据中占据了更大的比重。所以在一些场景中,为了优化压缩后的纹理效果,重要的数据信息可能更适合放在Alpha通道中,尤其是在需要精确控制透明度或使用遮罩效果时。
下面没有勾选SRGB,这意味这该数据被视为线性的,这里没有应用伽马校正,事实上你唯一需要开启这个选项的就是基础颜色的漫反射纹理
下面是一张高度图
当我们将纹理放大以后,就会发现很多地方都失真了
但是只要我们将压缩设置设置为GrayScale(R8),就会发现所有的失真都不见了,它存储了未压缩的单个通道,而且纹理的大小只是变大了一倍,但是这仍然很小。所以如果有一个单一通道的纹理,并且纹理的尺寸不是很大,那么可以考虑使用这种压缩方式
然后是Alpha,这回忽略掉RGB通道的内容而只能使用Alpha通道的内容。
BC7是一种新的纹理格式,只适用于DX11或者更高,这是一种更高质量的纹理格式,不过尺寸更大一些,它可以同时支持3个或者4个通道,并且总是4:1的压缩,如果你不介意它的大小是DXT1的两倍,又需要更高的质量,那么BC7就是你想选的