目录
Runtime virtual texture 实时虚拟纹理RVT
RVT应用1:
引擎中开启Virtual Texture support
vLevel = floor[F d(uv)/dx, d(uv)/dy) +Random(-0.25,0.25)]
RVT的应用2
svt和rvt的区别
双线性过滤和三线性过滤的区别
UE的PixelNormalWS节点
数字图像处理
NPR图像色深
选择合适的色深
应用:做NPR的时候在PS里调贴图的颜色信息,可以把图像模式从8位改成更高位数以获得更丰富的灰度信息
颜色编码
Runtime virtual texture 实时虚拟纹理RVT
Why:虚拟纹理之所以被称为“虚拟”,是因为它并不像传统纹理那样完整地加载到显存中,而是按需加载的。虚拟纹理系统会将一张大纹理(例如用于超大场景的纹理地图)分割成小块(称为“页”),根据视角和需求动态加载和卸载这些小块,仅渲染当前视野中需要的部分。
RVT应用1:
虚拟纹理可以处理场景物体和地面的自然衔接
RVT的应用2:
贴着表面流动的物体/附着地表的草
例图源虚幻引擎官方第18期 | Virtual Texture(虚拟纹理)的理解和应用(Grass贴地工程文件)
VT
What:
虚拟纹理是一种资源管理技术,主要用于减少大规模纹理资源(例如超高分辨率纹理或大型开放世界场景纹理)对显存的占用。在传统纹理处理中,如果场景需要加载多个高分辨率纹理,可能会快速耗尽显存资源。而虚拟纹理可以分割纹理资源,只把当前帧可见范围内的纹理数据加载到显存里,而非整张纹理图。
这种技术通常使用“按需加载”机制:把纹理拆散成一个个tile(上图灰色部分)打散,放在物理内存中的不同位置(图右下角),并根据当前相机位置决定哪些页面需要加载,避免了显存的过度消耗。虚拟纹理系统在后台动态地管理这些页面,类似于一种纹理的“流式传输”,让开发者在不损失视觉质量的情况下使用超高分辨率纹理。
How:
引擎中开启Virtual Texture support
采样方式
(mip之间的过渡)
传统纹理采样是通过硬件支持的,是通过硬件处理两个mip之间的差值返回给mip
虚拟纹理采样只能通过shader的修改,把两个数据都采样出来,然后在shader里做lerp就需要两倍的物理内存采样开销。tricky的方法,在实际的采样数值上加二维的偏移(有一些帧采样mip2,有一些帧采样mip3),然后再通过TAA(时域抗锯齿)把mip2 mip3混合到一起,从而达到三线性效果。
vLevel = floor[F d(uv)/dx, d(uv)/dy) +Random(-0.25,0.25)]
表达式的分解
vLevel = floor[...]
:vLevel
表示生成的层级值,这个值取整(向下取整),确保选择的是一个特定的整数层级。
d(uv)/dx, d(uv)/dy
:d(uv)/dx
和d(uv)/dy
是关于UV坐标的偏导数,表示当前片元(像素)在X和Y方向上UV坐标的变化率。在纹理采样中,这些偏导数通常用于估算片元在不同区域内的细节变化情况。较大的UV变化率通常意味着需要较低的MIP层级(即较模糊的纹理),而较小的变化率可能意味着需要更高的MIP层级(即更清晰的纹理)。
Random(-0.25, 0.25)
:Random(-0.25, 0.25)
是一个在-0.25到0.25之间的随机值,用于添加一定的随机噪声,避免纹理层级选择过于规则。这种噪声通常用于消除因采样而出现的视觉伪影(如莫尔条纹)。
floor[...]
:整个表达式的结果通过floor
函数向下取整,以获得一个离散的层级值。这样可以用这个值来选择特定的MIP纹理层级。
各向异性
低分辨率Mip缺失
使用LOD避免在远处
svt和rvt的区别
-
SVT (Streaming Virtual Texturing):按需加载和显示大面积纹理,节省内存,提高渲染效率。
-
RVT (Runtime Virtual Texturing):将纹理在运行时动态烘焙到虚拟纹理,适合实时变化的效果,如动态光影。
双线性过滤和三线性过滤的区别
-
双线性过滤:对纹理的四个相邻像素进行插值,使纹理在放大或缩小时更平滑。
-
三线性过滤:在双线性过滤基础上,增加不同 mip map 层级之间的插值,使纹理在切换 mip map 时更平滑。
UE的PixelNormalWS节点
如果将 PixelNormalWS
节点直接连接到 Base Color
,它会将像素法线的世界空间方向数据直接输出为颜色。由于法线数据是一个向量(包含 x、y、z 分量),引擎会将这些分量映射为 RGB 颜色值。具体效果如下:
- 红色通道:表示法线的 X 分量(水平方向)。
- 绿色通道:表示法线的 Y 分量(垂直方向)。
- 蓝色通道:表示法线的 Z 分量(垂直深度方向)。
这种映射会呈现一种基于像素法线方向的彩色图案。图像会显示不同的颜色,视角变化时颜色也会相应变化,这是因为每个像素的法线方向在世界空间中不同。
数字图像处理
NPR图像色深
在图像处理中,8位、16位、32位模式指的是每个颜色通道使用的比特数,即图像的色深(bit depth)。色深影响图像的色彩范围和细节表现力:
-
8位图像:每个颜色通道使用 8 位(即 1 字节),因此单通道的色彩范围为 0-255(总共 256 种灰度)。如果是 RGB 图像,总共有 256×256×256=16,777,216256 \times 256 \times 256 = 16,777,216256×256×256=16,777,216 种颜色(约 1670 万色)。8位图像色彩范围适中,文件较小,适用于大部分网页和常见的应用场景。
-
16位图像:每个颜色通道使用 16 位(2 字节),色彩范围为 0-65535,总共支持约 281 万亿种颜色。16位图像可以记录更多细节与颜色过渡,适用于需要高质量色彩表现的图像处理、打印或专业摄影。
-
32位图像:每个颜色通道使用 32 位(4 字节),总色彩数极高(约为 3400 万亿亿种)。32 位图像通常用于高动态范围图像(HDR)和科学图像处理,能够保存极细腻的亮度和颜色信息,但文件体积非常大。
选择合适的色深
- 8位:适合快速查看、网页和一般应用。
- 16位:适合专业编辑、打印、精细的色彩调整。
- 32位:适合HDR效果、高精度科学图像。
应用:做NPR的时候在PS里调贴图的颜色信息,可以把图像模式从8位改成更高位数以获得更丰富的灰度信息
颜色编码
YCoCg Base Color是一种颜色编码方式,在解码时将YCoCg转换回常见的RGB颜色空间,从而在游戏或实时渲染中更高效地应用纹理。
YCoCg色彩空间将图像的颜色信息分解为亮度(Y)和两种色差分量(Co红和绿色之间的差异和Cg蓝和绿色之间的差异),可以实现更高的压缩效率,同时保留较好的视觉质量。
[中文直播]第18期 | Virtual Texture(虚拟纹理)的理解和应用 | Epic 李文磊_哔哩哔哩_bilibili
【UE5教程】虚拟纹理使用技巧【附RVT材质函数下载】_哔哩哔哩_bilibili
Unreal Engine 5 Landscape Material - UE5 Tutorial
[UnrealCircle深圳]深入虚拟纹理 | Epic 李杨珂_哔哩哔哩_bilibili