GAMES202(1-2):介绍和基础-学习笔记

GAME202笔记汇总

1. Introduction and Overview

1.1 Instructor

对课程的一些基本说明

闫老师信息

闫老师的牛逼成就

1.2 About the course

课程主要内容:平衡实时性和高质量的渲染方法

实施性通常意味着渲染速度需要达到即每秒 30 帧以上

高质量即尽可能地真实(非真实的渲染效果,如卡通风格则另作考虑)

课程的内容主要分成四个部分

老师曾制作的实时光线追踪 Demo 所能达到的效果展示

课程也会涵盖一些特殊但常见的视觉现象的渲染方法

也会略微提到一些非真渲染的手法

也会讲反锯齿化和超采样方法

同时聊聊一些技术手段如 Unreal 引擎

老师认为“科学“和”技术“是不同的。

科学主要是针对理论研究,而技术则针对于将理论应用于实际。

技术的实际地位并不劣于理论,比如 Unreal 引擎涉及的大部分理论都是十年甚至几十年以前的。但换做一般的团队来应用这些理论,则实际渲染速度可能慢十倍。

本课程也同时会聊聊游戏

但课程不会过多涉及 3D 建模或者 Unreal 的具体使用。不是不重要,而是类似教程已经比较丰富。

也几乎不会涉及细致光线追踪的渲染方法(主要应用于电影动画)。GAMES101中已经对这种技术有了基本的介绍。

也不会讲神经网络渲染方法,由于其当前的不稳定与低质量,导致还无法广泛应用于工业界。

同时还有其他一些应用中比较重要,但课程不会涉及的内容。

对本课程学习的一些建议

1.3 Motivation

再讲讲学习高质量实时渲染的动机

如今电脑已经可以渲染出几近真人的效果

但想要达到这样的高质量,速度非常地慢,比如电影《疯狂动物城》,平均一帧的算力消耗大概在10万核时。

如果我们利用一些近似的方式,牺牲部分渲染质量,但也许就能使渲染速度得到极大的提升。

1.4 Evolution of Real-Time Rendering

最初的在极老的机器上实现的渲染效果

20年前的渲染技术。低面数、无阴影、光照假,但对于当时而言已经足够震撼。

十年前的渲染技术。几何效果已经不太差,但依旧有明显缺陷:

  1. 如刺客信条2的这个场景,明明是大白天,但墙体却非常昏暗(由于难以模拟多次漫反射而导致的问题)
  2. 生化危机5的人物皮肤显得非常的“油”,主要是高光反射和皮肤渲染的局限导致的问题。

而近期的实时渲染基本上已经能达到很震撼的效果

同时实时渲染还进一步向 VR 领域发展。甚至有电影也开始利用实时渲染技术,比如直接利用 Unreal 引擎渲染出整个动画。

虚幻4 的渲染效果

NVIDIA 的实时光线追踪渲染效果

1.4 Some Milestones

可利用 Shader 编程的图形渲染硬件

通常允许对顶点和片元(Fragment)进行编程

预计算技术,提前讲一些渲染结果记录下来,帮助实时渲染的速度极大提升

Interactive 级实时渲染技术,大概1秒左右完成渲染,可以帮助艺术家在制作时提前预览场景大致效果。

2. Recap of CG Basics

主要对 CG 的一些基础知识和概念进行回顾

2.1 Graphics Pipeline

渲染管线的整个过程

  1. 得到应用发来的顶点位置和拓扑信息
  2. 根据相机,对顶点位置进行变换,并投影到屏幕空间
  3. 投影不改变顶点的拓扑关系,所以得到了屏幕上的一系列三角形
  4. 再将三角形转换为一个个 Fragement
  5. 对 Fragement 进行着色
  6. 输出

可抽象为:

  1. 顶点处理
  2. 三角形处理
  3. 光栅化
  4. 片元处理
  5. 帧缓存操作

2.2 OpenGL

OpenGL 是操作 CPU 去控制 GPU 管线的工具

有语言无光、跨平台等特性

其操作流类似画油画

首先设置物理或场景,通常类似于 .obj 文件是一堆顶点坐标、法线坐标、三角形关系。存在 GPU 的一块特定缓存区,作为 VBO(Vertex buffer object)

OpenGL 提供了很多函数,可以直接得到各种需要用的转换矩阵

接着设置帧缓存区,再设置摄像机的方位

申明对此帧缓存进行渲染

根据 顶点 Shader 进行关于顶点的处理

根据 片元 Shader 对 片元进行处理

2.3 OpenGL Shading Language(GLSL)

Shading 语言最早集成在 GPU 上,需要用 Shading 汇编语言,使用非常困难

后来有斯坦福的实时渲染语言

再后来有 NVIDIA 提供的 Cg 语言

再后来有 DirectX 的 HLSL 语言和 OpenGL 的 GLSL 语言

Shader 的使用过程

Shader 的初始化代码,负责载入和编译 shader

Shader 的链接代码

Phong 渲染模型的顶点 Shader 代码

Phong 渲染模型的片元 Shader 代码

渲染管线由于在硬件层面是封闭的,导致调试比较困难

但现在也有了一些调试工具

当然,还有类似于 printf 一样的简单粗暴调试手段,即输出为一幅图,再用 Color Pick 工具查看对应像素的 RGB 值

1.4 The Rendering Equation

渲染方程,在 GAMES101 中有过比较详细的讲解,见:https://pangruitao.com/post/2659

用贴图记录环境光照

Leave a Comment