图形算法
文章平均质量分 95
沉默的舞台剧
Keep running
展开
-
GPU Driven Occlusion Culling(Hiz)
最近集成遮挡剔除算法,最终从各种算法预研收敛到HIZ算法(此算法也可快速将视锥剔除集成进来做到剔除算法全部采用GPU驱动为主,可参照Vulkan_基于GPU的视锥体剔除和LOD),因此本部分我们来着重看一下HIZ算法。首先我们来看一下遮挡剔除的算法有哪些:一、遮挡剔除算法遮挡剔除的几种主要算法包括:遮挡查询算法软件遮挡剔除算法覆盖缓冲区算法使用几何着色器进行 GPU 驱动的遮挡剔除算法使用计算和间接绘制进行 GPU 驱动的遮挡剔除算法1.1 遮挡查询算法这是一种最低效且常用的方法,你原创 2022-04-10 10:44:29 · 4265 阅读 · 0 评论 -
Global Illumination_Screen-Space Ray Tracing(SSR)
本次介绍一种把原本应该在三维空间的Ray Marching 转换到平面空间中采用DDA画线算法的方式来进行纹理采样的屏幕空间局部光追的算法,通过此种转换可以使得在屏幕空间的采样非常均匀,并且减少普通SSR重复采样的问题。一、DDA画线算法DDA算法是计算机图形学中最简单的绘制直线算法。其主要思想是由直线公式y = kx + b推导出来的。本文为了均匀采样,将三维空间的取点转换到屏幕空间用。具体算法原理可以参照DDA算法和Bresenham算法。DDA画线算法是在屏幕空间最简单的一种画线算法(首先原创 2021-08-28 19:05:59 · 856 阅读 · 0 评论 -
基于傅里叶变换的顺序无关透明算法
以前讨论过相关OIT算法并用Vulkan实现过一种基于GPU并行链表的OIT,但无论是深度剥离或并行链表虽然可以实现顺序无关透明,但使用的显存及时间显然很费,确切的来说很难在项目中实际使用。一般引擎中常用基于加权的OIT,此算法虽然仅使用两趟pass即可解决大部分问题,但准确性却是存在一些小问题(毕竟符合计算机图形学一大定律:看着正确就行…),无意间发现一篇国外19年发布于可视化会议上的论文:Fourier Opacity Optimization for Scalable Exploration,本篇文原创 2021-08-22 09:16:50 · 1151 阅读 · 1 评论 -
Global Illumination_Screen-Space Directional Occlusion(SSDO)
之前我们了解过AO、SSAO、HBAO(可参照之前文章Vulkan_SSAO—屏幕空间环境光遮蔽、DirectX11进阶9_AO、SSAO、Particle System(GPU)、Global Illumination_Horizon-Based Ambient Occlusion(HBAO))。我们本次来看一下一种基于屏幕空间的全局光照算法。SSAO因为与SSDO、HBAO极其相似,仅是在最后一步时充分利用了随机查询点处的信息来模拟间接光照。一、基于屏幕空间的间接光照算法从上图(左数前两个)看原创 2021-08-15 11:14:22 · 1082 阅读 · 6 评论 -
Global Illumination_Reflective Shadow Maps(RSM)、Virtual Point Light(VPL)
光照可以分为两类:一类为直接光照,这类光照是直接由光源或者发光物发出的光照;另一类为直接光照之后反射的光照称为间接光照。直接光照的计算十分简单,因为计算的范围和次数(没有反射)有限。而对于间接光照而言计算就十分复杂,因为间接光照可能不止反射了一次,一束光可能需要经历了很多次反射才能到达着色点。而间接光照又十分重要,因此间接光照的模拟是图形学中一个经久不衰的话题。一、反射阴影贴图/立即辐射度光照算法1.1 虚拟点光源算法RSM(Reflective Shadow Maps)的核心思想是把直接光源照亮.原创 2021-08-07 19:27:47 · 1843 阅读 · 2 评论 -
vulkan_顺序无关的半透明混合(OIT)
一、OIT技术在3D渲染中,物体的渲染是按一定的顺序渲染的,这也就可能导致半透明的物体先于不透明的物体渲染,结果就是可能出现半透明物体后的物体由于深度遮挡而没有渲染出来。对于这种情况通常会先渲染所有的不透明物体再渲染半透明物体或者按深度进行排序来解决。但这样仍然无法解决半透明物体之间的透明效果渲染错误问题,特别是物体之间存在交叉无法通过简单的排序来解决。于是就有一些用专门来解决半透明物体渲染算法,OIT算法即Order Independent Transparency(顺序无关的半透明渲染),下图分别为.原创 2021-04-18 20:27:12 · 4680 阅读 · 3 评论 -
图形_反走样技术总结
一、走样1.1 走样原因说到走样,首先要说的就是采样。这也算是很多图形学专著中提到反走样相关技术时的一个惯例。许多专著中都会提到奈奎斯特采样定理。一个直观理解:傅里叶变换告诉我们,任何一个函数都可以通过不同周期的正余弦函数线性组合而成,一个函数经过傅里叶变换后的函数的定义域表示分解后的正余弦函数的频率范围,值则表示了这个线性组合的系数(当然对于连续的傅里叶变换而言线性组合系数这个解释不准确)。总之,如果一个函数它的傅里叶变换函数只在一个有限的区间内值不为0,那就可以称之为有限带宽函数。假设它的最大频率不原创 2021-04-04 18:47:02 · 1782 阅读 · 0 评论 -
Vulkan_纹理mipmap生成与LOD
我们本部分主要来看一下:如何使用图像的位块和适当的图像屏障在运行时根据基本图像生成完整的纹理mipmap以及纹理LOD的使用。原创 2020-10-14 12:58:58 · 2334 阅读 · 0 评论 -
Vulkan_模板测试运用1(轮廓绘制)
关于模板测试的概念和原理就不再赘述,具体可参照LearnOpenGL CN 模板测试章节。一、轮廓绘制原理为物体创建轮廓的步骤如下:在绘制(需要添加轮廓的)物体之前,将模板函数设置为VK_COMPARE_OP_ALWAYS,每当物体的片段被渲染时,将模板缓冲更新为1。渲染物体。禁用模板写入以及深度测试。将每个物体缩放一点点。使用一个不同的片段着色器,输出一个单独的(边框)颜色。再次绘制物体,但只在它们片段的模板值不等于1时才绘制。再次启用模板写入和深度测试。因为要绘制物体轮廓那么在原创 2020-10-12 00:22:28 · 738 阅读 · 0 评论 -
两种算法:判断一个点是否在一个复杂多边形的内部
一、PNPoly 算法在 GIS(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的问题。乍听起来还挺复杂。根据 W. Randolph Franklin 提出的 PNPoly 算法,只需区区几行代码就解决了这个问题。假设多边形的坐标存放在一个数组里,首先我们需要取得该数组在横坐标和纵坐标的最大值和最小值,根据这四个点算出一个四边型,首先判断目标坐标点是否在这个四边型之内,如果在这个四边型之外,那可以跳过后面较为复杂的计算,直接返回false。比如:在多边形的顶点中分别找出 X 坐标和原创 2020-09-06 23:51:33 · 1646 阅读 · 0 评论