1.3 纹理基础

纹理的概念

宏观上纹理是指的一张贴图
细分上纹理指的是一种多维的存储容器

纹理为何出现

纹理的出现可以降低工作量
降低存储空间的消耗
提高运行效率

纹理管线

![[Pasted image 20211219003227.png]]请添加图片描述

纹理管线先将模型由物体空间转换成纹理空间 就是常见的展开uv 但是也有一些特例使用纹理的方式不需要展开uv 再对纹理空间进行一个变换 必须在vertexshader中进行因为如果在fragshader中进行的话会造成性能的浪费图像纹理和程序纹理得到都是RGBA四个值如果采用合成的方式则RGBA中存储的不仅仅是颜色

纹理管线的例子

![[Pasted image 20211219010723.png]]
请添加图片描述

Wrap Mode

包装模式

  • 重复模式 Repeat
  • 镜面模式 Mirror
  • clamp模式 对于外层进行拉伸缩放
  • border模式 对于外层切换为纯色

Filter mode

解决部分没有采样到的问题 拉伸 旋转等

  • 选择最近的一个元素
  • 选择附近四个元素线性插值
  • 选择附近16个元素卷积计算
    ![[Pasted image 20211219085654.png]]请添加图片描述

缩小时如何处理多个像素合为一个

提高采样频率

  • 最临近采样
  • 线性插值

降低纹理频率

Mipmap

  • Mipmap为缩小为原来四分之一的原图 并最终缩小到1个pixel
  • 采样的时候理论是对片元进行偏微分处理得到最长的x或y边来平方 再通过三线性插值得到最近似的两个取平均值
  • 但是会有overflour问题 各向异性模糊

Ripmap

CPU和GPU渲染的优化

CPU和GPU之间有一个命令缓存区 使得CPU传出与GPU读入相互独立

CPU优化

CPU优化可以通过将更多的贴图合成一张 即使用纹理图集而不使用纹理数组的方法来实现调用更少次数的DrawCall指令

GPU的优化

通过纹理压缩减少缓存区内纹理的大小实现

立方体贴图CubeMap

CubeMap为一个六面体贴图 具体的采样方法为使用一个三维的向量 首先找出绝对值最大的那个方向的坐标作为面 在将其他两个方向的最大值作为1 取较小的值除以这个较大的值 取到相应的uv

BumpMap 凹凸贴图

将法线进行凹凸处理来实现一个虚假的凹凸表面,实际上物体的样子并未改变,并且阴影不会改变

DisplacementMap

真的改变表面凹凸情况 阴影也会改变
但是如果遇到纹理的像素多 物体表面的三角形少则采用曲面细分的方法进一步提高精确度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值