目录
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
- std::array<VkAttachmentDescription, 3>
- setupFrameBuffer: 重写父类方法, 设置多重采样 Target
- setupMultisampleTarget
- imageCreateInfo(color)
- vkCreateImage
- vkGetImageMemoryRequirements-vkAllocateMemory-vkBindImageMemory
- vkCreateImageView
- imageCreateInfo(depth)
- vkCreateImage
- vkGetImageMemoryRequirements-vkAllocateMemory-vkBindImageMemory
- vkCreateImageView
- vkCreateFramebuffer
- setupMultisampleTarget
- 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;
- VkPipelineMultisampleStateCreateInfo
- vkCreateGraphicsPipelines
- VkGraphicsPipelineCreateInfo: 加入多重采样信息
- 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 为渲染物体
- specializationMapEntries
- 有常量设置
- 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 scene to offscreen framebuffer
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
- 渲染有阴影的场景
- Generate shadow map
render
- draw
- updateLight
- updateUniformBufferOffscreen
- updateUniformBuffers
shader
- offscreen : 只需要相机视角的深度信息
- quad: 渲染深度贴图信息
- scene: 渲染场景
小结
本节主要讲定向光阴影算法的实现, 基础中的基础. 重点在于, vulkan的vkCmdSetDepthBias命令. 后两节的阴影算法暂时不看, 后期在算法研习阶段再回来阅读.