Windows SDK中DirectX11如何实现延迟渲染中的光源剔除技术?

2026-05-23 15:380阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计5315个文字,预计阅读时间需要22分钟。

Windows SDK中DirectX11如何实现延迟渲染中的光源剔除技术?

前言+在上一章,我们主要介绍了如何使用延迟渲染,以及如何对G-Buffer进行一系列优化。在这一章中,我们将从光源入手,讨论如何对大量的动态光源进行剔除,从而获得显著的性能提升。

前言

在上一章,我们主要介绍了如何使用延迟渲染,以及如何对G-Buffer进行一系列优化。而在这一章里,我们将从光源入手,讨论如何对大量的动态光源进行剔除,从而获得显著的性能提升。

在此之前假定读者已经读过上一章,并熟悉了如下内容:

  • 计算着色器
  • 结构化缓冲区

DirectX11 With Windows SDK完整目录

Github项目源码

欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。

基于分块(Tile-Based)的光源剔除

为了剔除光源,一种最简单的方法就是利用摄像机的视锥体与点光源照射范围形成的球体做碰撞测试,和视锥体剔除的原理一致。当光源数目较大散布较为均匀时,可以有效减少光源数量。但这样做最明显的问题在于剔除不够精细,待绘制像素可能会受到视锥体内其余不能照射到当前像素的光源影响。

在此基础上,我们可以考虑将单个视锥体基于屏幕区域来划分为多个块,一个块有一个对应的子视锥体。在我们的demo中,每个分块的大小为16x16的分辨率。然后对每个子视锥体都进行一次全局光源的视锥体剔除,从而分别获得各自受影响的光源列表,最后在着色时根据当前像素所属的分块区域使用其对应的光源列表进行着色计算。而这项任务考虑到其重复计算的特性,可以交给GPU的计算着色器来完成。

阅读全文

本文共计5315个文字,预计阅读时间需要22分钟。

Windows SDK中DirectX11如何实现延迟渲染中的光源剔除技术?

前言+在上一章,我们主要介绍了如何使用延迟渲染,以及如何对G-Buffer进行一系列优化。在这一章中,我们将从光源入手,讨论如何对大量的动态光源进行剔除,从而获得显著的性能提升。

前言

在上一章,我们主要介绍了如何使用延迟渲染,以及如何对G-Buffer进行一系列优化。而在这一章里,我们将从光源入手,讨论如何对大量的动态光源进行剔除,从而获得显著的性能提升。

在此之前假定读者已经读过上一章,并熟悉了如下内容:

  • 计算着色器
  • 结构化缓冲区

DirectX11 With Windows SDK完整目录

Github项目源码

欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。

基于分块(Tile-Based)的光源剔除

为了剔除光源,一种最简单的方法就是利用摄像机的视锥体与点光源照射范围形成的球体做碰撞测试,和视锥体剔除的原理一致。当光源数目较大散布较为均匀时,可以有效减少光源数量。但这样做最明显的问题在于剔除不够精细,待绘制像素可能会受到视锥体内其余不能照射到当前像素的光源影响。

在此基础上,我们可以考虑将单个视锥体基于屏幕区域来划分为多个块,一个块有一个对应的子视锥体。在我们的demo中,每个分块的大小为16x16的分辨率。然后对每个子视锥体都进行一次全局光源的视锥体剔除,从而分别获得各自受影响的光源列表,最后在着色时根据当前像素所属的分块区域使用其对应的光源列表进行着色计算。而这项任务考虑到其重复计算的特性,可以交给GPU的计算着色器来完成。

阅读全文