2026/4/18小于 1 分钟
计算着色器并非渲染流水线的组成部分,但是可以读写GPU资源,如纹理、缓冲区等。将GPU用于非图形应用程序的情况称为通用GPU程序设计。
线程组
GPU编程中,可以将线程划分为线程组(Thread Group),构成的网格。一个线程组运行于一个多处理器之上。
- 每个多处理器只有拥有两个线程组,使他能够切换到不同的线程组进行处理(线程组在运行时可能会停顿,着色器会等待纹理的处理结果)。
- 组内的线程存在共享内存,组内的线程可以进行同步操作。而不同组的线程之间是独立的,不能进行同步操作和数据共享。
- 一个线程组中含有n个线程,硬件会将这些线程分为多个warp(每个warp包含32个线程)。应当总是把线程组的大小设置为32的倍数。
调用如下方法来启动线程组
2026年6月5日大约 4 分钟
在不启用曲面细分的情况下,几何着色器将位于**VS(顶点着色器)与PS(像素着色器)**之间。
他的输入和输出分别是:
- 输入:完整的图元(顶点着色器的输出)
- 输出:新的图元(像素着色器的输入)
核心能力
| 能力 | 说明 | 典型应用 |
|---|---|---|
| 几何放大 | 1个图元 → N个图元 | 公告牌(1点→4顶点)、粒子系统(1点→1四边形)、细分 |
| 几何解扩 | 多个图元 → 更少图元 | LOD简化、遮挡剔除 |
| 改变图元类型 | 三角形→点、点→四边形等 | 粒子发射、轮廓线提取 |
| 访问相邻顶点 | 可获取邻接图元信息 | 阴影体积、轮廓线检测 |
2026年6月5日大约 2 分钟
在hlsl中,使用Texture2DArray类型来表示纹理数组。使用以下代码进行纹理采样:
//对纹理数组采用需要2D纹理坐标和纹理数组的索引
float3 uvw= float3(pin.TexC,pin.PrimID%4); //对图元ID取模,限制在0-3之间,这样得到纹理数组范围内的切片索引
float4 diffuseAlbedo = gTreeMapArray.Sample(gsamAniostropicWrap, uvw)*gDiffuseAlbedo;
2026年6月5日大约 2 分钟
渲染流水线描述了从输入到输出的整个渲染过程。我们需要注意每个阶段的输入输出。
输入装配器阶段 <- GPU资源 缓冲区 纹理
顶点着色器阶段 <- GPU资源 缓冲区 纹理
外壳着色器阶段 <- GPU资源 缓冲区 纹理
曲面细分阶段
域着色器阶段 <- GPU资源 缓冲区 纹理
几何着色器阶段 <- GPU资源 缓冲区 纹理
流输出阶段 -> GPU资源 缓冲区 纹理
光栅化阶段 <- GPU资源 缓冲区 纹理
像素着色器阶段 <- GPU资源 缓冲区 纹理
输出合并阶段 <-> GPU资源 缓冲区 纹理
2026年6月1日大约 4 分钟
为了简化理解,我们需要将最终投影到的水平面的每个点视为深度值,而不是关注光线与物体的交点。
光源角度
- 那么如图所示,物体挡住了光线,而最终到地面的投影区域处的深度值就与没有被遮挡的有所不同。
- 到地面投影区域的深度值与没有被遮挡的区域的深度值不同。
- 这个深度值标记了此处是阴影区域。
主相机角度
- 从主相机的角度来看,同一块区域的深度值是不一致的。
- 这说明此处是被遮挡的区域。
- 在像素做着色器中将此处的像素标记为阴影。
2026年6月1日小于 1 分钟
1. 概述
InputSystem 是输入系统的核心运行时模块,负责将原始输入数据转换为游戏可用的动作状态。
定位
-
上游依赖:
RawInputBuffer:原始按键/鼠标/手柄状态InputConfigLoader:JSON 配置解析结果InputContextStack:上下文栈管理GameTimer:提供 deltaTime 和 currentTime
-
下游服务:为
Game、FrameDriver、各个System提供动作状态查询接口
2026年5月22日大约 6 分钟
1. 概述
InputContextStack 是输入系统的上下文管理模块,负责管理不同游戏状态下输入映射的激活和优先级。
定位
- 上游依赖:依赖
InputConfigLoader解析的InputContextConfig配置 - 下游服务:为
InputSystem提供当前活跃上下文的查询接口
设计哲学
2026年5月22日大约 6 分钟
1. 概述
输入配置解析模块负责将 JSON 格式的输入配置文件转换为引擎内部的 ActionBinding 和 InputContextConfig 数据结构。
定位
- 上游依赖:依赖 JSON 配置文件(如
default_input.json) - 下游服务:为
InputSystem提供解析后的绑定数据和上下文配置
2026年5月22日大约 6 分钟
1. 概述
RawInputBuffer 是输入系统的原始数据存储层,负责存储当前帧的原始输入状态。
定位
- 上游依赖:由
Window::WndProcHandler注入原始输入事件 - 下游服务:为
InputSystem提供原始状态查询接口
设计哲学
关注点分离:
2026年5月22日大约 6 分钟

