
GAMES101
文章平均质量分 81
程序员萌芽
夜半荧屏映月华,
指尖飞舞写天涯。
代码千行凝智慧,
bug除尽见朝霞。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【GAMES101】Lecture 22 物理模拟与仿真
先来研究粒子的运动,假设有一个速度矢量场,对于确定的位置和时间可以确定粒子的速度就会有一个计算粒子随时间的位置的一阶常微分方程Ordinary Differential Equation (ODE),一阶表示只有一阶的导数,常表示没有偏导。原创 2024-02-12 21:34:43 · 1202 阅读 · 0 评论 -
【GAMES101】Lecture 21 动画
我们知道动画是由一帧一帧的图像连续播放形成,一般电影是一秒放24帧,也就是24fps,然后一般的视频是30fps的,虚拟现实要求达到90fps,那么关键帧就是指动画序列中的重要帧或关键时刻,用于定义动画中物体的位置、姿态、形状等关键帧之间的帧称为"间隔帧"或"过渡帧",它们是通过插值方法补充关键帧之间的动画过渡效果,当然不是简单的线性插值,像我们之前的贝塞尔曲线,估计也有点关系。原创 2024-02-12 00:08:11 · 859 阅读 · 0 评论 -
【GAMES101】Lecture 20 颜色
光是由不同波长的光波组成的,其中可见光的波长范围在400nm到700nm用谱功率密度(Spectral Power Distribution ),SPD来描述光在不同波长的分布,就是光源在不同波长的功率分布而这个光谱功率的分布具有线性可加性。原创 2024-02-10 21:26:11 · 1050 阅读 · 0 评论 -
【GAMES101】Lecture 20 光场
有了这个光场之后,就不再需要这个物体本身了,就把这个包围盒当成是黑盒,不用关心里面是什么,反正我从外面看到的就是这个物体发出来的光,因为这个光场已经记录下物体表面所有点发出来的光了。对于一个物体,用一个包围盒包住它,用包围盒记录下物体表面每个点出来的光线信息,记录下光的方向,然后包围盒上的点可以用二维的(s,t)来表示,方向可以用(在世界中定义一条光线需要光线上某个点的位置和光线的方向,也就是五个维度的,三个维度的位置,和两个维度的方向确定一条光线。原创 2024-02-10 13:39:13 · 465 阅读 · 0 评论 -
【GAMES101】Lecture 19 透镜
在实际的相机中都是用的一组透镜来作为这个镜头这个因为真实的棱镜无法将光线真正聚焦到一个点上,它只能聚在一堆上所以方便研究提出了一种理想化的棱镜,这个棱镜没有厚度,非常薄,它可以成功的将平行光线聚焦到一个点上,并且我们认为这个薄棱镜的焦距可以改变,实际上可以通过现实中的一组棱镜来达到这个效果平行光线经过棱镜会聚焦到焦点,同样根据光路可逆,过焦点的光线经过棱镜会变成平行光线,从物体到棱镜的距离叫做物距Zo,棱镜成的像到棱镜的距离叫做相距Zi物距和相距和焦距有这么个关系。原创 2024-02-08 19:40:43 · 957 阅读 · 0 评论 -
【GAMES101】Lecture 19 相机
成像可以通过我们之前学过的光栅化成像和光线追踪成像来渲染合成,也可以用相机拍摄成像今天就来学习一下相机是如何成像的,就是研究相机的构造结构成像有这个小孔成像和透镜成像,小孔成像即针孔相机,无法做景深虚化,我们之前的光线追踪用的就是针孔相机的模型镜头往里是快门(shutter),快门用于控制光进入传感器的时间,也就是控制曝光时间然后里面就是这个传感器(sensor),记录在曝光时间内进入的光如果传感器没有透镜的话,那么传感器上每个像素点记录的光都来着物体所有点的光,那记录的值都是差不多一样的了。原创 2024-02-08 16:39:22 · 1548 阅读 · 0 评论 -
【GAMES101】Lecture 18 高级外观建模
外观就是材质,就是BRDF,然后对于不同的模型,这个材质的计算不太一样。原创 2024-02-08 00:04:13 · 1000 阅读 · 0 评论 -
【GAMES101】Lecture 18 高级光线传播
这节课不涉及数学原理,只讲流程操作,大家当听这个十万个为什么就行。原创 2024-02-07 17:37:30 · 1003 阅读 · 0 评论 -
【GAMES101】Lecture 17 材质
渲染方程中的BRDF描述了物体是如何与光线作用的,而物体的材质决定了它看起来是怎么样的,也就是它的材质决定了光线是如何反射的,即BRDF就表示了物体的材质这个属性。原创 2024-02-05 23:14:53 · 1499 阅读 · 0 评论 -
【GAMES101】Lecture 16 路径追踪
为什么我们需要这个路径追踪呢,之前学的Whitted-style光线追踪它只执行镜面反射,遇到了漫反射面就会停止弹射光线还有一个问题就是Whitted-style无法在两个漫反射面之间传递光线但是渲染方程是可以正确的表示全局光照的,但是我们要用这个渲染方程的话,就得解决两个问题,一是这个半球积分到底怎么算,而是这个递归的radiance到底怎么解决。原创 2024-02-05 01:50:50 · 1277 阅读 · 0 评论 -
【GAMES101】Lecture 16 蒙特卡洛积分
为了后面要讲的路径追踪,需要讲一下这个蒙特卡洛积分,同时需要回顾一下高等数学中的微积分和概率论与统计学的知识。原创 2024-02-04 22:46:12 · 451 阅读 · 0 评论 -
【GAMES101】Lecture 15 渲染方程
本节继承上一节的难度并继续加深,讲这个BRDF,然后理解反射方程和渲染方程,最终实现全局光照,以下内容很抽象……如果想要深入理解建议到隔壁。原创 2024-02-04 16:58:52 · 1043 阅读 · 0 评论 -
【GAMES101】Lecture 14 15 辐射度量学
主要讲述了物理学中的Basic radiometry (辐射度量学),就是我们在之前的计算光照中没有用具体的物理单位去衡量和描述这个光照,今天就来介绍一些物理单位,老实说,的确很难。原创 2024-02-03 23:40:12 · 483 阅读 · 0 评论 -
【GAMES101】Lecture 13 14 加速光线追踪
我们说这个光线追踪效果虽然好但是慢,你想如果这个场景有1000万三角形组成,那我每个像素都发射光线和每个三角形都计算一次这个光照,那计算量还得了啊。原创 2024-02-01 23:55:25 · 1090 阅读 · 0 评论 -
【GAMES101】Lecture 13 光线追踪 Whitted-Style
这里讲一下为什么我们需要光线追踪,主要是因为光栅化没有办法很好的处理全局的光照效果,就像上节课我们说的到软阴影,还有这个毛玻璃一样的反射光,以及这种间接的光照效果,光栅化无法很好处理,虽然光栅化很快,光线追踪很慢,但是光线追踪的效果很好。原创 2024-01-31 22:10:58 · 924 阅读 · 0 评论 -
【GAMES101】Lecture 12 阴影 Shadow Mapping
我们之前说过这个解决远近问题用的深度缓冲Z-Buffer,会用一个depth buffer存储像素的深度,类似的,这里把这个光源当作摄像机,然后去记录一次像素的深度,这样记录到的像素的深度都是光源可以看到的点的深度,因为光源看不到的点的深度会被覆盖对不对。然后我再从摄像机出发去记录像素的深度,这时记录下的像素的深度都是我能够看到的点的深度,如果这个点投影到光源的深度和第一轮记录的深度一样,那么说这个点光源和我都能看到,那这里应该没有阴影。这里是光栅化的最后一部分,讲这个光栅化里面怎么实现这个阴影。原创 2024-01-30 22:50:34 · 544 阅读 · 0 评论 -
【GAMES101】Lecture 12 曲面
然后前面讲了贝塞尔曲线,这里讲一下这个贝塞尔曲面那怎么样从贝塞尔曲线到贝塞尔曲面的转换呢,前面我们说到这个逐段的贝塞尔曲线是通过四个控制点来画的,这里贝塞尔曲面是通过16个控制点来画的把这16个控制点排列成4×4网格,那么每行或者每列是不是有四个控制点就可以画出一条贝塞尔曲线,这样就可以画出四条并列的贝塞尔曲线,然后比分说有这样一个平面从另一个方向上扫过去,是不是会和这四条线有四个交点,那这四个点是不是又可以画出一条贝塞尔曲线,这样是不是就可以用贝塞尔曲线布满整个曲面。原创 2024-01-30 00:08:13 · 1036 阅读 · 0 评论 -
【GAMES101】Lecture 11 贝塞尔曲线
曲线这部分基本上就单讲了贝塞尔曲线。原创 2024-01-28 23:21:47 · 942 阅读 · 1 评论 -
【GAMES101】Lecture 10 几何表示
几何的隐式表示就是用一个函数式子来表示一个几何体,像一个球可以表示成x²+y²+z²=1,即可以用f(x,y,z)=0这样的函数关系来表示,f=x²+y²+z²-1这样这个隐式表示对于任何一个点计算出f的结果就可以知道这个点是在几何体内部还是外部,如果f的值小于0,我们就把它当作在几何体内部,如果大于0,就当作在几何体外面,当然如果等于0那就是在几何体表面但是这个隐式表示有一个它的缺点就是很难知道有哪些点在这个几何体上相对而言要知道某一个点和这个几何体的位置关系就很简单,只需要带入f计算就行。原创 2024-01-28 19:33:42 · 1072 阅读 · 0 评论 -
【GAMES101】Lecture 10 纹理应用
我们之前在着色里面讲到这个纹理映射,就是给我们在三维空间中的物体表面贴图对吧,实际上纹理还有很多的用处在现代的GPU中,这个纹理就等于一块内存加上范围查询或者是滤波操作,它是一种计算像素的通用方法,可以用来表示环境光照、局部的几何信息、体积渲染等等。原创 2024-01-28 15:20:30 · 488 阅读 · 2 评论 -
【GAMES101】Lecture 09 纹理贴图 点查询与范围查询 Mipmap
我们在之前的着色里面说过如何给物体上纹理,就是对于已经光栅化的屏幕点,就是每个像素的中心,去寻找对应纹理的映射位置的纹理颜色,去改变这个反射模型的反射系数kd但如果直接简单这么做的话会出现一些问题,比方说我的渲染分辨率是这个4k的但是呢我的纹理图只有480p,那这个纹理就需要放大对不对,那就会出现多个像素映射到同一个纹理上,就会出现这种这个这个马赛克的感觉如何来解决这个问题,可以看到中间的这个Bilinear,叫双线性插值。原创 2024-01-25 00:07:40 · 1178 阅读 · 1 评论 -
【GAMES101】Lecture 09 重心坐标
我们之前说着色过程中以及这个计算法线的时候需要用到这个插值(Interpolation),然后插值是通过这个重心坐标(Barycentric Coordinates)来实现的。原创 2024-01-24 20:00:56 · 482 阅读 · 0 评论 -
【GAMES101】Lecture 08 图形管线(实时渲染管线)与纹理映射
对于给我的这个三维模型的点,首先通过投影变换到平面上,然后这些点会形成三角形,我们需要将这个三角形显示在屏幕上,但是这个屏幕是离散的,我们通过光栅化离散这个三角形,形成这个fragments,这个是OpenGL里面的概念,叫片段、片源、片元,就类似于我们着色时的像素,然后就对每个像素进行着色,完了就可以显示在屏幕上,这个就是渲染的流水线,就是从三维场景渲染出二维屏幕的操作。这个有两个解决办法,一个是在这个三维模型创造的时候就展开得到这个纹理图,这个对应关系是由这个艺术家(美工)完成的;原创 2024-01-19 22:30:48 · 1046 阅读 · 0 评论 -
【GAMES101】Lecture 08 着色频率
大家可以看到下面这三个球是看起来不一样的是吧,但是其实这三个球用的模型是一样,但是着色频率不一样,我们说着色是应用到某个点的,所谓着色频率就是指要将着色应用到哪些点上,左边这个球是平面着色,中间这个是顶点着色,右边这个是像素着色。原创 2024-01-19 20:24:27 · 481 阅读 · 2 评论 -
【GAMES101】Lecture 08 Blinn-Phong反射模型
这个高光是怎么产生的呢,我们说当这个物体的表面非常光滑的时候,光照射过去这个表面就会特别亮,就是这么个道理,但是没有绝对光滑的物体,除了三体里面那个强作用力聚合的中子水滴,所以反射光线就不一样绝对沿着镜面反射的方向,如下图中的R,所以这个高光会出现在R的附近也就是黄色区域,而且这个高光是和我们的观察方向密切相关的,这和上次讲到的漫反射不同,只有这个观察方向v和反射方向R比较接近的时候才能看到高光。原创 2024-01-18 21:11:43 · 779 阅读 · 1 评论 -
【GAMES101】Lecture 07 着色(shading)
这个着色(shading)就是将不同的材质应用到不同的物体上,像一个物体,它可以是木头的、金属的、塑料的……我们来看一个简单的着色模型,叫Blinn-Phong反射模型。原创 2024-01-18 18:28:07 · 466 阅读 · 0 评论 -
【GAMES101】Lecture 07 深度缓冲 Z-Buffer
对于一个三角形的光栅化我们之前已经解决了,也就是说现在我们可以将一个三角形给绘制在屏幕上了,但是对于多个三角形,也就是多个图形来说应该如何来决定这个绘制的顺序问题因为后绘制的会覆盖先前绘制的图形,所以在画画当中是先画远的再画近的,这个叫做画家算法但是这个画家算法在某些情况下是不行的,例如下面这三个三角形,无法分成谁是远的谁是近的 这个时候就需要用我们的深度缓冲Z-Buffer来解决基本思想就是对每个点做一个远近比较我们需要两张图,一个frame buffer存储最终的像素值,就是下面的这个左图,另一个dep原创 2024-01-18 15:33:39 · 741 阅读 · 1 评论 -
【GAMES101】Lecture 06 抗锯齿
我们在前一节课讲过在三角形光栅化的时候会出现锯齿的情况这个也叫走样,是采样不够的结果,如下这个周期函数,如果我们每隔一定间隔对函数进行采样,最后发现我们采样出来的结果(就是图中这条黑色的线)和我们想要的(蓝色的线)差别非常大,这就是采样率不够所导致,也就是走样,采样的频率跟不上信号变换的频率要解决这个问题,最简单的就是提高采样率,缩小采样的间隔,具体到三角形光栅化出现锯齿的问题就是提高屏幕的分辨率,但这个贵是不是,而且硬件总是有限制的。原创 2024-01-16 21:26:48 · 472 阅读 · 0 评论 -
【GAMES101】Lecture 05 光栅化
对于一个标准的正方体,假设屏幕的宽为width,高为height,可以用这样一个变换矩阵把它缩放到屏幕大小,这里我们先忽略z坐标。对于一个屏幕上的像素来说,可以用坐标来定位每个像素,那么一个像素(x,y)的中心点就在位置(x+0.5,y+0.5)上。这个像素pixel,是picture element的简称,抽象的来说,一个像素就是一个带有统一颜色的方块。为什么先说三角形呢,这是因为三角形是最简单的多边形,任何的多边形都可以用三角形来表示,三角形具有良好的性质。对于那些刚好在三角形边上的点如何取舍呢?原创 2023-12-09 18:52:48 · 519 阅读 · 0 评论 -
【GAMES101】Lecture 04 观测变换
图形学不等于 OpenGL,不等于光线追踪,而是一套生成整个虚拟世界的方法记得有个概念叫光栅化,就是把三维虚拟世界的事物显示在二维的屏幕上,这里就涉及到观察变换观察变换,叫viewing transformation,包括视图变换和投影变换,投影变换又分为正交投影变换和透视投影变换。原创 2023-12-08 23:51:37 · 1069 阅读 · 0 评论 -
【GAMES101】Lecture 04 三维变换
类似于解决之前二维变换平移的问题,三维变换下用齐次坐标通过增加一个维度来表示,第四个维度为1表示这是个点,第四个维度为0表示这是个向量,这样就可以通过四维矩阵乘法来表示平移变换了。如何来理解这个事情,我们知道x和y叉乘可以得到z,y和z叉乘可以得到x,但是呢,x和z叉乘得到的是-y,只有z和x叉乘得到的才是y。你可能会发现,之前正弦值都是右上角的是负的,为什么到了绕y轴旋转时,却变成了左下角是负的呢?比较复杂的是三维中的旋转,二维中的旋转方式是固定的,要么是逆时针旋转要么是顺时针旋转。原创 2023-12-07 22:18:02 · 559 阅读 · 2 评论 -
【GAMES101】Lecture 03 二维变换和齐次坐标
这几天都在抽空学OpenGL、敲leetcode和看games,这里留点笔记给以后复习games101第一节课在吹水,第二节课讲了线性代数的入门知识,比较简单,这里稍微回顾一下重点,然后开始讲第三节课和第四节课的变换games101的向量是默认列向量向量的点乘就是对应的元素相乘这个可以用来求向量之间的夹角,特别是当两个向量都是单位向量的时候,它们夹角的余弦值就是两个向量点乘的结果。原创 2023-12-06 22:15:18 · 986 阅读 · 0 评论