第1章 初识游戏图形
沿Practical Shader Development正式目录掌握渲染、网格、向量、渲染管线、着色器。
从画面开始
先预测顶点、片元、深度和帧时间会如何变化,再只调整一个参数观察变化。原书从网格和向量出发,不要求先掌握完整图形学。先区分点、方向与颜色三种向量语义,再把CPU提交、顶点处理、光栅化和片元输出串成一帧。着色器只是管线中的可编程环节,不是整个渲染器。 本页用、、、、建立对象、阶段、状态和证据之间的联系。
第一版权威目录定位
本页一一对应Kyle Halladay《Practical Shader Development: Vertex and Fragment Shaders for Game Developers》第一版第1章 初识游戏图形。Springer/Apress正式目录确认2019年第一版、18章、附录代码、ISBN 978-1-4842-4456-2和XXI+381页;清华大学出版社官方样章确认2021中文第一版《Shader开发实战》、ISBN 9787302583349及对应中文目录。
原书小节覆盖
- 1.1 什么是渲染
- 1.2 网格是什么
- 1.3 向量入门
- 1.4 定义颜色
- 1.5 渲染管线
- 1.6 着色器是什么
核心对象
- 渲染:从网格、相机、灯光与材质生成一帧图像的过程。
- 网格:由顶点、边和面描述形状并携带渲染属性的数据。
- 向量:以多个分量表达位置、方向、颜色或其他图形数据的量。
- 渲染管线:把应用数据经顶点处理、图元装配、光栅化和片元处理生成图像的步骤。
- 着色器:运行在GPU可编程阶段并把输入数据转换为位置或颜色的程序。
数据流与公式
原书从网格和向量出发,不要求先掌握完整图形学。先区分点、方向与颜色三种向量语义,再把CPU提交、顶点处理、光栅化和片元输出串成一帧。着色器只是管线中的可编程环节,不是整个渲染器。 前15章以OpenGL 4.1、GLSL和openFrameworks为实验环境;第16至18章再映射到Unity、UE4与Godot。所有代码都要把可编程Shader与应用侧资源绑定、Draw状态、深度和混合分开记录。
公式中的位置、方向、颜色、深度和时间必须标注空间、范围与单位。片元输出只是候选颜色,最终结果还经过裁剪、深度、模板、混合与颜色编码。
最小实现
vec4 debugColor = vec4(vertexColor.rgb, 1.0);实现顺序固定为常量输出、输入可视化、核心公式、应用状态和优化。先验证Shader编译与链接,再检查属性位置、uniform、纹理单元和Framebuffer;只有画面与状态都正确后才比较性能。
应用与引擎侧契约
shader.begin();
shader.setUniform1f("time", elapsedSeconds);
shader.setUniformTexture("mainTex", texture, 0);
mesh.draw();
shader.end();应用侧保存网格布局、索引、纹理格式、采样器、矩阵顺序、混合与深度状态。引擎章节则把同一概念映射到Material、节点图或ShaderMaterial;语法可以变化,输入空间与合成语义不能靠猜。
边界、精度与性能
测试零向量、退化UV、负缩放、近远裁剪面、透明交叉、纹理边缘、大世界坐标、长时间运行和高过度绘制。性能实验固定硬件、分辨率、VSync与场景,先判断CPU还是GPU受限,再用捕获定位具体Draw和Shader阶段。
renderer: OpenGL 4.1 / named engine and version
scene: fixed mesh, camera, lights, textures
state: depth, cull, blend, target
evidence: image diff, frame capture, CPU/GPU ms
counterexample: smallest reproducible failure- 用最小网格与常量颜色验证Shader编译、链接和Draw状态。
- 可视化位置、UV、法线、深度或光照项,确认范围和空间。
- 打开本章核心效果并保存基线与候选画面。
- 构造边界与失败输入,用GPU捕获和计时解释差异。
验收证书
证书包含源码与编译版本、应用绑定、资源哈希、状态、参考图、GPU事件、CPU与GPU帧时间和失败反例。把网格、材质和着色器混为一个对象,无法解释数据究竟在哪一阶段变化。 修复后必须重放同一输入并说明差异来自哪个阶段。
常见误区
本章回顾
本页覆盖渲染、网格、向量、渲染管线、着色器。掌握标准是能画出数据流,写出最小实现,说明应用或引擎状态,再用边界、精度与性能证据复现结论。