- 博客(44)
- 收藏
- 关注
原创 Animated Movement & Color
这节课主要的目的是额外输出的掌握本课首先延续上节课制作了一个旋转展开,旋转关闭的圆,并且变动了颜色首先定义了已遮罩模式,不为1的地方也就是黑色区域会透明掉。并且设定了额外输出注意到此时中间往外会越来越暗,这是因为中间的采样点离每个pos都很近,就叠加了亮度。
2025-04-10 23:44:42
121
原创 HLSL Complex Shapes With For Loops
制作一个动态的cycle的动画材质首先我们使用hlsl来写一个圆加入偏移让圆动起来。
2025-04-10 20:50:30
21
原创 introduceHLSL
最近打算好好学习一下ue的shader,跟着下面的视频,打算每天至少更新一集。通过下面的蓝图方式我们就可以得到一个变化的材质。custom节点允许直接的写入hlsl代码。alpha参数的生成实际上就是下面的式子。
2025-04-07 21:30:14
175
原创 directx的矩阵运算
我在生成cube的时候,发现directx的运算规则不一样,以此记录。正常的情况下我们计算最终的点是这是列向量模式的正常运算directx的运算是。
2025-02-25 16:58:34
101
原创 Sampling Lights Directly
我们之前的采样方式都是在hitPoint的位置进行半球采样,这样做会有一个问题,如果我们这个点本来是被灯光照到的位置,但我们采样的过程中却并没有直射灯光的射线,会导致本来直射很亮的点却错误的着色。所以我们想到从灯光来进行采样。
2025-02-17 20:34:49
521
原创 正顺基碱基
之前的采样章节,开发了相对于z轴生成随机方向的方法,但是这个方法过于的片面,我们不能够保证所有的法线都与z轴对齐,我们需要考虑到不同的方向。
2025-02-17 13:03:24
601
原创 rayTrace 采样
这里的重要性采样是通过pdf的值来决定的。而SamplePDF的表示采样这个方向的radiance 的概率。文章中的意思我理解了一下,就是我们有两个采样的方向,一个是方位角一个是天顶角,不管是哪个的采样,其采样是独立的但是他们的概率都是1.于是我们需要在0到1的范围内进行采样.首先我们来看天顶角。我们计算到指定的r1的概率的CDF得到下面的推算(CDF就是到指定的角度的概率只和也就是一个概率密度的积分)但是我们的采样的方式并不是在交点处的半球内均匀的采样,而是依据normal来在一个球内采样。
2025-02-16 20:57:43
267
原创 RayTraceSeries分层采样
之前在像素上采样的方式为在每个像素额外的采样多次,然后计算一个期望,这就是MSAA的思想,这里的采样是随机的采样。这样可能会导致一个问题,我们知道采样非常的影响结果,如果采样的分布不均匀,就会导致结果的不正确。于是这里比较了分层采样和随机采样的结果的差别。最终的比较结果是分层采样的方式更加贴近真实的PI的值。比较的案例是利用一个单位圆来预估PI的大小。于是我们把它带入到射线的采样过程中。
2025-02-15 16:12:16
246
原创 计算环境光遮蔽的小技巧
其思想是,如果四周什么都没有,就是没有比你高的物体,那么你的遮蔽率就会很低。例如,当我们站在一个空旷的地方,周围没有高大的物体阻挡,各个方向的仰角都很小,那么环境光可以较为自由地照射到我们所处的位置;而如果我们处于一个狭窄的小巷中,两侧的墙壁会使某些方向的仰角增大,从而阻挡了部分光线,使得我们感受到的环境光强度降低。其主要思想是,我们一般去求AO的时候,需要再去对场景做一次正向渲染,然后根据着色点来进行遮蔽的采样,最终得到环境光的遮蔽比率。每次选择二维的一个方向,然后计算其最大的仰角。
2025-02-14 20:01:29
347
原创 Directx12 chapter4
接下来就是绑定到我们的描述符上,在绑定之前,我们需要知道它其实是首先得到描述符堆中的首描述符然后不断的向下位移得到描述符,也就是说我们需要获得堆描述符的首地址,然后还需要知道最终能够位移多少个描述符防止过载,同时还可以拿到别的类型的描述符的数量。根据交换链中的缓冲区的数量创建了缓冲区的资源数量,接下来我们需要将缓冲区绑定到描述符中,其实描述符的堆类型有两种,一种是gpu不可见,一种是gpu可见。我们可以在不同的阶段,为资源创建不同的描述符,这样资源就可以有不同的用处。
2025-01-07 20:40:06
975
原创 Opengl SSAO
可以思考一个问题,ssao是将无限远的地方当作间接光照,那么当你的深度和我的shader point深度差值太大,我就不应该考虑你对我的影响,而如果你离我很近遮挡我,证明我的反射光照无法传递出去,那么影响就大。这里我思考了一下,是这样的,为什么需要转为view空间呢,因为ssao的本质就是测试到camera的深度,如果采样点的深度浅则看得见。造成这种现象的原因是,当处理该片段的时候,该片段的gposition落到后面的背景上,那么采样的深度很大部分在人体上,导致可见度很低。
2024-12-06 13:43:35
893
原创 Games202作业5(完结)
也就是我们需要在像素(i,j)的四周进行采样,然后将采样的权重加到一起,然后所有的权重和像素的乘积也加到一起,然后相除,得到最终滤波后的(i,j)像素期望的结果。首先我们需要求出motion vector来判断上一帧的像素位置来补充当前帧的对应像素的信息。所有作业代码(作业2被我弄不见了....)其实就是膨胀卷积原理,间隔采样。也就是针对图像空间进行降噪。首先我们需要计算均值和方差。
2024-10-20 16:55:33
304
1
原创 Games202作业4
这部分就是利用蒙特卡洛积分求微表面材质,也就是说此时假定,光照的大小为1.0,同时近似认为菲涅尔项为1.0。这里实现ImportanceSampleGGX是使用LearnOpengl中的公式,好吧,还是得学完。所谓重要性采样,文档中的意思就是计算m(半程向量)的值后,再利用这个值去求解L。可以看到在粗糙度较低时,我们计算出的积分值非常小并且有很多噪声。可以很明显的看出diffuse的材质上,上一行的表现要优于下一行。是因为低粗糙度的微表面材质接近镜面反射材质,即微表面的法线。附近,而我们由采样入射光方向。
2024-10-19 17:47:51
446
原创 GAMES202作业3
实现SSR的找交点的算法,通过倍增的方式快速找到交点,但是这里我感觉如果和课上的内容一样,应该还有一步存储一个step中最浅高度的做法,这里我没写这一步,偷懒了。,然后组成TBN矩阵把这个局部向量转换成世界坐标下的方向向量,也就是我们世界空间下的步进方向。采样20次后,可以看到一个不错的color bleeding现象。我们需要使用作业框架提供的函数。可以检验直接光照是否正确。
2024-10-09 19:26:27
680
原创 GAMES202作业2
确定查询方向:你需要一个三维方向向量,通常是通过法线、反射向量或视线方向等计算出来的。这是着色点的“查询方向”,用于在 cubemap 中查找光照。这个方向向量 ((x, y, z)) 指向环境中的某个方向。我们要找到与这个方向对应的 cubemap 面和该面上具体的二维坐标。找到对应的Cubemap面根据这个方向向量 ((x, y, z)) 的符号和大小,可以判断这个方向向量是指向 cubemap 的哪个面。例如:如果 (x) 分量最大且为正,说明该方向指向 cubemap 的 +X 面(右侧)
2024-10-08 11:42:58
1078
原创 贝尔曼公式
从一个状态和action出发得到的average return。这里得到s1的state value的值为8.5,这个policy是没有上一个policy好的。在选择哪个策略更好的时候,此时需要使用到return,比如下面三个策略的返回值。这里的v,r向量化都很明显,这里的P,实际上是利用举证的乘法,对于其中的。就是每一行的值和其列向量相乘得到不同的i对应不同的j的和。action value和state value的关系。上图定义了不同的起点下的return value。趋向无穷的时候,这个。
2024-10-06 14:55:07
880
原创 强化学习——基本概念
例如上图就是location,就是网格的位置为state就是可采取的行动,这里就是可以move的位置就是状态采取action后的state当这个数是正数,代表这个行为是鼓励的,如果是负数,代表为惩罚,这个行为不鼓励。(这个正负数是相对的,就是数学概念,比如也可以用正数代表惩罚)包含了状态,action, reward。每个trajectory需要有return如上图,每次进入到target都会得一分,然后分数就会无穷大了每一个reward都设置一个,此时这个无穷值就变成了一个数,并且,如果。
2024-10-05 20:55:14
331
原创 GAMES202 作业1
我们首先需要知道一件事情,就是在UV坐标中,坐标的范围为0到1,所以我们设定一个滤波框的大小,并且想象我们将shadow map除以其本身的大小,shadow map就变成了1的单位大小。那么我们的处理方式就是设定采样窗口和采样密度,然后再窗口内均匀的采样,再shadow map上如果采样点的深度小于当前的深度,那么认为是遮挡物,记录其平均的深度信息。其中参数c是我们可以调节的一个最终系数,而参数filterRadiusUV是当使用PCF时,自适应还得考虑PCF的采样范围,但我们实现目前暂时用不到。
2024-09-20 13:46:08
834
原创 Instance(案例)
Cornell Box一般来说还有两个box,这里我们可以撞见六边面来模拟对于一个立方体,六个面,分别的求每个面的形状就可以。定义边界点定义轴向量这里我们按照正对一个面的左边的点来定义起始的位置,然后定义每个面的轴在cornell_box中加上两句在真实的Cornell Box中这两个盒子是有不同程度的倾斜的。所以我们需要对他进行旋转等操作。
2024-08-15 14:14:16
993
原创 Quadrilaterals(四边形)
虽然我们将我们的新原语命名为“四边形”(quad),但技术上它将是一个平行四边形(对边平行),而不是一个普通的四边形。与Q相对的四边形的角落由Q+u+v给出。这些值是三维的,即使四边形本身是一个二维对象。例如,一个角落在原点,沿Z方向延伸两个单位,在Y方向延伸一个单位的四边形将有值Q=(0,0,0),u=(0,0,2)和v=(0,1,0)。四边形是平面的,所以如果四边形位于XY、YZ或XZ平面上,它们的轴对齐边界框(Axis-Aligned Bounding Box, AABB)在一个维度上的厚度将为零。
2024-08-08 21:37:15
1186
原创 柏林噪声(Perlin Noise)
要获得看起来很酷的实心纹理,大多数人使用某种形式的Perlin噪声。Perlin噪声返回类似下图的噪声。Perlin噪声的一个关键部分是它是可重复的:它接受一个3D点作为输入,并总是返回相同的随机数字。附近的点返回相似的数字。Perlin噪声的另一个重要部分是它要简单快速,因此通常作为一种技巧来实现。
2024-08-07 21:21:14
1156
原创 光线追踪(纹理映射)
最近在跟着ray trace in one week来学习光线追踪(很多概念茅塞顿开)做到一半想着记录一下(比较随心)上面是之前的效果。
2024-08-05 19:29:32
802
原创 games103作业2
思考一个问题,现实生活中布料的每个质点在拉扯变大以后,会越来越难以拉扯,基于胡可定律的弹簧模型中需要增大弹性系数k来模拟这种现象,但这会造成显式积分和隐式积分都出现问题,增大了模拟计算量。首先是每个质点的力的分析,不考虑碰撞和弹簧弹力的情况下,每个质点受重力的影响,所以需要对每个质点进行速度和位置的重力影响更新。这里计算碰撞位移是在PBD以后,才计算是否发生碰撞以及碰撞后的速度和位移变换。在之前的课程中,求的是刚体对碰撞体进行撞击,所以最后要进行约束回来,但是这里不需要,这是流体。
2024-07-15 01:06:04
223
原创 gams103作业1含提高部分
这里是为了将质心设定为0,0,0。因为mesh.vertices是相对于局部坐标系的每个顶点的位置,但是不是相对于质心。这里碰撞检测根据读入给定的表面点和表面的法向量求点积判断是否小于0,如果是则证明两个的方向相反,发生碰撞。当同时满足以上两个条件的时候,则证明该点发生碰撞,此时需要记录碰撞的位置,按照平均的方式求碰撞点。根据算法流程,求出之前的速度,然后进行速度的分解,对不同方向的速度进行处理得到新的速度。但是这个地方会不断的颤抖,并且会沿着切平面方向不断的移动。个人觉得刚体用这种方式不太好。
2024-07-08 09:50:01
394
原创 games101作业6BVH SAH
设光线击中它们的概率分别为 𝑝(𝐴) 和 𝑝(𝐵) ,需要注意包围盒 𝐴 和 𝐵 之间存在重叠,且它们并不一定会填满其父节点的包围体,因此 𝑝(𝐴) 和 𝑝(𝐵) 的和不一定为1,且它们的和越大说明 𝐴 和 𝐵 的重叠程度越大。在实现的时候,相比于计算可能划分的代价然后寻找代价最小的划分,一种更好的办法是将节点 𝐶 所包围的空间沿着跨度最长的那个坐标轴的方向将空间均等的划分为若干个桶(Buckets),划分只会出现在桶与桶之间的位置上。这里是当x轴的长度大于y,z的时候,将所有的物体按照x轴来排序。
2024-05-23 23:26:33
1027
1
原创 games101作业5射线求交
因为我们知道从摄影机原点到胶片平面的距离(1 个单位)和胶片平面的高度(2 个单位,因为它从 y=1 到 y=-1),所以我们可以使用一些简单的三角法来求出直角三角形 ABC 的角度,即垂直角的一半。这一操作会改变场景的大小,当视野缩小的时候相当于场景放大(BC跨度小了,相当于用更小的单位长度表示相同的物体),当视野放大的时候相当于场景缩小。相当于一个缩放系数。例如,如果一条射线的原点为(0,0,0),方向为(0,0,-1),这些数字代表世界空间坐标系中的坐标,那么这条射线将与圆盘相交于(0,0,-5)。
2024-05-20 16:56:25
605
原创 games101作业4含反走样提高
我们当前的点不是整数点,但是在opencv绘画的时候,会把它强制转为整数点,所以我们可以先转成整数点,然后判断与这个整数点相邻的像素点,然后根据像素中心和这个实际的红点之间的距离判断着色。在这个图中意思就是,比如说这个以曲线上的一个像素为右下角的四个像素格子,另外三个都是黑色,只有曲线上的像素格子为绿色,如果曲线上的点都是这样,会导致什么结果。这里作者的意思是首先四舍五入的像素点的位置着色为最亮的颜色,对于相邻的像素,判断到其距离与到着色为最亮的像素的颜色的距离的比值,根据比值判断着色。
2024-05-12 23:43:01
613
3
原创 games101作业3,实现bump,displacement
首先我想解释一段代码,我感觉我自己这种说法最能说服我zp*=Z;首先这里的zp求的是透视变化前的深度,透视变化后深度也不应该会有变化,透视变化的时候,z的内容为z*z,w的内容为z。然后z的值会被修正为其原本的深度(ps:这里我有点乱,但是主要是需要结合透视修正公式来看)所以其实这里的v[i].z()就是等于v[i].w()。其中Z的值就是透视投影修正值。
2024-05-11 16:23:19
887
1
原创 Games101作业2,SSAA+MASS
参考作业2主要是片段是否在屏幕上显示和处理,也就是画一个图,图是由像素组成的,需要判断哪些像素需要颜色,这样才能画出来。首先我们需要判断哪些像素在三角形内部判断像素是否在三角形内部,需要使用叉乘的方式,判断的方向是否一致,比如统一指向屏幕向外,还是指向屏幕向里然后我们需要逐像素的去判断是否该像素点需要着色,同时需要深度判断,如果该三角形在该像素点上的表现更加靠前,则我们更像该像素点的颜色。main中,只是加上了生成projection矩阵的逻辑但是这样会有一个问题,此时的三角形是倒着的。
2024-05-07 22:26:42
967
1
原创 opengl学习-多光源(随心记录)(包括手电筒图片)
我们在前面的教程中已经学习了许多关于OpenGL中光照的知识,其中包括冯氏着色(Phong Shading)、材质(Material)、光照贴图(Lighting Map)以及不同种类的投光物(Light Caster)。在这一节中,我们将结合之前学过的所有知识,创建一个包含六个光源的场景。我们将模拟一个类似太阳的定向光(Directional Light)光源,四个分散在场景中的点光源(Point Light),以及一个手电筒(Flashlight)。
2024-04-30 15:00:23
729
原创 drawio制作精美流程图后word导出无损流程图
最近在用drawio写毕业设计,发现一个问题,drawio导出的svg矢量图,插入word后,再导出pdf会出现矢量图失真。
2024-04-29 10:32:00
945
原创 opengl学习-光照贴图(随心记录)
我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成。想想一辆汽车:它的外壳非常有光泽,车窗会部分反射周围的环境,轮胎不会那么有光泽,所以它没有镜面高光,轮毂非常闪亮(如果你洗车了的话)。汽车同样会有漫反射和环境光颜色,它们在整个物体上也不会是一样的,汽车有着许多种不同的环境光/漫反射颜色。总之,这样的物体在不同的部件上都有不同的材质属性。我们这里通过设置光照贴图来设置漫反射纹理系数和环境光照的削弱系数。
2024-04-24 15:59:02
793
原创 ruamel.yaml(很好的保存yml的格式)
设置YAML文件中每行的最大宽度。在这里设置为500,是为了防止行过长时的自动换行。:再次打开文件,这次是以写入模式,准备将修改后的数据写回文件。发现一个很好的保存Yaml格式的读入更改和写出的库。:读取YAML文件内容,并将其解析成Python的数据结构。对象的实例,这个对象将被用来读取和写入YAML文件。:将修改后的数据结构转换回YAML格式并写入文件。语句打开文件,这样可以确保文件在使用后正确关闭。等类似语句:更新YAML数据结构中的对应键值对。:设置YAML文件的缩进格式,其中。
2024-04-09 23:38:54
757
原创 opengl学习的注意事项(记录一下)
在OpenGL的使用中,函数指针是必需的,因为OpenGL是一个平台无关的标准,具体的实现是依赖于系统的。当你有多个VBO并且需要指定OpenGL从哪个VBO读取顶点属性数据时,关键在于你绑定VBO到GL_ARRAY_BUFFER目标的时机以及你调用。在OpenGL中,你可以创建多个VBO,每个VBO可以存储一种类型的顶点数据。是你想绑定的VBO的ID。在渲染过程中,当GPU需要读取顶点数据时,它会根据顶点属性指定的规则从关联的VBO中获取数据。通过这种方式,你可以为不同的顶点属性绑定不同的VBO。
2024-04-03 14:59:16
2023
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人