概述: 索引材质贴图技术
Artem Krizhanovskiy展示了索引材料映射方法,该方法允许他通过对来自预定义LUT的所有材料数据进行采样来增加细节而不会造成内存损失。
介绍
这种方法的主要思想是减少压缩伪像,增加所有PBR通道的细节,获得高度可自定义的阴影,而内容没有任何变化,最后减少内存。


方法
我不使用直接纹理化方法,而是依靠基于材料的方法,其中使用渐变(磨损或状况)和材料,我们可以从预定义的LUT中采样所有材料数据。
唯一的输入是:
-4通道全尺寸渐变ID映射,已压缩
-完整的切线或对象空间法线贴图,已压缩
-16x16反照率,重新绘制LUT,未压缩
-16x16金属,粗糙度LUT,未压缩




渐变纹理:R-环境光遮挡,G-材质ID,B-细节ID,A-渐变


材质LUT1:RGB-反照率,A-重涂遮罩| 未压缩,无mip-map

材料LUT2:R-金属,G-粗糙度,BA-空| 未压缩,无mip-map
基本上,在读取“材质LUT”纹理时,渐变用作U,材质ID贴图用作V:texture(materialLUT_sampler,vec2(gradient,material_ID))
从示意图上看,它看起来像这样:

该过程非常简单,可以使用代码或基于节点的编辑器(例如Substance Designer或Unreal Engine)进行复制:

该模型包含16种材料:

重涂:


在这种情况下,其他的迷彩图案纹理将用作重绘颜色。
重新绘制的想法是基于反向混合。众所周知,平凡的线性插值看起来像这样:
结果= C_base *(1-alpha)+ C_paint * alpha
我们可以得出C_base:
C_base =(结果-C_paint * alpha)/(1-alpha)
并将其与新颜色混合:
结果= C_base *(1-alpha)+ C_repaint * alpha
细节决定成败
详细(顶部)图像的纹理像素密度高16倍,而内存仅重11%。

这种方法的程序性质使我可以将完整的PBR细节集应用于模型,该模型适用于所有材质和重新绘制选项。细节图由16个图块组成,并具有一组细节法线和细节渐变。Detail_ID映射用于定义哪个图块用于细节。我建议将BC7纹理格式与RG中的普通R和G通道以及B中的渐变一起使用。代码中需要进一步恢复普通B通道。您可能会注意到一些细节是空白的,因为我不需要此模型上的16个细节。

您可以看到更改detail_ID如何影响表面:
