
Games笔记
文章平均质量分 94
Games 系列笔记
hijackedbycsdn
这个作者很懒,什么都没留下…
展开
-
LearnOpenGL 学习笔记 PBR
因为随着粗糙度的增加,参与环境贴图卷积的采样向量会更分散,导致反射更模糊,所以对于卷积的每个粗糙度级别,我们将按顺序把模糊后的结果存储在预滤波贴图的 mipmap 中。因为我们求解的速度更快,所以要达到足够的近似度,我们所需要的样本更少。渲染 6 次,每次转一个视角,帧缓冲的颜色附件绑定到立方体贴图的 GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,渲染一遍,渲染结果输出到颜色附件,也就保存到了立方体贴图的 GL_TEXTURE_CUBE_MAP_POSITIVE_X + i。原创 2023-07-15 16:49:48 · 325 阅读 · 0 评论 -
LearnOpenGL 学习笔记 高级光照
phong 模型中的高光项在视线方向和反射方向角大于 90 度时,反射项变为 0这导致了奇怪的效果因此现在计算一个半程向量,他是光线的方向向量和观察向量加到一起,并将结果正规化(Normalize)当视线正好与(现在不需要的)反射向量对齐时,半程向量就会与法线完美契合。所以当观察者视线越接近于原本反射光线的方向时,镜面高光就会越强。现在,不论观察者向哪个方向看,半程向量与表面法线之间的夹角都不会超过90度(除非光源在表面以下)。它产生的效果会与冯氏光照有些许不同,但是大部分情况下看起来会更自然一点,特别是低原创 2023-07-14 17:30:53 · 347 阅读 · 0 评论 -
LearnOpenGL 学习笔记 高级 OpenGL
将一个多重采样的纹理图像不进行还原直接传入着色器也是可行的。GLSL提供了这样的选项,让我们能够对纹理图像的每个子样本进行采样,所以我们可以创建我们自己的抗锯齿算法。在大型的图形应用中通常都会这么做。要想获取每个子样本的颜色值,你需要将纹理uniform采样器设置为sampler2DMS,而不是平常使用的sampler2D:使用texelFetch函数就能够获取每个子样本的颜色值了:// 第4个子样本我们不会深入探究自定义抗锯齿技术的细节,这里仅仅是给你一点启发。原创 2023-07-08 22:27:32 · 1035 阅读 · 0 评论 -
LearnOpenGL 学习笔记 模型加载
还有纹理的读取,是取模型文件所在的目录为根目录,使用 assimp 的函数得到的相对路径,所以如果原模型文件里面的路径是绝对路径,就会出错。结构体的另外一个很好的用途是它的预处理指令offsetof(s, m),它的第一个参数是一个结构体,第二个参数是这个结构体中变量的名字。所以,我们需要做的第一件事是将一个物体加载到Scene对象中,遍历节点,获取对应的Mesh对象(我们需要递归搜索每个节点的子节点),并处理每个Mesh对象来获取顶点数据、索引以及它的材质属性。一个面包含了组成图元的顶点的索引。原创 2023-07-07 17:00:17 · 99 阅读 · 0 评论 -
LearnOpenGL 学习笔记 光照
因此,如果我们打算把法向量乘以一个模型矩阵,我们就要从矩阵中移除位移部分,只选用模型矩阵左上角 3×3 的矩阵(注意,我们也可以把法向量的 w 分量设置为 0,再乘以 4×4 矩阵;由于二次项的存在,光线会在大部分时候以线性的方式衰退,直到距离变得足够大,让二次项超过一次项,光的强度会以更快的速度下降。每当我们应用一个不等比缩放时(注意:等比缩放不会破坏法线,因为法线的方向没被改变,仅仅改变了法线的长度,而这很容易通过标准化来修复),法向量就不会再垂直于对应的表面了,这样光照就会被破坏。原创 2023-07-06 21:39:34 · 134 阅读 · 0 评论 -
LearnOpenGL 学习笔记 入门
构造函数中:用 std 中的 ifstream(input file stream)打开指定文件路径,传出 std::stringstream 类型的数据,再将这个数据转换为 string,关闭 ifstream对于 string,使用c_str()转化为 C 风格字符串的指针char*,用于使用进行 shader 编译然后创建着色器程序,添加编译后的 shader,链接删除已编译的 shader构造完毕这个时候,就可以封装着色器程序使用函数,uniform 参数设置函数。原创 2023-07-06 16:08:43 · 517 阅读 · 0 评论 -
3Blue1Brown 线性代数的本质 笔记
因为某个矩阵行列式等于 0 的时候,相当于把空间降维了,而假设你现在有一个被降维了之后的空间,你不能再把它解压到高维了,也就是你找不出一个逆变换了(例如二维平面被压成一条线,现在你只有一条线,现在要求你从一条线输出两个线性无关的二维向量,这是一对多的情况,这已经不是函数能解决的了),所以矩阵的行列式为 0 的时候,没有逆矩阵。对于 Ax,如果 x 经过 A 的变换之后,只能落在一条线上,那么称为 A 的秩为 1,如果 x 经过 A 的变换后,只能落在一个平面上,那么称为 A 的秩为 2……原创 2023-07-06 00:32:03 · 410 阅读 · 1 评论 -
Games104 源码解析笔记
lua 脚本的生命周期我觉得就参考 Unity 脚本的生命周期吧,在 GObject 创建的时候调用 Lua 脚本中的 Awake 函数,在关卡第一次遍历的时候调用 Lua 脚本的 Start 函数,在 LuaComponent tick 的时候调用 Lua 脚本的 Tick 函数,在 Component Disable Enable 的时候……在 level 的 tick 中,对每一个物体的 tick,而物体的 tick 是对这个物体的所有 component 进行 tick。原创 2023-06-27 01:15:18 · 843 阅读 · 0 评论 -
Games104 学习笔记 20~22
和上面介绍过的多线程方法相比,任务系统可以更好地利用多核并且避免线程切换从而提升计算性能。不过目前原生 C++ 暂不支持协程,而且在不同的操作系统中任务系统的实现往往是不同的。ABA 问题多用公式推导,证明这个并行策略是对的这两个的区别fiber-based job system 任务调度ecs 面向数据组织运算钻研这张图。原创 2023-06-23 17:17:30 · 1801 阅读 · 0 评论 -
Games104 学习笔记 18~19
https://peng00bo00.github.io/archive.html网络游戏的出现是游戏发展历程中的重要里程碑,基于互联网玩家可以同时和全球的其它玩家一起进行游玩。网络游戏和单机游戏相比有很多难点,比如说如何保证每个玩家的游戏状态是一致的、如何进行网络同步、如何处理延迟和丢包、如何检测玩家的作弊行为、如何处理不同的设备和系统、如何设计高性能的服务器系统等等。这些网络游戏专有的问题都为游戏引擎的开发提出了更大的挑战。所以网络游戏是一个非常复杂庞大的系统,在这一部分我们同样分为两节来介绍相关的技术原创 2023-06-20 09:17:44 · 478 阅读 · 0 评论 -
Games104 学习笔记 15~17
也可以,但是如果你的游戏逻辑依赖于事件的优先级处理,这样的话事件系统会与具体的游戏逻辑耦合过强,不方便游戏逻辑的拓展并且也不方便并行化一般都会假设每个事件都是独立的HTN 和 BT 非常相似,但它更加符合人的直觉也更易于设计师进行掌握。多个 task 组合,可能 precondition 永远满足不了如果 task 过长,但是世界变化很快,那么 AI 的行为就会变化很快,看上去振动一样。原创 2023-06-18 19:02:26 · 551 阅读 · 0 评论 -
Games104 学习笔记 作业 3, 4
在方法中,获取到所有属性访问器。遍历所有属性访问器,使用属性类型名称查找对应的构建方法,传入属性名称和属性地址,进行最后的 UI 生成。是获取了这个传入的instance的所有属性访问器这一步就是根据属性名称来查找相应的属性在 UI 上的构造方法根据判断,如果属性是 Array,那么} else {continue;} }他最终也是取到每一个元素的属性访问器,进而构造属性的TypeMeta实例,进而构造属性的实例,进而将这个属性的实例传入。原创 2023-06-16 17:27:05 · 448 阅读 · 0 评论 -
Games104 学习笔记 12~14
如果直接用数据拷贝来做 Variance,这个拷贝出来的独立数据与源数据没关系,那么管理很难,在调整和修改数据时直接进行复制很可能会破坏GO之间的关联而且容易造成数据的冗余,因此在现代游戏引擎中对于数据引入了继承(inheritance)的概念。从更高级的视角来看,工具链的本质是调和不同背景和思维方式用户的一套平台。目前游戏引擎中的 schema 系统主要有两种实现方式,其一是单独实现 schema 的定义,例如使用 xml,而另一种则是使用高级语言进行定义,例如 Unreal 在 C++ 中的反射。原创 2023-06-15 16:59:10 · 511 阅读 · 0 评论 -
Games104 学习笔记 8~11
Euler 方法实现起来非常简单,但需要注意的是它的本质是使用物体的当前状态来估计下一时刻的运动状态,此时系统的能量是不守恒的。还有一个为什么不用 bone 描述的理由就是,假设想象一个沿着 Z 轴竖直放置的骨骼,上下两个 joint,底部的 joint 绕 Z 转动 -30 度,顶部的 joint 绕 Z 转动 30 度,这根骨骼实际上发生了扭转 twist,而单独对于一个刚体,一般的数据结构都没有描述扭转量的。以点头动画为例,角色在点头时可以有不同的朝向,但在录制动画时只需要一套统一的动画。原创 2023-06-14 08:49:36 · 1227 阅读 · 0 评论 -
Gamess104 学习笔记 作业 2
而输入颜色的 G 已经是 0 到 1,色块的 G 也占满了 LUT 的宽度,所以输入颜色的 G 就是 LUT UV 的 v。然后我感觉这个又跟天空盒有关,毕竟天空盒中的条纹是不会变的,并且似乎,如果我看不到天空盒,也会出现与天空盒有关的条纹。所以只要把输入的颜色的 b 与色块数量一相乘,就能得到输入的颜色所在的 LUT 的色块位置。而要采样的点的 LUT UV 的 u 还需要计算这个像素的 x 值除以 LUT 的长度。其实仔细一看,这个场景中的大部分颜色都是正确的,比如说,你可以看到墙上的高光会很柔和。原创 2023-06-12 11:14:17 · 453 阅读 · 0 评论 -
Games104 学习笔记 1~7
抄了很多别人的总结,很详细……节省时间游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。原创 2023-06-11 22:41:47 · 2860 阅读 · 0 评论 -
GAMES101 学习笔记 Lecture 19~22
这里就可以沿用对角线上的思路,想要抵抗哪里的变形就在哪里加弹簧,那我想要抵抗平面变形,就在折叠的方向上加弹簧,也就是相邻位置的质点之间加弹簧,因为折叠的时候,主要是相邻位置的质点之间的互相接近。因为都是从 x’ 出发的,而传感器上的点和物体上的点是一一对应的。那我对于这个 s 的每一个波长我都需要考虑相应的三原色的比例,又因为线性可加性,所以对于 s 的所有波长,相当于我就需要积分。光场记录的角度相当于微传感器和微透镜之间的角度,但是换成等效的一个透镜,能表示的角度肯定更大,这也是一个权衡。原创 2023-06-06 16:52:25 · 375 阅读 · 0 评论 -
Games101 作业 7
目录作业 7mainRenderercastRaysampleLightScene::intersect(ray)f_r判断光源与物体之间是否有阻挡过亮 过度曝光?随机数生成多线程spp 很高时仍然有很多噪点微表面模型Oren–Nayar Diffuse ReflectiontoWorldOren–Nayar Diffuse Reflection 实现Microfacet Distribution FunctionsBeckmann–Spizzichino modelTrowbridge and Reitz原创 2023-06-05 19:29:09 · 1509 阅读 · 0 评论 -
GAMES101 学习笔记 Lecture 15~18
目录Lecture 15: Ray Tracing 3 (Light Transport & Global Illumination)能量一直在向外辐射,那么场景为什么不是越来越亮辐[射]照度 irradianceRadiance 辐[射]亮度Intensity, Irradiance, Radiance 之间的关系怎么理解 Radiance = 单位立体角的 Irradiance怎么理解 Radiance = 单位面积的 IntensityRadiance 是 Irradiance 微分BRDF原创 2023-06-05 19:26:33 · 264 阅读 · 0 评论 -
GAMES101 学习笔记 Lecture 13~15
https://games-cn.org/forums/topic/allhw/https://zhuanlan.zhihu.com/p/548671972有很多是抄这里的,毕竟懒得手打作业 5 框架代码详解https://blog.csdn.net/qq_41835314/article/details/124969379为什么要光线追踪做软阴影 soft shadows光泽反射 glossy relection间接光照 Indirect illumination光栅化一般就是用 Phong 模型只计算一原创 2023-06-04 21:29:44 · 510 阅读 · 0 评论 -
GAMES101 学习笔记 Lecture 10~12
凹凸(Bump)贴图:定义了片元着色器中着色点沿着着色点的旧的法线移动的相对高度,并且要求计算着色点移动之后,该着色点的新的法线方向。现在认为环境距离我无限远,所以我不管怎么移动我的位置,只要我看的方向不变,看到的环境内容就不变,这个与位置无关只与方向有关的内容就被存为环境纹理。Y 方向上排列多条 XZ 面上的贝塞尔曲线,然后在某一个 X 值上,取到各个贝塞尔曲线上的点,作为这个 YZ 面上的贝塞尔曲线的控制点。如果 shadowMap 的分辨率低,场景的分辨率高,就会产生走样。原创 2023-05-27 19:30:46 · 232 阅读 · 0 评论 -
GAMES101 学习笔记 Lecture 7~9
https://games-cn.org/forums/topic/allhw/先画后面的,再画前面的但是画家算法没有规定在 z 相同的时候该怎么画假设是左下右上的画法:左面下面右面上面最后画前面得到的结果是正确的但是如果是右上左下的顺序,就是不对的得到的结果最后会有一些没有被覆盖掉的面也就是说覆盖关系出错了这里就引出了一个问题,如果单看某一个面的 z 值(比如说用这个面的形心的 z 值来代表这个面的 z 值),那么就会引出排序问 题同理,另外一个可能产生排序问题的例子:对面不好排,而对像素好原创 2023-05-26 18:51:33 · 1404 阅读 · 0 评论 -
GAMES101 学习笔记 Lecture 1~6
以 2d 为例,一般的 2d 的点或者向量的定义是(x,y)现在添加第三个坐标,称为齐次坐标然后 2d point 就是(x,y,1),2d 向量是(x,y,0)定义近裁面,可以使用 fovY 和 aspect ratio也就是视角和宽高比感觉还需要一个高度或者宽度视角和宽高比的定义这里是因为默认近裁面的中心就在 z 轴,所以认为宽度是 2r 高度是 2t。原创 2023-05-20 21:33:25 · 1021 阅读 · 0 评论