构建pvs

FStaticLightingSystem::BeginLightmassProcess在lightmass的构建过程中,如果设置了pvs的构建则会一起构建。执行InitiateLightmassProcessor,然后在里面执行LightmassProcessor->InitiateExport

在里面如果选择了生成pvs则会创建FGuid::NewGuid

然后执行Exporter->WriteToChannel(Statistics, DebugMappingGuid);将VisibilityBucketGuids写入scene里面。

然后通过swarm来分布式写入文件Swarm.WriteChannel( Channel, &Scene, sizeof(Scene) );

PrecomputedVisibility体积计算与存储

然后在FLightmassExporter::WriteToChannel里通过WriteVisibilityData写入可见数据。

在FLightmassExporter::WriteVisibilityData里会拿所有的APrecomputedVisibilityVolume然后通过Volume->GetComponentsBoundingBox拿到这个

APrecomputedVisibilityVolume放置的范围。

并且如果有设置APrecomputedVisibilityOverrideVolume则会拿到希望覆盖的区域的范围并写入文件。

限制:

然后执行ApplyPrecomputedVisibility,这里会建立CombinedPrecomputedVisibilityCells,如果格子的x和y范围都在10000以内则开始遍历获取可见对象。

对cell范围内的对象执行SpreadVisibilityCell,取获取其他cell里面的可见对象信息。

这里面的AccumulateVisibility就是会将邻居的可见性与当前单元格的可见性相结合,这样可以减少可见性错误,但代价是剔除效率较低。

然后讲数据压缩为NAME_Zlib模式

运行时执行pvs:

在FDeferredShadingSceneRenderer::InitViews执行ComputeViewVisibility来获取可视信息。

FSceneRenderer::ComputeViewVisibility中执行View.PrecomputedVisibilityData = ViewState->GetPrecomputedVisibilityData(View, Scene);获取可见数据。

计算可见几何体

在FSceneRenderer::ComputeViewVisibility计算出可是对象后,通过执行OcclusionCull来剔除对象。

在SceneVisibility.cpp的OcclusionCull中如果拿到View.PrecomputedVisibilityData的数据说明有pvs的数据。他遍历View.PrimitiveVisibilityMap中的所有几何体数据,如果(View.PrecomputedVisibilityData[VisibilityId.ByteIndex] & VisibilityId.BitMask)也就是pvs的数据和当前的几何对象数据不重合,说明不在可视范围内,则把他隐藏。

获取数据:

在SceneOcclusion.cpp中FSceneViewState::GetPrecomputedVisibilityData是获取具体的视野和场景里面的可见对象列表。

Bucket和Cell:

首先如果开启了pvs则GAllowPrecomputedVisibility会为true

如果有pvs的数据,那么他的数据是通过Bucket和Bucket下的Cell组成的。通过Handler.PrecomputedVisibilityCellBuckets来遍历Bucket以及Bucket下的cell来设置视锥内的显示对象

cell下的视锥范围pvs对象

然后根据视锥内的索引起点来确定bucket的视野偏移索引的xy。让PrecomputedVisibilityBucketIndex平铺为一维数组。然后通过Handler.PrecomputedVisibilityCellBuckets来获取视锥内的可视对象。然后遍历这个bucket下的cell,看每个cell是否在视锥范围内。

如果在范围内则记录到从CachedVisibilityChunk中拿到PrecomputedVisibilityData数据或者从压缩的FCompressedVisibilityChunk里面拿到数据。

解压数据并缓存

CachedVisibilityChunk中自然是之前缓存下来的数据。而FCompressedVisibilityChunk中就要通过FCompression::UncompressMemory然后通过类型为NAME_Zlib的方式解压zlib格式的数据。最终还是存在CachedVisibilityChunk中,然后返回PrecomputedVisibilityData数据出去。

