计算机速成课 第二十七集 3D 图形

1. 引言

3D 世界中,点的座标不再是两个点,而是三个点,X, Y, Z

2. 3D 投影:

  • 概念:通过图形算法,把3D座标「拍平」显示到2D屏幕上
  • 分类
    • 正交投影:立方体的各个边,在投影中互相平行
    • 透视投射:在真实 3D 世界中,平行线段会在远处收敛于一点,就像远处的马路汇聚到一点
    • 网格:一堆多边形的集合。网格越密,表面越光滑,细节越多
    • 三角形:更常用因为能定义唯一的平面

3. 线框渲染 Wireframe Rendering

所有的点从 3D 转成 2D 后,就可以用画 2D 线段的函数,来连接这些点。

4. 扫描线渲染 Scanline Rendering

  • 是一种算法名称
  • 作用:填充图形
  • 1967 年诞生于犹他州大学
  • 填充的速度叫 fillrate (填充速率)

5. 抗锯齿:

  • 定义:减轻锯齿的方法
  • 原理:如果像素在多边形内部,就直接涂颜色;如果多边形划过像素,颜色就浅一些,这种边缘羽化的效果,看着更舒服些
  • 使用场景:字体、图表等

6. 遮挡 Occlusion

  • 在 3D 场景中,多边形到处都是,但是只有一部分能看见,因为其他的被挡住了。
  • 原理:使用画家算法
    • 是什么:使用排序算法,从远到近排列,然后从远到近渲染

7. 深度缓冲 Z-Buffering

  • 特点:可以记录场景中每一个像素和摄像机的距离

8. Z Fighting 错误

两个多边形或者多个多边形距离都一样的时候,不确定哪一个会画上面。多边形会在内存中移来移去,访问顺序会不断变化;另外,计算浮点数有舍入误差。所以哪一个画在上面,往往是不可预测的,导致出现 Z-fighting 效果

9. 背面剔除 Back-Face Culling

  • 3D 游戏中的一个优化
  • 解释:游戏角色的头部或地面,只能看到朝外的一面,为了节省处理时间,会忽略多边形背面,减了一半多边形面数

10. 明暗处理

  • 解释:在 3D 场景中,物体表面应该有明暗变化
  • 表面法线:多边形面对的方向
  • 平面着色:
    • 最基本的照明算法
    • 多边形的边界非常明显,看起来不够光滑
  • 高洛德着色
    • 特点;不只用一种颜色给整个多边形上色,而是以巧妙的方式改变颜色,得到更好的效果

11. 纹理 Textures

  • 在图形学中指外观,而不是手感
  • 算法:纹理映射
    • 在多边形中,查询纹理,从相应区域取平均颜色,并填充多边形,重复这个过程,就可以获得纹理

小结:

再大的场景,过程都是一样的,一遍又一遍,处理所有多边形。扫描线填充,抗锯齿,光照,纹理化。

12. 如何加速渲染

  • 为这种特定运算,做专门的硬件来加快速度
  • 把 3D 场景分解成多个小部分,然后并行渲染,而不是按顺序渲染

13. 图形处理单元 GPU

  • 计算机工程师为图形做的专门处理器
  • 位置:在显卡上,周围有专用的 RAM
  • 所有网格和纹理都在GPU中,让GPU的多个核心可以高速访问
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章