- 博客(97)
- 收藏
- 关注
原创 空间中的多变形面积学习
如果我们不以多边形的某一点为顶点来划分三角形而是以任意一点,如下图,这个方法也是成立的:S = S_OAB + S_OBC + S_OCD + S_ODE + S_OEA。计算的时候,当我们取O点为。
2022-11-18 18:00:25
371
原创 VS 使用注意-如果无法自动打开关闭之前的文件则删除.VS中的 .SUO文件
VS 使用注意-如果无法自动打开关闭之前的文件则删除.VS中的 .SUO文件,然后重新启动。
2022-09-28 10:47:38
492
原创 虚拟平面光源的vulkanAPI复现-原文分析
对原论文代码的结构解读,在进行vulkanVPI进行复现,以此来学习全局光照以及vulkan代码的相关操作。
2022-08-26 18:18:13
297
原创 Vulkan-官方示例解读-子通道
使用子通道和输入附件在单个渲染通道中从帧缓冲区附件(仅相同位置)写入和读取数据的高级示例。这用于实现延迟渲染合成,并在单次传递中增加了前向透明度.
2022-07-18 21:17:48
574
原创 Vulkan-官方示例解读-RayTracingShadows&在这里边使用模型(2)
上篇内容介绍了光线追踪的前半部分包括两层加速结构以及着色器绑定表的创建接下来万层下半部分内容五种shader具体的调用流程图如下(你也可以把此图看成Vulkan光追的渲染管线示意图):1)创建光线追踪调度的描述符集2)创建光线追踪管线(先于描述符集的创建)用于绑定着色器要调用的缓冲数据3)创建用于将矩阵传递到光线追踪光线生成着色器的统一缓冲区4)生成命令和缓冲5)创建存储图像二、Shader文件光线追踪管道的行为更像计算管道而不是光栅化图形管道。vk光线追踪在抽象的 3Dwidth/heigh
2022-06-11 22:16:14
704
2
原创 Vulkan-官方示例解读-RayTracingShadows&在这里边使用模型(1)
使用新的光线追踪扩展将光线追踪阴影投射添加到更复杂的场景中。展示如何添加多个命中和未命中着色器以及如何修改现有着色器以添加阴影计算。2.公共函数二、raytracingshadows.cpp文件1.引入库代码如下(示例):2.类以及类变量属性代码如下(示例):2.主要函数-1建立加速结构1)创建包含场景实际几何图形(顶点、三角形)的底层加速度结构。在本例中,我们将加载一个更复杂的场景,而不是一个简单的三角形。2)顶级加速结构包含场景的对象实例3.主要函数-2创建着色器绑定表详细内容参
2022-06-10 23:19:41
506
原创 Vulkan-官方示例解读-Shadows(光栅化)
2.重要函数1)为屏幕外帧缓冲区设置单独的渲染通道。这是必需的,因为屏幕外帧缓冲区附件使用的格式与示例中的格式不同。2)设置屏幕外帧缓冲器,用于将场景从光源的视点渲染。然后,此帧缓冲器的深度连接将用于从阴影通道的片段着色器中采样。3)该示例中的创建命令缓冲:注意用到了两个渲染通道,第一个用于生成阴影贴图,而选择是否用光源视角进行渲染则在第二个中。4)描述符布局5)描述符集6)管线7)uniform二、Shader1.offscreen 阴影贴图渲染vertfrag2.scene模型渲
2022-06-09 20:45:43
809
原创 Vulkan-官方示例解读-RayTracing
VK_KHR_acceleration_structure 和 VK_KHR_ray_tracing_pipeline 扩展进行硬件加速光线追踪的基本示例。展示了如何设置加速结构、光线追踪管线和进行实际光线追踪所需的着色器绑定表。2.RayTracing类2.函数创建暂存缓冲区以保存光线追踪加速结构的临时数据创建加速结构Buffer从用于光线追踪的某些缓冲区所需的缓冲区获取设备地址设置光线生成着色器将要被写入的存储图像创建包含场景实际几何图形(顶点、三角形)的底层加速度结构设置高层级的加速
2022-06-06 20:39:56
956
原创 Vulkan-官方示例解读-cube map&skyBox
从包含六个不同面的磁盘加载立方体贴图纹理。所有面和 mip 级别都上传到视频内存中,立方体贴图显示在天空盒上作为背景,并显示在 3D 模型上作为反射。并且演示了天空盒子的用法。2.函数加载cubemapbuildCommandBuffersloadAssetsDescriptorSets 描述符渲染管线UniformBuffer二、Shader1.skybox.vert代码如下(示例):2.skybox.frag代码如下(示例):3.reflect.vert代码如下(示例):
2022-06-05 21:36:03
1269
原创 Vulkan-官方示例解读-Specialization constants(专业化常数)
使用 SPIR-V 专业化常量从单个“超级”着色器创建具有不同照明路径的多个管道。给shader使用同一个uniform buffer2.函数buildCommandBufferspreparePipelines:使用specializationData 专业化数据。着色器阶段的每个着色器常量对应于一个地图条目。基于特化常量的着色器绑定由新的“constant_id”布局限定符标记。分配的专用化信息是着色器阶段(modul)的一部分,必须在创建模块后和创建管道之前进行设置。最后给每一个shader都创
2022-06-04 20:38:22
479
原创 Vulkan-官方示例解读-push constants推送常量而无需同意缓冲区
使用推送常量(存储在命令缓冲区中的小块统一数据)将数据传递给着色器,而无需统一缓冲区。使用推送常量,可以将一小段静态数据传递给着色器,该着色器存储在命令缓冲区统计信息中这非常适合传递例如静态每个对象的数据或参数,而无需描述符集该示例使用这些参数来推送不同的静态参数来呈现多个对象示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。代码如下(示例):2.函数设置球形物体函数:void buildCommandBuffers()void setupDescript
2022-06-03 23:04:14
532
原创 Vulkan-官方示例解读-动态统一缓冲区
动态统一缓冲区用于渲染具有存储在单个统一缓冲区对象中的多个矩阵的多个对象。各个矩阵在描述符绑定时间上动态寻址,最大限度地减少所需描述符集的数量。为每个对象使用一个统一缓冲区,而是分配一个大的统一缓冲区。关于设备通过 minUniformBufferOffsetAlignment 报告的对准包含场景中对象的所有矩阵。使用的描述符类型VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC然后允许设置动态偏移量,用于将数据从单个统一缓冲区传递到连接的着色器绑定点。用于对齐内存分配的
2022-06-03 22:24:24
766
原创 Vulkan-官方示例解读-descriptorSet(描述符集)以及Descriptorpool(描述符池)
文章目录前言一、descriptorSets.cpp1.类以及击沉变量2.函数二、着色器1.cube.vert2.cube.frag前言描述符用于将数据传递给着色器绑定点。设置描述符集、布局、池,基于集合布局创建单个管道,并使用不同的描述符集渲染多个对象。也是用来传递layout的方式,如:layout (set = 0, binding = 0) uniform UBOMatrices一、descriptorSets.cpp本示例使用了两个cube进行测试1.类以及击沉变量class Vu
2022-05-30 17:21:37
1834
原创 Vulkan-官方示例解读-piplines 2- 静态
文章目录前言一、主函数文件二、注意修改UI1.修改UI前言这个是渲染管线的拓展内容,主要还是集中在渲染管线的创建以及命令缓冲创建上,添加了统计数据功能以及在UI上进行改变操作。主要可以学习的是渲染模型的位置效果如何改变。提示:以下是本篇文章正文内容,下面案例可供参考一、主函数文件创建命令缓冲: void buildCommandBuffers() { VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBuf
2022-05-30 16:10:47
535
原创 Vulkan-官方示例解读-piplines
文章目录前言一、piplines.cpp1.基本变量2.函数二、GLSL1.phone2.toon3.wireframe前言piplines:使用将状态信息(光栅化状态、剔除模式等)与着色器一起烘焙到单个对象中的管道状态对象 (pso),使实现更容易优化使用(与 OpenGL 的动态状态机相比)。本例子还演示了管道导数的使用。后面进一步还有静态渲染管线。提示:以下是本篇文章正文内容,下面案例可供参考一、piplines.cpp1.基本变量class VulkanExample: publ
2022-05-30 15:32:05
529
原创 Vulkan-官方示例解读-Model-gltfscenerendering
文章目录前言一、gltfscenerendering.h文件1.VulkanglTFScene类:2.VulkanExample 类:二、CPP文件1.VulkanglTFScene函数2.glTF rendering函数3.Vulkan Example类函数三、shader1.创建shader2.scene.vert3.scene.frag前言渲染从 glTF 2.0 文件加载的完整场景(sponza宫殿)。该示例基于 glTF 模型加载示例,并添加了使用 Crytek 的 Sponza 模型以及每
2022-05-29 16:23:09
500
原创 Vulkan-官方示例解读-glTF model loading and rendering
文章目录前言一、文件结构分析二、代码分析1.VulkanglTFModel类的变量2.VulkanExample类总结前言加快vulkan的应用速度,直接分析model加载的代码。这些示例详细展示了如何实现 glTF 2.0 3D 格式 3D 传输文件格式的不同功能。展示如何从 glTF 2.0 文件加载完整的场景。 glTF 2.0 场景的结构被转换为使用 Vulkan 渲染场景所需的数据结构。一、文件结构分析直接定义了一个VulkanglTFModel类包含在 Vulkan 中渲
2022-05-28 21:59:32
884
原创 Vulkan-官方示例解读-Base&First triangle
Vulkan-官方示例解读-First triangle文章目录前言一、Base1、Base的基本内容2、Base的文件内容二、Triagle1.VulkanExample类创建:2.Triangle类用到的函数3.具体执行总结前言从头创建vulkan框架太过复杂,选择直接用官方的示例架构,从这里直接创建项目,第一步就是解读官方示例代码一、Base1、Base的基本内容base的核心是对原本vulkan所用到的一些列代码进行封装,之后在同一个解决方案下直接创建项目,这样重新创建项目的时候.
2022-05-28 15:45:47
719
原创 论文阅读-《用于有效计算间接照明的不完美阴影贴图》
提示:源文 Imperfect Shadow Maps for Efficient Computation of Indirect Illumination ,是给虚拟点光源的间接光照做阴影的(使用不完美阴影贴图)。核心就是近似可见性。文章目录摘要一、介绍二、相关工作三、不完美的阴影贴图1.场景预处理2.创建ISM3.讨论四、使用 ISM 的间接照明1.多次反弹五、结果1.ISM 的其他应用总结摘要提示:这里可以添加本文要记录的大概内容:作者提出了一种基于近似可见性查询的大型和全动态场景中间.
2022-05-15 17:04:45
480
1
原创 论文阅读-《结合分析直接照明和随机阴影》
提示:将直接照明公式化为无阴影照明和照明加权阴影的乘积,并将实时无阴影照明技术与光线追踪和去噪阴影相结合。这产生了具有低方差并且可以在不模糊阴影细节的情况下进行去噪的直接照明的比率估计器文章目录摘要一、介绍1.1 数学概述二、前置工作2.1 无阴影直接照明2.2 方差减少技术三、比率估计器3.1 以前的阴影照明估计器3.2 阴影照明的拆分公式3.3 阴影照明的比率估计器3.4 近似比率估计器3.5 对比率估计器进行去噪四、实时算法4.1 主要算法4.2 实时平面光4.3 噪声估计总结摘要解析照明.
2022-05-11 15:52:41
175
原创 论文阅读-《在直接光源计算和环境映射中结合相关和重要性采样》
一 摘要本文提出了一种通用的方差减少方法:相关采样和重要性采样的准最优组合。组合的权重是自动选择的,以保持重要性和相关采样的优点,所提出的采样方法用于大面积光源的高效直接光源计算和环境地图反射照明的计算。(PS。是否可用于虚拟平面光源的照射)。如果源是隐藏的,在这些情况下重要性采样会很好而如果源是完全可见的,则相关采样是有效的。所提出的方法自动检测特定情况并提供继承两种技术优点的结果。二 内容1.摘要:渲染渲染使用了BRDF,通过计算光路贡献度来进行光线计算。积分应用蒙特卡洛或准蒙特卡洛积
2022-05-07 17:00:48
256
原创 图形丁真,鉴定为X
http://www.onegreen.net/maps/m/world.htm 世界地图http://www.scratchapixel.com/http://www.opengl-tutorial.org/https://developer.nvidia.com/gpugems/gpugems/contributors 英伟达gems系列http://ogldev.atspace.co.uk/index.html 中文翻译版参看:http://wiki.jikexueyuan.com/proj
2022-04-13 17:52:29
641
原创 光线追踪学习:GPU端光线追踪学习
文章目录原文学习前言一、前置条件1.内容2.难点二、前置代码(sheder和三角形等设置)1.画面渲染2.Shader的使用3.材质信息4.在 shader 中进行三角形求交5.相机配置三、使用线性化的BVH树进行优化1. 构建BVH2. BVH 数据传送到 shader3. 和 AABB 盒子求交4. 非递归遍历 BVH 树四、开始光线追踪1. 原理总结原文学习GPU加速光线追踪前言之前跟着上文作者的博客学习了蒙卡罗特路径追踪,在CPU端模拟实现光追效果图片。但是渲染消耗过大,如果想要实现的更
2022-02-15 00:05:04
2264
原创 C++ 虚函数
虚函数是在基类中定义的成员函数,并且也可以在子类中进一步定义。在调用派生类时,将调用覆盖的函数。实例代码#include <iostream>using namespace std;class base { public: virtual void print(){ cout << "print base class" << endl; } void show(){ cout << "show b..
2022-02-07 17:34:52
483
原创 光线追踪学习:蒙特卡洛路径追踪的学习记录
光栅化与光线追踪感谢原作者让我复制作为技术学习的记录原文章的链接:蒙特卡洛路径追踪1;蒙特卡洛路径追踪2光线追踪与光栅化的区别在之前的文章中总结了技术方面的大概内容,还有很多的细节没有写明,比如光栅化只会显示出视野范围内的内容而裁减掉其他的东西,导致水面的倒影也会出现裁切等等。蒙特卡洛方法蒙特卡洛积分的目的: 当一个积分很难通过解析的方式得到答案的时候可以通过蒙特卡洛的方式近似得到积分结果:欲求区间上一函数的积分,我们往 x 区间上面丢豆子,并且计算豆子命中的位置的 y 的值,最后把他们
2022-01-16 16:59:04
791
原创 图形学知识:Ray Tracing in a Weekend笔记
光线追踪读书笔记Chapter 2:The vec3 class几乎所有的图形程序都有一些类用于存储几何向量和颜色。在许多系统中,这些向量是4D (3D +齐次坐标的几何,RGB + alpha透明通道的颜色)。对于我们的目的,三个坐标就足够了。我们将使用相同的类vec3用于颜色,位置,方向,偏移,等等。有些人不喜欢这个,因为它不能阻止你做一些愚蠢的事情,比如给一个位置添加颜色。他们有一个很好的观点,但当没有明显错误时,我们总是会采取“更少代码”的路线。下面是vec3类中的内容,后面还有一系列相关
2022-01-12 16:44:29
304
原创 opengl-PBR基于物理的渲染(Physically Based Rendering):光照实际渲染器
顶点着色器#version 330 corelayout (location = 0) in vec3 aPos;layout (location = 1) in vec2 aTexCoords;layout (location = 2) in vec3 aNormal;out vec2 TexCoords;out vec3 WorldPos;out vec3 Normal;uniform mat4 projection;uniform mat4 view;uniform mat..
2022-01-05 20:46:23
2152
原创 opengl-PBR基于物理的渲染(Physically Based Rendering):理论基础
PBR文档链接PBR-learnOpengl官方文档理论基础PBR概念PBR基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。相比Blinn-Pong光照算法更真实一些。基于物理的渲染仍然只是对基于物理原理的现实世界的一种近似。微平面模型所有的PBR技术都基于微平面理论。这项理论认为,达到微观尺度之后任何平面都可以用被称为微平面(Microfacets)的细小镜面来进行描绘。根
2021-12-26 13:38:55
2777
原创 opengl重新配置
VC++目录配置引用目录和静态链接库,C/C++配置头文件包含目录,链接器添加静态链接间接路径配置…\和sln文件同级的文件夹配置出现链接问题,添加glad.c文件到项目中动态链接库DLL放到和主文件同一级目录下注意自行添加stb_image.cpp文件和glad.c文件...
2021-12-07 22:05:14
326
原创 opengl实现骨骼动画-(1)原理
教学知识文档骨骼动画背景骨骼动画实际上是一个由两部分组成的过程。第一个由艺术家执行,第二个由程序员(或者更确切地说,你编写的引擎)执行。第一部分发生在建模软件内部,称为索具。这里发生的事情是,艺术家定义了网格下方的骨骼骨架。网格表示对象(无论是人类,怪物还是其他任何东西)的皮肤,并且骨骼用于以模仿现实世界中实际运动的方式移动网格。这是通过将每个顶点分配给一个或多个骨骼来完成的。将顶点分配给骨骼时,将定义一个权重,以确定骨骼移动时对顶点的影响量。通常的做法是使所有权重的总和为1(每个顶点)。例如,如
2021-11-28 18:25:20
2119
原创 opengl高级光照之延迟渲染以及光体积
延迟着色法延迟着色法官方文档我们现在一直使用的光照方式叫做正向渲染(Forward Rendering)或者正向着色法(Forward Shading),它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。它非常容易理解,也很容易实现,但是同时它对程序性能的影响也很大,因为对于每一个需要渲染的物体,程序都要对每一个光源每一个需要渲染的片段进行迭代,这是非常多的!因为大部分片段着色器的输出都会被之后的输出覆盖,正向渲染还会在场景中因为高深的复
2021-11-16 20:24:30
1461
原创 opengl高级光照之HDR
HDRopengl-HDR官方文档内容一般来说,当存储在帧缓冲(Framebuffer)中时,亮度和颜色的值是默认被限制在0.0到1.0之间的。这个看起来无辜的语句使我们一直将亮度与颜色的值设置在这个范围内,尝试着与场景契合。这样是能够运行的,也能给出还不错的效果。但是如果我们遇上了一个特定的区域,其中有多个亮光源使这些数值总和超过了1.0,又会发生什么呢?答案是这些片段中超过1.0的亮度或者颜色值会被约束在1.0,从而导致场景混成一片,难以分辨。显示器被限制为只能显示值为0.0到1.0间的颜色
2021-11-09 20:09:47
794
2
原创 opengl高级光照之视差贴图(陡峭视差贴图以及视差遮蔽映射)
视差贴图视差贴图官方文档视差贴图视差贴图(Parallax Mapping)技术和法线贴图差不多,但它有着不同的原则。和法线贴图一样视差贴图能够极大提升表面细节,使之具有深度感。它也是利用了视错觉,然而对深度有着更好的表达,与法线贴图一起用能够产生难以置信的效果。视差贴图和光照无关,我在这里是作为法线贴图的技术延续来讨论它的。需要注意的是在开始学习视差贴图之前强烈建议先对法线贴图,特别是切线空间有较好的理解。视差贴图属于位移贴图(Displacement Mapping)技术的一种,它对根据
2021-11-08 19:08:33
805
原创 opengl高级光照之法线贴图
法线贴图opengl官方文档核心修改的就是片段着色器中的normal值uniform sampler2D normalMap; void main(){ // 从法线贴图范围[0,1]获取法线 normal = texture(normalMap, fs_in.TexCoords).rgb; // 将法线向量转换为范围[-1,1] normal = normalize(normal * 2.0 - 1.0); [...]
2021-11-06 11:23:27
338
原创 opengl高级光照之点阴影
官方文档点阴影高级光照这个技术叫做点光阴影,过去的名字是万向阴影贴图(omnidirectional shadow maps)技术。算法和定向阴影映射差不多:我们从光的透视图生成一个深度贴图,基于当前fragment位置来对深度贴图采样,然后用储存的深度值和每个fragment进行对比,看看它是否在阴影中。定向阴影映射和万向阴影映射的主要不同在于深度贴图的使用上。对于深度贴图,我们需要从一个点光源的所有渲染场景,普通2D深度贴图不能工作;如果我们使用立方体贴图会怎样?因为立方体贴图可以储存6个
2021-09-25 17:10:56
466
原创 opengl高级光照-阴影映射
官方文档opengl阴影映射阴影映射(贴图)阴影映射(Shadow Mapping)背后的思路非常简单:我们以光的位置为视角进行渲染,我们能看到的东西都将被点亮,看不见的一定是在阴影之中了。假设有一个地板,在光源和它之间有一个大盒子。由于光源处向光线方向看去,可以看到这个盒子,但看不到地板的一部分,这部分就应该在阴影中了。在深度测试教程中,在深度缓冲里的一个值是摄像机视角下,对应于一个片段的一个0到1之间的深度值。如果我们从光源的透视图来渲染场景,并把深度值的结果储存到纹理中会怎样?通过这种方式
2021-09-24 18:11:08
880
原创 opengl高级光照之gamma校正
官方文章gamma校正gamma校正概念一个渐变的效果通过以下网站调整Gamma值可以观察到效果色彩管理网gamma校正Gamma校正(Gamma Correction)的思路是在最终的颜色输出上应用监视器Gamma的倒数。回头看前面的Gamma曲线图,你会有一个短划线,它是监视器Gamma曲线的翻转曲线。我们在颜色显示到监视器的时候把每个颜色输出都加上这个翻转的Gamma曲线,这样应用了监视器Gamma以后最终的颜色将会变为线性的。我们所得到的中间色调就会更亮,所以虽然监视器使它们变
2021-09-16 11:34:30
791
原创 opengl高级光照-Blinn-Phong
官方文档blinn-phong高级光照-Blinn-Phong冯氏光照不仅对真实光照有很好的近似,而且性能也很高。但是它的镜面反射会在一些情况下出现问题,特别是物体反光度很低时,会导致大片(粗糙的)高光区域。下面这张图展示了当反光度为1.0时地板会出现的效果:可以看到,在镜面高光区域的边缘出现了一道很明显的断层。出现这个问题的原因是观察向量和反射向量间的夹角不能大于90度。如果点积的结果为负数,镜面光分量会变为0.0。你可能会觉得,当光线与视线夹角大于90度时你应该不会接收到任何光才对,所以这
2021-09-14 11:35:43
470
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人