第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.2 网格是什么
  3. 1.3 向量入门
  4. 1.4 定义颜色
  5. 1.5 渲染管线
  6. 1.6 着色器是什么

核心对象

  1. 渲染:从网格、相机、灯光与材质生成一帧图像的过程。
  2. 网格:由顶点、边和面描述形状并携带渲染属性的数据。
  3. 向量:以多个分量表达位置、方向、颜色或其他图形数据的量。
  4. 渲染管线:把应用数据经顶点处理、图元装配、光栅化和片元处理生成图像的步骤。
  5. 着色器:运行在GPU可编程阶段并把输入数据转换为位置或颜色的程序。

数据流与公式

原书从网格和向量出发,不要求先掌握完整图形学。先区分点、方向与颜色三种向量语义,再把CPU提交、顶点处理、光栅化和片元输出串成一帧。着色器只是管线中的可编程环节,不是整个渲染器。 前15章以OpenGL 4.1、GLSL和openFrameworks为实验环境;第16至18章再映射到Unity、UE4与Godot。所有代码都要把可编程Shader与应用侧资源绑定、Draw状态、深度和混合分开记录。

FPS=1/TframeFPS=1/T_{frame} v=(v1,,vn)v'=(v_1,\ldots,v_n) C=(r,g,b,a)C=(r,g,b,a) frame=Raster(Fragment(Vertex(mesh)))frame=Raster(Fragment(Vertex(mesh)))

公式中的位置、方向、颜色、深度和时间必须标注空间、范围与单位。片元输出只是候选颜色,最终结果还经过裁剪、深度、模板、混合与颜色编码。

最小实现

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
  1. 用最小网格与常量颜色验证Shader编译、链接和Draw状态。
  2. 可视化位置、UV、法线、深度或光照项,确认范围和空间。
  3. 打开本章核心效果并保存基线与候选画面。
  4. 构造边界与失败输入,用GPU捕获和计时解释差异。

验收证书

证书包含源码与编译版本、应用绑定、资源哈希、状态、参考图、GPU事件、CPU与GPU帧时间和失败反例。把网格、材质和着色器混为一个对象,无法解释数据究竟在哪一阶段变化。 修复后必须重放同一输入并说明差异来自哪个阶段。

常见误区

本章回顾

本页覆盖渲染、网格、向量、渲染管线、着色器。掌握标准是能画出数据流,写出最小实现,说明应用或引擎状态,再用边界、精度与性能证据复现结论。

术语表

讨论

评论区加载中…