精华内容
下载资源
问答
  • 基于事件社会网络中考虑约束全局推荐策略.pdf
  • 考虑自动驾驶仪故障的复合全局滑模制导律.pdf
  • 建立了考虑蒸汽温位因素的全局能量集成超结构,描述了在全局热源、公用工程、汽轮机、全局热阱之间进行热量传递和交换的所有可能的拓扑结构。基于此超结构,建立了全局能量集成的混合整数非线性规划模型,并用列队...
  • 考虑新能源资源及出力特性的全局备用容量优化方法.pdf
  • 提出了基于广域信息的分层控制器结构,第一层是负责计算全局信息(如功角中心、角速度中心)的广域控制器...四机系统的仿真结果表明,当考虑广域信息的时滞影响时,该控制器仍能快速平息系统的振荡,提高系统的稳定性。
  • 研究了一个更一般的考虑CTL免疫作用的HIV感染的数学模型.模型的动力学性态完全由基本再生数Ro决定.当Ro≤1时,无病毒感染的平衡点是全局渐近稳定的;当Ro>1时,平凡平衡点失去稳定性,感染平衡点是全局渐近稳定的...
  • 解析 ruby 全局变量

    2021-01-02 22:35:53
    同时也视为程序的设计未经严格考虑.当你发现必须要使用全局变量时,记得给它一个不会在其它地方一不小心就用到的描述性名字(像上面那样叫$foo可能不是一个好想法). 全局变量的好处是其可以被跟踪;你可以做一个当变量...
  • 全局变量的优缺点及为什么要少用全局变量

    万次阅读 多人点赞 2019-03-27 22:06:58
    全局变量 对于程序员来说,是程序 “同步”的一种最方便的 方式,我相信大多数的程序员 刚开始都是使用全局变量来实现“同步”操作的,但是随着我们 编程理念的升华,我们会发现,原来全局变量不是我们想象的只有...

       全局变量 对于程序员来说,是程序 “同步”的一种最方便的 方式,我相信大多数的程序员 刚开始都是使用全局变量来实现“同步”操作的,但是随着我们 编程理念的升华,我们会发现,原来全局变量不是我们想象的只有好用,而没有缺点。 

     优点:

     1)全局可见,任何 一个函数或线程都可以读写全局变量-同步操作简单。

     2)内存地址固定,读写效率比较高。

    缺点:

    1)全局变量存放在静态存储区,系统需要为其分配内存,一直到程序结束, 才会释放内存,这一点就局部变量的动态分配,随用随从栈中申请,用完(函数调用完毕)就释放。

    2)影响函数的封装性能:我们肯定是希望我们写的函数具有重入性,就如一个黑盒子一般,只 通过函数参数就能得到返回,内部 实现要独立,但是如果函数中使用了全局变量,这势必就破坏了函数的封装性,会造成对全局变量的依赖。

    3)降低函数的移值性,原因同上。

    4)降低代码的可读性,这也意味着系统维护会不方便,因为一个全局变量可能会出现程序中的各个环节,函数的 执行也会根据环境变化而变化,所以调试会不太方便。

    5)全局变量的读写,可能会延迟,这主要是体现在“写”操作上,由于写操作,一般需要2个周期操作,所以有可能会出现,这边没写完时,那边已经读了,结果 读到的不是最终值,这个是一个概率事件,概率 很小,但是并不代表没有。

    小结:上面的说的缺点,可能有些人会觉得有些矫情,或者概率很小, 这个要分情况讨论的,如果对于一个非常简单的程序来说,代码量少, 功能也少,那全局变量无疑是最适合的同步方式。但是对于代码量大,功能有 多,逻辑又复杂的系统来讲,“稳定”来源于方方面面,其中就需要严谨和方便维护,所以不适用全局变量能够大大的避免出bug, 方便后期维护,这个时候就需要考虑下,尽量少用全局变量,替代全局变量的方式有很多,最简单易用的就是信号量或者消息队列。这个在裸机程序里也很好实现,而在 操作系统中,就更方便了,因为一般操作系统 都会提供信号量功能,可以直接使用。

    展开全文
  • 局部到全局的多模式电影场景分割个人总结1.研究现状:2.研究的意义:3.提出的解决方案(局部到全局的场景分割模型):4.电影场景数据集:5.结论:全文翻译局部到全局的多模式电影场景分割方法摘要1.介绍2.相关...

    个人总结

    1.研究现状:

            对于电影场景分割,最早的作品采用的是无监督的方法。例如,根据镜头相似度对镜头进行聚类;绘制低级视觉特征的镜头响应曲线进行阈值分割;使用快速全局k均值算法的光谱聚类进行镜头分组;缺点是,方法不灵活,严重依赖手动设置的不同视频的参数。
      有监督的方法,建立新的数据集。IBM OVSD、BBC Planet Earth,缺点是,数据集中的视频缺少丰富的情节或故事情节,测试视频的数量如此少,不能反应出各种场景方法的有效性。以镜头为分析单元,没有考虑场景中的语义信息。
      图像和短视频中的场景理解。缺少周围的上下文信息,并且短视频没有足够的时间和地点的变化。重要的是,这些作品假定了一系列可区分的预定义类别。但是,对于电影场景分割,不可能有这样的类别列表。
      较长视频中的场景理解。很少有数据集关注长视频中的场景,大多数都集中于演员活动的定位和分类。

    2.研究的意义:

            识别电影场景,包括场景边界的检测和对场景内容的理解,有助于广泛的电影理解任务,例如场景分类、跨电影场景检索、人际互动图和以人为中心的故事情节的建设。
      难点,场景的多变性,尽管场景通常发生在固定的位置,但场景可能在多个位置之间穿越,例如在电影的战斗场景中,人物从室内移动到室外,这些复杂的场景纠缠在检测高级语义信息的场景时增加了难度。

    3.提出的解决方案(局部到全局的场景分割模型):

    在三个级别对场景进行分割,即clip、segment、movie,集成了多模式的信息,可以从电影中提取出复杂的语义信息,为场景分割提供了自上而下的指导。
    1)关注场景的边界,使用监督的方法了解场景之间边界的内容,获得区分场景内和跨场景过渡的能力。
    2)镜头的特征表示,使用四个特征去表示一个镜头,分别是place、cast、action和audio。通过镜头之间的相似性去判断两个镜头之间的关系。
      在关键帧图像上的Places数据集训练ResNet去获取place特征。
      在CIM数据集上训练Fast-RCNN进行检测cast实例,在PIPA数据集上训练ResNet去提取cast特征。
      在AVA数据集上训练TSN去获取action特征。
      在AVAActiveSpeaker数据集上训练NaverNet去分离场景的语音和背景声音,stft在镜头中获取audio特征。
    3)Clip级别,对镜头边界的表示。场景分割公式化为镜头边界上的二分类问题,提出一个边界网络BNet对镜头边界进行建模,输入镜头,通过捕获前后两个镜头的差异和关系,去确定两者的边界,输出镜头的边界。
    4)Segment级别,基于镜头边界进行粗略预测场景的边界。获得镜头边界的序列后,通过局部序列模型,例如Bi-LSTM,去预测粗略的场景边界得分,即镜头边界成为场景边界的概率,然后使用阈值进行二值化,场景边界是镜头边界的子集。
    5)Movie级别,结合全局上下文信息进行最佳场景分割。粗略的场景边界仅仅考虑了局部的镜头信息,而忽略了全局的上下文信息。使用全局最佳模型G来考虑movie级的上下文。将粗略的场景集进行最佳合并,将局部不相关的粗略场景进行合并,形成最佳的最优的场景切换集。即通过数学建模出两个子超级镜头之间的相关性得分,得出一个最佳的合并场景集使得相关性得分总和最大。

    4.电影场景数据集:

    为了促进场景理解,构造了数据集MovieScenes,其中包含了21K个场景,是通过对150部电影中的270K个镜头分组得出的。与其他现有的数据集相比,MovieScenes规模巨大,镜头数量多,总持续时间长,涵盖了更广泛的数据源,拥有各种场景。涵盖了种类繁多的流派,包括戏剧、惊悚片、动作片,使得数据集更加全面和通用。带注释的场景长度从10s到120s不等,提供了较大的可变性。

    5.结论:

    在这项工作中,我们收集了一个大型注释集,用于对包含270K注释的150部电影进行场景分割。我们提出了一个局部到全局场景分割框架,以覆盖分层的时间和语义信息。实验表明,该框架非常有效,并且比现有方法具有更好的性能。

    全文翻译

    从局部到全局的多模式电影场景分割方法

    Anyi Rao1, Linning Xu2, Yu Xiong1, Guodong Xu1, Qingqiu Huang1, Bolei Zhou1, Dahua Lin1 1CUHK - SenseTime Joint Lab, The Chinese University of Hong Kong 2The Chinese University of Hong Kong, Shenzhen {anyirao, xy017, xg018, hq016, bzhou, dhlin}@ie.cuhk.edu.hk, linningxu@link.cuhk.edu.cn

    摘要

    场景是电影中讲故事的重要单元,它包含演员的复杂活动及其在物理环境中的互动。 识别场景的组成是迈向电影语义理解的关键一步。与在传统视觉问题中研究的视频相比,这是非常具有挑战性的,例如动作识别,因为电影中的场景通常包含更丰富的时间结构和更复杂的语义信息。为了实现这一目标,我们通过构建大型视频数据集MovieScenes来扩大场景分割任务,该视频数据集包含来自150部电影的21K带注释的场景片段。我们进一步提出了一个局部到全局场景分割框架,该框架在三个级别(即clip,segment和movie)上集成了多模式信息。该框架能够从长片电影的分层时间结构中提取出复杂的语义,从而为场景分割提供了自上而下的指导。我们的实验表明,所提出的网络能够以较高的精度将电影分割成场景,并且始终优于以前的方法。我们还发现,对MovieScenes进行预训练可以对现有方法进行重大改进。

    1.介绍

    想象一下,您正在看汤姆·克鲁斯(Tom Cruise)主演的电影《碟中谍》:在战斗现场,伊桑(Ethan)跳上直升机的着陆滑道,并在挡风玻璃上贴上了爆炸胶,以摧毁敌人。突然,这个故事跳入一个激动人心的场景,在此,伊桑(Ethan)扣动扳机,为挽救妻子朱莉娅(Julia)牺牲了生命。如此戏剧性的场景变化在电影的故事讲述中起着重要作用。一般来说,电影是由精心设计的一系列有趣的场景组成的,带有过渡效果,其中基本的故事情节决定了所呈现场景的顺序。因此,识别电影场景,包括场景边界的检测和对场景内容的理解,有助于实现广泛的电影理解任务,例如场景分类,跨电影场景检索,人际互动图和以人为中心的故事情节的建设。
    在这里插入图片描述
    图1.当我们查看图(a)中的任何单个镜头时,例如B镜头中的女人,我们无法推断当前事件是什么。如图(b)所示,只有当我们考虑了该场景中的所有镜头1-6时,我们才能认识到“这个女人正在邀请一对夫妇与乐队跳舞”。
      值得注意的是,场景和镜头本质上是不同的。通常,镜头是在不间断的时间内进行拍摄的,因此是连续的。场景是更高层次的语义单元。如图1所示,一个场景包括一系列镜头,以呈现故事中语义上连贯的部分。因此,尽管可以使用现有工具根据简单的视觉提示将电影轻松地划分为镜头[23],但是识别构成场景的镜头子序列的任务是一项艰巨的任务,因为需要顺序地进行语义理解发现这些镜头之间的关联在语义上是一致的,但实际上是不相似的。
      关于视频理解已经进行了广泛的研究。尽管在这一领域取得了长足的进步,但是大多数现有的作品都集中在从短视频中识别某些活动的类别[28,6,14]。更重要的是,这些作品假定了一系列可区分的预定义类别。但是,对于电影场景分割,不可能有这样的类别列表。 另外,根据镜头的语义连贯性将镜头分为场景,而不仅仅是视觉提示。因此,为此需要开发一种新方法。
      要关联视觉上不同的镜头,我们需要有一定的了解。这里的关键问题是“没有类别标签,我们如何学习语义?” 我们解决这个问题的想法包括三个方面:
      1)我们不尝试对内容进行分类,而是关注场景边界。我们可以通过监督的方式了解构成场景之间边界的内容,从而获得区分场景内和跨场景过渡的能力。
      2)我们利用包含在多个语义元素中的线索,包括place,cast,action和audio,来识别镜头之间的关联。通过整合这些方面,我们可以超越视觉观察,更有效地建立语义联系。
      3)我们还将从对电影的整体理解中探索自上而下的指导,这将进一步提高性能。
      基于这些想法,我们开发了一个局部到全局框架,该框架通过三个阶段执行场景分割:
       ①从多个方面提取镜头表示;
      ②根据集成信息进行局部预测;
      ③最后优化通过解决全局优化问题对镜头进行分组。
      为了促进这项研究,我们构建了MovieScenes,这是一个大型数据集,其中包含超过21K的场景,其中包含来自150部电影的270,000张快照。
      实验表明,与现有的最佳方法相比,我们的方法将性能提高了68%(以平均精度从28.1提高到47.1)[1]。在我们的数据集上进行预训练的现有方法在性能上也有很大的提高。

    2.相关工作

    场景边界检测和分割。最早的作品采用了多种无监督的方法。[22]根据镜头颜色相似度对镜头进行聚类。在[17]中,作者绘制了来自低级视觉特征的镜头响应曲线,并设置了剪切场景的阈值。[4,3]使用带有快速全局k均值算法的光谱聚类进一步对镜头进行分组。[10,24]通过优化预定义的优化目标,通过动态编程来预测场景边界。研究人员还求助于其他模态信息,例如 [13]利用HMM脚本,[23]使用低级视觉和音频功能构建场景过渡图。这些无监督的方法不灵活,并且严重依赖手动设置不同视频的参数。
      研究人员转向有监督的方法,并开始建立新的数据集。IBM OVSD [21]由21个短视频组成,场景粗糙,可能包含多个情节。BBC Planet Earth [1]来自BBC纪录片的11集。[15]从Places205 [31]生成综合数据。但是,这些数据集中的视频缺少丰富的情节或故事情节,因此限制了其在现实世界中的应用。测试视频的数量如此之小,以至于不能反映出考虑各种场景的方法的有效性。另外,他们的方法以镜头为分析单元,并在局部区域中递归实现场景分割。 由于他们没有考虑场景中的语义,因此很难学习高级语义并获得理想的结果。
      图像和短视频中的场景理解。基于图像的场景分析[31,29,9]可以推断出一些有关场景的基础知识,例如该图像中包含什么。但是,很难从单个静态图像中分辨出该动作,因为它缺少周围的上下文信息。几秒钟长的短视频进一步研究了动态场景理解[6,14]。但是,与长视频相比,所有这些视频都拍摄的单次拍摄视频没有足够的变化来捕捉时间和地点的变化。
      较长视频中的场景理解。很少有数据集关注长视频中的场景。大多数可用的长视频数据集都集中于识别电影或电视连续剧中的演员[2、12、16]以及对活动进行定位和分类[8]。 MovieGraphs [26]专注于电影中的各个场景剪辑以及场景的语言结构。场景之间的某些过渡部分将被丢弃,从而使信息不完整。
      为了实现可以扩展到长时间视频的更通用的场景分析,我们使用大型MovieScenes数据集解决了电影中的场景分割问题。我们提出了一个框架,该框架使用多个语义元素同时考虑了局部镜头之间的关系和全局场景之间的关系,从而获得了更好的分割结果。

    3.电影场景数据集

    为了促进电影中的场景理解,我们构造了MovieScenes,这是一个大型场景分割数据集,其中包含21K个场景,这些场景是通过对150部电影中的270K镜头进行分组而得出的。该数据集为研究场景中的复杂语义提供了基础,并促进了对场景顶部进行基于情节的长视频理解。

    3.1场景定义

    按照场景[17、4、10、24]的先前定义,场景是基于情节的语义单元,在一组特定的角色之间发生的一种确切的活动。尽管场景通常发生在固定的位置,但场景可能连续在多个位置之间穿越,例如在电影的战斗场景中,人物从室内移动到室外。这些复杂的场景纠缠在准确检测需要高级语义信息的场景时增加了难度。图2展示了MovieScenes中带注释的场景的一些示例,证明了这一困难。
    在这里插入图片描述图2.电影Bruce Almight(2003)中带注释的场景示例。底部的蓝线对应于整个电影时间线,其中深蓝色和浅蓝色区域表示不同的场景。在场景10中,角色在两个不同的地方打了电话,因此需要对该场景进行语义理解,以防止将其归类为不同的场景。在场景11中,由于此现场广播场景涉及三个以上位置和角色组,因此任务变得更加困难。在这种情况下,视觉提示仅可能失败,因此包含其他方面(例如音频提示)变得至关重要。
      电影场景的多样性使注释者难以相互遵守。为了确保来自不同注释的结果的一致性,在注释过程中,我们提供了歧义示例的列表,并提供了具体的指导以阐明应如何处理此类情况。 此外,所有数据均由不同的注释者独立多次注释。最后,我们提供的多次批注和指导提供了高度一致的结果,即总计89.5%的高度一致性案例,如表1所示。
      
    表1. MovieScenes的数据一致性统计信息。我们根据注释者的一致性将所有注释分为三类:高/低一致性情况和不确定情况。不确定的案例在我们的实验中被丢弃。更多详细信息在补充材料中指定。
    在这里插入图片描述

    3.2注释工具和步骤

    我们的数据集包含150部电影,如果注释者一帧一帧地浏览电影,这将是一项艰巨的工作。我们采用基于镜头的方法,前提是应该始终将镜头唯一地分类为一个场景。因此,场景边界必须是所有镜头边界的子集。对于每部电影,我们首先使用现成的方法将其分为镜头[23]。这种基于镜头的方法大大简化了场景分割任务,并加快了注释过程。我们还开发了基于Web的注释工具,以方便注释。所有注释者都经过两轮注释过程,以确保高度一致性。在第一轮中,我们将电影的每个块分配给三个独立的注释器,以供以后进行一致性检查。在第二轮中,不一致的注释将重新分配给两个附加的注释器,以进行额外的评估。

    3.3批注统计

    大规模。表2比较了MovieScenes和现有的相似视频场景数据集。我们显示,在镜头/场景数量和总持续时间方面,MovieScenes明显大于其他数据集。此外,与短片或纪录片相比,我们的数据集涵盖了更广泛的各种数据源,可以捕获各种场景。
    多样性。我们数据集中的大多数电影具有90到120分钟的持续时间,可提供有关各个电影故事的丰富信息。涵盖了种类繁多的流派,包括最流行的流派,例如戏剧,惊悚片,动作片,使我们的数据集更加全面和通用。带注释的场景的长度从少于10s到大于120s不等,多数情况持续10到30s。Movie级别和scene级别都存在这种较大的可变性,这使得电影场景分割任务更具挑战性。

    表2.现有场景数据集的比较。
    在这里插入图片描述

    4.局部到全局的场景分割

    如上所述,场景是一系列连续的镜头。因此,可以将场景分割公式化为二分类问题,即确定镜头边界是否是场景边界。但是,此任务并不容易,因为分割场景需要识别多个语义方面并使用复杂的临时信息。
      为了解决这个问题,我们提出了一个局部到全局场景分割框架(LGSS)。模拟的整体过程如公式1所示。具有n个镜头的电影被表示为镜头序列[s1,…,sn],其中每个镜头都具有多个语义方面。我们基于镜头表示si设计一个三级模型来合并不同级别的上下文信息,即cilp级别(B),segment级别(T)和movie级别(G)。
      我们的模型给出了一系列预测[o1,···,on-1],其中oi∈{0,1}表示第i个镜头和第(i + 1)个镜头之间的边界是否是场景边界。
      在这里插入图片描述  在本节的以下部分中,我们将首先介绍如何获取si,即如何使用多个语义元素来表示镜头。然后我们将说明模型三个层次的详细信息,即B,T和G。总体框架如图3所示。
      在这里插入图片描述图3.局部到全局场景分割框架(LGSS)。在clip级别,我们为每个镜头提取四种编码,并使用BNet建模镜头边界。局部序列模型在segment级别输出粗糙的场景切换结果。最后,在movie级别,应用全局最佳分组来优化场景分割结果。

    4.1带有语义元素的镜头表示

    电影是一种典型的多模式数据,其中包含不同的高级语义元素。从神经网络的镜头中提取的全局特征在以前的工作中被广泛使用[1,24],但不足以捕获复杂的语义信息。
      场景是一系列镜头共享一些常见元素的场景,例如place、cast等,因此,重要的是要考虑这些相关的语义元素,以更好地表示镜头。在我们的LGSS框架中,镜头用四个元素表示,它们在场景的构成中起着重要作用,即place,cast,action和audio。
      为了获得每个镜头si的语义特征,我们利用:
      1)在关键帧图像上的Places数据集[31]上预训练的ResNet50 [11]以获取place特征,
      2)在CIM数据集[12]上预训练的Faster-RCNN [19]进行检测cast实例,在PIPA数据集[30]上预训练ResNet50以提取cast特征,
      3)在AVA数据集[8]上预先训练的TSN [27]以获取action特征,
      4)NaverNet [5]在AVAActiveSpeaker数据集[20]上进行了预训练,以分离语音和背景声音,stft [25]在具有16K Hz采样率和512窗口信号长度的镜头中分别获得其特征,并将它们连接起来以获得audio特征。

    4.2clip级别的镜头边界表示

    如前所述,场景分割可以公式化为镜头边界上的二分类问题。因此,如何表示镜头边界成为至关重要的问题。在这里,我们提出了一个边界网络(BNet)对镜头边界进行建模。如公式2所示,BNet(用B表示)以2wb镜头作为输入的电影clip,并输出边界表示bi。出于直觉,边界表示应同时捕捉镜头前后的差异和镜头之间的关系,BNet由两个分支Bd和Br组成。Bd由两个临时的卷积层建模,每个卷积层都在边界的前后都嵌入了镜头,然后进行内积运算去计算他们的差异。Br的目的是捕获镜头之间的关系,它是由一个临时卷积层紧跟着一个最大池化层实现的。
    在这里插入图片描述

    4.3segment级别的粗略预测

    在获得每个镜头边界bi的代表之后,问题就变成了根据表示序列[b1,···,bn-1]的序列来预测序列二进制labels [o1,o2,···,on-1],可以通过序列到序列模型[7]解决。但是,镜头数量n通常大于1000,这对于现有的顺序模型很难保存这么长的内存。因此,我们设计了一个segment级模型,以基于包含wt镜头(wt≪ n)的电影片段来预测粗略结果。具体来说,我们使用序列模型T,例如Bi-LSTM [7],步幅为wt / 2,可预测一系列粗略得分[p1,…,pn-1],如式3所示。pi∈[0,1]是镜头边界成为场景边界的概率。
    在这里插入图片描述
      然后,我们得到了一个粗略的预测oi∈{0,1},该预测表明第i个镜头边界是否为场景边界。通过将pi通过阈值τ进行二值化,我们得到
      在这里插入图片描述

    4.4movie级别的全局最佳分组

    Segment级别模型T获得的分割结果o¯i不够好,因为它只考虑wt镜头的局部信息,而忽略了整个电影的全局上下文信息。为了捕获全局结构,我们开发了全局最佳模型G来考虑电影级上下文。它将镜头表示si和粗略预测o¯i作为输入,并做出如下最终决定oi,
    在这里插入图片描述
      全局最优模型G被公式化为一个优化问题。在介绍它之前,我们先建立超级镜头和目标函数的概念。
      局部分割为我们提供了一个初始的粗糙场景剪切集C = {Ck},这里我们将Ck表示为超级镜头,即由segment级别结果[o¯1,…,,o¯n-1]确定的一系列连续镜头。我们的目标是将这些超级镜头合并为j个场景Φ(n = j)= {φ1,…,φj},其中
      在这里插入图片描述和|φk| ≥1。由于没有给出j,所以要自动确定目标场景编号j,我们需要查看所有可能的场景切换,即在这里插入图片描述。对于固定的j,我们想要找到最佳场景切换集在这里插入图片描述。总体优化问题如下:
      在这里插入图片描述
      在此,g(φk)是由场景φk获得的最佳场景切换得分。它公式化了超级镜头Cl∈φk与其余超级镜头Pk,l =Φk\ Cl之间的关系。g(φk)构成两个项以捕获全局关系和局部关系,Fs(Ck,Pk)是Ck和Pk之间的相似性得分,而Ft(Ck,Pk)是一个指示函数,表明Ck与来自Pk的任何超级镜头之间是否有非常高的相似性,目的是在场景中建立镜头线程。特别,
      在这里插入图片描述
    DP.通过动态编程(DP)可以有效地解决优化问题并确定目标场景编号。F(n = j)的更新是
    在这里插入图片描述
    其中C1:k是包含前k个超级镜头的集合。
    迭代优化。上面的DP可以给我们一个场景切换的结果,但是我们可以进一步将这个结果当作一个新的超级镜头集,并迭代地合并它们以改善最终结果。当超级镜头更新时,我们还需要更新这些超级镜头表示形式。对于所有包含的镜头进行简单的汇总对于超级镜头可能不是理想的表示,因为有些镜头包含的信息较少。因此,最好在最佳分组中优化超级镜头的表示。 补充中给出了有关超级镜头表示的这种改进的细节。

    实验

    5.1实验建立

    数据。我们使用MovieScenes数据集实现所有基线方法。整个注释集根据视频级别按10:2:3的比例分为Train,Val和Test集。
    实施细节。我们将交叉熵损失用于二分类。由于数据集中存在不平衡现象,即非场景转换镜头边界占主导地位(大约9:1),因此我们分别将非场景转换镜头边界和场景转换镜头边界的交叉熵损失设为1:9权重。我们使用Adam优化器对这些模型进行了30个时期的训练。初始学习速率为0.01,在第15个时期将学习速率除以10。
      在全局最优分组中,根据获得的这些镜头边界的分类分数(通常一个电影包含1k〜2k镜头边界),我们从局部分割中取j = 600 超级镜头。目标场景的范围从50 到400,即i∈[50,400]。这些值是根据MovieScenes统计信息估算的。
    评估指标。我们采用三种常用的度量标准:
    1)平均精度(AP)。特别是在我们的实验中,它是每部电影的AP的平均值oi = 1。
    2)Miou:检测到的场景边界的并交的加权总和,即其与最近的GroundTruth场景边界的距离。
    3)Recall @ 3s:每隔3秒钟调用一次,已注释场景边界的百分比位于预测边界的3s之内。

    5.2定量结果

    总体结果显示在表3中。我们重现了具有深层位置特征的现有方法[18、4、10、21、24、1],以进行公平比较。基本模型对具有place特征的镜头应用时间卷积,我们逐步向其中添加以下四个模块,即
    1)多个语义元素(Multi-Semantics),
    2)Clip级别的镜头边界表示(BNet),
    3)使用局部序列模型(Local Seq)在segment级别进行粗略预测,以及
    4)在movie级别(Global)进行全局最优分组。

    表3.场景分割结果。在我们的管道中,“多语义”表示多个语义元素,“ BNet”表示镜头边界建模边界网,“ Local Seq”表示局部序列模型,“ Global”表示全局最优分组。
    在这里插入图片描述
    总体结果分析。随机方法的性能取决于测试集中场景过渡/非场景过渡镜头边界的比率,该比率约为1:9。所有常规方法[18、4、10、21]的性能均优于随机方法。但是,由于它们仅考虑本地上下文信息而无法捕获语义信息,因此无法获得良好的性能。[24,1]通过考虑大范围信息,比常规方法[18,4,10,21]取得了更好的结果。
    分析我们的框架。我们的基本模型将时间卷积应用于具有place特征的镜头,并在AP上达到19.5。借助多种语义元素,我们的方法从19.5(基本)提高到24.3(多语义)(相对而言提高了24.6%)。使用BNet进行镜头边界建模的框架将性能从24.3(多语义)提高到42.2(多语义+ BNet)(相对于73.7%),这表明在场景分割任务中,直接对镜头边界进行建模是有用。局部序列模型(Multi-Semantics + BNet + Local Seq)的方法比模型(Multi Semantics + BNet)从42.2到44.9可获得2.7的绝对改善和6.4%的相对改进。完整的模型包括局部序列模型和全局最佳分组(多语义+ BNet +局部序列+全局),进一步将结果从44.9提高到47.1,这表明电影级优化对于场景分割非常重要。
      总而言之,借助多个语义元素,clip级别的镜头建模,segment级别的局部序列模型和movie级别的全局最佳分组,我们的最佳模型大大优于基本模型和以前的最佳模型[1],提高了27.6。在基础模型(Base)上,绝对值提高了142%,在暹罗模型上,绝对值提高了19.0,相对提高了68%[1]。这些验证了此局部到全局框架的有效性。

    5.3消融研究

    多个语义元素。我们以镜头边界建模BNet,局部序列模型和全局最优分组为基础模型。如表4所示,逐渐添加中层语义元素提高了最终结果。从仅使用place的模型开始,audio改进了4.4,action改进了6.5,cast改进了4.0,并且总体改进了8.1。该结果表明,place,cast表,action和audio在形成中都有助于场景分割。
      另外,借助我们的多语义元素,其他方法[21、24、1]可以实现20%到30%的相对改进。 该结果进一步证明我们的假设,即多语义元素有助于场景分割。

    表4.多个语义元素场景分割消融结果,其中研究了四个元素,包括place,cast,action和audio。
    在这里插入图片描述
    时间长度的影响。我们在clip级别(BNet)的镜头边界建模中选择了不同的窗口尺寸,在segment级别(Local Seq)中选择了Bi-LSTM的不同序列长度。结果显示在表5中。实验表明,较长的信息范围可以提高性能。有趣的是,最好的结果来自用于镜头边界建模的4个镜头和作为局部序列模型的输入的10个镜头边界,总共涉及14个镜头信息。这大约是一个场景的长度。它表明此时间信息范围有助于场景分割。

    表5.在clip和segment级别的不同时间窗口大小的比较。垂直线在clip级别镜头边界建模(BNet)的窗口大小上有所不同,水平线在segment级别序列模型的长度(seq)上有所不同。
    在这里插入图片描述
    全局最优分组中超参数的选择。我们将优化的迭代次数(Iter#)和初始超级镜头数目(Init#)不同,并将结果显示在表6中。

    表6.全局最佳分组中不同超参数的比较以及初始超级镜头数的不同选择。
    在这里插入图片描述
      我们首先查看每一行,然后更改初始超级镜头数量。初始编号为600的设置可获得最佳效果,因为它接近目标场景编号50到400,同时确保了足够大的搜索空间。然后,当我们查看每列时,我们发现初始编号为400的设置以最快的方式收敛。经过2次迭代,它可以很快获得最佳结果。并且所有设置都覆盖5次迭代。

    5.4定性结果

    定性结果显示了我们的多模式方法的有效性,如图4所示,全局最优分组的定性结果如图5所示。
    在这里插入图片描述
    图4.多个语义元素的解释,其中每个语义元素的相似性规范由相应的条长表示。这四个影片剪辑说明了不同元素如何有助于场景的预测。
    多个语义元素。为了量化多个语义元素的重要性,我们采用每种模式的余弦相似度范数。 图4(a)显示了一个示例,其中连拍在连续镜头中非常相似,有助于场景的形成。在图4(b)中,角色及其动作难以辨认:第一个镜头是人物很小的长镜头,而最后一个镜头只显示了一部分人物而没有清晰的面孔。在这些情况下,由于这些镜头之间共享了相似的音频功能,因此可以识别场景。图4(c)是一个典型的“电话”场景,其中每个镜头的动作都相似。在图4(d)中,只有一个地方是相似的,我们仍将其总结为一个场景。从以上对更多此类情况的观察和分析中,我们得出以下经验结论:多模式信息相互补充,有助于场景分割。
    最佳分组。我们展示了两种情况,以证明最佳分组的有效性。图5中有两个场景。如果没有全局最佳分组,则具有突然视点变化的场景很可能会预测场景转换(图中的红线),例如, 在第一种情况下,当镜头类型从全景拍摄变为近景拍摄时,粗略预测会得到两个场景切换。 在第二种情况下,当出现极端特写镜头时,粗略预测会得到场景切换。我们的全局最佳分组能够按预期消除这些多余的场景切换。
    在这里插入图片描述
    图5.两种情况下全局最优分组的定性结果。在每种情况下,第一行和第二行分别是在全局最优分组之前和之后的结果。两张照片之间的红线表示有场景切换。每种情况的基本事实是这些镜头属于同一场景。

    5.5跨数据集传输

    我们通过对MovieScenes数据集进行预训练,在现有数据集OVSD [1]和BBC [21]上测试了DP [10]和Siamese [1]的不同方法,结果如表7所示。通过对我们的数据集进行预训练,性能可以达到显着改善,即AP的绝对改善约10%,相对改善约15%。原因是我们的数据集涵盖了更多的场景,并为其上训练的模型带来了更好的生成能力。

    表7.现有数据集上的场景分割跨数据集传输结果(AP)。
    在这里插入图片描述

    6.结论

    在这项工作中,我们收集了一个大型注释集,用于对包含270K注释的150部电影进行场景分割。我们提出了一个局部到全局场景分割框架,以覆盖分层的时间和语义信息。实验表明,该框架非常有效,并且比现有方法具有更好的性能。成功的场景分割能够支持许多电影理解应用程序。本文所有研究共同表明,场景分析是一个充满挑战但有意义的话题,值得进一步研究。
      致谢这项工作得到了香港普通研究基金(GRF)的部分支持(No.14203518和编号14205719)和SenseTime协作式赠款,用于大规模多模式分析。

    展开全文
  • 【UE4零开始 082】全局光照

    千次阅读 2019-09-19 16:07:39
    Lightmass(全局光照) 创建具有复杂光交互作用的光照图,例如区域阴影和漫反射。它用于预计算 static(静态) 和 stationary(静止) 光源的照明贡献部分。 编辑器和全局光照之间的通信由 Swarm Agent 处理,它管理...

    Lightmass(全局光照) 创建具有复杂光交互作用的光照图,例如区域阴影和漫反射。它用于预计算 static(静态)stationary(静止) 光源的照明贡献部分。

    编辑器和全局光照之间的通信由 Swarm Agent 处理,它管理本地的照明构建,也可以将照明构建分发到远程机器。默认情况下以最小化方式打开的 Swarm Agent 还会跟踪照明构建进度,并让您了解哪些机器为您工作,它们在做什么,以及每个机器使用了多少线程。

    下图是Swarm Agent的一个示例图像(靠近底部的条形图显示了构建的完成程度)。

    在这里插入图片描述

    静态和静止光源的特性

    漫反射

    Diffuse Interreflection(漫反射) 是目前为止视觉上最重要的全局照明效果。在默认情况下,光源以全局光照反射,而材质的 BaseColor(基本颜色) 项控制有多少光(和什么颜色)向各个方向反射。这种效果有时被称为渗色。漫反射是入射光在各个方向上均匀反射,即不受观测方向或位置的影响。

    这里是一个由全局光照创建的场景,只有一个方向的光,且仅显示直接照明。光源无法直接照射的区域是黑色的。这是没有全局照明的结果。
    在这里插入图片描述
    这是第一个漫反射全局照明反射的样子。注意左边椅子后面的阴影,这叫做间接阴影,因为它是间接光的阴影。漫反射的亮度和颜色取决于入射光和与之相互作用的材质的漫反射项。每次反射都比前一次更暗,因为一些光被表面吸收而不是被反射。柱子底座比其他表面得到更多的间接光,因为它们更接近直射光下的区域。
    在这里插入图片描述
    这是第二次漫反射。光线变得更弱,分布更均匀。
    在这里插入图片描述

    这是四种漫反射相结合的场景。比起手动放置补光灯,模拟全局照明可以创建更细致和现实的照明。尤其是补光灯无法实现间接阴影。
    在这里插入图片描述

    反射光照获取基础材质的漫反射颜色,如下所示。这就是渗色这个术语的由来。渗色最明显的是高度饱和的颜色。可以通过在 Primitive(基元)Material(材质)Level(关卡) 上提升 DiffuseBoost 来夸大效果。

    在这里插入图片描述在这里插入图片描述

    角色照明

    全局光照在 Lightmass Importance Volume(全局光照重要性体积) 内以较低的分辨率将样本放置在一个统一的三维网格体中,并以较高的分辨率将样本放置在角色可能行走的向上表面上。每个照明示例捕获来自各个方向的间接光照,但不包括直接光照。

    第一幅图像是放置在地板上方的照明样本调试可视化,第二幅图像是光照模式下的相同场景。请注意红色挂毯上面的样本如何获取红色反射光。这些样本被可视化为单一颜色,但它们确实捕获了来自各个方向的光线。

    在这里插入图片描述在这里插入图片描述

    然后,间接照明缓存使用这些照明样本为可移动对象插入间接照明。间接照明影响光源环境阴影的颜色,而不是方向。使用 Show(显示)-> Visualize(可视化)-> Volume Lighting Samples(体积照明样本) 在视口中预览它们。

    限制
    • 体积样本放置的默认设置将导致在大型贴图中出现大量样本。这将导致间接照明缓存插值时间非常大。使用 Static Lighting Level Scale(静态光源等级缩放) 减少大贴图中的样本计数。
    • 全局光照重要性体积外的可移动对象将采用黑色间接照明。

    环境遮挡

    全局光照会自动计算出详细的间接阴影,但是为了艺术目的夸大间接阴影或者增强场景的接近感是很有用的。

    Ambient occlusion(环境遮挡) 是从一个均匀明亮的上半球得到的间接阴影,就像阴天。全局光照支持计算环境遮挡,将其应用于直接和间接照明,然后将其烘焙成光照图。默认情况下,环境遮挡是启用的,可以通过取消选中 World Settings(世界场景设置) 下的 Lightmass(全局光照)Lightmass Settings(全局光照设置) 中的 Use Ambient Occlusion(使用环境遮挡) 复选框来禁用。

    第一幅图是一个有间接照明但没有环境遮挡的场景。第二幅图是有环境遮挡的相同场景,且环境遮挡应用于直接和间接照明,注意对象聚集的地方变暗。

    无环境遮挡有环境遮挡
    在这里插入图片描述在这里插入图片描述
    环境遮挡设置
    属性说明
    Visualize Ambient Occlusion(可视化环境遮挡)在构建照明时,仅使用遮挡因子覆盖光照图。这有助于准确地了解遮挡因子是什么,并比较不同设置的效果。
    Max Occlusion Distance(最大遮挡距离)一个对象对另一个对象造成遮挡的最大距离。
    Fully Occluded Samples Fraction(完全遮挡样本比例)为了达到完全遮挡,必须遮挡的样本的比例。请注意,还有一个逐基元FullyOccludedSamplesFraction,它允许控制一个对象对其他对象造成的遮挡量。
    Occlusion Exponent(遮挡指数)指数越高,对比度越高。
    默认AO设置(MaxOcclusionDistance = 200,FullyOccludedSamplesFraction = 1.0,OcclusionExponent = 1.0)。MaxOcclusionDistance = 5。去除低频遮挡,只留下角落遮挡。FullyOccludedSamplesFraction = 0.8。所有范围内的遮挡都变暗了,任何80%及以上遮挡的区域都饱和成黑色。OcclusionExponent = 2。遮挡从中等过渡到饱和黑色要快得多,遮挡被推到角落里。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    当间接照明反射次数大于0时,在照明构建时间范围内,环境遮挡几乎是没有的。

    限制
    • 环境遮挡需要相当高的光照图分辨率才能良好显示,因为它在角落变化很快。
    • 预览质量构建在预览环境遮挡方面做得不是很好,因为AO需要非常密集的光照样本(就像间接阴影)。

    遮罩阴影

    全局光照在计算阴影时考虑了BLEND_Masked材质的不透明度遮罩。在编辑器视口中被剪切的部分材质也不会引起任何投影,这允许从树和叶子进行更详细的投影。

    在这里插入图片描述在这里插入图片描述

    仅适用于静止光源的特性

    环境法线天空遮挡

    当启用 stationary(静止)Sky Light(天空光照) 时,全局光照以环境法线的形式产生定向遮挡。

    距离场阴影贴图

    全局光照计算 stationary(静止) 光源的距离场阴影贴图。距离场阴影贴图即使在较低的分辨率下也能很好地保持其曲线形状;然而,它们不支持区域阴影或半透明阴影。

    仅适用于静态光源的特性

    区域光源和阴影

    采用全局光照时,所有 static(静态) 光源在默认情况下都是区域光源。 Point Light(点光源)Spot Light(聚光源) 使用的形状是一个球体,其半径是由 Lightmass Settings(全局光照设置) 下的 Light Source Radius(光源半径) 设置的。Directional Light(定向光源) 使用一个圆盘,位于场景的边缘。光源的大小是控制阴影柔度的两个因素之一,因为较大的光源会产生较柔和的阴影。另一个因素是从接收位置到阴影投射物的距离。随着距离的增加,阴影变得柔和,就像在现实生活中一样。

    第一幅图像是一个静态定向光源,只有静态照明,半影大小在任何地方都是相同的。在第二幅图像中,全局光照计算的区域阴影的清晰度由光源大小和遮挡物距离控制。注意柱子阴影在接近地面的地方如何变得更加清晰。

    在这里插入图片描述在这里插入图片描述

    Point Light(点光源)Spot Light(聚光源) 的半径用黄色线框表示,影响半径用蓝绿色线框表示。在大多数情况下,需要确保光源不与任何投射阴影的几何体相交,否则光线将在该几何体的两侧发出。
    在这里插入图片描述

    半透明阴影

    光在通过应用到静态阴影投射网格体的半透明材质之后,将失去一些能量,导致半透明的阴影。
    在这里插入图片描述

    半透明阴影颜色

    穿过材质的光称为透射光,每个颜色通道的透射光量在0到1之间。值为0表示完全不透明,1意味着入射光可以不受影响的穿过。由于透射光没有材质输入,所以目前是由以下其他材质输入得出的:

    • 光照材质
      • BLEND_Translucent和BLEND_Additive:透射光 = Lerp(White、BaseColor、Opacity)
      • BLEND_Modulate:透射光 = BaseColor
    • 无光照材质
      • BLEND_Translucent和BLEND_Additive:透射光 = Lerp(White、Emissive、Opacity)
      • BLEND_Modulate:透射光 = Emissive

    这意味着在不透明度为0时,该材质不会过滤掉入射光,也不会有半透明的阴影。在不透明度为1时,入射光将被材质的自发光或基本颜色(取决于是否被点亮)过滤。请注意,间接照明有时会洗掉半透明的阴影,使它们比半透明材料的自发光或漫反射更不饱和。

    半透明阴影清晰度

    有几个因素控制半透明阴影清晰度。

    使用大光源(光源角度为5的定向光源)使用小光源(光源角度为0)
    在这里插入图片描述在这里插入图片描述
    使用了一个小光源,但是光照图的分辨率太低,无法捕捉到清晰的半透明阴影质导出的分辨率过低(由材质编辑器中的导出分辨率比例(Export Resolution Scale)控制),无法捕捉到清晰的阴影
    在这里插入图片描述在这里插入图片描述

    间接光源也受到半透明材质的影响。该图像中的窗口根据光线的透射情况对入射光进行过滤,然后光线会在场景中来回反射,且颜色会发生变化。
    在这里插入图片描述

    限制
    • Translucent Materials(半透明材质) 目前不散射光,所以它们不会在其周围的对象上渗色。
    • 第一个漫反射目前不受半透明阴影的影响。这意味着,通过半透明材质的第一反射间接光源不会被该材质的 Transmission(透射) 过滤。
    • 目前不支持折射(透射光的焦散)。

    使用全局光照获取最佳质量

    使灯光显眼

    漫反射纹理

    渲染期间,光照像素颜色被确定为 BaseColor * Lighting(基本颜色 * 照明),所以基本颜色直接影响光照的可见度。高对比度或暗漫反射纹理使光照很难被注意到,而低对比度中距离漫反射纹理让光照的细节表现出来。

    比较第一幅图像中使用中等漫反射纹理构建的场景和第二幅图像中同样使用全局光照但带有噪点的黑色漫反射纹理构建的场景照明清晰度。第二幅图像中,只有最频繁的变化才会在场景中被注意到,比如阴影过渡。

    使用中等漫反射纹理构建的场景带有噪点的黑色漫反射纹理构建的场景
    在这里插入图片描述在这里插入图片描述

    Unlit(无光照) 视图模式可用于查看漫反射项。第一幅图像中的场景在无光照视图模式下看起来更加平坦和单调,这意味着所有的工作都是由光照完成的,最终像素颜色的变化主要是由于光照的不同。(为了获得良好的照明,在无光照视图模式下,场景看起来单调乏味。)将照明和宏观特征烘焙到漫反射纹理中将抵消照明。

    在这里插入图片描述在这里插入图片描述
    照明设置
    • 避免环境照明!像环境立方体贴图这样的环境照明会在关卡中添加一个恒定的环境项,从而减少间接光照区域的对比度。
    • 设置光源,使直接光照区域和间接光照区域之间有鲜明对比。对比度会让您更容易找到阴影过渡的位置,也会让您的关卡更有深度感。
    • 设置光源,使明亮区域不是太亮,黑暗区域不全黑,而仍然有值得注意的细节。检查最终目标显示器上的黑暗区域是很重要的。

    改善照明质量

    光照图分辨率

    使用高分辨率的纹理光照图是获得清晰、高质量照明的最好方法。使用高光照图分辨率的缺点是占用更多纹理内存和增加构建时间,所以需要做一个权衡。理想情况下,场景中的大部分光照图分辨率应该分配在高视觉影响区域和有高频阴影的地方。

    全局光照解算器质量

    Lightmass Solver(全局光照解算器) 设置是根据 Lighting Build Options(照明构建选项) 对话框中请求的构建质量自动设置的。生产应该提供足够好的质量,即在应用漫反射纹理时,穿帮不是很明显。

    获取最佳照明构建时间

    全局光照重要性体积

    许多贴图在编辑器中已经网格化到网格的边缘,但是需要高质量照明的实际可玩区域要小得多。全局光照取决于关卡的大小发射光子,因此这些背景网格体将大大增加需要发射的光子数量,而照明构建时间也将增加。全局光照重要性体积控制全局光照发射光子的区域,允许将其集中在需要清晰间接照明的区域。在重要性体积之外的区域在较低的质量下只能得到一次间接照明的反射。

    第一幅图像中显示了多玩家地图的系统占用线框视图。需要高质量照明的实际可玩区域是中心的绿色小团。

    第二幅图像中显示了多玩家地图可玩区域的近景,并正确选择了设置 Lightmass Importance Volume(全局光照重要性体积)。全局光照重要性体积将该区域的半径从80,000单位减少到10,000单位,照明面积小了64x倍。

    在这里插入图片描述在这里插入图片描述

    要将一个 Lightmass Importance Volume(全局光照重要性体积) 添加到某个关卡中,可以从 Modes(模式) 菜单的 Volume(体积) 选项卡中将这个 Lightmass Importance Volume(全局光照重要性体积) 对象拖动到关卡中,然后将其缩放到所需的大小。
    在这里插入图片描述
    还可以通过单击 Actor 下的 Details(细节) 面板中的 Convert Actor(转换Actor) 下拉框,将画笔转换为全局光照重要性体积。
    在这里插入图片描述
    单击该下拉框后,将出现一个菜单,可以在其中选择要替换画笔的Actor类型。
    在这里插入图片描述
    如果放置多个全局光照重要性体积,那么大多数照明工作将通过包含所有这些体积的边界框来完成。但是,体积照明样本仅放置在较小的体块中。

    世界场景设置

    可在 Lightmass(全局光照) 部分下的 World Settings(世界场景设置) 窗口中调整全局光照设置。
    在这里插入图片描述
    可从 Toolbar(工具栏) 单击WorldSettings_Icon.png图标以访问 World Settings(世界场景设置)

    属性说明
    Force No Precomputed Lighting(强制不使用预计算照明)这将使全局光照无法生成光源和阴影贴图,强制关卡仅使用动态照明。
    Static Lighting Level Scale(静态光源等级缩放)关卡的比例相对于引擎的比例,1虚幻单位 == 1cm。这可用于确定在照明中计算多少细节,较小的比例将大大增加构建时间。对于巨型关卡,可以使用2或4左右的较大比例来减少构建时间。
    Num Indirect Lighting Bounces(间接照明反射次数)允许光从光源反射到物体表面的次数。0为仅直接光照,1为一次反射,以此类推。反射1次计算时间最长,其次是反射2次。连续的反射几乎是不受约束的,但也不会增加太多的光,因为光在每次反射后都会衰减。
    Indirect Lighting Quality(间接照明质量)缩放全局光照GI解算器使用的样本计数。设置越高,会导致构建时间大量增加,但解算器穿帮(噪点、斑点)变少。请注意,这不会影响由于使用光照图(纹理接缝、压缩假影、纹索形状)而产生的穿帮。
    Indirect Lighting Smoothness(间接照明平滑度)数值越高,间接照明越平滑,可以隐藏解算器噪点,但也会丢失清晰的间接阴影和环境遮挡。在增大 Indirect Lighting Quality(间接照明质量) 以获取最高质量时,把这个值降低一些是有用的(0.66或0.75)。
    Environment Color(环境颜色)错过这个场景的光线会被染上的颜色。环境可以可视化为一个围绕着关卡的球体,向各个方向发射这种颜色的光。
    Environment Intensity(环境强度)缩放环境颜色以允许HDR环境颜色。
    Diffuse Boost(漫射增强)缩放场景中所有材质的漫反射效果。增加 DiffuseBoost(漫射增强) 是增加场景中间接照明强度的有效方法。在应用 DiffuseBoost(漫射增强) 之后,漫反射项的亮度被限制为1.0,以保持材质的能量守恒(这意味着光在每次反射时必须减少,而不是增加)。如果提高 DiffuseBoost(漫射增强) 未导致更明亮的间接照明,漫射项正被限制,光的IndirectLightingScale应该用于增加间接照明。
    Use Ambient Occlusion(使用环境遮挡)使静态环境遮挡可以通过全局光照计算并内置到光照图中。
    Direct Illumination Occlusion Fraction(直接照明遮挡率)多少AO应用于直接照明。
    Indirect Illumination Occlusion Fraction(间接照明遮挡率)多少AO应用于间接照明。
    Occlusion Exponent(遮挡指数)指数越高,对比度越高。
    Fully Occluded Samples Fraction(完全遮挡样本比例)为了达到完全遮挡,必须遮挡的样本的比例。
    Max Occlusion Distance(最大遮挡距离)一个对象对另一个对象造成遮挡的最大距离。
    Visualize Material Diffuse(可视化材质漫反射)仅用导出到全局光照的材质漫反射覆盖法线直接和间接照明。这在验证导出的材质漫反射与实际漫反射匹配时非常有用。
    Visualize Ambient Occlusion(可视化环境遮挡)仅用AO项覆盖法线直接和间接照明。这在调整环境遮挡设置时很有用,因为它隔离了遮挡项。
    Level Lighting Quality(关卡照明质量)这反映了当前关卡的照明构建质量设置。

    光源设置

    下面是可以在 Lightmass(全局光照) 部分的光源属性中进行调整的 Lightmass(全局光照) 设置。
    在这里插入图片描述

    属性说明
    Indirect Lighting Saturation(间接照明饱和度)0将导致间接照明完全不饱和,1将保持不变。
    Shadow Exponent(阴影指数)控制阴影半影的衰减,或区域从完全光照到完全阴影的变化速度。
    Light Source Angle(光源角度)对于 Directional Lights Only(仅定向光源),确定光的自发光面相对于接收器的延伸角度,影响半影大小。

    基元组件设置

    下面是可以在从 Modes(模式) 菜单的 Geometry(几何体) 选项卡中添加的 Brush(画笔) 上进行调整的 **Lightmass(全局光照)**设置。这些选项可以在 Brush(画笔)Details(细节) 面板下找到。
    在这里插入图片描述

    属性说明
    Diffuse Boost(漫射增强)缩放应用到此对象的所有材质的漫反射效果。
    Fully Occluded Samples Fraction(完全遮挡样本比例)为了实现对其他对象的完全遮挡,从此对象中采集的AO样本必须被遮挡的比例。这允许控制一个对象对其他对象造成多少遮挡。
    Shadow Indirect Only(仅间接阴影)如果选中此项,则此对象只会对间接照明产生阴影。这对于草非常有用,因为渲染的几何体只是实际几何体的表示,并不一定会投射出精确形状的阴影。它对草也很有用,因为产生阴影的频率太高,无法存储在预计算的光照图中。
    Use Two Sided Lighting(使用双面照明)如果选中此项,该对象将被照亮,就好像它接受来自其多边形两侧的光照。

    基本材质设置

    下面是可以在 Details(细节) 面板下的 Base Node(基本节点)Material(材质) 中进行调整的 Lightmass(全局光照) 设置。
    在这里插入图片描述

    属性说明
    Cast Shadow as Masked(像在遮罩状态一样下投射阴影)对于半透明材质,将该材质视为已被遮罩的材质,以用于阴影投射。
    Diffuse Boost(漫射增强)缩放此材质对静态照明的漫反射效果。
    Export Resolution Scale(导出分辨率缩放)缩放导出此材质属性时的分辨率。当需要细节时,这对于提高材质分辨率非常有用。
    展开全文
  • 简单描述业务场景: 项目是基于create-react-app搭建的,后续添加的css_modules及...但是有些时候我们却需要在某个模板文件中修改全局的样式,例如我全局做好了媒体查询配置,但是偏偏有一个页面的布局稍稍有些不同...

    简单描述业务场景:

    项目是基于create-react-app搭建的,后续添加的css_modules及less等相关配置。

    在写一些通用的组件的时候,我们往往需要单独提取一个全局的样式文件,用于存放所有通用的样式,模块内部则自己用自己的样式文件,以达到模块化开发的目的。

    但是有些时候我们却需要在某个模板文件中修改全局的样式,例如我全局做好了媒体查询配置,但是偏偏有一个页面的布局稍稍有些不同,然而如果我修改全局class的话,其他页面的布局就会混乱,之前碰到这样的问题我都是在单独在全局文件中新写一个单独的class用于独特页面的使用,但是这样往往会造成项目越大代码越沉冗,还有一种情况是应用第三方组件库,例如antd,你的模板中用到了antd的组件,那么很容易就会被antd所写的全局样式影响到,所以在模板中需要覆盖全局样式的情况算是比较常见的问题,日常应用如下:

    import React from 'react';                          
    import ECompontent from '../../../ECompontent/ECompontent'         
    import connect from '../../../reducers/connect'
    import listStyle from './BettingList.less'
    import { Tabs } from 'antd';
    import { StickyContainer, Sticky } from 'react-sticky';
    import CurrentBets from './CurrentBets'
    import MyBet from './MyBet'
    const TabPane = Tabs.TabPane;
    const renderTabBar = (props, DefaultTabBar) => (
      <Sticky bottomOffset={80}>
        {({ style }) => (
          <DefaultTabBar {...props} style={{ ...style, zIndex: 1, 
                                            background: '#3C396D' , 
                                            border : "0" ,
                                            height : "60px" ,
                                            paddingLeft : "20px" ,
                                            margin : "0",
                                            position: "relative",
                                            left : 0 ,
                                            borderRadius: "8px 8px 0 0 ",
                                            }} />
        )}
      </Sticky>
    );
    class BettingList extends ECompontent{
        constructor(){
            super();
        }
        render(){
            const Intl = this.props.lang.get;
            return (
                <div className={listStyle.root}>
                    <StickyContainer>
                        <Tabs defaultActiveKey="1" renderTabBar={renderTabBar}>
                            <TabPane tab={Intl("BettingList_tab1")} key="1">
                                <CurrentBets />
                            </TabPane>
                            <TabPane tab={Intl("BettingList_tab2")} key="2">
                                <MyBet />
                            </TabPane>
                        </Tabs>
                    </StickyContainer>
                </div>
            )
        }
    }
    
    export default connect(BettingList , "lang");

    代码中BettingList.less的这个模板文件是我自己写的,里面存放的是针对这个模板文件写的样式,但是我在这个文件里面想修改antd的样式却办不到,因为css_modules会将我设置的class名转成哈希以达到样式名不重复而实现模块化的效果,但是我的这个模板文件还真真实实的需要修改模板文件中应用的antd样式,而且注意最重要的一点是,绝对不能影响到全局antd的样式,否则你的代码绝对会乱了套了,最后的解决办法如下:

    // BettingList.less
    .root {
      // 修改全局类样式,并且因为最外层是模板root的类限制,所以修改后的全局样式只会在当前模板生效。
      :global {
        .ant-select-selection {
          max-height: 51px;
          overflow: auto;
        }
      }
    }

    完美解决,有问题留言,我看到了会回复。

    展开全文
  • 设置全局过滤配置文件 .gitignore_global 后,如果在某个版本库里也设置了.gitignore (局部过滤配置文件),那 **git 会优先考虑局部的过滤规则,然后再考虑全局**
  • 情况是这样的,我有一个CStringArray类型的全局变量 g_listArray,它需要被三个线程进行如下操作: 程序主线程:需要频繁对g_listArray 进行查询、取值操作,但不会修改或删除g_listArray 的内容; A线程:无...
  • 综述:最大池化,平均池化,全局最大池化和全局平均池化?区别原来是这样
  • vue 全局样式引用

    千次阅读 2019-06-12 14:52:01
    vue全局样式使用 使用vue-cli 脚手架快速构建了机遇webpack的vue项目。在页面开发过程中,我们会写各种各样的css样式。写多了就会想到将相同的css样式变成全局的样式。比如这样的: $color-99: #999; $color-66: #666...
  • C# 鼠标全局钩子

    千次阅读 2015-07-15 17:29:24
    /// /// 鼠标全局钩子 /// public class MouseHook { private const int WM_MOUSEMOVE = 0x200; private const int WM_LBUTTONDOWN = 0x201; private const int WM_RBUTTONDO
  • 全局思维

    千次阅读 2014-09-28 11:56:52
    例如某一领域,上游只管发展经济,污染物向下游排,局部看眼前发展了,从全局看则得不偿失。应从全局需要出发,不断提高局部工作的质量和水平,切忌一叶障目、不见泰山。   (五)坚持长远观点,防止短期、...
  • windows本身没有提供针对整个桌面全局模态对话框的实现方式,需要自己实现。 两种方法: 1、弹出一个全屏幕透明的对话框,再在它的基础上弹出模态框 2、当鼠标在弹出框外时,禁用键盘、鼠标所有功能 第一种不好的是...
  • ROS全局路径

    千次阅读 2019-08-06 17:22:56
    ROS的global planner是基于global_costmap上(产生一个初始的静态地图),更新频率基于update_frequency参数,全局是产生一个较长的路径让机器人起点(或当前位置)到终点。一个基于网格的算法可以通过A*或者...
  • swift 全局常量 && 全局变量的写法

    千次阅读 2019-07-03 07:14:19
    在OC里面 如果 想设置一个全局常量 很简单 使用简单宏定义 就搞定了 例如: #define WEBAPIBASEURL @"http://www.baidu.com/" 或者 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width 写在一个.h...
  • 全局光照(简述)

    千次阅读 2020-05-11 22:05:23
    全局光照(Global Illumination,简称 GI), 作为图形学中比较酷的概念之一,是指既考虑场景中来自光源的直接光照,又考虑经过场景中其他物体反射后的间接光照的一种渲染技术。 即可以理解为:全局光照 = 直接光照...
  • vue 全局组件注册With the new versions of Vue3 out now, it’s useful to start learning how the new updates will change the way we write code. One example is the changes in the way we write our index.js...
  • eval全局作用域

    千次阅读 2019-01-15 23:18:48
    eval全局作用域 问题描述: 在使用eval()执行代码的时候,遇到作用域的问题。eval()语句写于函数内,因此eval()内执行的变量也只是局部变量。函数外部无法访问。 问题分析: var x = 10; function testEval() { ...
  • 概述这三种变量看起来好像很相似,不过还是有挺多区别的,它们的共同点就是其存储区都在全局区,可参考我的另外一片博客:C++全局变量(编译后)去哪儿。
  • 例: int a[10]; 如果定义成全局数组,则此...一般开全局数组比较大,最大约等于5*10^8,也就是开不到10^9级别的数组,当遇到这种情况,可以考虑离散化。 所以一般全局数组,一维可以开到10^8,二维可以开到...
  • 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 2. 静态局部变量 静态局部变量属于静态存储方式,它具有以下特点: (1)静态局部变量...
  • 全局Handler的封装

    千次阅读 2018-04-18 22:24:59
    使用Handler发送消息是非常常见的,可以说在项目中有非常多的地方使用到Handler,于是这时候考虑怎么去封装一个Handler,使用的时候也比较方便,又可以避免重复去创建Handler对象,我们会想到全局就使用一个Handler...
  • 1、作用域看: 1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 2>静态局部变量...
  • 全局变量和局部变量的区别

    万次阅读 多人点赞 2018-08-23 21:46:04
    一、作用域看: 全局变量:其作用范围是“整个工程”,只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量 静态全局变量:使用 ...
  • Flutter 中的全局变量

    千次阅读 2021-01-05 20:23:40
    对于Android 原生开发,在接触FLutter 之后 首先会考虑在启动的时候创建一个全局变量来保存参数 但是对于dart 语言来说 其实更加简单 多个文件引用同一个文件,其中先关变量就是共享的 新建一个dart 文件里面创建属性...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 477,789
精华内容 191,115
关键字:

从全局考虑