OthorCulledGPU_LightMapper_Manager

If you guys live in China use to below link button please.

Overview.

根据针对场景lightmap效果改善的调查结果,发现现在美术在制作的时候效率非常低

首先来理解一下照明美术的特性吧。

因为没有完全使用实时GI,所以需要进行烘焙

这个时候需要进行非常多的修改制作

照明美术的作业需要非常细致,并且结果直接关系到最终的用户体验,因此可以支持反复预览查看的制作环境是一个非常重要的核心要素

现在古剑的业务工作流中很多要素是自动化的

以前也提过很多次,好的品质是需要将自动化减少到最小的

带着匠人精神自己一个细节一个要素的开关各个选项,去观察每个照明的值以及物件的GI相关设定值带来的变化,美术同学根据自己的理解完成最终效果

制作这个工具的根本原因是现在的工作环境,无法在短时间内让美术同学及时确认到场景的照明设置结果,从而保证品质

除去几个程序组提及的问题之外,如果这个工具可以帮助美术同学在每个区域都能达到高品质的话,那我们就来把这个功能做出来吧

Inspection list.

使用金街场景进行了实验

金街场景整体在全部Visible的基本环境内针对特定区域画面进行了实验,Progressive GPU light-mapper平均需要2分30秒~3分钟左右。

通常为了准确确认感觉,在计算阶段需要将时间缩短至15秒~30秒。

现在Local场景的Contribution GI是全部关掉的状态。

意思就是照明美术无法在本地确认应用GI效果的结果。

Contribution GI关掉的原因据程序组所说,是因为某个需求设置为关闭状态,只在烘焙服务器运行时自动打开。 Contribution GI选项如果是开着的状态,会使 CPU占有率增加,影响某个部门的业务。

Contribution GI option risk test.在场景内添加了约4k个物件,测试选项在被激活和被关闭时的状态下,CPU的占有度变化测试时,必须关掉Auto Generate lightmap选项实际上在本地制作的场景Auto Generate lightmap选项需要关闭烘焙命令以快捷键的形式提供给美术的话,个人认为美术可以直接点击按钮任何CPU占有度都基本上没有变化

•烘焙时间测定 •测试GPU : RTX 2080 TI Super. •使用了约3k个Contribution static物件 •所有物件的Stitching seams关闭。(无需所有物件都应用,如果全部打开,会使烘焙服务器处理时间暴增:此部分在CPU内另外处理,处理完之后开始生成烘焙数据。)

Baketime via GPU : estimated time around 2 hours 52 min

•烘焙时间测定 •使用了约3k个Contribution static物件 •放大部分领域测定时间 •需要加快处理时间,但是毫无帮助 •生成了所有数据的cash数据

•烘焙时间测定 •对于Contribution静止物件,使用Scene View Clip. •Scene View Clip是一个概念性的名称 •根据Game View的occlusion culling概念 •是除去现在Scene view内看到的物件之外,将mesh render关闭的概念

Baketime via GPU : estimated time around 1 min17 Second


•对于Scene View Clip… •使用 Isolation plugin的情况,将多个物件放在list的耗时很长 •实现Octree之后,将全部场景提前存储在物件list里试试 •金街在520 * 520 * 520内,放了所有的数据 •将Octree Cell横向竖向以10的高度为进行分割,似乎可以按照52m的3次元空间针对物件list进行快速接近 •以分割cell为标准,按照Scene view camera的cull distance展示物件是最好的 •但是也可以根据研发难度,以相似的概念进行研发

•不使用Octree 的方法 •使用Main Camera •在camera添加一个实现定好规格的Box Collider •Box Collider的大小美术是可以直接修改的,因此容易上手操作 •Box Collider大小我们可以把它看做照明美术想要部分细调的照明测试区域的空间的概念

•不使用Octree 的方法 •Box Collider内部有物体进来的话,执行以下函数 •现在场景的Contribution GI flag是false。(基本值) •做好以下函数之后,有物体进到Box Collider的话,应用光照图相关的Flag,如果物体不进到Box Collider,再重新对 ContributionGI flag进行解体

private static void SetStaticEditorFlag(GameObject obj, StaticEditorFlags flag,  bool shouldEnable)
{
    var currentFlags = GameObjectUtility.GetStaticEditorFlags(obj);

    if (shouldEnable)
    {
        currentFlags |= flag;
    }
    else
    {
        currentFlags &= ~flag;
    }
  
    GameObjectUtility.SetStaticEditorFlags(obj, currentFlags);
}

•Demo脚本构成 •为验证功能的必要性,使用内部函数进行简略实现 •使用了OnTriggerEnter和OnTriggerExit函数 •发现的问题 •以上两个Event函数值在runtime启动 •无法使用ExecuteInEditMode • •只套用功能的概念,我们使用Physics函数再直接试试

Categories: tools

Tagged as: ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s