4 沉默的舞台剧

尚未进行身份认证

暂无相关简介

等级
TA的排名 18w+

Vulkan_Shader_Day08—高级光照_Gamma校正

Gamma校正当我们计算出场景中所有像素的最终颜色以后,我们就必须把它们显示在监视器上。过去,大多数监视器是阴极射线管显示器(CRT)。这些监视器有一个物理特性就是两倍的输入电压产生的不是两倍的亮度。输入电压产生约为输入电压的2.2次幂的亮度,这叫做监视器Gamma。Gamma也叫灰度系数,每种显示设备都有自己的Gamma值,都不相同,有一个公式:设备输出亮度 =电压的Gamma次幂,任何...

2020-02-10 23:32:34

Vulkan_Shader_Day07—高级光照

高级光照

2020-02-10 00:23:05

Vulkan_Shader_Day06—光照(多光源_Multiple lights)

多光源_Multiple lights我们在前面的教程中已经学习了许多关于Vulkan中光照的知识,其中包括冯氏着色(Phong Shading)、材质(Material)、光照贴图(Lighting Map)以及不同种类的投光物(Light Caster)。在这一节中,我们将结合之前学过的所有知识,创建一个包含六个光源的场景。我们将模拟一个类似太阳的定向光(Directional Light)...

2020-02-08 23:23:29

Vulkan_Shader_Day05—光照(投光物_Light casters)

投光物(Light casters)我们目前使用的光照都来自于空间中的一个点。它能给我们不错的效果,但现实世界中,我们有很多种类的光照,每种的表现都不同。将光投射(Cast)到物体的光源叫做投光物(Light Caster)。在这一节中,我们将会讨论几种不同类型的投光物。学会模拟不同种类的光源是又一个能够进一步丰富场景的工具。我们首先将会讨论定向光(Directional Light),接下来...

2020-02-07 00:43:26

Vulkan_Shader_Day04-s—推式常量(push constants)

在着色器中使用推式常量(push constants)为了能够更好的进行下部分投光物的练习,我们先创建十个相同大小,位置不同的箱子,故可使用push constants来实时更新不同位置创建箱子。简介当我们向着色器提供数据时,通常使用uniform缓冲区,存储(storage)缓冲区或其他类型的描述符资源。 遗憾的是,更新此类资源可能不太方便,尤其是当我们需要提供频繁更改的数据时。为此,引...

2020-02-06 00:28:55

Vulkan_Shader_Day04—光照(光照贴图_Lighting maps)

光照贴图在上一节中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观,但是这仍不能对一个物体的视觉输出提供足够多的灵活性。在上一节中,我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成。想想一辆汽车:它的外壳非常有光泽,车窗会部分反射周围的环境,轮胎不会那么有光泽...

2020-02-05 00:03:43

Vulkan_Shader_Day03—光照(材质_Materials)

光照之材质_Materials一、定义材质数据在现实世界里,每个物体会对光产生不同的反应。比如说,钢看起来通常会比陶瓷花瓶更闪闪发光,木头箱子也不会像钢制箱子那样对光产生很强的反射。每个物体对镜面高光也有不同的反应。有些物体反射光的时候不会有太多的散射(Scatter),因而产生一个较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的高光点。如果我们想要在Vulkan中模拟多种类型的物...

2020-02-03 22:14:31

Vulkan_Shader_Day02—光照(基础光照_Phong Lighting Model)

基础光照现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会更容易一些,而且看起来也差不多一样。这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting Model)。冯氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫...

2020-02-02 17:42:04

Vulkan_Shader_Day01—光照(物体颜色)

光照之颜色在学习部分之前,我们需要对上一部分代码进行部分修改重塑:1.使用立方体模型来代替测试光照场景。将原有代码的loadModel()方法替换成loadCube(); void loadCube() { vertices = { // positions // colors // normals // textur...

2020-02-01 23:37:25

Vulkan填坑学习Day28—摄像机(Camera)

摄像机(Camera)前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。Vulkan本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。本节我们将会讨论如何在Vulkan中配置一个摄像机,并且将会讨论FPS风格的摄像机,让你能够在3D场景中自由移动。我们也会讨论键盘...

2020-01-31 16:42:04

Vulkan填坑学习Day27-2—多采样抗锯齿(多重采样_Multisampling)

Vulkan 多重采样(Multisampling)我们的程序现在加载了多层LOD的纹理,它修复了对象远离观察者时的锯齿问题。图像显得更加平滑,但是仔细观察,你会发现在绘制的几何图形的边缘上有锯齿状的图案。这在我们早期的一个程序中尤其明显,当我们渲染一个四边形:这种不受欢迎的效果被称为“锯齿”,它是由于可供渲染的像素数量不足导致的结果。由于没有无限分辨率的显示器,总能看到一些锯齿。有很多方法可...

2020-01-30 15:19:24

Vulkan填坑学习Day27-1—贴图LOD(mipmap)

Vulkan 生成贴图(mipmap)Vulkan 生成贴图(mipmap),现在我们的程序可以加载和渲染3D模型了。Mipmap广泛应用于游戏和渲染软件,对于如何创建它们,Vulkan给了我们完全的控制权。Mipmap是缩小版本的image,每个新image是前一张图的宽度和高度的一半。Mipmap用于作为细节级别(即Level of Detail)的一种方式。远离相机的物体将从较小的mip...

2020-01-30 08:30:44

Vulkan填坑学习Day26-3—加载模型

加载模型Vulkan 加载模型(Loading models),应用程序现在已经可以渲染纹理3D模型,但是 vertices 顶点和 indices 索引数组中的几何体不是很有趣。在本章节我们扩展程序,从实际的模型文件冲加载顶点和索引数据,并使图形卡实际做一些工作。许多图形API系列教程中让读者在这样的章节中编写自己的OBJ加载程序。这样做的问题是任何有趣的3D应用程序很快需要某种功能,但是该...

2020-01-22 17:52:06

Vulkan填坑学习Day26-2—深度缓冲区

Vulkan 深度缓冲区Vulkan 深度缓冲区,到目前为止,我们所使用的几何图形为3D,但仍然完全扁平的。在本章节中我们添加Z坐标到3D模型数据中。我们将使用这个第三个坐标在当前平面上放置一个正方形,以查看几何图形没有进行深度排序造成的问题。一、3D 空间修改 Vertex 结构体使用3D vector作为位置,并且更新对应VkVertexInputAttributeDescription...

2020-01-22 16:41:32

Vulkan填坑学习Day26-1—组合图像取样器

Vulkan 组合图像取样器Vulkan 组合图像取样器,我们在教程的uniform缓冲区章节中首次了解了描述符。在本章节我们会看到一种新的描述符类型:组合图像取样器(combined image sampler)。该描述符使着色器通过类似上一章创建的采样器对象那样,来访问图像资源。我们将首先修改描述符布局,描述符对象池和描述符集合,以包括这样一个组合的图像采样器描述符。完成之后,我们会添加纹...

2020-01-22 15:17:49

Vulkan填坑学习Day25—图像视图和采样器

Vulkan 图像视图和采样器Vulkan 图像视图和采样器,在本章节我们将为图形管线创建另外两个资源来对图像进行采样。第一个资源我们之前已经接触过了,就是交换链,但是第二个资源比较新,它涉及着色器如何从图像中读取纹素。一、纹理图像视图我们之前看过交换链和帧缓冲区,图像不是直接访问,而是通过图像视图。我们也会借助图像视图来访问纹理图像。添加一个类成员变量vkImageView保存纹理图像,...

2020-01-22 14:24:23

Vulkan填坑学习Day24—纹理图像(Images)

Vulkan 纹理图像(Images)Vulkan 图像(Images),到目前为止,几何图形使用每个顶点颜色进行着色处理,这是一个局限性比较大的方式。在本教程的一部分内容中,我们实现纹理映射,使得几何图形看起来更加生动有趣。这也会允许我们在未来的章节中加载和绘制基本的3D模型。一、介绍添加一个纹理贴图到应用程序需要以下几个步骤:创建设备内存支持的图像对象从图像文件填充像素创建图像采...

2020-01-22 13:46:21

Vulkan填坑学习Day23—描述符池和集合

Vulkan 描述符池和集合Vulkan 描述符池和集合,描述符布局描述了可以绑定的描述符的类型。在本章节,我们创建描述符集,它将实际指定一个VkBuffer来绑定到一个uniform buffer描述符。一、描述符池描述符集合不能直接创建,它们必须像命令缓冲区一样,从对象池中分配使用。对于描述符集合相当于调用描述符对象池。我们将写一个新的函数createDescriptorPool来配置。...

2020-01-22 12:34:57

Vulkan填坑学习Day22—描述符布局和缓冲区

Vulkan 描述符布局和缓冲区Vulkan 描述符布局和缓冲区,在Vulkan中正确处理此问题的途径是使用资源描述符(resource descriptors)。描述符是着色器自由访问缓冲区和图像资源的一种方式。我们需要设置一个包含转换矩阵的缓冲区,并使顶点着色器通过描述符访问它们。一、简介我们现在可以将任意属性传递给每个顶点的顶点着色器使用。但是全局变量呢?我们将会从本章开始介绍3D图...

2020-01-22 12:33:56

Vulkan填坑学习Day21—索引缓冲区

Vulkan 索引缓冲区Vulkan 索引缓冲区,索引缓冲区(index buffer)就是一个指向顶点缓冲区的指针数组,它允许我们重排列顶点数据,并复用多个已经存在的顶点数据,本章介绍了如何创建和使用索引缓冲区。在实际产品的运行环境中3D模型的数据往往共享多个三角形之间的顶点数据。即使绘制一些简单的图形也是如此,比如矩形:绘制矩形需要两个三角形,通常意味着我们需要6个顶点数据。问题是其中的...

2020-01-22 12:33:25

查看更多

勋章 我的勋章
  • 新人勋章
    新人勋章
    用户发布第一条Blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。