virtools基本教材.docx
- 文档编号:3907871
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:34
- 大小:278.76KB
virtools基本教材.docx
《virtools基本教材.docx》由会员分享,可在线阅读,更多相关《virtools基本教材.docx(34页珍藏版)》请在冰豆网上搜索。
virtools基本教材
第一章基本概念
∙这部分内容让你理解什么是Virtools的本质、它是如何工作的。
Web播放器包含回放交互引擎和完全渲染引擎。
l写新的文件导入或导出插件,支持你选择的建模文件格式
这部分内容让你理解什么是Virtools的本质、它是如何工作的。
如果在你阅读本章内容之前就进行脚本设计,那是你自己的损失。
l什么是Virtools?
l元素、类和面向对象设计
l作品的组成元素
lVirtools进程循环
l行为引擎
行为和脚本
参数
参数操作(运算)
属性
Virtools脚本语言(VSL)
l渲染引擎
l初始状态
一、什么是Virtools?
(一)概述
Virtools是3D虚拟和互动技术的集成。
Virtools由以下部分构成:
l创作应用程序
l行为引擎
l渲染引擎
lWeb播放器
lSDK
(二)创作应用程序
VirtoolsDev是一个创作应用程序,允许你快速容易的生成丰富、对话式的3D作品。
通过Virtools的行为技术,给符合工业标准的模型、动画、图像和声音等媒体带来活力。
VirtoolsDev不能产生模型。
VirtoolsDev不是一个建模工具,然而,简单媒体如摄像机,灯光,曲线,接口元件和3D帧(在大多数3D应用中被叫做哑元和补间)能简单的通过点击图标创建。
(三)交互引擎
Virtools是一个交互引擎-即Virtools对行为进行处理。
行为是某个元件如何在环境中行动的描述。
Virtools提供了许多可再用的行为模块,图解式的介面几乎可以产生任何类型交互内容,而不用写一行程序代码。
对于习惯编程者,提供VSL语言,它通过存取SDK,作为对图形编辑器的补充。
Virtools也有许多管理器,它帮助交互引擎完成它的任务。
某些管理器(例如SoundManager)对于动作引擎是外部的,一些管理器(例如TimeManager)对于动作引擎是内部的。
(四)渲染引擎
Virtools有一渲染引擎,在VirtoolsDev的三维观察窗口中可以所见即所得的查看图像。
Virtools的渲染引擎通过SDK可以由你自己或者订制的渲染引擎来取代。
注意,存取Virtools渲染引擎的源码受制於一个附加的授权协议书。
(五)Web播放器
在成为一种伟大的技术之前,好的技术一定要能被容易地理解和接近。
Virtools提供一个能自由下载的Web播放器-而且下载量少於1MB!
Web播放器包含回放交互引擎和完全渲染引擎。
更一步的关於VirtoolsWeb播放器的资讯可在在线参考中得到。
(六)SDK
VirtoolsDev包括一个SDK,提供对行为和渲染的处理。
藉由SDK,你可以:
l产生新的交互行为(动态链接库-DLL方式)
l修改已存在交互行为的操作
l写新的文件导入或导出插件,支持你选择的建模文件格式
l替换,修改或扩充VirtoolsDev渲染引擎(需要服从授权协议)
VSL在Dev内具有和SDK的接口,因此可以在不用运行自定义动态连接库(DLLs)下,能容易快速地测试新的概念,执行自定义编码。
这些只不过是一些例子-没有做不到,只有想不到!
第二章、元素、类和面向对象设计(Virtools)
∙因为每个元素都保持相对的独立性,所以每个元素的特性(例子中的物体网格、材质、纹理)都能够被快速简单地改变。
例如,你可以改变一个3D物体的网格、材质或者纹理—或者它们的任意组合,而不改变3D物体存在的现实。
(一)概述
VirtoolsDev组织元素进入类。
元素包括你进入VirtoolsDev后带来的媒体(模型,声音,纹理等),也包括你在VirtoolsDev中产生的物体(例如曲线、场景、现场等)和数据(例如参数、属性和脚本)。
这章的主题是,专注於Virtools对交互对象的科学分类,包括:
lVirtoolsDev如何分类媒体。
(举例来说,在Virtools中有灯光类,它包含所有灯光的属性,每个灯光是灯光的一个例证,而且有它自己的特性,例如它的颜色和它的范围)。
l某些操作为什麽只可能出现在某个元素上(类)。
(举例来说,为什么字符才能使用字符动画)。
l某些操作为什麽可以出现在所有元素上。
(举例来说,所有的元素都能被激活或解除激活)。
这章介绍的Virtools交互对象类的层次,对大多数使用者足够了。
然而,你能在Virtools的SDK中找到类层级结构完整的描述。
(二)面向对象设计
VirtoolsDev采用面向对象的方法建立一个作品(一个CMO文件)。
即,每个元件有一个唯一的特性,各种特性由类来描述。
元件受控于交互行为模块(BB)中的方法以及参数操作符(paramOps)。
VirtoolsDev中的类被称为CKClass。
图1-1Virtools类层次结构中的交互对象分支
例如,有一个VirtoolsDev中的类叫做CKCharacter,只有CKCharacter能用于角色的特定行为设计。
(例如角色控制器BB)
VirtoolsDev的面向对象的特性意味着你导入到VirtoolsDev中的任何事物(以模型、声音等形式出现的元件)都是一个CKClass的实例。
同样,你在VirtoolsDev中创建的任何事物(从一个摄象机到一个阵列)也都是一个CKClass的实例。
图1-1说明了Virtools类层次结构中的交互对象分支。
(三)继承
使用类层次结构的优势是可以使用继承。
也就是说,任何元素都有它自己独特的特性,并且继承了它父类的特性。
例如,类CKLight继承自CK3Dentity,CK3Dentity继承自CKRenderObject,CKRenderObject继承自CKBeObject。
所以,一个灯光竟然有了CKLight类对象的特性,就像:
l灯光类型(点、方向等)
l灯光颜色(白色、红色等)和
l灯光的照射范围
这些特性能够在建立灯光(在创造模式)或者在进行交互行为时(实时运行,例如播放模式)进行改变。
其次,一个灯光是一个三维实体,意味它继承了三维实体在3D空间内的位置、方位等特性。
就因为灯光是一个三维实体,所以能够应用到三维实体上的任何行为也能应用到灯光上。
第三,一个灯光是一个渲染对象,意味着它能够被渲染(能够在重放中被看到)。
就因为灯光是一个渲染对象,所有能应用到渲染对象上的任何行为也能应用到一个灯光上。
最后,灯光还是一个交互对象,也就意味着它能被附着一个交互动作(有些Virtools类,例如存储内部数据的类,不能附着动作给它)。
就因为灯光是一个交互对象,所以任何能应用到交互对象的行为也能应用到一个灯光上。
(四)特化
VirtoolsDev对行为提供了特化,因此,对于完成某些特定任务(也就是多态性),其行为进行了优化处理。
例如,移动一个3D帧比移动一个角色更容易,这是因为移动3D帧的行为被优化了。
优化行为减少了计算时间,在可接受的渲染质量下,使作品更小、对用户的输入反应更快。
(五)集合
VirtoolsDev支持集合,在具有逻辑关系的二个元素之间,一个元素是另一个元素的一部分,但他们分别都具有自己的特性。
例如,图1-2所示的3D对象,可以看到有一个ObjectMeshes栏。
虽然在同一时刻只有一个网格能被激活,但是一个3D对象可以拥有好几个网格。
图1-23D对象的网格设置栏
图1-3是网格设置,可以看到有一个MaterialsUsed栏。
一个网格可以有几个材质,它们中的几个能够在同一时刻被激活。
图1-3网格设置的材质栏
图1-4是材质设置,你会看到一个Texture标签。
一个材质只能有一种纹理。
图1-4材质设置的纹理栏
所以说,3D实体元素(不管它是一个物体还是一个角色等)之间有关联,但每个元素都保持相对的独立性。
在上述的例子中,纹理是材质的一部分,材质是网格的一部分,网格是3D物体的一部分。
因为每个元素都保持相对的独立性,所以每个元素的特性(例子中的物体网格、材质、纹理)都能够被快速简单地改变。
事实上,全部的元素都能被另一个兼容元素所交换。
例如,你可以改变一个3D物体的网格、材质或者纹理—或者它们的任意组合,而不改变3D物体存在的现实。
注意:
如果改变一个角色的网格,那么很可能你的动画就不会象预期那样工作了。
运行时集合、场景层次
一个场景由元素组成,通常被运行时激活。
场景内的元素被组织到一个场景层次中。
VirtoolsDev在场景层次内提供了一个特殊的集合形态。
在运行时,元素之间的关系通过SetParent和AddChild(两者都在3DTransformations/Basic中)被确定。
运行时集合允许你在任意3D实体集之间建立关联,典型的是,通过建立3D实体集,产生单一化的应用程序。
例如,利用建模软件,使用SetParent和AddChild,你可以建立一部汽车的3D实体层级:
一个有门、车身、轮子的汽车。
一旦层级关系被确定,就能自动的变化汽车的子物体:
门、车身、轮子。
注意:
SetParent和AddChild只在场景层级中建立关联而不能在CKClass层级中建立。
在SetParent或者AddChild被激活之前,如果要使元素恢复到初始状态,通过按ResetIC键,关系被删除。
共享元素
VirtoolsDev由于支持集合,所以允许你能共享例如像声音、动画、网格、材质和纹理等这样的元素,并且贯穿在你的作品中。
例如两个椅子能共享相同的网格、材质和纹理,所以二把椅子看起来一样,但有不同的名字。
然而,二把椅子也可以有相同的网格、不同的材质和纹理,那样二把椅子将会有相同的形状,但看起来不一样。
共享元素能够极大地减少文件尺寸,减轻CPU和显卡的工作量。
在作品中减少元素的数量也能使开发作品更容易。
(六)联合
联合允许VirtoolsDev在CKClass层级内,在两个没有被直接指定父--子关系的元素之间建立一个逻辑关系。
通过联合,一个对象可以和另一个明显不一样的对象建立沟通渠道。
例如一个角色经常用一组3D物体联合实现碰撞检查、管理和阻碍的目的。
第三章、作品的元素
∙注意:
附加给层级上的脚本能够自动附加给所有场景。
场所和入口用来优化渲染过程,显示与否取决摄影机的开启。
3.如果入口系统不被激活,不对场所和入口进行渲染优化(每个3D实体被认为具有潜在可见性,并只有一个层级),但是场所仍然会被用来分类组织3D实体给其它的用途。
三、作品的元素
(一)概述
以下你能看到组成一个Virtools作品的一些元素。
缩进表示了它们的依附关系。
Virtools类层次结构的交互对象分支主要由元素、类和面向对象设计引入。
例如,一个2D实体和一个3D实体都是渲染对象的子对象。
一个2D帧不是一个渲染对象的子对象,但是它却是由渲染对象派生出来的。
作品中的元素,依照类型和字母顺序排列
BeObject—具有行为能力的对象
RenderObject—当渲染时能够可见的对象
2DEntity—有长度、宽度但是没有深度的对象
2DFrame—具有可见部分的2D实体
3DEntity—具有长宽高的对象
Character—一种具有智能的3D实体,可以由用户或者软件控制。
它可见,但通常是隐藏的。
Camera—定义一个视点的对象
Curve—一个3D实体装置,它在3D空间中定义一条曲线
Grid—一种2D数据装置,值与3D物体相配
Light—一种提供照明的对象,是不可见的(抽象、数据装置、联合)
Array—表达为一个表格的数据装置
Group—一组没有类型限制的任意组合对象
Level—作品的父系对象
Material—一个网格的表面特征
Mesh—定义一个对象形状的顶点集
Place—关于对象位置的集合
Scene—关于对象时间的集合
Sound—一种以数字格式存储的声音
Texture—用来提供对象表面更好细节的图象
(二)具有行为能力的对象
在VirtoolsDev中行为是主要概念,但是如果不把它们附加给元素,则不起作用。
注意,从行为对象类能反映出所有VirtoolsDev类层级结构。
实例化的对象是附加了行为的对象。
BeObjects能够有行为,但不是必需的。
当一个BeObjects附加了行为时,它就是这些行为的主人。
所有的行为只能附加一个BeObject。
注意,一个行为的所有者不总是行为的目标。
附加到BeObject上的行为可以改变所有者或者改变到其它的对象(目标)。
(三)Level
层级可以被描述为:
l一个作品中所有对象的全局容器
l一个作品中所有元素的根
l一个作品中所有元素的父类
一个CMO中只能有一个层级。
层级能够包括不只一个场景并有零或更多的场所(图层)来组织你的作品,更易于管理。
一个层级是一个BeObject,因此行为和属性能够被附加到层级上。
层级脚本通常用于管理场景、位置和需要横贯几个场景的元素(比如阵列)。
注意:
附加给层级上的脚本能够自动附加给所有场景。
(四)场景
VirtoolsDev里的场景就象是电影中的场景一样。
l在同一时间内只有一个场景能被激活。
l只有在场景中的元素才能被激活。
l只有激活的元素才能被摄影机捕获。
(被Virtools中的交互引擎处理)
不是激活场景里的的元素不起作用。
它们不能被渲染,并且它们的脚本不能被处理。
因此,场景是把大作品进行分片处理的完美方法。
当和其它人协作工作时,场景很重要:
每个人都可以工作在自己的场景里,最后可以保存和合并成一个CMO文件里。
层级场景(包括了所有层级对象)在启动时生成一个激活场景。
当另一个新的场景开启时,以前激活的场景自动无效。
一个场景就是一个BeObject,因此行为和属性可以附加到场景上。
场景包括参考元素、没有副本的元素或元素本身。
(五)场所和入口
就象场景在层级内分片处理作品一样,场所在空间上分片处理作品到场景或层级。
在一个层级中可以有零到许多个场所。
在场景和场所之间没有什么特殊的连接。
场所是3D实体层级的一部分,能够包括零到许多个3D实体。
每个场所都可以看作是在场所内的所有3D实体的父系。
场所和入口用来优化渲染过程,显示与否取决摄影机的开启。
当入口系统(以入口管理器为例)被激活时,规则如下:
1.在进行每个渲染进程之前,包含摄影机的场所列表通过场所限制盒被确定,这些场所和所有带有入口的场所有可能可见,被考虑进行渲染处理。
2.如果一个元素不是这个场所的成员,这个元素不被渲染。
这个元素立即被确定为不可见(即使这个元素被激活并且它正执行交互行为)。
3.如果入口系统不被激活,不对场所和入口进行渲染优化(每个3D实体被认为具有潜在可见性,并只有一个层级),但是场所仍然会被用来分类组织3D实体给其它的用途。
场所在多人合作工作时很有用,每个人都能工作在自己的场所下,然后保存和合并到一个CMO文件中。
场所也是一个BeObject。
因此行为和属性也能加到场所上。
(六)抽象元素
抽象元素在VirtoolsDev中是一种数据结构,用来存储信息和描述两个元素之间的关系。
组
组是组织VirtoolsDev3D实体最简单最有效的方法。
组有规律的排列行为对象,执行也许是必须的或者不受限制的包括相同的CKClass元素或者类型的任何逻辑交联。
组能够在创作模式或在运行时通过BBs建立。
组能够被重新安排、覆盖等。
--许多标准的BBs提供对组的管理。
一个组是一个BeObject。
因此,行为和属性也能附加到组上。
组能够是其它组的一部分。
阵列
阵列是由行、列构成单元的简单表格。
阵列是纵向排列(所有纵向元素必须有相同的类型)。
阵列提供5种数据类型。
1.整数
2.浮点数
3.字符串
4.CKObject
5.参数
阵列组能够在创作模式或在运行时通过BBs建立。
阵列能够被分类、过滤、搜索、重复等。
--许多标准的BBs都提供阵列管理。
阵列是它自己的行为对象,所以可以有行为附加给它。
第四章、Virtools进程循环
∙当作品播放时,Virtools重复执行进程循环,总是以相同的次序执行同样步骤,直到作品被停止或复位。
当制作脚本时,你应当试着:
l划分任务成子任务并在每帧里只运行最小数量的子任务。
(一)概述
Virtools进程循环,在你(或用户)运行一个作品时,是一个重复性的过程,常常涉及到帧或者渲染帧。
理解进程循环,可以帮你在合适的帧频下,建立高效的脚本和运行流畅的作品
一个满意的帧频通常定义为能提供高效实时的播放画面。
实时播放最少需要每秒15个图片,全沉浸式需要每秒60帧。
因此,对创作者来说,你应当维持最少每秒30帧的帧频(近似与电视的帧频),目标是每秒60帧的帧频或者更大。
Virtools是一个实时引擎:
允许所有的行为在它的环境中连续不断地起反应,包括使用者。
当作品播放时,Virtools重复执行进程循环,总是以相同的次序执行同样步骤,直到作品被停止或复位。
图1-6Virtools的进程循环
一个进程循环的持续时间一般叫做一帧。
帧频是每秒钟完成进程循环的次数用每秒多少帧(FPS)来度量。
帧频在VirtoolsDev的界面上显示,位置在屏幕右下角靠近播放暂停键处。
图1-7Virtools面界的右下脚。
显示FPS
进程循环应当尽可能快地执行:
l高的帧频要对用户的输入做出快速的响应,增加用户对作品品质的感知。
l渲染图片可以提高动画质量和视觉效应。
注意,如果渲染图象快于显示刷新速率,将不能提高显示质量,在有些情况下,还会降低显示质量。
加大帧频,必须在每一帧里减少可执行行为的数量。
在满足最低浸入感的条件下,不要试图在一个给定帧里做得更多。
当制作脚本时,你应当试着:
l划分任务成子任务并在每帧里只运行最小数量的子任务。
l建立你的脚本使帧频保持相对的不变。
l大的脚本在给定帧必须全部被处理,在这种场合,要避免响应用户的输入。
帧频很可能显著降低并且用户将很难再次提供相同的输入。
一些BBs,例如角色曲线跟随BB被设计成递增工作方式。
胜于在一个单帧内,曲线从开始点到终止点的方式。
角色曲线跟随BB让角色在帧内沿着曲线只移动一小部分—分布工作在多个帧内,提高沉浸质量。
图1-6是进程循环的两个部分:
1.处理行为和
2.渲染场景。
(二)行为处理
行为处理在作品中建立交互。
行为几乎能够施加给Virtools中的每一个元素。
在行为处理过程中,按照一个优先级计划,一个接着一个地,所有被激活的行为都能被执行。
每个行为,当被执行时,通过行为链,能够激活其它的行为。
行为链有一个能在帧(进程循环)中被量度的连接延迟。
连接延迟能够:
0-在当前帧传播激活
1-在下一帧传播激活
n-在当前帧后的第n帧传播激活
在叙述这些之前,不同的管理器在它的运行中帮助行为引擎。
管理器运行他们的任务,不是在动作处理的开始,就是在行为处理的结束,恰好在渲染之前。
通常,不需要知道这些管理器怎样或者什么时候工作,但有一个例外:
消息管理器。
消息在行为处理结束时发送、并在下一帧开始时被接收。
因此,交互驱动消息始终存在于消息被发送和接收帧之间的帧延迟中。
Virtools管理器的完全描述在VirtoolsSDK中可以找到。
(三)渲染
渲染用来显示作品,并由离散的渲染引擎运行。
引擎可以由用户选择,取决于显卡和操作系统的性能;然而你能强制使用某种渲染引擎或丢弃某些功能。
在VirtoolsDev中,选项(Options)菜单的通用选择(GeneralPreferences)里面,能够选择创作模式和播放模式的渲染引擎。
渲染在进程循环中最耗时,极度依赖硬件的性能。
第五章、行为引擎(CK2)
∙当所有的行为处理完成,CK2提供信息给渲染引擎在屏幕上渲染图象,图象被渲染,所有大于0的链接延迟减1,行为处理再次开始。
只要循环不经常激活或者在一帧内的重复次数不超过行为重复的最大数值,那么行为循环的累计延迟有可能是0。
(一)概述
行为引擎执行行为处理,是Virtools的中心构件。
也叫做CK2(此后,你会在界面上经常CK,如CKID,CKClass等等),行为引擎使Virtools如此的灵活。
CK2做什么的?
CK2执行你的作品,处理场景和管理所有在用户和作品元素之间的交互。
CK2也处理作品的元素,使它们附加上一个行为,即行为对象。
给定帧内,一旦所有的行为被处理,CK2提供适当的信息给渲染引擎(CK2-3D),所以交互作用的结果能被显示给用户。
当一个作品被播放时,连续执行下面的任务。
注意:
为了适当地解释下述一系列任务(算法),你必须注意陈述中的数字标号。
优先序列任务中必须执行的子任务在一个同样的主数字标号下。
例如,任务3.1.1陈述了“每个被附加到开始的BB还没有被激活,激活的BB具有最高的优先权。
”这意味着所有的子任务(3.1.1.1,3.1.1.2和他们的子任务)必须先运行来完成任务3.1.1。
任务的"Foreach"意思是那个任务(或者所有子任务)被重复的执行,直到必需的条件-所有附加到开始的BBs已经被激活-出现。
1.对于层级中的每个活性元素,以优先权顺序分类来建立元素的处理顺序。
2.对于附加了脚本的元素,以优先权顺序分类来建立元素的脚本处理顺序。
3.对于每个元素,从最高优先权到最低优先权,保持处理最高优先权的元素。
3.1对于每个附加上当前运行元素的脚本,保持处理最高优先权的脚本。
3.1.1对于每个没有被激活但附加上开始的BB,优先权最高的BB被激活。
3.1.1.1处理BB,计算pOuts,激活所有的bOuts和发送消息。
3.1.1.2对于每个bOut,激活一个行为链接。
3.1.1.2.1如果行为链接延迟为0,激活并运行下一个BB。
以这种方式直到所有在脚本中的BBs被处理,或者行为动作链接延迟比0大。
3.1.1.2.2如果行为链接延迟大于0,在帧内增加BB到堆栈用于处理。
例如,如果链接延迟是1,BB在下一帧被处理。
如果链接延迟是n,脚本激活,BB在当前帧后的第n帧执行。
注意:
层级总是激活状态,最高优先权的元素存在于每一帧中。
在余下任务中,忽视所有未激活的元素。
当前帧连续处理,直到所有的BB被运行或者链接延迟大于0。
当所有的行为处理完成,CK2提供信息给渲染引擎在屏幕上渲染图象,图象被渲染
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- virtools 基本 教材