- 博客(54)
- 收藏
- 关注
原创 GPU Gems1-Effective Water Simulation from Physical Models
这里主要是看上面的内容,我主要写一下我的疑惑点:首先是下面的方程3,我认为这就是说多个正弦函数叠加近似得到的高度场函数。
2025-05-11 21:22:33
282
原创 CPU与GPU之间的交互
或者另外一个场景,我们一般利用swapchain进行前后帧交替渲染,也就是每一帧的渲染目标不同,我们都是呈现一帧渲染一帧,那么此时的描述符指向的framebuffer就不同,我们就需要锁的概念,比如我们可以将framebuffer设置为targetrendering的状态来写framebuffer。上面的代码只是加入了命令列表,调用ExecuteCommandLists以后才算是加入了命令队列,当命令都被加入了命令列表以后,我们必须调用下面的方法来关闭命令列表。通过下面的方式创建命令队列。
2025-04-19 20:51:50
1680
3
原创 Animated Raindrop Ripples In HLSL
这节课是利用材质做雨滴i效果首先是创建一个圆环,实际上他就是为了创建一个圆,但是是空心的,可以看之前我的做法,这里以他的为准。
2025-04-18 23:48:11
377
原创 Distortion, Animation & Raymarching
这节课的主要目的是对uv进行操作,实现一些动画的效果,实际就是采样的动画主要的变化公式,这里主要注意hlsl中因为是列优先存储所以右乘会更加的快速。这里列举了三种变化方式。
2025-04-16 23:51:51
227
原创 龙书第四章预备知识
思考一个问题,GPU只是去执行我们的程序,但是像是shader需要使用到的资源,gpu需要对资源进行读和写,所以在发出绘制命令之前,我们需要将本次绘制调用相关的资源绑定或者链接到渲染流水线上。例如一款支持级别11的GPU除了个别特例之外,必须支持完整的Direct3D11功能集,在创建device的时候,知道不同的级别能够使用的功能是非常重要的。多重采样技术是需要硬件支持的,direct3D中的硬件实际上就是我们抽象出来的device,这个后面再讲,它就可以当成是gpu硬件。
2025-04-13 17:38:48
596
原创 Raymarching Textures In Depth
课程代码产生深度的原因是uv偏移,黑色区域会不断向左偏移,直到找到白色区域,形成层级关系。下面为5次寻找时产生的效果。本节课最主要的就是学会hlsl中使用纹理采样。课程中的代码(没有这张图我就没做)
2025-04-12 23:21:52
341
原创 Raymarching A Donut & Deformation
在hlsl中定义function这样定义会报错,不允许单独的定义function把function写到一个struct中定义就可以了。
2025-04-12 20:25:22
219
原创 Introduction To Raymarching
在二维上我们画一个圆实际上就是定义一个pos 然后 周围的uv判断是否在圆内三维上我们画一个球,实际上就是三维的坐标到某个pos来判断是否在球内看一下作者的做法我们需要知道的是,这个球实际上还是我们在物体的表面上形成的视觉欺骗的效果,我们设置为平面并且设置为rayOrigin的颜色其实我还是不是很理解这个球怎么算的,我的感觉就是作者的做法是为了让它立体。
2025-04-12 12:19:21
236
原创 Animated Movement & Color
这节课主要的目的是额外输出的掌握本课首先延续上节课制作了一个旋转展开,旋转关闭的圆,并且变动了颜色首先定义了已遮罩模式,不为1的地方也就是黑色区域会透明掉。并且设定了额外输出注意到此时中间往外会越来越暗,这是因为中间的采样点离每个pos都很近,就叠加了亮度。
2025-04-10 23:44:42
365
原创 HLSL Complex Shapes With For Loops
制作一个动态的cycle的动画材质首先我们使用hlsl来写一个圆加入偏移让圆动起来。
2025-04-10 20:50:30
194
原创 introduceHLSL
最近打算好好学习一下ue的shader,跟着下面的视频,打算每天至少更新一集。通过下面的蓝图方式我们就可以得到一个变化的材质。custom节点允许直接的写入hlsl代码。alpha参数的生成实际上就是下面的式子。
2025-04-07 21:30:14
191
原创 directx的矩阵运算
我在生成cube的时候,发现directx的运算规则不一样,以此记录。正常的情况下我们计算最终的点是这是列向量模式的正常运算directx的运算是。
2025-02-25 16:58:34
113
原创 Sampling Lights Directly
我们之前的采样方式都是在hitPoint的位置进行半球采样,这样做会有一个问题,如果我们这个点本来是被灯光照到的位置,但我们采样的过程中却并没有直射灯光的射线,会导致本来直射很亮的点却错误的着色。所以我们想到从灯光来进行采样。
2025-02-17 20:34:49
535
原创 正顺基碱基
之前的采样章节,开发了相对于z轴生成随机方向的方法,但是这个方法过于的片面,我们不能够保证所有的法线都与z轴对齐,我们需要考虑到不同的方向。
2025-02-17 13:03:24
623
原创 rayTrace 采样
这里的重要性采样是通过pdf的值来决定的。而SamplePDF的表示采样这个方向的radiance 的概率。文章中的意思我理解了一下,就是我们有两个采样的方向,一个是方位角一个是天顶角,不管是哪个的采样,其采样是独立的但是他们的概率都是1.于是我们需要在0到1的范围内进行采样.首先我们来看天顶角。我们计算到指定的r1的概率的CDF得到下面的推算(CDF就是到指定的角度的概率只和也就是一个概率密度的积分)但是我们的采样的方式并不是在交点处的半球内均匀的采样,而是依据normal来在一个球内采样。
2025-02-16 20:57:43
281
原创 RayTraceSeries分层采样
之前在像素上采样的方式为在每个像素额外的采样多次,然后计算一个期望,这就是MSAA的思想,这里的采样是随机的采样。这样可能会导致一个问题,我们知道采样非常的影响结果,如果采样的分布不均匀,就会导致结果的不正确。于是这里比较了分层采样和随机采样的结果的差别。最终的比较结果是分层采样的方式更加贴近真实的PI的值。比较的案例是利用一个单位圆来预估PI的大小。于是我们把它带入到射线的采样过程中。
2025-02-15 16:12:16
258
原创 计算环境光遮蔽的小技巧
其思想是,如果四周什么都没有,就是没有比你高的物体,那么你的遮蔽率就会很低。例如,当我们站在一个空旷的地方,周围没有高大的物体阻挡,各个方向的仰角都很小,那么环境光可以较为自由地照射到我们所处的位置;而如果我们处于一个狭窄的小巷中,两侧的墙壁会使某些方向的仰角增大,从而阻挡了部分光线,使得我们感受到的环境光强度降低。其主要思想是,我们一般去求AO的时候,需要再去对场景做一次正向渲染,然后根据着色点来进行遮蔽的采样,最终得到环境光的遮蔽比率。每次选择二维的一个方向,然后计算其最大的仰角。
2025-02-14 20:01:29
360
原创 Directx12 chapter4
接下来就是绑定到我们的描述符上,在绑定之前,我们需要知道它其实是首先得到描述符堆中的首描述符然后不断的向下位移得到描述符,也就是说我们需要获得堆描述符的首地址,然后还需要知道最终能够位移多少个描述符防止过载,同时还可以拿到别的类型的描述符的数量。根据交换链中的缓冲区的数量创建了缓冲区的资源数量,接下来我们需要将缓冲区绑定到描述符中,其实描述符的堆类型有两种,一种是gpu不可见,一种是gpu可见。我们可以在不同的阶段,为资源创建不同的描述符,这样资源就可以有不同的用处。
2025-01-07 20:40:06
1010
原创 Opengl SSAO
可以思考一个问题,ssao是将无限远的地方当作间接光照,那么当你的深度和我的shader point深度差值太大,我就不应该考虑你对我的影响,而如果你离我很近遮挡我,证明我的反射光照无法传递出去,那么影响就大。这里我思考了一下,是这样的,为什么需要转为view空间呢,因为ssao的本质就是测试到camera的深度,如果采样点的深度浅则看得见。造成这种现象的原因是,当处理该片段的时候,该片段的gposition落到后面的背景上,那么采样的深度很大部分在人体上,导致可见度很低。
2024-12-06 13:43:35
911
原创 Games202作业5(完结)
也就是我们需要在像素(i,j)的四周进行采样,然后将采样的权重加到一起,然后所有的权重和像素的乘积也加到一起,然后相除,得到最终滤波后的(i,j)像素期望的结果。首先我们需要求出motion vector来判断上一帧的像素位置来补充当前帧的对应像素的信息。所有作业代码(作业2被我弄不见了....)其实就是膨胀卷积原理,间隔采样。也就是针对图像空间进行降噪。首先我们需要计算均值和方差。
2024-10-20 16:55:33
335
1
原创 Games202作业4
这部分就是利用蒙特卡洛积分求微表面材质,也就是说此时假定,光照的大小为1.0,同时近似认为菲涅尔项为1.0。这里实现ImportanceSampleGGX是使用LearnOpengl中的公式,好吧,还是得学完。所谓重要性采样,文档中的意思就是计算m(半程向量)的值后,再利用这个值去求解L。可以看到在粗糙度较低时,我们计算出的积分值非常小并且有很多噪声。可以很明显的看出diffuse的材质上,上一行的表现要优于下一行。是因为低粗糙度的微表面材质接近镜面反射材质,即微表面的法线。附近,而我们由采样入射光方向。
2024-10-19 17:47:51
454
原创 GAMES202作业3
实现SSR的找交点的算法,通过倍增的方式快速找到交点,但是这里我感觉如果和课上的内容一样,应该还有一步存储一个step中最浅高度的做法,这里我没写这一步,偷懒了。,然后组成TBN矩阵把这个局部向量转换成世界坐标下的方向向量,也就是我们世界空间下的步进方向。采样20次后,可以看到一个不错的color bleeding现象。我们需要使用作业框架提供的函数。可以检验直接光照是否正确。
2024-10-09 19:26:27
686
原创 GAMES202作业2
确定查询方向:你需要一个三维方向向量,通常是通过法线、反射向量或视线方向等计算出来的。这是着色点的“查询方向”,用于在 cubemap 中查找光照。这个方向向量 ((x, y, z)) 指向环境中的某个方向。我们要找到与这个方向对应的 cubemap 面和该面上具体的二维坐标。找到对应的Cubemap面根据这个方向向量 ((x, y, z)) 的符号和大小,可以判断这个方向向量是指向 cubemap 的哪个面。例如:如果 (x) 分量最大且为正,说明该方向指向 cubemap 的 +X 面(右侧)
2024-10-08 11:42:58
1095
原创 贝尔曼公式
从一个状态和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
890
原创 强化学习——基本概念
例如上图就是location,就是网格的位置为state就是可采取的行动,这里就是可以move的位置就是状态采取action后的state当这个数是正数,代表这个行为是鼓励的,如果是负数,代表为惩罚,这个行为不鼓励。(这个正负数是相对的,就是数学概念,比如也可以用正数代表惩罚)包含了状态,action, reward。每个trajectory需要有return如上图,每次进入到target都会得一分,然后分数就会无穷大了每一个reward都设置一个,此时这个无穷值就变成了一个数,并且,如果。
2024-10-05 20:55:14
342
原创 GAMES202 作业1
我们首先需要知道一件事情,就是在UV坐标中,坐标的范围为0到1,所以我们设定一个滤波框的大小,并且想象我们将shadow map除以其本身的大小,shadow map就变成了1的单位大小。那么我们的处理方式就是设定采样窗口和采样密度,然后再窗口内均匀的采样,再shadow map上如果采样点的深度小于当前的深度,那么认为是遮挡物,记录其平均的深度信息。其中参数c是我们可以调节的一个最终系数,而参数filterRadiusUV是当使用PCF时,自适应还得考虑PCF的采样范围,但我们实现目前暂时用不到。
2024-09-20 13:46:08
860
原创 Instance(案例)
Cornell Box一般来说还有两个box,这里我们可以撞见六边面来模拟对于一个立方体,六个面,分别的求每个面的形状就可以。定义边界点定义轴向量这里我们按照正对一个面的左边的点来定义起始的位置,然后定义每个面的轴在cornell_box中加上两句在真实的Cornell Box中这两个盒子是有不同程度的倾斜的。所以我们需要对他进行旋转等操作。
2024-08-15 14:14:16
1019
原创 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
1222
原创 柏林噪声(Perlin Noise)
要获得看起来很酷的实心纹理,大多数人使用某种形式的Perlin噪声。Perlin噪声返回类似下图的噪声。Perlin噪声的一个关键部分是它是可重复的:它接受一个3D点作为输入,并总是返回相同的随机数字。附近的点返回相似的数字。Perlin噪声的另一个重要部分是它要简单快速,因此通常作为一种技巧来实现。
2024-08-07 21:21:14
1342
原创 光线追踪(纹理映射)
最近在跟着ray trace in one week来学习光线追踪(很多概念茅塞顿开)做到一半想着记录一下(比较随心)上面是之前的效果。
2024-08-05 19:29:32
819
原创 games103作业2
思考一个问题,现实生活中布料的每个质点在拉扯变大以后,会越来越难以拉扯,基于胡可定律的弹簧模型中需要增大弹性系数k来模拟这种现象,但这会造成显式积分和隐式积分都出现问题,增大了模拟计算量。首先是每个质点的力的分析,不考虑碰撞和弹簧弹力的情况下,每个质点受重力的影响,所以需要对每个质点进行速度和位置的重力影响更新。这里计算碰撞位移是在PBD以后,才计算是否发生碰撞以及碰撞后的速度和位移变换。在之前的课程中,求的是刚体对碰撞体进行撞击,所以最后要进行约束回来,但是这里不需要,这是流体。
2024-07-15 01:06:04
251
原创 gams103作业1含提高部分
这里是为了将质心设定为0,0,0。因为mesh.vertices是相对于局部坐标系的每个顶点的位置,但是不是相对于质心。这里碰撞检测根据读入给定的表面点和表面的法向量求点积判断是否小于0,如果是则证明两个的方向相反,发生碰撞。当同时满足以上两个条件的时候,则证明该点发生碰撞,此时需要记录碰撞的位置,按照平均的方式求碰撞点。根据算法流程,求出之前的速度,然后进行速度的分解,对不同方向的速度进行处理得到新的速度。但是这个地方会不断的颤抖,并且会沿着切平面方向不断的移动。个人觉得刚体用这种方式不太好。
2024-07-08 09:50:01
404
原创 games101作业6BVH SAH
设光线击中它们的概率分别为 𝑝(𝐴) 和 𝑝(𝐵) ,需要注意包围盒 𝐴 和 𝐵 之间存在重叠,且它们并不一定会填满其父节点的包围体,因此 𝑝(𝐴) 和 𝑝(𝐵) 的和不一定为1,且它们的和越大说明 𝐴 和 𝐵 的重叠程度越大。在实现的时候,相比于计算可能划分的代价然后寻找代价最小的划分,一种更好的办法是将节点 𝐶 所包围的空间沿着跨度最长的那个坐标轴的方向将空间均等的划分为若干个桶(Buckets),划分只会出现在桶与桶之间的位置上。这里是当x轴的长度大于y,z的时候,将所有的物体按照x轴来排序。
2024-05-23 23:26:33
1037
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人