渲染(Rendering)是图形学的三大问题之一,除此之外还包括几何(Geometry)和动画(Animation)。

给定一个虚拟三维场景的描述(包括模型、位置关系、光照等),渲染过程将3D的场景信息输入转化为2D的图片。渲染是通过三维模型得到二维图像的过程,使用3D Programming 渲染流程

  • 确定场景中物体位置

  • 加入摄像机视角(玩家眼睛)

  • 把三维世界投影为屏幕图像

分为两种:

传统表面渲染流程(基于图形学管线) 适用:Mesh / NURBS 等显式几何

  1. 场景准备(CPU):加载几何、材质、纹理、光源、相机
  2. 顶点处理(Vertex Shader):模型空间 → 裁剪/屏幕空间(MVP)
  3. 图元装配:顶点组装为三角形/线段
  4. 裁剪(Clipping):剔除视锥外图元
  5. 光栅化(Rasterization):图元 → 像素片段(Fragment)
  6. 片段着色(Fragment Shader):纹理采样、光照计算
  7. 测试与混合:深度/模板测试,颜色混合
  8. 写入帧缓冲:输出最终图像

Volume Rendering流程(Volumetric Rendering) 适用:体素网格、密度场、隐式场(如 NeRF)

  1. 场景准备:加载体数据(显式网格或隐式网络)
  2. 射线生成:为每个像素发射相机射线
  3. 射线采样:沿射线按步长采样点 ({x_i}_{i=1}^N)
  4. 属性查询:每个采样点获取密度 (\sigma_i) 与颜色 (c_i)
  5. 体渲染积分 其中 (T_i) 为到第 (i) 点的透射率、(\delta_i) 为相邻采样间距
  6. 像素合成:累积采样点贡献得像素颜色
  7. 写入帧缓冲:输出最终图像

区别:

流程环节表面渲染(茶壶例子)体渲染(云雾例子)
数据结构顶点+面片密度场 / 隐式函数
光线处理光栅化像素光线积分
几何表示明确定义表面连续体积(无明确表面)
应用CAD、游戏、硬表面烟雾、云、医学扫描、NeRF