本文主要是介绍面向叙事的场景设计方法与实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1、介绍
2、场景模型
2.1 场景属性描述
2.2 场景元素属性描述
2.3 场景图与场景概念模型
2.4 场景配色
2.5 场景环境光
3、场景设计资源得语义标注
3.1 资源的语义标注的概述
3.2 场景元素的标注
3.4 场景标注
4、场景设计知识库
4.1 规则内容框架
4.2 反映场景功能的规则
编辑 4.4 其他规则
4.5 场景描述语言
5、场景设计算法
5.1 场景设计过程
5.2 场景设计推理
5.3 场景生成算法
6 系统实现与结果
1、介绍
传统的场景设计(包括影视、游戏)需要耗费大量的时间与精力。对比与计算机上实现场景设计需要考虑以下几个问题①系统的智能化程度②场景生成的效率③场景生成效果的合理性④场景生成的真实性。早期的研究主要围绕②进行,辅以人工干预达到③的要求。近年来,随着知识工程在众多领域的广泛应用,许多研究者将语义的概念引入其中,在①和③两方面做了大量建设性的工作。目前,随着叙事智能NI(Narrative Intelligence)的发展,如何根据故事情节中显式或隐式的内容提供与之相吻合的场景成为一个更具吸引力的研究方向。本文的研究内容即是面向NI的场景自动生成。
提出一种基于事例和规则的场景设计的方法,该方法综合考虑了上面的四个问题,即适用于叙事智能中动画的自动生成。
本文的代表性工作:(1)基于几何约束和语义信息的场景自动布局(代表性系统GAPS)
(2)文本-场景自动生成(代表性系统Swan、WordsEye、CarSim)
目前的工作主要存在以下几点不足:(1)必须对场景中的元素进行完整的描述,即系统不能生成描述中未出现的场景元素;(2)在场景构建过程中采用的是“从无到有”的构建方法,对有代表性的场景的重用和共享的研究不多;(3)在场景构建中,较少考虑其中可能出现的行为即融合行为的场景设计,这是动画创作中场景设计的一个显著需求。基于此,我们提出了一种基于规则及实例的场景设计方法。下图为场景设计流程图:
2、场景模型
我们认为一个场景分为四个部分内容来体现:场景整体属性得描述、场景元素的描述、场景概念模型、场景中的配色方案。(概念模型是核心)
2.1 场景属性描述
下图为场景分类图
下图为场景类属性描述图
下图为私人空间部分属性描述
2.2 场景元素属性描述
下图为场景元素分类体系图
由于本系统是以叙事为基础的,因此在参考分类标准的基础上,我们还考虑了跟故事相关的一些因素,如为了与故事的场景、人物结合起来,我们定义了一些如适用场景、使用者这样的属性由于场景元素很有可能与动作发生交互,因此,我们定义了适用动作为了更加方便地实现场景设计,因此我们定义了材质、纹理、外切长宽高这些在动画生成层次上要用的属性。图给出了场景元素部分属性描述示意图。
2.3 场景图与场景概念模型
场景图:场景元素作为节点,节点与节点之间的空间关系表示一条边。
为了更好的描述一个场景的功能构成以及场景元素之间的空间位置关系,我们借鉴了场景图的部分功能,并对此进行扩展,定义了场景概念模型(SCM)。
SCM是一棵树。模型中的每一个场景元素都是一个节点,根节点为场景,节点与节点间的构成、支撑、伴随关系作为父子关系,而其它的关系(例如两个模型相同的关系、对称关系等等)则统称为参照关系。为了方便起见,在后文中,使用省略了参照关系的树状结构图来表示场景概念模型,而参照关系则将在布局中表示。可以这么认为,场景概念模型其实就是一个从场景图抽取出来的为了反映场景功能的树状脉络。场景概念模型在一个高层次上表述了场景中场景元素的行为以及各场景元素间的关系。
说明:一个场景元素既可以成为一个场景元素的构成节点,也可以是伴随节点或支撑节点,类属的优先顺序为:构成节点>伴随节点>支撑节点。如桌子是由桌腿构成的,桌腿是由地面支撑的,桌子伴随有椅子出现,椅子也是由地面支撑的。因此桌腿应该是桌子的构成节点,而不是地面的支撑节点,椅子是桌子的伴随节点,不是地面的支撑节点。
本文采用的是图向导模型进行了改进后的概念模型(图向导模型只关系组成关系,忽略了:支撑关系和伴随关系)。我们把这两种关系显式地放在概念模型中,优点有:(1)可以进行一些场景推理;(2)可以方便场景动态变化时的管理。下图为场景元素节点数据结构:
此数据结构具有递归性质,通过把空间变换节点作为构成节点、支撑节点及伴随节点的了节点,就可以用嵌套的方法把两个场景元素的层级关系给描述出来。通过参看VRML,我们定义了整体的数据结构,新增的节点的语法定义如下图所示。
2.4 场景配色
配色方案存储的色彩信息只是关于色彩的语义描述,不是具体的RGB值。下表为场景配色方案的表现形式
2.5 场景环境光
由于场景设计的结果需要通过渲染成图呈现给观众看,而渲染的过程需要包含光线计算,为了使最终渲染出来的场景更加真实以及呈现出多样性,因此每一个场景中环境光的配置也是场景模型重要的一部分。
在现实生活中,不同的时间段,场景环境光的亮度是不同的,而且外界光线入射的角度也不一样,因此,为了让输出效果具有典型性和对比性,我们定义了六种环境光取值:强阳光(用来模拟晴天时中午的照明效果)、弱阳光(用来模拟晴天清晨或傍晚的照明效果)、无阳光(用来模拟阴天的照明效果)、强月光(用来模拟晚上月光很亮的照明效果)、弱月光(用来模拟晚上月光很弱的照明效果)、无月光(用来模拟晚上没有月光的照明效果)。同一个场景,通过改变环境光的取值,就能使场景显现出不同的效果,同时也增加了观众的可观赏性。
3、场景设计资源得语义标注
由于场景模块得功能,需要找寻一个相似的场景模型,所以需要进行语义标注。
3.1 资源的语义标注的概述
获取语义含义的方法:(1)模式识别的方法:根据模型的物理及数学特征进行动态识别;(2)对资源进行语义标注。
第一种方法具有良好的普适性,一旦获得一个好的识别算法,就可以识别某一类所有至少是大部分的物体,但这一方法有其不足之处由于片通动画固有的特点,其生成过程中涉及的模型种类繁多,而且模型往往具有很大的随意性,很难像现实世界中那样定义一类物体的特征,因而,一个良好的识别算法是很难获得的。并且由此算法识别的物体的特征相对简单,很难满足叙事表现这一层次的抽象性和多变性的要求。
由于以上原因,在WordsEye与CAPS系统中提出的语义标注方法的基础上,我们使用了一种半自动的人工标注方法,对本系统中用到的资源进行语义标注,这一方法保证了所使用的模型语义信息的正确性,为进一步的场景操作、摄像机规划、动画生成打下了一个良好的基础。标注内容包含了模型文件的大量元数据信息,这些信息主要提供给场景修改模块使用,方便此模块进行资源的检索与使用,具体的标注方法与标注属性下文将进一步说明。
为了使程序能方便对这些资源进行操作,我们进行了一系列的标准化处理,例如资源的命名的规范化,为每个模型都添加了一个绑定盒等。在这些处理当中,绑定盒的处理是最重要的:对每个模型,我们都为它订做了一个最小的外切长方体,由于长方体的六个面都有标号,所以我们为这六个面都赋予了不同的语义含义,例如标号为“0”的面为物体的正面,标号为“3”的面为物体的下面。在对物体的空间位置修改的时候,通过把绑定盒近似地代替物体模型来作为操作对象,从而大大降低了操作的复杂程度。
实例来源:从事室内设计的公司以及影视、动画、游戏等特效制作公司。通常,初始的场景实例所包含的内容非常丰富,而从可重用的角度来看,需要对其内容进行过滤,仅保留最具共享性的内容。通过筛选和补充,最后保留的内容应包括以下几类:场景的属性描述和场景中与功能相吻合的主要的场景元素(包括场景元素的色彩、风格信息)及其描述、场景的概念模型和对应的场景空间布局信息、场景的灯光配置信息。并且,为了便于实例的后续应用,相关的场景元素的属性信息被保留,置为缺省值。基于此,我们对所获取的场景实例和场景元素进行信息过滤和加工,其结果放入资源库中作为候选。
在场景诸多属性中,场景风格是尤为重要的,可以说,场景设计的好坏直接取决于目标场景是否符合故事所要求的场景风格。场景风格从整体的角度出发,用美学的观点宏观地把握住了场景整体给观众的印象。通过总结,我们认为,在场景元素这一层次上,场景的风格是通过这三部分来反映的:场景元素的风格、材质、纹理,如图所示。
建库:场景库、场景元素库、材质库、纹理库。逻辑关系:场景库里的每一个场景实例的场景元素实例都能在场景元素库里找到,而场景元素库里的每一个实例所具有的材质、纹理都能在材质库、纹理库相应地被找到。
采用了MAya进行二次开发实现对资源的半自动标注。
3.2 场景元素的标注
场景元素的标注分为四部分:索引项、资源的存储和关联路径项、几何物理相关项、场景元素自动生成相关项。下面分别对这四部分的功能进行描述。
索引项:例如场景元素的类别、适用的场景、时代等。通过读入这些索引项,能够唯一找到资源库里的模型,这些索引项的值大部分通过场景设计里的规则推导获得。
资源的存储和关联路径项:例如存储的路径或者与这个场景元素特定的动作文件的路径。通过读入此项,把此项值作为参数传递给底层函数,既方便程序调用,也方便资源库的管理。
几何物理相关项:例如此模型的默认高度、当前材质名、当前纹理名等。这些项的值将作为参数传递给底层函数,方便以后对此场景元素进行修改操作。这些项的值大部分来源于场景设计里的规则推导以及常识库。
场景元素自动生成相关项:例如可能伴随场景元素、可能支撑场景元素等。通过读入 这些项及其取值,可以实现场景设计里的部分推理功能。比如一个餐桌的模型可能伴随出现椅子的模型,则当此餐桌在一场景中出现的话,那么它伴随出现的餐椅也很可能出现。
①场景元素节点显示区②场景元素实例显示区③场景元素信息标注区
3.3 纹理和材质标注
材质反映的是一个物体的光学属性,如金属材质表面一般比较光滑,玻璃材质可以透光等等。而纹理反映的是物体表面的花纹。由于现阶段我们利用的是Maya默认的材质,因此我们着重描述纹理库的建设。
与现实生活不同,在Maya中,一些壁画、图画被认为是一些场景元素如墙壁、画框的纹理贴图,而不是一个单独的场景元素。因此纹理的标注分为两部分普通纹理标注和图画类(包括壁画、相片、标签等)纹理标注。
普通纹理指的是日常生活用品(例如桌子、椅子、地板)表面的纹理图案。此类纹理一般都没有特殊的寓意。普通纹理的标注分为二部分语义约束标注项、色彩属性标注项、资源存储标注项。其中,语义约束项与色彩属性项构成了普通纹理标注的索引项。
与普通纹理不同,图画类纹理一般都是有着一定的寓意的,此类纹理一般更能反映场景主人的特性,例如一个喜欢中国古代典雅风格的人是不可能在家里贴一幅油画的,而极有可能贴一幅山水画。图画类纹理的标注也分为二部分语义约束标注项、图画属性标注项、资源存储标注项。其中,语义约束项与图画属性项构成了图画纹理标注的索引项。
①场景元素节点显不区②纹理图案显示区③纹理信息标注区
3.4 场景标注
场景的标注分为三部分:场景属性与场景元素的标注(也包括每一个场景元素的纹理标注)、场景概念模型及空间布局的标注、场景环境光配置。
(1)场景属性与场景元素的标注
①场景元素节点显示区②场景实例显示区③场景信息标注区④场景元素信息标注区
(2)场景概念模型的空间布局信息标注
由于三维的空间布局不好描述和操作,因此我们通过对空间布局进行三个方向(x轴、y轴、z轴方向)的投影(这里的投影都是以模型的绑定盒作为投影的对象),变成二维平面上的布局,再对这三种二维布局分别进行描述来刻画场景的空间布局,同时,通过对空间布局的操作也可以映射到对这二种二维布局的操作。下图左边所示是对图中的场景在y轴(垂直地面的方向)的二维布局信息进行抽取的界面,右边为对应场景概念模型的示意图。
①场景概念模型树状结构显示区②场景二维布局显示区③场景信息标注区④场景元素信息标注区
(3)场景环境光配置
在场景的四个角落都打上光源,用来模拟房间被照亮的情形,同时在每一扇窗户外用不同的平行光来模拟外界光源(如太阳或月亮)在不同的时段照射场景所产生的阴影效果。
图中黑色线框围起来的范围表示场景的俯视图,圆圈表示场景中四个角落的点光源,窗户下面的三个
箭头分别用来模拟外界光源不同时段照射进来的平行光,左边的箭头用来模拟早上的外界光源照射角度,中间的箭头用来模拟中午的外界光源照射角度,右边的箭头用来模拟晚上的外界光源照射角度。
4、场景设计知识库
4.1 规则内容框架
采用Amzi公司开发的逻辑服务器,支持pralog语言书写规则进行一阶谓词逻辑的推理。规则形式如:Q:-P1,......,Pn的形式。右部为规则前件,左部Q为规则后件。
从输出出发,如果要最终生成一个三维的场景模型,那么场景的功能和场景风格是必不可少的。而场景的功能则是通过场景元素类别(如卧室场景里面有床、会议室有会议桌和椅子等)、场景元素关系(如卧室场景里床头靠着墙、会议室里面会议桌放在场景的中间而椅子是围绕会议桌而放)来体现的。场景风格则是通过场景的主色调、场景元素的风格、场景元素材质、场景元素纹理或色彩来体现的。另外,当一个场景或场景元素被实例化的时候,它们的大小也需要考虑,而当场景生成完后,我们也需要一些规则来验证场景的合理性,这些内容都将作为规则的后件。
从输入出发,故事状态序列描述里面会有一部分关于场景的描述(这类描述不需要理解故事就能直接从故事中获得场景设计所需的信息),但更多的是关于动作或者动作状态的描述(此类描述需要通过对故事的上下文进行理解来推理出场景设计所需的信息),这些内容都将作为规则的前件。因此,规则按照前件内容大体可分为两种:
(1)叙事相关规则:非场景谓词->场景谓词。通过叙事相关规则,则可以把场景设计跟叙事联系起来,能够保证设计出来的场景是满足故事需要的,符合故事情节的一致性与连贯性。此类规则主要与动作及场景主人特性相关。
(2)叙事无关规则:场景谓词->场景谓词。通过叙事无关规则,可以使场景设计出来的产品更加符合人们生活中的认知,即符合常识。叙事无关规则主要是为了体现场景风格而需要的规则。
下图给出了规则的内容框架。中间矩形区域里的是场景设计的要素(作为叙事相关规则的后件),左右矩形区域里的是与此相关的叙事内容作为叙事相关规则的前件。由于场景风格可以由场景元素风格、色彩、材质和场景的主色调来综合体现,因此场景风格可以作为叙事无关规则的前件,而场景元素风格、色彩、材质和场景的主色调则作为叙事无关规则的后件。由于场景主色调与场景元素色彩也存在着映射的关系,因此它们也作为一类叙事无关规则而存在,在图中用虚框表示。
4.2 反映场景功能的规则
(1)动作相关规则
场景是动作的支点,同样的动作发生在不同的场景则表示不同的意义。同时,每一个动作的发生对场景都是有要求的,这些要求就体现在对场景元素的选取及场景元素空间布局上。
例子1:一个人在睡觉,那么“睡觉”这个动作对场景的要求就是此场景中很可能有床或者沙发。
例子2:一个人走到桌子旁边去喝水,那么“喝水”这个动作对场景的要求就是此场景是要有装水的工具的(如杯子),并且此工具是在桌子上的。表给出了部分动作相关规则。
例子3:一个人去开门,那么对于“开门”这个动作,如果要使开门这个动作顺利发生的话则需要门的活动区域内不应该有其它的物体。
下表给出了一些动作相关规则的例子。
(2)场景元素类别选择规则
除了反映功能的场景元素(如卧室的床、餐厅的餐桌)外,场景的很多装饰性的场景元素能够反映场景主人的兴趣爱好。
(3)场景元素关系规则
场景元素规则也称布局规则,目的是为了描述场景布局信息(大部分布局信息是通过继承而来的)。场景元素关系规则主要分为四大类:支撑关系规则、伴随规则、放置规则、禁忌规则。
支撑关系规则:
伴随规则:
放置规则:(分别为区域西北、北、东北、西、中、东、东南、西南、南、东南)
4.3 反映场景风格的规则
(1)场景主人特性规则
(2)场景配色方案规则
(3)场景元素风格规则
(4)场景材质规则
4.4 其他规则
(1)场景大小、场景元素大小规则
为了使最终生成的场景看起来更可信,也更能体现场景主人生活的痕迹,根据人机工程学的一些原理,场景中的一些场景元素的大小是跟主人的身体物理属性相关的。例如桌子的高度应该是低于主人肘部的高度,而正常的人的肘部的高度是人的高度65%。
(2)禁忌规则
除了一些放置常识外,一些物体没有确定放在哪里,但是可以确定它不能放在哪里,这些就是禁忌规则。(定义一些禁止关系的谓词)。
(3)场景环境光规则
为了让场景看起来更真实,同时也为了让同一个场景通过不同的打光来呈现出不同的效果,我们需要一些环境光规则来指导场景设计。
在每一个实例场景中,光源的位置和朝向都已经设置好了,而光源的颜色和强度却是可以改变的。环境光规则的目的就是通过环境光的不同取值来推导出场景中的各类光源的颜色和强度,然后通过这些参数来对场景中的光源进行配置,从而模拟出现实生活中的光照效果。对于一个场景而言,达到同一个光照效果可以有多种配光方案(这里指光源的强度、颜色的不同组合而行成的方案),而把这些配光方案适用于另一个场景时,这些配光方案却未必都适合这一场景。为了让规则更具有通用性,这就要求我们找到一种环境光的配光方案,使这套配光方案适合每一个场景。因此,这需要我们通过对不同的场景进行反复地配光,然后摸索出一套符合每一个场景的配光方案,下表为一种配光方案中的部分规则。
4.5 场景描述语言
基于一阶模态逻辑的叙事和动画表示语言-Narlog(叙事和动画本体语言)。Narlog采用KIF的文法,以CTL逻辑为基础 ,可以描述主体的信念、情绪、意图、欲望等心理状态,也提供描述主体的实例(即动画角色)的外形特征和行为的功能;同时Narlog还提供了描述场景状态、摄影机状态、灯光设计等与动画相关的语句。也就是说,Narlog是贯穿于的描述语言,它用于描述从用户的叙事和动画需求,到叙事表示以及叙事动画描述的所有方面。PNAI中的叙事和动画生成就是对Narlog描述的故事的自顶向下的加精过程,最后输出动画制作软件的脚本语言如的故事描述。
在场景框架表示与场景元素框架表示的基础上,我们定义了场景描述语言。作为Narlog语言的子语言之一,场景描述语言的目的是为了更好地描述从叙事到动画中的场景需求。此描述语言分为三部分场景属性的描述,场景元素属性的描述,场景空间关系的描述。下表分别给出了这几部分谓词的几个例子:
5、场景设计算法
5.1 场景设计过程
5.2 场景设计推理
一个产生式系统的工作周期由模式匹配、选择、执行三个阶段组成。工作周期图如下:
下面给出推理的几个阶段:
阶段1:如果故事描述里对场景的功能没有描述,则根据故事里的行为推导出场景的功能。例如一个场景中有睡觉的行为,而且故事没有特殊说明场景的功能,则可以根据睡觉这个行为推导出此场景为卧室。
阶段2:结合阶段的结果,根据故事里的动作、场景的功能推导出场景元素的类别、场景元素布局。例如卧室里面应该有床,床被地板支撑等。
阶段3:如果故事描述里没有对场景风格的描述,则根据故事里主人特性描述推导出场景的风格。例如如果一个卧室场景的主人的身份是皇帝,则场景风格为华丽。
阶段4:根据故事里场景卞人特性描述推导出场景元素的类别、风格。例如卧室的主人喜欢音乐,那么场景里面有一些音乐器具(如电子琴、吉它)。
阶段5:根据主人的经济状况推出场景的大小,根据主人的生理属性推出相关场景元素的大小。
阶段6:如果故事描述里没有对场景主色调的描述,则结合阶段的结果,根据故事里场景主人特性或场景风格推出场景的主色调。例如老年人的卧室一般场景主色调是淡白的。
阶段7:如果故事描述里没有对场景配色方案的描述,则结合阶段、的结果,根据故事里场景主人特性、场景风格、场景的主色调描述推导出场景的配色方案。例如如果场景风格为硬朗,那么场景色彩配置方案为红色地毯蓝和白窗帘用印花布黑色沙发白色家具、墙面、天花。
阶段8:根据场景风格推出场景元素风格,根据场景元素类别推出场景元素的材质。
下图给出了规则库可以推理出来的内容及对应的推理过程:
5.3 场景生成算法
基于实例的场景生成算法
输入:Scene.Attribute()为场景属性,包括场景类型和场景风格;Scene.LWH()为场景的实际
长、宽、高;Element_Set()为场景元素集合,包括场景元素的类别和场景元素的属性;EleRel_Set()为场景元素关系集合;
输出:目标三维场景。
step1:SC=Scene.C(场景类型),ST=Scene.T(场景风格)
step2:根据Element_Set()和EleRel_Set()构建场景的初始场景概念模型OSCM
step3:根据SC和ST在场景实例库SCB(Scene Case Base)中搜索相似实例。如果没有,则置目标概念模型GSCM=OSCM,并转step8;
step4:对候选实例进行相似性深度搜索,找到相似度最大的实例Casei;
step5:导入场景实例Casei。并把Casei按比例进行缩放,使之长宽高符合Scene.LWH();
step6:获取场景实例Casei。中的场景概念模型Casei.SCM;
step7:对Casei进行修改,如果修改成功,使之能符合目标场景描述,转step13,否则转step14;
step8:对GSCM进行前序遍历;
step9:如果树里所有的节点被遍历完,则转step13;
step10:通过对当前场景元素Cse的模型描述去场景元素库里找合适的场景元素模型,找到则把此场景元素模型导入到场景中,没找到则显示错误,并转step14;
step11:通过GSCM里对当前场景元素的位置描述移动Cse,并转step13;
step12:通过对当前场景元素Cse的纹理描述去纹理库里找合适的纹理模型,找到则导入到场景中,并转step8,没找到则转step14;
step13:程序成功结束;
step14:程序失败结束。
场景相似性比较方法:
场景相似度计算公式
目标场景的陈设性元素与实例场景的陈设性元素集合相似性比较计算方法:
场景修改算法(增加、删除、代替):
布局修改算法:
6 系统实现与结果
《皇帝的新装》中的一个场景的场景设计输入内容:
推理机推理:
相似场景:
对实例场景进行修改:
添加环境光:
参考文献: 江澜.面向叙事的场景设计方法与实现.[首都师范大学硕士学位论文].2007.
这篇关于面向叙事的场景设计方法与实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!