上一节课内容回顾 三维交互技术 10.1 三维交互工具 头盔式显示器、立体眼镜、数据手套 10.2 三维交互算法 滑动条控制器、交叠滑动控制器、 xy+z轴控制器、虚拟球控制器 10.3 立体图绘制 两幅图像同时显示(不同波长) 两幅图像按一定频率交替显示 10.4 交互视算 后处理技术、跟踪技术、交互视算
10.5 VTK中交互的实现 vtkInteractorObserver vtk3DWidget vtkBoxWidget vtkImagePlaneWidget vtkLineWidget vtkPlaneWidget vtkSphereWidget vtkInteractorStyle vtkInteractorStyleFlight vtkInteractorStyleJoystickActor vtkInteractorStyleJoystickCamera vtkInteractorStyleSwitch vtkInteractorStyleTrackball vtkInteractorStyleTrackballActor vtkInteractorStyleTrackballCamera vtkInteractorStyleImage vtkInteractorStyleUnicam vtkInteractorStyleUser vtkInteractorStyleTerrain
立体图的制作: 调用vtkRenderWindow中的相应函数: StereoRenderOn () /StereoRenderOff ()打开关闭立体显示功能 StereoCapableWindowOn() / StereoCapableWindowOff() 打开/关闭绘制窗体的立体渲染能力 SetStereoType (int): 设置立体显示类型 SetStereoTypeToCrystalEyes ():偏振片眼镜 SetStereoTypeToRedBlue () :红蓝眼镜 SetStereoTypeToInterlaced () :用于Vrex投影仪,奇扫描线-左眼,偶扫描线-右眼 SetStereoTypeToLeft ():左视图 SetStereoTypeToRight () :右视图 SetStereoTypeToDresden()
本节课内容: 第十一讲 科学计算可视化系统和工具 可视化系统分类 专用可视化工具 通用可视化系统 高质量渲染器
11.1 可视化系统分类 可视化系统是指一个集成环境,在其支持下,人们可通过直观的手段对复杂数据进行有效的研究.可视化工具则一般只支持某一方面的可视化技术. 可视化软件发展至今,经历了由简单到复杂的演进过程,可以按照这一过程将可视化软件分为三大类:可视化子程序、专用可视化工具和通用可视化系统. 这一划分并不是严格的.前两类可视化软件历史较长,因而技术比较成熟,现有大多数可视化应用都是基于这两类来开发的.通用可视化系统则是发展的方向.
11.1.1 可视化子程序库 传统的分析和观测数据的工具,包括各种图形库和软件包,提供各种子程序,主要用于可视化应用开发。用户调用子程序开发应用时,必须编程实现各部分功能。包括主程序、用户界面、数据处理、几何造型和绘制。 如:OPENGL,VTK 优点:十分灵活,可直接控制各部分功能 缺点:必须花费大量的精力编写和维护代码,效率低 我们的工作: 开发部分环境数据处理模块(如根据离散点插值生成MESH模块)、与地理信息系统接口模块等。
11.1.2 专用可视化工具 为解决某一类问题而开发的功能相对固定的可视化工具。本身具备了主程序功能,具有友好的用户界面,不需要用户编写程序代码。 如: UNIRAS, PV-WAVE等 优点:针对某一类问题性能优越 缺点: 缺少灵活性,功能扩充比较局限,采用的可视化 技术是固定的,能解决的问题是有限的。 为增强灵活性,许多专用可视化工具提供了SDK开发系统。 我们的工作: 结合具体研究项目,把可视化功能与环境模型结合起来开发专用可视化系统。
11.1.3 通用可视化系统 用于可视化应用构造与运行的支撑环境,又称应用构造器。在实现上一般采用数据流机制,拥有一个模块库和一个高层可视编程界面。用户通过该界面从模块库中选取一些适当的算法模块,直观交互的将各模块用数据通道连接起来,构成一个可视化的应用。系统的模块库是可以扩充的,系统可以扩充到各个应用领域。 如: AVS,GIVE等 优点:良好的灵活性,通用性和开放型 缺点: 没有足够多的模块支持更多更好的应用。 我们的工作: 在通用可视化系统平台下,开发环境模型模块,扩充通用可视化系统的功能;在此基础上,开发专用可视化系统。
11.2 专用可视化工具 NASA Ames FAST IVM VOXEL View/Voxel Lab Data Visulizer SunVision PV-WAVE (1)PLOT3D PLOT3D是为计算流体动力学(CFD)的网格和流体可视化而设计的一个计算机图形程序.PLOT3D提供了85个函数,并提供多个版本适用于各种系统.PLOT3D能处理带有许多网格点的多重网格,而且能生成多种模型,如线框模型和面模型,PLOT3D的输出还可用于动画程序.
11.2.1 PV-WAVE 支持用户对数据用VDA方式进行分析。VDA是工程师、科学家和研究人员在理解和使用数据时普遍采用的技术,最常见的是当处理大型数据集和要求快速生成图形时,人们往往借助于数学、统计学、信号处理和图像处理等技术来对数据进行直观分析.VDA技术对于科学发现和工程分析具有不可估量的价值,给人们带来了十分明显的好处,从而促进了生产率的提高,为合作者之间提供了直观交流信息的手段。
PV—WAVE支持用户对大型多维数据集进行显示、分析和再显示的处理过程.通过各种VDA技术的辅助,用户能方便地交互控制其数据分析过程·。PV-WAVE有如下特点: 1)读取和定义大型的多维数据集; 2)提供工具对数据快速操作,以及由数据生成子集; 3)结果生成后可立即用图形表示; 4)用户交互方式迅速; 5)提供用于动画和显示多维数据的高级图形工具. PV—WAVE拥有一套高层的解释执行的命令语言,用户使用这套语言来定义数据,并对数据进行控制.这套语言十分精简,因而用它编制的命令组很短,而提供的功能却很强。另外,它是解释型的,无需经过编译、调试、运行这样一个周期,因而使用时反馈及时,十分方便.
11.3 通用可视化系统 是一种用于可视化应用构造与运行的支撑环境,故又称应用构造器,它们大多基于数据流机制,拥有一个模块库和一个高层可视编程界面,用户通过该界面从模块库中选取一些适当的算法模块,直观交互地将各模块用数据通道连接起来,构成一个可视化应用的数据流图,然后用户就可以对此流图加以运行和控制,实现其可视化需求. 系统的模块库是可以扩充的,用户可将自己开发的模块转换成系统可接受的形式,并可替换或扩充原有模块库,这样,用户可以采用这些新模块来构造可视化应用程序,故系统可以扩充到各个应用领域,所以我们称之为通用可视化系统,并称之为开放式的.
通用可视化系统结合了前两类可视化软件的特点: 每个模块的功能是固定的,相当于一个专用的可视化工具; 整个应用又是由多个模块灵活组织而成,因而又类似于用于程序库开发的应用程序,具有灵活性. 在这类软件中,用户通常也无需编程,只要学会如何将模块直观地组成应用程序数据流图.只有当现有模块库中模块功能不能满足用户需求时,用户才编制模块程序,而这种用户是模块开发人员,可以与前一种用户明确分工. 通用可视化系统的优点是有良好的灵活性、通用性与开放性.但目前其技术尚不成熟,也没有足够的模块来支持更多的应用领域,因而应用得不如前两类软件多.
11.3.1 数据流和可视编程界面 数据流:将一个可视化应用划分成许多相互独立的模块。每个模块带有若干数据输入口和若干数据输出口。模块的功能是将输入口的数据加以处理,并从输出口输出。各模块之间依靠数据的传送保持联系,整个可视化应用就可以用模块之间的数据依赖关系图(数据流图)来表示。
数据流图:由结点和管道组成的网络 结点:表示一个功能单元; 管道:结点间传送数据的通道; 数据流图的运行:当表示成数据流图的可视化应用运行 时,数据首先从数据流图中的源结点流出。当数 据沿管道流到其它结点处时,就会驱动其它结点 的计算,并产生新的数据传送到更多的结点处。 当数据流图中所有结点都运行完毕时,整个应用 也就运行完了; 数据流图中结点的运行方式: 数据驱动方式: 只要某一结点的所有输入口的数据都已到 达,该结点就会被点火执行。 命令驱动方式: 与数据流逆向的命令流。只有当一个结点 的所有输入口数据都有效,且有命令流到 达该结点时,该结点才被点火执行。
用数据流机制开发通用可视开发平台的优点: 应用便于用流图来表示和分析; 使应用能够更好地模块化; 易于实现分布和并行处理,提高计算速度。
11.3.2 通用可视化平台 AVS--命令流驱动,Stardent公司在其上开发了EVS软件 apE --数据流驱动,Ohio IRIS Explorer --数据流驱动,SGI OpenDX – IBM 开放源代码软件 GIVE --浙江大学
EVS--在AVS基础上开发成的面向环境的可视化系统
11.4 可视化系统开发 一个可视化系统,一般包括: (1)数据组织管理与常用处理功能; (2)丰富的可视化方法; (3)可视化交互技术; (4)易于使用的图形软件界面; (5)二次开发。
(1)数据组织管理与常用处理功能; 大部分功能可以从地理信息系统获得,需要开发与地理信息系统的接口模块。
(2)丰富的可视化方法 1D,2D,3D标量数据可视化方法 矢量场可视化方法 体绘制方法 混合绘制方法
(3)灵活友好的可视化交互技术 各种交互器的实现 多种Picker方法的实现
(4)易于使用的图形软件界面 MFC wxWindows tkInter GTK KDE MOTIF Swing
(5)二次开发 插件开发(plugin) 模块开发 PYTHON PERL TCL JAVA Ruby等
可视化系统组成: 3D可视 化结点 2D可视 模型1 模型2 模型3 模型4 数据结点1 数据结点2
输入结点(Input): 与GIS连接结点 数据读入结点 … 变换结点(Model): 环境模型结点 Filter结点 Mapper结点 输出结点(Output): 可视化输出结点 文件输出结点 数据流图构造与运行控制模块 脚本语言模块
MAYAVI的剖析 DATA Filters Module Render
class BaseObject: class VizObject (BaseObject): class Source (VizObject): class DataSource (Source): class VtkDataReader (DataSource) class PLOT3DReader (DataSource) … class Filter (Source): class PolyDataNormals (Filter) class WarpVector (PolyDataNormals) class Module (VizObject): class CutPlaneModule (Module): class SurfaceMap (Module) class Streamlines (Module) class ModuleManager: class DataVizManager: class MayaVi class MayaViTkGUI
高质量渲染器 RENDERMAN PRMAN BMRT VTK与RENDERMAN
1.什么是Renderman 是一种渲染思想,一种渲染系统规范(3.2版)。Renderman内包含了ShadingLanguage、ShadingNetwork、REYES等。 ShadingLanguage是一种用来描述Shader表现各种效果的类C语言,它可以按照用户的意志来描述Shader的表现。比如用户需要实现一种新的、软件里没有的视觉效果,一种可靠的方法是用S hadingLanguage来描述,然后编译,让Renderman使用,就好象你“告诉”Renderman应该怎么样渲染一样。 Reyes(Render Everything You‘d Ever Seen),是一种扫描线的思想。在电影制作中渲染精度是十分重要的,任何瑕疵在电影胶片中出现都会直接导致画面的视觉效果出错。Reyes就是为了解决渲染精度而诞生的。 多年的发展后很多渲染系统都已经吸收了这些伟大的渲染思想,其中最优秀的是MR和Maya。MR直接把ANSI C(标准C)做为Shader的语言,而Maya则可以把各种毫不相干的东西连接到ShadingNetwork里。但可以完美结合的仍然还只有Renderman的系统。
2.Renderman的渲染器 Renderman的渲染器有Prman、BMRT、Entropy。 Prman被视为Renderman的正宗,而且Renderman的大部分成就都是prman获得的。作为世界第一的渲染器,Prman支持扫描线算法/光线跟踪等。 $7000.00 BMRT,是Renderman大师Larry Gritz自己开发的渲染器,是免费版的渲染器。效果可以媲美Prman,但速度慢。 Entropy是BMRT的收费版,速度比BMRT快很多,支持各种光线跟踪的特点,效果非同一般,但使用不方便,要配合Mayaman、Maxman来使用。 $1000.00
3. PhotoRealistic Renderman Pixar是世界上领先的动画制作公司之一,它的领先地位有很大的一部分功劳是Prman所争取来的。而它销售Prman也给它带来了不少的利润。 Prman的开发初衷是"PhotoRealistic",就是有照片级的精度。如果设置得当,Prman渲染出来的东西真的是没有任何明显的锯齿。而且Prman是做电影用的,所以速度是很关键的一个因素。prman注重速度和精度的结合,它渲染的Nurbs真正称得上无缝,速度也是众多渲染器中最快的。
4.Renderman Artisan Tools Pixar多年来开发了不少的动画系统,为了促进Prman的普及,Pixar把一系列供简化Prman使用的工具包装在一起,就成了Renderman Artisan Tools(简称RAT)。 RAT包括: PRman: 核心,真正负责渲染的部分。 MtoR: Maya to Renderman,Maya的插件,功能强大,可以完成很多工作,调用Alfred和Prman渲染等。真正的工作是输出RIB文件到Prman。 Alfred Server: 调节单机或网络渲染的强大工具,可以查看渲染进度,进行渲染调度等。 Slim: ShadingNetwork部件,可以简化写Shader的工序,而且可以通过Template做ShadingNetwork的连接。 It: Image Tool,可以做为观看渲染结果的Renderview,但实际上是一个极其强大的后期合成工具。
5.Prman的工作方式 Prman的核心只是一个单独的exe文件,不到2Mb,执行的命令行格式为prman *.rib。 Prman只接受RIB文件。RIB文件就是用Renderman的语言对渲染场景的定义。 Prman渲染后便会输出到Display server,Display server可以是软件之间的Pipe(比如It或Houdini中的ip),tiff文件、iff文件等。
VTK中使用RenderMan vtkRIBExporter 把VTK的绘制场景转成RenderMan的RIB格式. 输入参数: vtkRenderWindow对象 结果: 所有演员和灯光被转到RIB格式文件filename.rib中 使用方法: RIB=vtkRIBExporter() RIB.SetInput(renWin) RIB.SetFilePrefix( “filename”) RIB.Write()
下一节课内容: 第十二讲 环境信息可视化系统 环境信息可视化系统 EVS 环境计算 流场可视化综合示例 考查作业