1 纹理基础
1.1纹理是什么
![](https://img.haomeiwen.com/i15508210/b62a3d4144ed4d03.png)
1.2 纹理优点
![](https://img.haomeiwen.com/i15508210/7adca194d41ca84b.png)
虽然牺牲了几何细节,但是减少了建模的工作量和存储空间,且提高了读取速度
1.3 纹理是如何起作用的
![](https://img.haomeiwen.com/i15508210/73c0609cd600c84e.png)
投影函数:获取我们要渲染的位置,然后将它从模型空间投影到纹理坐标空间,转化成纹理坐标,就是俗称的uv坐标,投影函数通常用于建模中的展uv阶段使用,然后将投影的结果存储在顶点数据中
通讯函数:得到的纹理坐标可以通过通讯函数来进行灵活拓展,比如实现平移缩放旋转又或者控制图像的应用方式等, 经过这个过程可以得到新的纹理坐标
纹理采样:用新的纹理坐标去获取纹理值,着色器中的纹理,通常以采样器变量的形式存在,就是我们通常在代码中看到的smaple了,这是个uniform变量
附:1依赖纹理读取:当我们使用texture2D或者是类似的方式访问纹理的时候,只要像素着色器不是直接用顶点着色器传过来,没有经过修改的数值,而是需要计算的,就会产生依赖纹理读取,会影响到性能的,所以通常把uv偏移放在顶点着色器去完成 2 纹理不光采样颜色,也可以采样别的信息,比如粗糙度,获取的就不是一个RGBA值
1.4 纹理采样设置
![](https://img.haomeiwen.com/i15508210/aef1942bb40561b6.png)
![](https://img.haomeiwen.com/i15508210/b72e352eb7fd1f82.png)
![](https://img.haomeiwen.com/i15508210/40fa0d55c000269b.png)
![](https://img.haomeiwen.com/i15508210/4072fbd7a1bdbedf.png)
2 纹理优化
2.1 cpu渲染优化常见方式
![](https://img.haomeiwen.com/i15508210/76b2001dae67b468.png)
cpu渲染优化中有一个方向是降低DrawCall,DrawCall是什么?当纹理显示在屏幕上,是需要cpu和GPU一起协作完成的,为了cpu和gpu并行工作,就需要有一个命令缓冲区,命令缓冲区中有一个命令队列,cpu向里面添加指令,gpu从中读取指令,当cpu需要渲染一些对象时就需要向命令缓冲区添加命令,而gpu完成上一次渲染的任务之后,它就会在命令队列中取出下一条命令并执行,添加和读取的过程是相互独立,所以命令缓冲区的存在可以让cpu和gpu相互独立的工作,命令缓冲区里面的命令有很多种,DrawCall就是其中的一种,在调用DrawCall之前,cpu会向gpu发送很多东西比如数据状态之类的,然后在这个阶段cpu需要完成很多工作,一旦cpu完成这些工作,gpu就会开始这一次的渲染,gpu的渲染速度往往是快于cpu的命令提交速度的,所以drawCall的数量太多的话,cpu就会把大量时间花费在提交drawCall上,而降低这些DrawCall最常见的方式就是纹理图集跟纹理数组,还有一个叫无约束纹理的东西,他们这些方法最主要的目的都是避免渲染的时候频繁改变纹理所带来的消耗,但实际应用上最常见的还是纹理图集
![](https://img.haomeiwen.com/i15508210/a041a38c59ad24ed.png)
gpu渲染优化的思路是从带宽入手,显存带宽是指我们gpu读写它的专用内存时的速度,如果游戏速度受限于显存带宽的话,往往是我们使用的纹理太大了,gpu没有办法快速处理,直接解决纹理和带宽问题的一个方法就是纹理压缩,通过硬件的硬件解码压缩纹理,纹理就可以只需要更少的内存,就可以有效的增加高速缓存的大小
3 其他纹理
3.1 cubeMap
![](https://img.haomeiwen.com/i15508210/3061dfac777fd46f.png)
3.2 bumpMap
![](https://img.haomeiwen.com/i15508210/355d34f75d12e40e.png)
3.3 位移贴图
![](https://img.haomeiwen.com/i15508210/1bf1a4a20b7623e1.png)
网友评论