Kongouuu's Blog

慢慢学图形

【RTR4笔记】 第八章 光与颜色

光的量化、立体角、Tone Mapping

8.1 Light Quantities 在我们要进一步的去处理一个更真实的画面的时候,就需要考虑到怎么样去形容我们模型里面的光。当我们能正确的测量我们的光的能量,才可以达到更好的一个渲染的效果。 8.1.1 辐射度量学 Radiometry 辐射度量学主要是用于测量电磁辐射的强度。我们眼睛能看到的光的颜色在本质上都是处于一个特定的波长区间的电磁波。在基于电磁波的思路上,我们可以想到下...

【RTR4笔记】 第七章 阴影

平面阴影、阴影贴图(PCSS,VSM)、其他阴影

7.1 平面阴影 平面阴影是思路上最直接的一个阴影绘制方式,就是把模型拍成一个平面后当作阴影绘制的手法。 7.1.1 投影阴影 在这个手法里,每个拥有阴影的物体都要被绘制两次,一次为本体,一次为自己的阴影。 由于阴影的产生是光被顶点遮挡,所以每个顶点阴影的位置都可以通过简单的相似三角形计算。这个计算是假设py为0来计算的,理解起来比较简单。 \[\frac{p_x-l_x}{v...

【RTR4笔记】 第六章 纹理

纹理管线以及各种贴图

6.1 纹理管线 我们会经常用到一个纹理来对一个物体的材质(包括颜色)进行形容,而纹理的使用本身也形成了一个固定的纹理管线。 Projector Function: 首先我们会把本地坐标通过这个投影函数变成纹理坐标 Corresponder Function: 我们是没办法直接通过给定的一个纹理坐标(u,v)去贴图上找到数据的,我们需要先通过这个映射函数把...

【RTR4笔记】 第五章 着色基础

光源、着色模型、反走样、透明度、伽马矫正

5.2光源 5.2.1 平行光 平行光为没有特定位置,固定角度,且不会衰减的光。因为定义上是从无限远的位置传过来的光,所以不考虑衰减。 5.2.2 精准光源 点光源 精准光源,包括点光源和聚光灯,都是拥有实际位置以及光强衰减的光源。 衰减的话有非常多的算法,拿一个比较基础的来看: \[c_{light}(r)=c_{light_0}(\frac{r_0}{r})^2\\ r: ...

【RTR4笔记】 第四章(三) 投影

正交投影、透视投影的细节

4.7 投影 在这章节和旋转的中间有几个比较简单提到动画的部分。主要是讲动画中用到的顶点混合、插值、压缩的方案。书里提了一个大概,有时间再往细节研究。 先说一下投影的整体流程: 设立一个大的面积,面积内为要保留的顶点 把面积压缩到NDC坐标,用于压缩面积的矩阵就是作用于顶点的投影矩阵 4.7.1 正交投影 透视投影就是把物体平行的投影到一个空间内的投影。 从简单的...

【RTR4笔记】 第四章(二) 旋转变换

旋转、欧拉角、四元数

4.2 特殊的矩阵变换操作 4.2.1 欧拉变换 欧拉变换是用来形容一个朝向,例如摄像机所看着的方向的表达方式。为了形容这个朝向,我们最主要必须定三个旋转以及他们围绕着的轴(方向); Roll:围绕着原始前向量进行的逆时针旋转。一般我们在定义朝向时会先计算出一个 前方/ViewDir 的方向 Yaw:围绕着原始上向量进行的逆时针旋转。在书里把这个称作Head。一般的摄像机会采...

【RTR4笔记】 第四章(一) 基本变换

SRT变换的细节

4.1基本变换 Affine(仿射): 变换后保持线和线之间的平行性 Orthogonal(正交): 逆矩阵为转置后的矩阵 符号 名字 特点 T(t) 平移矩阵 移动一个点,仿射变换 Rx(ρ) 旋转矩阵 围绕...

【RTR4笔记】 第三章 GPU与渲染管线

更深入的了解渲染管线

GPU与渲染管线 3.1数据并行的架构 我们的GPU是用并行的架构去运行代码的,意思就是每一个运行的处理器不需要知道其他处理器的信息也不用共享写入的片段。那么在讨论这一个架构前,先简单了解一下CPU。CPU一般是以串行的方式运行代码,处理器和处理器之间可能会有大量交际,也会共享写入的片段。为了减少中间的停顿,会使用像分支预测等机制来提高整体运行的效率。为了达到这些效果,芯片的内部会含有大...

【RTR4笔记】 第二章 渲染管线

渲染管线 2.1架构 管线的使用允许了我们的GPU可以并行的去处理大量的数据。管线的设置就是让每个阶段把自己的输出传到下个阶段的当输入的这么一个流程。而书中把渲染管线分成了四个大阶段,每个阶段内部都有着自己的管线: 应用阶段(CPU): 从渲染上看,很多的操作例如碰撞检测,动画,物理等都是在这个阶段去处理的,主要是把顶点和变换数据塞给下个阶段 几何处理阶段(GP...

渲染引擎开发笔记7

ImGui的加入

前言 上一章节比较草草了事的简单提了一下Input Assembly部分的一些思路吧,并没有特别的细节,毕竟也只是个人反思。 Imgui对一个渲染引擎来说是不能少的,因为我们很多时候在测试效果的时候会想要去调整物体的变换,或者去开关不同的效果等。这时候就需要一个GUI去让我们能对这些东西去进行一个控制。 这里主要讲一下怎么使用Imgui去管理我的场景。先看结果: 使用ImGui ...