【NO.4】纹理贴图及相关技术 |
您所在的位置:网站首页 › 纹理与贴图 › 【NO.4】纹理贴图及相关技术 |
《real-time提炼总结 第五章》《Real-Time Rendering 3rd 第六章》《unity shader 入门精要 第章 》
纹理贴图(Texturing):在计算机图形学中,纹理贴图是使用图像,函数或其他数据来源改变物体表面外观的技术 纹理管线(The Texturing Pipeline) 纹理(Texturing):是一种针对物体表面属性进行“建模”的高效技术纹素(Texels):图像纹理中的像素通常被称为纹素,区别于屏幕上的像素。贴图(Mapping 也称映射):通过投影方程(projector function)运用于空间中的点,从而得到一组称为参数空间值(parameter-spacevalues)的关于纹理的数值。这个过程就成为贴图。纹理贴图可以用一个通道的纹理管线进行描述。纹理贴图过程的初始点是空间中的一个位置。这个位置可以基于世界空间,但是更常见的是基于模型空间。因为若此位置是基于模型空间的,当模型移动时,其纹理才会随之移动。![]()
空间位置object space(x,y,z) -|> 参数空间parameter space (u,v)-|>纹理图像空间 texture image space(x,y)-|>颜色值texel color(r,g,b)---- 投影函数:映射值域0到1 映射函数:uv乘以分辨率去掉小数 查找对应颜色值 ---->颜色值用于着色方程,作为漫反射颜色值,替换之前的漫反射颜色值
投影函数The Projector Function 功能:将空间中的三维点转换为纹理坐标,也就是获取表面的位置并将其投影到参数空间中。常规情况下投影函数通常在美术建模阶段使用,并将投影结果存储于顶点数据中。也就是说在然健开发过程中我们一般不会去投影函数去计算得到投影结果,而是直接使用在美术建模过程中,已经存储在模型顶点数据中的投影结果。特殊情况: OpenGL的glTexGen函数提供了一些不同的投影函数,包括球形函数和平面函数。利用空闲时间可以让图形加速器来执行投影过程,而这样做的优点是不需要将纹理坐标送往图形加速器,从而可以节省宽带。更一般的情况,可以在顶点或者像素着色器中使用投影函数,这可以实现各种效果,包括一些动画和渲染方法(比如环境贴图,environment mapping ,有自身特定的投影函数,可以针对每个顶点或者每个像素进行计算) ![]() 体纹理 Volume Texture 即 三维纹理(3D texture),是传统二维纹理(2D Texture)在逻辑上的扩展,可以被认为由很多张2D纹理组成,用于描述三维空间数据图片。三维纹理通过三维纹理坐标进行访问。二维纹理是一张简单的位图图片,用于为三维模型提供表面点的颜色值。volume texture可以理解是一摞2D texture,sample的时候用第几摞+2D坐标来sample.虽然体纹理具有更高的储存要求,并且滤波成本更高,但它们具有一些独特的优势: 可以跳过为三维网格确定良好的二维参数的复杂过程,因为三维位置可以直接用作纹理坐标,从而避免了二维参数化中通常会发生的变形和接缝问题。体纹理也可用于表示诸如木材或大理石的材料的体积结构。使用三维纹理实现出的这些模型,看起来会很逼真,浑然天成。 劣势: 使用体纹理作为表面纹理会非常低效,因为三维纹理中的绝大多数样本都没有起到作用。 立方体贴图 Cube Map 是一种特殊的纹理技术,他用6幅二维纹理图像构成一个以原点为中心的纹理立方体,对于每个片段,纹理坐标(s,t,r)被当做方向向量看待,每个纹素都表示从原点所看到的纹理立方体上的图像。 ![]() 建议:保持纹理在不需要放大再用的前提下尽可能小,并尝试基于多边形将纹理分组。几遍所有纹理都一直存储在内存中,这种预防措施也可能会提高处理器的缓存性能。 常见纹理储存使用策略: 1)最近最少使用策略 Least Recently Used ,LRU 最常用的一种策略,作用:加载到图形加速器的内存中的每个纹理都给出一个时间戳,用于最后一次访问与渲染图像时。当需要空间,首先卸载最旧时间戳的纹理。一些API还允许为每个纹理设置一个优先级:如果两个纹理的时间戳相同,则优先级低的纹理首先被卸载。 2)最近最常使用策略 Most Recently Used,MRU 如果自己开发纹理管理器,carmack提出了一种非常有用的策略:对交换出缓冲器的纹理进行核查思想:鉴于如果在当前帧中载入纹理,会发生抖动(Thrashing)的情况。这种情况下LRU会对每张纹理图像进行交换。这种情况可以采用MRU策略直到画面中没有纹理交换为止再切换回LRU 3)预取策略 Perfetching 原因:加载纹理花费时间,特别是在需要将纹理转换为硬件原生格式时。纹理加载在每个框架可以有很大的不同。在单个帧中加载大量纹理使得难以保持恒定的帧速率。做法:在将来需要预期的情况下,预计未来的需求然后加载纹理,将加载过程分摊在多帧中。 4)裁剪图策略 Clipmap 原因:飞行模式和地形模拟系统,图像数据集可能会非常巨大,传统的方法是将这些图像分解成更小的硬件可以处理的 瓦片地图(tiles)思想:将整个数据集视为一个mipmap,但是对于任何特定视图,只需要mipmap的低级别的一部分即可。(DirectX10支持)优点:高分辨率地形图访问海量数据库,使用Clipmap技术可以减少在同一时间所需数据量。纹理压缩 Texture Compression
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |