Vulkan Samples 阅读 -- Advanced(一): Multi Sampling & High Dynamic Range & Shadow Mapping

Multi Sampling

prepare

  • getMaxUsableSampleCount:获取当前使用显卡支持最大的多重采样个数
  • setupRenderPass:重写父类方法,设置多重采样 attachment
    • std::array<VkAttachmentDescription, 3>
      • attachments[0]: Multisampled attachment
      • attachments[1]:从Multisampled attachment读取渲染结果
      • attachments[2]:Multisampled depth attachment
    • std::array<VkSubpassDependency, 2>
      • dependencies[0]: 向 Multisampled attachment写数据
      • dependencies[1]:从 Multisampled attachment 写入 color attachment
  • setupFrameBuffer: 重写父类方法, 设置多重采样 Target
    • setupMultisampleTarget
      • imageCreateInfo(color)
      • vkCreateImage
      • vkGetImageMemoryRequirements-vkAllocateMemory-vkBindImageMemory
      • vkCreateImageView
      • imageCreateInfo(depth)
      • vkCreateImage
      • vkGetImageMemoryRequirements-vkAllocateMemory-vkBindImageMemory
      • vkCreateImageView
    • vkCreateFramebuffer
  • loadAssets: 加载模型
  • prepareUniformBuffers
    • updateUniformBuffers
  • setupDescriptorSetLayout
  • preparePipelines:
    • VkGraphicsPipelineCreateInfo: 加入多重采样信息
      • VkPipelineMultisampleStateCreateInfo
        • multisampleState.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
        • multisampleState.rasterizationSamples = sampleCount;
        • multisampleState.sampleShadingEnable = VK_TRUE;
        • multisampleState.minSampleShading = 0.25f;
    • vkCreateGraphicsPipelines
  • setupDescriptorPool
  • setupDescriptorSet
  • buildCommandBuffers

render

  • draw
  • updateUniformBuffers

shader

- 使用的光照模型为Blinn-Phong

小结

   本节主要讲MSAA的设置方法, 重点是增加了 Multisampled attachment.

High Dynamic Range

prepare

  • loadAssets:加载模型, 和HDR贴图(cube map)
  • prepareUniformBuffers
    • updateUniformBuffers
  • prepareoffscreenfer: 离屏渲染资源
    • createAttachment: 两个color, 一个深度
    • vkCreateRenderPass
    • vkCreateFramebuffer
    • vkCreateSampler
    • Bloom separable filter pass
      • createAttachment: color
      • vkCreateRenderPass
      • vkCreateFramebuffer
      • vkCreateSampler
  • setupDescriptorSetLayout
    • vkCreateDescriptorSetLayout-vkCreatePipelineLayout(正常初始化流程)
    • Bloom filter
      • vkCreateDescriptorSetLayout
      • vkCreatePipelineLayout
    • G-Buffer composition
      • vkCreateDescriptorSetLayout
      • vkCreatePipelineLayout
  • preparePipelines: 有四个Pipelines
    • 最终渲染管线
    • Bloom pass
    • Second blur pass
    • Skybox pipeline
      • 有常量设置
        • specializationMapEntries
          • 0 为渲染天空盒
          • 1 为渲染物体
    • Object rendering pipeline
  • setupDescriptorPool
  • setupDescriptorSet : 为四个渲染管线设置 Descriptor
  • buildCommandBuffers: 三个阶段
    • Render scene to offscreen framebuffer
      • Skybox
      • 3D object
    • First bloom pass
    • Scene rendering with applied second bloom pass

render

  • draw
  • updateUniformBuffers

shader

- gbuffer阶段
	- 如果是渲染天空盒, 读取cubmap颜色
	- 如果是渲染物体: 则读取光反射天空盒颜色
- bloom 阶段: 也有常量
	- 模糊天空盒光源部分做泛光
- 渲染场景 composition
	- 读取gbuffer中颜色, 
	- 如果开启泛光, 渲染物体时使用使用泛光

小结

   本节讲的功能是, 如何渲染天空盒. 其实就是cubmap的复习, 常量的使用. 也重点展示了, bloom 的用法. 学习OpenGL中有对应章节教程, 所以可以无视泛光算法.

Shadow Mapping

prepare

  • loadAssets:加载场景资源
  • prepareOffscreenFramebuffer
    • 准备用于阴影的深度贴图
      • vkCreateImage
      • vkAllocateMemory-vkBindImageMemory-
      • vkCreateImageView
      • vkCreateSampler
    • prepareOffscreenRenderpass
      • attachmentDescription
      • std::array<VkSubpassDependency, 2> dependencies;
      • VkRenderPassCreateInfo
      • vkCreateRenderPass
    • vkCreateFramebuffer
  • prepareUniformBuffers
    • updateLight
    • updateUniformBufferOffscreen
    • updateUniformBuffers
  • setupDescriptorSetLayout
  • preparePipelines: 有三组Pipelines
    • 阴影深度贴图显示
    • 渲染带阴影的场景
      • No filtering
      • PCF filtering
    • 渲染阴影深度贴图
  • setupDescriptorPool
  • setupDescriptorSet : 为三个渲染管线设置 Descriptor
  • buildCommandBuffers: 三个阶段
    • Generate shadow map
      • vkCmdSetDepthBias: vulkan专门设置DepthBias的命令
    • Visualize shadow map: 如果选择显示阴影贴图走此Command
    • 渲染有阴影的场景

render

  • draw
  • updateLight
  • updateUniformBufferOffscreen
  • updateUniformBuffers

shader

- offscreen : 只需要相机视角的深度信息
- quad: 渲染深度贴图信息
- scene: 渲染场景

小结

   本节主要讲定向光阴影算法的实现, 基础中的基础. 重点在于, vulkan的vkCmdSetDepthBias命令. 后两节的阴影算法暂时不看, 后期在算法研习阶段再回来阅读.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值