基础概念汇总(持续学习篇)
1. Vertex Shader
- 用途: 存储顶点数据。每个顶点代表图形中一个关键点,比如一个多边形的一个角。
- 内容: 顶点数据可以包含每个顶点的各种属性,如位置坐标、颜色、法线向量(用于光照计算)、纹理坐标等。
- 实现: 在大多数图形API(如OpenGL或DirectX)中,顶点缓冲区对象(VBO)用于将顶点数据传送到GPU,以便进行快速渲染。
- 好处: 使用顶点缓冲区可以高效地管理图形数据和渲染处理,减少了数据传输的开销。
2. Fragment Shader (FS) 或 Pixel Shader (PS)
- 用途: 处理每个片段(潜在的像素)的颜色和其他属性。
- 功能: 计算光照效果,纹理应用等,以确定最终颜色。
- 作用: 负责最终输出到屏幕的颜色值,进行精细化处理,如色彩混合、纹理映射等。
3. Geometry Shader (GS)
- 用途: 可以生成、销毁或修改几何体。
- 功能: 在顶点构成几何图元(如三角形、线段等)后调用。
- 作用: 用于动态生成几何体细节或改变几何体的形状,例如细分曲面或扩展图元。
4. Compute Shader (CS)
- 用途: 处理大量并行运算,通常用于通用计算任务,而非直接图形渲染。
- 功能: 不在图形渲染管线中,适用于物理运算、粒子系统、图像处理等。
- 作用: 利用GPU的并行计算能力进行复杂的计算任务,广泛应用于GPGPU。
5. Tessellation Shaders (包含 Hull Shader 和 Domain Shader)
Hull Shader (HS):
- 用途: 控制细分曲面级别,决定几何体的多细分级别。
- 功能: 处理顶点控制点,确定细分级别。
Domain Shader (DS):
- 用途: 处理经过细分后的顶点。
- 功能: 应用于具体的细分几何体,应用变换和计算坐标。
- 作用: 结合用于细化模型细节,实现更光滑的曲面和更高的几何细节。
6. constant buffer
- 定义:Constant Buffer 是一种存储常量数据(也称为常量或Uniform数据)的GPU缓冲区。
- 作用:提供一组在多个绘制调用中不会经常变化的参数,例如变换矩阵(模型、视图、投影矩阵)、光照参数、材质参数等。
- 更新频率:
一般来说,Constant Buffer 在每一帧更新,特别是在场景、摄像机位置、光照参数等变化时必要。
也可以每次物体变换、动画变化时更新。
- 更新时机:
重置相机、灯光变化时。
变换矩阵(MVP)发生变化时。
材质或光照参数改变时。
- 如何更新:
在API中(如DirectX、Vulkan、OpenGL),通常调用映射(Map)-写入-解映射(Unmap)流程,更新缓冲区内容。
或使用“动态缓冲区”策略,提前分配好可频繁更新的缓冲区。
7. SRV(Shader Resource View) && UAV(Unordered Access View)
srv是DirectX和其他现代图形API中用来描述和访问资源(如纹理、缓冲区)的一种视图。
- 定义:
SRV是“着色器资源视图”,它允许着色器(如像素着色器、顶点着色器、计算着色器)访问具体的资源,比如纹理或缓冲区。
- 主要用途:
通过SRV,GPU可以读取(而不是修改)存储在资源中的数据,实现纹理采样、缓冲区数据读取等。
| 视图类型 |
全称 |
作用 |
访问方式 |
| SRV |
Shader Resource View |
让着色器读取资源(纹理、缓冲区) |
只读 |
| RTV |
Render Target View |
作为渲染目标(绘制的输出) |
写入 |
| DSV |
Depth Stencil View |
深度/模板缓冲区,用于深度测试 |
读写(部分API) |
SRV(Shader Resource View)是让GPU的着色器读取资源的接口,是实现纹理采样和缓冲区读取的关键机制。
UAV(Unordered Access View)
- 用途和特性:
- 读写访问:允许着色器(主要是计算着色器)对资源进行随机读写。
- 常用场景:
- 计算任务中需要读写缓冲区(如粒子系统、动态几何等)
- 需要在渲染过程中动态更新的资源
- 行为:
- 资源类型:
- 结构化缓冲区
- 原始缓冲区(Raw Buffer)
- 纹理(可用UAV绑定)
- 绑定位置:
| 特点 |
SRV(Shader Resource View) |
UAV (Unordered Access View) Buffer |
| 访问类型 |
只读 |
读写(支持写操作) |
| 用途 |
采样纹理, |
读取缓冲区数据 |
| 绑定到 |
像素着色器、顶点着色器、几何着色器等 |
计算着色器、像素着色器(需要读写) |
| 同步/原子操作 |
不支持(只读方式,不支持同步操作) |
支持(可以进行原子操作) |
| 缓冲区类型 |
主要功能 |
支持UAV/SRV |
绑定阶段 |
典型用途 |
| Vertex Buffer |
存储顶点数据 |
仅读 |
输入装配阶段 |
模型的顶点属性 |
| Index Buffer |
存储索引信息 |
仅读 |
输入装配阶段 |
连接顶点,定义图元 |
| Constant Buffer |
存储常量参数 |
只读 |
着色器常量寄存器 |
变换矩阵、光照参数 |
| Shader Resource View |
只读,采样或读取缓冲区 |
支持 |
绑定到各种着色器阶段 |
纹理采样、缓冲区读取 |
| UAV Buffer |
读写缓冲区 |
支持 |
计算或像素着色器 |
粒子缓冲区、动态生成数据 |
| Structured Buffer |
结构化数据缓冲区 |
支持 |
UAV/SRV支持 |
GPGPU、粒子、物理模拟 |
| Raw Buffer |
原始字节级缓冲区 |
支持 |
UAV/SRV支持 |
自定义字节流处理 |
8.各类贴图
| 贴图类型 |
作用与描述 |
| Diffuse(漫反射)贴图 |
提供模型表面的颜色信息,模拟物体表面的基本色彩(即没有高光或特殊光照效果的颜色)。 在光照计算中,Diffuse贴图会影响模型的本色部分,使得物体看起来更加真实、丰富多彩。 |
| Specular Map(高光贴图) |
控制物体的反光和高光亮度部分(亮的地方反光更强) |
| Normal Map(法线贴图) |
改变表面法线方向,用以模拟细节如凹凸、纹理,使表面光照更丰富、逼真 |
| Roughness Map(粗糙度贴图) |
控制表面的粗糙程度,影响镜面反射的散射程度,从而影响光泽和反光的模糊度 |
| Metallic Map(金属度贴图) |
控制材料的金属属性,区分金属与非金属区域(影响反射和光散射) |
| Ambient Occlusion (AO) Map(环境遮挡贴图) |
提供环境遮挡效果,模拟光线在缝隙和细节处的阴影,增强深度感 |
| Opacity Map(透明度贴图) |
控制模型部分区域的透明或不透明状态 |