ue5-预计算可视性体积(PVS)相关推荐

  1. UE3 预计算可见性

    文档变更记录:由 Daniel Wright 创建. 预计算可见性 概述 将游戏设置为使用预计算可见性 将关卡设置为使用预计算可见性 单元格放置 可视化结果 可见性设置 相关统计数据 结果 限制 调试 ...

  2. 【转载收藏】Unity预计算实时GI

    初步介绍 新年假期结束了,想不想掌握一个新技能迎接全新的一年呢?不妨来阅读一下Unity预计算实时GI系列文章.本文是该系列的第一篇. 在Unity中有两种区别很大的技术被用于计算全局光照GI或光源反 ...

  3. 基于GPU预计算的大气散射

    本文转载自:https://blog.csdn.net/qq_31615919/article/details/85938076 基于GPU预计算的大气层光效渲染 前言 大气物理模型 渲染方程及其实现 ...

  4. 【计算机图形学】基于GPU预计算的大气层光效渲染

    基于GPU预计算的大气层光效渲染 前言 大气物理模型 渲染方程及其实现 实验结果 参考文献 前言 本文叙述基于物理模型的大气层光效渲染,不仅考虑单重散射,而且也尝试实现多重散射的效果.主要参考论文为E ...

  5. 使用预计算实时全局光照优化照明-布置光照探针

    本文地址:https://blog.csdn.net/t163361/article/details/123909115 翻译说明: 教程翻译主要用谷歌翻译后,对特别不通顺的地方进行了微调.同时针对一 ...

  6. Unity预计算全局实时GI(gi params)

    Unity提供许多进阶的光照贴图控制方法,这些设定被放在一个光照参数集(LightmapParameters)的资源里,好让设定能在不同的项目场景或是透过版本控制和团队一起共享. 要建立一个Light ...

  7. 【GAMES-202实时渲染】3、预计算环境光照(球谐函数(SH)、IBL、Split Sum、环境光阴影计算(PRT))

    Lec5~7 1 环境光贴图着色计算(不考虑阴影) 1.1 Image-Based Lighting(IBL) 1.2 The Split Sum 2 环境光贴图计算(考虑阴影) 2.1 球谐函数(S ...

  8. python 编写函数,实现根据键盘输入的长、宽、高之值计算长方体体积

    编写函数,实现根据键盘输入的长.宽.高之值计算长方体体积 n1 = input("长:") n2 = input("宽:") m =input("高: ...

  9. Unity预计算全局光照的学习(速度优化,LightProbe,LPPV)

    1.基本参数与使用 1.1 常规介绍 使用预计算光照需要在Window/Lighting面板下找到预计算光照选项,保持勾选预计算光照并保证场景中有一个光照静态的物体 此时在编辑器内构建后,预计算光照开 ...

  10. 使用预计算实时全局光照优化照明-微调光照贴图参数

    本文地址:https://blog.csdn.net/t163361/article/details/124107784 翻译说明: 教程翻译主要用谷歌翻译后,对特别不通顺的地方进行了微调.同时针对一 ...

最新文章

  1. 深度学习实战讲词嵌入 很好的 NLP电子书
  2. android -------- NDK 入门指南
  3. 鸿蒙是单线程还是多线程,鸿蒙 RT-Thread 两者之间究竟是不是竞争关系呢
  4. ubuntu上训练yolov3: Caught ValueError in DataLoader worker process 0. string indices must be integers.
  5. SAP CRM中间件sales status调试
  6. node --- 使用nrm改变npm的源
  7. 检查两个列表在Java中是否相等
  8. 51单片机实现c语言字母滚动,基于51单片机的led点阵滚动显示上下左右c语言程序.docx...
  9. 什么是数据库触发器?
  10. 数学建模一:层次分析法 附代码详解
  11. SAP SD跨公司销售案例教程案例介绍
  12. DVB-S/S2天线及信号相关知识
  13. 七夕情人节精美告白气球表白页
  14. VTK笔记-图形相关-圆锥体-vtkConeSoure类
  15. OCO-2卫星数据批量化下载教程
  16. 程序员面试常见的10个问题,非常实用的面试技巧,收藏一下
  17. FL Studio春节大特惠,一起嗨翻狗年
  18. html表格 内容间距,html怎么设置表格间距
  19. Java生鲜电商平台-商城后台架构与原型图实战
  20. 手把手教你用 jQuery 制作无缝轮播

热门文章

  1. 83岁清华奶奶,62岁 IT 大爷被阿里40万年薪争抢,你大妈始终是你大妈,你大爷永远是你大爷!...
  2. win10 屏幕保护时间到了不触发_你真的了解Win10么?网友教你玩转Win10!
  3. SD-WAN,一场广域网的革命
  4. 【zznu-夏季队内积分赛3-G】2333
  5. 省市名_code_拼音
  6. python去除图片水印api,python去除图片水印(部分可)
  7. OSChina 周六乱弹 —— 假如你被熊困到树上
  8. 计算机与经济学:天造地设的一对
  9. CSDN:2021博客之星年度总评选大赛投票
  10. 未明学院:被腾讯群面虐完后,我找到了未来的方向…