
计算机图形学
文章平均质量分 93
计算机图形学
码上生花
强者创造时代,能者顺应时代,弱者繁衍后代。
展开
-
截图与穿刺查询
本文将介绍一些基于树的几何数据结构,用于回答截窗和穿刺查询。此类查询在许多计算机图形算法中都很有用。穿刺查询(Stabbing Query)将报告被单个对象穿刺的所有对象。对于线段集 S,典型的穿刺查询将报告由单个查询线1穿刺的所有线段。另一方面,截窗查询(WindowingQuery)将报告位于窗口内的所有对象。对于点集S,典型的截窗查询将报告查询框(QueryBox)B内的S的所有点。原创 2025-01-14 09:33:41 · 790 阅读 · 0 评论 -
实时渲染 -- 流明(Lumen)
首先我们需要知道Lumen需要解决哪些问题。很多人都会问,既然已经有了硬件的Raytracing ,我们为什么还要Lumen呢。这是由于很多硬件并不支持 Realtime Raytracing,对于支持的那些硬件, N 卡还算是勉强可以,而 A 卡支持的比较糟糕。并且实际测试中,3080大概 1 秒钟能做10 个billion 的计算,这个实际的计算量用来做GI 的话,实际还是比较费力的。原创 2024-04-15 11:36:34 · 1659 阅读 · 2 评论 -
实时渲染 -- 全局光照(Global Illumination)
我们今天的课程主题是动态全局光照和Lumen ,在讲Lumen之前,我们需要首先需要了解GI(Global Illumination),如果不把GI讲清楚,大家将会陷入Lumen复杂深邃的技术细节中。如果不了解GI的发展演变,大家会感觉Lumen中的某些细节处理是凭空从天上掉下来的。但其实不然,Lumen中的很多算法和思想在之前的一些GI算法中都有出现和实践过,因此Lumen更像一个各种GI算法的集大成者。我们只有理解GI最宏观的体系结构,你才能理解Lumen 是怎么产生的。原创 2024-04-14 16:27:26 · 2422 阅读 · 0 评论 -
图形学物体拾取:CPU VS GPU
消耗性能低;对于射线碰撞,没有精度问题;但是只能拾取Mesh这种粒度;除了拾取Mesh还可以拾取图元,比如三角形;依靠物理系统,消耗性能比较高;会有精度问题,比如图纸放大缩小上百倍很难拾取(本人因放大缩小图纸感受到了精度问题);打通了引擎Runtime和编辑器开发的桥梁,通过物体的拾取就可以挂载其他辅助的组件,例如Gizmos,进而编辑场景。或者通过脚本来调用raycast对场景的物体进行射线检测或者动画拾取。原创 2024-04-09 01:05:06 · 865 阅读 · 0 评论 -
实时渲染 -- 体素化(Voxelization)
我们之前讨论的大部分问题都是关于面表示的。由于这些方法不需要显式地表示物体的内部空间,所以非常高效。体建模方法表示的是实体而不是表面。使用体模型可以产生更丰富的仿真效果,如物体的运动学行为和半透明光照效果。原创 2024-04-05 13:05:54 · 2850 阅读 · 0 评论 -
实时渲染 -- 材质(Materials)
(1) 非负性:fr(ωi ->ωr ) ≥ 0(2)线性:BRDF可以分成多项分别计算后相加(类似Blinn-Phong模型分成高光+漫发射+环境光)(3)可逆性:调换BRDF的入射光和出射光,返回值是一样的(4)能量守恒:不能违背能量守恒原则。下面公式,其实可以看做是半球上所有方向入射光的能量Li总 的一个系数,这个系数必须满足 ≤ 1(5)各向异性/各向同性BRDF:不管是各项同性还是异性材质都遵循光的可逆性,互换出入射光,BRDF返回值不变。原创 2024-04-04 15:10:25 · 1596 阅读 · 0 评论 -
判断点在多边形内的算法
在计算几何中,判定点是否在多边形内,是个非常有趣的问题。原创 2024-04-01 14:08:54 · 2379 阅读 · 8 评论 -
基于物理的实时渲染 -- PBR
PBR,或者用更通俗一些的称呼是指基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。正因为基于物理的渲染目的便是为了使用一种更符合物理学规律的方式来模拟光线,因此这种渲染方式与我们原来的Phong或者Blinn-Phong光照算法相比总体上看起来要更真实一些。原创 2024-03-24 14:34:55 · 1113 阅读 · 0 评论 -
计算机图形学之动画
在关键的位置上制作一帧画面,而中间的过程采用自动生成的方式形成动画自动生成可以用线性插值的方式,但是很生硬:用splines来平滑过度或者有必要的突变则会有更好的动画效果:但是这样的动画不符合物理规律,只是看起来合适。原创 2024-03-03 19:11:25 · 1568 阅读 · 0 评论 -
计算机图形渲染管线
光栅化部分的输入是经过变化和投影后的顶点,颜色以及纹理坐标,他的工作是给每个像素正确配色,一遍绘制整幅图形。由于输入的是三角形顶点,所以需要根据三角形表面的差异,逐个遍历三角形计算各个像素的颜色值。好处是模型的顶点信息放进VBO,这样每次画模型时,数据不在从CPU的势力范围内存里取,而是直接从GPU的显存里取,从而提高效率。VAO(Vertex Array Object)顶点数组对象,是一个保存了所有顶点数据属性的状态组合,它存储了顶点数据的格式以及顶点数据所需要的VBO对象的引用。与OpenGL的通信。原创 2022-07-31 13:21:22 · 567 阅读 · 0 评论 -
游戏空间划分技术
空间划分算法有很多,比如均匀网格四/八叉树k-d树Bsp树,每一种算法都有自己的优缺点,我们需要从理论上理解这些算法,然后在实际项目中进行灵活的运用。游戏中经常使用空间划分算法来优化碰撞,视锥体剔除,邻近查询,因此每当我们讨论一个算法的时候都会从这三方面进行探讨。另外我们还将考虑静态对象和动态对象对算法的影响,主要体现在空间节点的快速更新能力,以及对象快速变更节点的能力。原创 2024-02-24 13:36:42 · 1580 阅读 · 0 评论 -
实时渲染 -- 光追(Ray Tracing)
现实光照=直接光照+反弹1次的间接光照+反弹2次的光照+...现实光照=直接光照+反弹1次的间接光照+反弹2次的光照+...光线追踪(Ray Tracing)通过递归的方式实现了间接光的效果(递归多少次意味着反射了多少次),因此在使用光线追踪算法的时候其实就相当于间接实现了全局光照(Global Illumination)的效果,这也是光线追踪的一个明显优点。Whitted-Style Ray Tracing:基于光照是光线直射的理念。原创 2024-01-24 15:37:56 · 1867 阅读 · 0 评论 -
实时渲染 -- 几何(Geometry)
一个函数定义一个隐式几何 f(x,y,z)=0。原创 2024-01-24 14:57:28 · 1178 阅读 · 0 评论 -
实时渲染 -- 纹理(Texture)
相当于着色物体的"皮肤",负责提供基础颜色,而为了方便表示纹理(可以想象下,一个3D物体的皮肤其实是可以展开成一张平面),往往使用一个二维颜色数组去表示纹理。于是纹理平面就有了自己的坐标系(纹理空间),通常用u、v表示坐标轴。在之前的着色(Shading)计算中,光照计算只是计算了物体受到多少光照的影响(可以粗略理解成亮度,因为有些光本身也会提供颜色),而纹理则可以给这些物体提供基础颜色。原创 2024-01-23 15:17:03 · 1711 阅读 · 0 评论 -
实时渲染 -- 着色(Shading)
BlinnPhong(光照结果) = Ambien(环境光)+ Diffuse(漫反射光) + Specular(高光)调整一个着色材质的基础光照影响程度调整一个着色材质的漫反射接受程度调整一个着色材质的高光接受程度。原创 2024-01-23 14:23:40 · 1499 阅读 · 0 评论 -
实时渲染 -- 光栅化(Rasterization)
(相当于,先进行高频率采样,接着进行卷积操作,最后再进行目标频率采样得到目标分辨率图片)TAA 的核心思想是将采样点从单帧分布到多个帧上(从时间的维度上去采样),即对上一帧图像对应的位置进行采样,得到的像素以一定比例混入当前帧的图像像素中,这样当连续的多个帧的数据混合起来以后,就相当于对每个像素进行了多次采样。SSAA 是一种最原始的抗锯齿方法,虽然得到的图片锯齿感少了很多,代价是:例如4x SSAA,光栅化和着色的计算负荷都比原来多了4倍,buffer存储空间的大小也比目标分辨率多了4倍。原创 2024-01-22 19:14:46 · 1523 阅读 · 0 评论 -
实时渲染 -- 变换(Transformation)
但是仍有一些图元的部分顶点在视野范围内,另一些则在视野范围内,则需要“裁剪”掉视野外的部分,并在视野边界生成新的顶点。此时A、B仍然未知(因为挤压后的z′是不确定的,但是近裁面的z和远裁面的z必须和原来一致),我们可以通过解方程求得A、B,假设一个点(x1,y1,n)在近裁面,另一个点(x2,y2,f)在远裁面,我们期望最终经过映射后的z轴维度分别为。视图变换可理解为将物体的世界坐标系位置(包括角度)转换成在摄像机坐标系的位置(包括角度),换句话说就是求物体相对于摄像机的位置(包括角度)。原创 2024-01-22 15:43:11 · 1012 阅读 · 0 评论 -
实时阴影技术(Shadow Mapping)
额外设置一个摄像机在光源位置(Light Camera,光源摄像机),并且朝光照方向看去。用一张 Texture(称为 阴影贴图 Shadow Map)来记录 Light Camera所看到的像素深度(每个像素位置只记录所见最近深度,而不用做别的 shading 计算)来作为遮挡深度。1.2 渲染 Pass主摄像机需要渲染屏幕每个像素时,该像素对应的世界坐标进行 Light Camera 的MVP变换后能得到在 Light Camera屏幕空间中的对应位置 shadowCoord(x’,y’,z’)原创 2024-01-18 15:47:48 · 2886 阅读 · 0 评论 -
图片压缩知识
运动图像(视频)一般为位于一时间轴区间的一组连续画面,其中的相邻帧往往包含相同的背景和移动物体,只不过移动物体所在的空间位置略有不同,所以后一帧的数据与前一帧的数据有许多共同的地方,这种共同性是由于相邻帧记录了相邻时刻的同一场景画面,所以称为时间冗余。由于图像中表示颜色的数据出现的概率不同,对于出现频率高的赋(编)予较短字长的码,对出现频率小的编于较长字长的码,从而减少总的代码量,但不减少总的信息量。例如,人类视觉的一般分辨能力为26灰度等级,而一般的图像的量化采用的是28灰度等级,即存在视觉冗余。原创 2021-12-10 12:40:17 · 10224 阅读 · 0 评论 -
多边形碰撞检测算法
对于上面两个相交的多边形例子,实际应用中,其实不需要求出完整的闵可夫斯基差,只需要在闵可夫斯基差内形成一个多边形,如下图所示,并使这个多边形尽可能包围原点,这个多边形就称为单纯形。如下图所示,在给定向量 a 方向上,shape1 的最远点为(4,2),在向量 -a 的方向上,shape2 的最远点为(5,3),这两个点作差即得到点(-1,-1)。实际应用中,遍历所有角度的分离轴是不现实的,受益于多边形的性质,对于两个都是多边形的物体,只需要依次在每条边的垂直线做投影即可,如下图所示。原创 2023-09-22 20:14:35 · 4684 阅读 · 0 评论 -
计算机图形学之初识
计算机图形学初识原创 2022-07-26 12:26:12 · 1444 阅读 · 0 评论