Dreamer

PV3D

Papervision3D Tips(持续更新)

March 28, 2010 by dreamer

why PV3D? 这个问题有些些纠结 – 。- Papervision3D(下面简称PV3D),是一款比较老牌的Flash 3D引擎。PV3D除了比较老牌之外,与其他引擎相比并没有太多出众的特点,甚至可以说缺点明显,它的渲染效率比较低,对于第三方模型文件的支持也不完善。但是PV3D是完全免费的,而且使用人数也比较多,尤其是在国内使用的人数相对别的引擎要多一些,参考资料也相对多一些。 对于刚刚入门Flash3D的童鞋来说,PV3D或者Away3D是比较合适的选择,因为它们都是免费的,这个优势是绝对的。而其他的优缺点都是相对的。- -||| 例如从效率上考虑,目前Flash runtime都不涉及GPU,在硬件层面并没有支持3D的机制,所以任何Flash 3D引擎的效率都不太好。你很可能常常为了飙升的CPU占用率而绞尽脑汁。在此基础上,一些后开发的,或者商业引擎效率较高。PV3D则很容易让你被主管念叨“拜托不要搞这么占CPU的东东”。 而从参考资料上考虑,Flash3D算是非主流应用,任何一款引擎的参考资料都不多。资料较多的PV3D,国外的参考书籍寥寥无几,国内就更不用说了(据我所知目前只有台湾有一本讲PV3D商业应用的书)。网络上的英文资料主要来自于开发团队的博客,国内主要是一些论坛(例如flash天地会,Flab3D),在个人博客上零零星星有一些针对具体问题的解决例子。总体来说,国内只有初步的介绍,并没有太涉及核心;国外的实例很丰富,也比较系统(很容易举一反三),但是真的涉及到核心问题还是得自己钻研。另外说说文档,嘛,开源的项目,文档嘛,不可不信,不可不信(点到为止)……出现诡异的问题时建议直接看引擎源码吧…… 那么究竟为什么还是选择了PV3D呢?没什么特别的,很多引擎都是在它基础上开发的,所以一通百通啦。什么引擎不重要,重要的是对三维世界的理解嘛。至于效率问题,相信会随着Flash runtime和引擎的更新换代得到解决滴~ 加载第三方模型文件 dae是xml的子集,很容易阅读。 将dae导入pv3d中需要注意UP_AXES的值,它指定了模型中竖直向上的坐标轴。在PV3D理解的三维世界中,采用的是左手坐标系,竖直向上的是Y轴,而用Sketchup建模导出的dae中,默认的UP_AXES值是Z_UP的(诡异吧,我YY了很久才了解到的诶)。如果直接导入,会发现原本模型中的Z轴变成了Y轴,整个模型相对于其原本pitch了-90度。因此需要手工滴将dae文件中的UP_AXES的值修改为Y_UP,与PV3D统一。 PS.不推荐保留UP_AXES值,而直接旋转模型文件。因为从PV3D的文档中能看到,引擎本应该读取UP_AXES值,如果不为Y_UP,则需要对模型的坐标进行转换。例如上面提到的,Z_UP的模型,在PV3D中会将其Z坐标转为Y坐标,Y坐标转为Z坐标,实际渲染的结果与建模软件中所见相同(不会出现pitch-90的情况)。注意这仅仅是文档中写的……而实际上不知道为什么,引擎在导入模型时并没有进行这个处理,我们就暂时猜测这是一个未完成的功能吧。为了向后兼容,令模型的UP_AXES和PV3D统一是比较妥当的做法。即使将来引擎实现了文档中提的功能,我们原来的模型也依然能够像以前一样被正确滴渲染出来。 (待续)

Posted in: Flash3D Tagged: flash, papervision3d, PV3D

控制MovieAssetMaterial中MovieClip播放的方法(PV3D)

October 16, 2009 by dreamer

# // material类型转换 # var movieMaterialInDo3d:MovieAssetMaterial = do3d.material as MovieAssetMaterial; # // movie属性是DisplayObject类型的,需要转换 # var movie:MovieClip = movieMaterialInDo3d.movie as MovieClip; # movie.gotoAndStop(30); MovieAssetMaterial类中有一个公有属性movie,类型是DisplayObject,将其进行类型转换就行了

Posted in: Flash3D Tagged: flash, papervision3d, PV3D

PV3D下出现破面的解决办法

September 27, 2009 by dreamer

经过N天的倒腾,终于能在pv3d里比较靠谱地显示出sketchup的模型了。之前一直摸不准模型的尺寸……又不知道sketchup里的单位和pv3d里的是否一致,甚至连坐标系都不确定是否一致……倒腾位置就倒腾了半天。经常是这个模型显示出来了,换个模型又不知道到哪去了,摄像机漫游了半天,都不知道漫游到哪里去了……囧rz。又花了半天倒腾3DMAX的dae导出插件……失败……亲身经历告诉大家还是不要装x64的xp,实在不方便啊 – -(如果你的网络不允许你经常去下东西的时候)。 今儿终于出来了,可爱的小烟盒,转啊转,紧接着下个问题就来了,旋转到侧面的时候貌似会有破面……而且贴图也扭曲了……唉,路漫漫,找了篇讲破面的……(其实我只是对破面这个词很兴奋而已,嘿嘿,大家一起~BL~~~EACH!) 来自于:http://www.flab3d.com/tutorials_06_Zsorting.php 最近貌似和谐掉了 《三维图形原理 为什么我的模型老破面/缺面》 Kevin/DDM君,Flab3D.com(允许转载,转载请注明) 回想一下当年我们玩的PS或土星游戏机,我们会记得常常在画面里看到破面,缺面,或者旋转镜头时某个物体突然跑到另一个物体前面这类问题。在目前本地游戏靠越来越强劲的三维加速卡,拥有如虚幻,上古,DOOM这种画面近乎完美引擎的今天,我们网页三维正在经历和PS当年相同问题的时代。 破面,缺面,错误面等等都是描述同一个问题:Z-sorting,和他相关的有occlusion culling,摄像机的clipping/Culling等等。网页3D目前并没有完美的解决方法。所以以后在flash3d中再看到这样那样的破面 /乱面,请不要再过多追究这个只能靠硬件解决的问题(因为会立即被罚看这篇^_^),如有完美的解决方案我们一定会第一时间通知您的,呵呵。 我们知道,每个三维模型的面都是由三角形构成,三角形离摄像机的垂直距离,我们一般称作Z-depth,或者‘深度’。三维图形就是靠这个深度来决定哪个面出现在哪个面前面。 而这个Z目前是怎么决定的呢? 在不能使用三维加速卡的时候,Z一般我们是靠组成每个三角形的三个点的平均深度决定,也就是说,每个三角形的中心点决定(或有些情况由最远点决定)。也就是说,每1/30(一般来说)秒,flash播放器都会靠Z深度来重新排列一次画面上所有的三角形。 由于是依据中心点和摄像机的垂直距离决定Z深度,所以这个深度信息常常不能够正确地反映面的真实深度,特别当面相对相邻面较大的时候。(图1左边) Z-sorting 和这个问题的相关的还有摄像机裁切,在我们使用中,我们常常会遇到近处的面还不该消失就被裁切掉的问题。也是相同的道理。目前没有完美快速的的解决方法。只能靠美工手段(比如加多靠近摄像机的polygon,viewport设置得比实际flash窗口尺寸大等等很多)稍加注意。 两三角形相交的情况 在没有高级算法的情况下,一个三角形是组成模型的最基本的元素,是不可分割的(比粒子还不可分割)。 也就是说,当两个三角形交叉的时候,必须要强行决定谁在谁前面,不能说‘谁的一半’在“谁的一半”前面,因为这种不可分割。(图1右边) 网页三维的Z-sorting目前是没有所谓‘完美的救赎’。但是希望下面这些东西对你会有些启发和帮助。 用viewportLayer做整体排列 这是一个非常快捷的方法,但绝对不是完美解决的办法。 这个办法是靠整个模型的中心点(或最近/最远点)来排列整个模型的图层,也就是说两个模型间的相交/邻近的破面现象会大大减小/完全消除。把每个整块模型看成一个图层,排列各个物体的远近就是排列每个图层的前后。 使用这个方法的代价是整个物体常常突然跳到另一个物体的前面。特别当我们使用‘扁,长,大,’的物体,中心点的距摄像机的距离几乎不能反映此物体的真实深度 这个方式的好处是速度效率相对较高,如果观众不介意物体整个排列错误的问题建议使用这个方法。sandy,away3d都有很容易可以使用这种方法,pv3d稍稍需要多一两步,具体使用方法欢迎去我们的 ->超简易 第五篇 ViewportLayer分层排列 加多模型的面数 当一个宏大的草原只由2个三角形构成的时候,稍稍破面,就等于消失了一半的草原,非常明显。但当一个草原由1000个面组成的时候,每个面就很小了,即使破面也不是太明显。那么一百万个面组成呢?(当然不是叫我们真的要用这么多面,适当就是了) 当然这个方法的代价是效率明显下降,导入文件体积变大变慢。使用这个办法的前提是用户的效率不大大减小的情况下。 四叉树 Away3D里首先出现了QuadTree摄像机,可以基本解决破面的问题。10月pv3d终于也有了自己四叉树渲染器QuadrantRenderEngine,可惜它们的实用价值都很小,因为在实际运用中非常缓慢(我的意思是真的’非常缓慢’,不是人类能够接受的缓慢,我们的包里没有提供这个渲染器也是这个原因)。 到底是什么原因让四叉树没有成为flash3d的 ‘救世神器’呢? 交叉,遮挡这种高端图形处理,现在游戏都是靠图形加速卡完成,而目前网页3D只能靠CPU运算。 四叉树的基本思路是:以互相交叉的面的相交线,靠程序把两个面继续细分成6个或更多的面。只要发生相交,都要进行海量的运算,即使我们保证每个用户都是现在的n核CPU,也难以完成多于几百个面的游戏场景(现在的游戏一个场景一般有可能上十多万面)。 美工掩饰 尽量避免两个面相交 尽量避免两个面非常靠近 尽量避免使用‘扁长’物体,尽量保持每个物体‘胖圆’,并避免两个物体靠近。 如果确定为不会显示的面,比如外壳遮住的内部,尽量在三维软件中删除掉。 图形加速 个人属于网络程序盲,所以不能解释的太清楚这方面。网络某些协议的问题,导致网页程序基本不能使用本地机器的openGL/D3D。这个问题需要各大厂商协力解决。不过既然flash10能支持一些DisplayObject的各种composition加速,那么未来对flash3d的加速也是完全可以期待的。 网络服务器运算 前段时间已经开始有人尝试用强劲的网络服务器进行一些图形信息方面的运算,然后把信息传递到每个本地用户,这个想法很新颖,虽然成本非常高,但对使用用户机器配置要求就大大降低。当然前提是网络速度不慢的情况。 目前要避免Z排列错误的注意和技巧还有很多,欢迎能有更多朋友研究出些更多能够提高效率,或投机取巧的美工小方法来提高效率来蒙蔽观众。多媒体相关职业的奥义就是蒙蔽观众嘛。(哈哈 不好笑)

Posted in: Flash3D Tagged: flash, papervision3d, PV3D, 破面

如何获得Papervision3D使用的第三方模型

September 25, 2009 by dreamer

在使用Papervision(PV3D)时候,导入第三方模型是很关键的一步。获得方法摘录如下: 如果让Papervision3D利用别的3D软件建立的模型,必须导出COLLADA的格式,也就是「dae」,COLLADA的全称是 「COLLAborative Design Activity」,可以用来建立3D互动程序的一种档案交换格式~ 而此格式就叫做「dae」,全名是「digital asset exchange」。 COLLADA主要定义一个开放式的XML标准,也就是说,你在3D软件建立好的模型,只要通过COLLADA的外挂插件就可以输出成[dae]的文档, 这个文档包含的内容就是以XML文字资料形式来描述的。这个插件叫做ColladaMax,目前支持3ds Max8,9,2008,2009。 到这里下载一个插件,选择COLLADAMax_0.8.2_bin.zip这个文件 压缩包内从3dmax8到3dmax2009系列都有对应的插件,32位机器选择x86,64位机器选择x64 把里面的dle文件拷贝到3dmax安装的目录(比如我的是E:Program FilesAutodesk3ds Max 9)找到stdplugs文件夹,将dle文件拷贝进去,然后打开3dmax,就可以导出dae格式的文件了 有关COLLADA的信息可以到http://www.collada.org/看看 使用google的sketchup pro可以直接导出dae格式,但是直接在pv3d中导入并不一定能用,PV3D或者会报错,即使不报错,也可能无法加载材质。虽然是dae文件格式,但符合PV3D的却很少,因为PV3D对dae文件内容要求也有很高的要求。一般来说,需要做很多手动删改,具体方法之后再提及。

Posted in: Flash3D Tagged: 3dmax, collada, dae, papervision3d, PV3D

Categories

  • ACG
  • Flash3D
  • Interaction&Front-end
  • Life
  • Mobile
  • User Interface
  • Visual Design
  • 工作整理
  • 懒人食谱
  • 服务器

Recent Comments

  • dreamer on Kill IE6?
  • 曉行 on Kill IE6?
  • Benny on 互动设计是神马?
  • 人人都爱vancl | Dreamer on 互动设计是神马?
  • dreamer on http协议复习笔记摘要

Tags

3dmax 3Z 403 960 Grid System acg android apache call to action code collada css CSS framework dae Designing Interactions Designing Interfaces diy Don't Make Me Think flash G7 gallery html http httpd.conf ie6 iPad 2 mysql papervision3d php programing PV3D realign shelock holmes wap web window wordpress xhtml xhtml mp 互动设计 产品 便当 凡客 咖喱 手机 手机网站

Copyright © 2025 Dreamer.

Mobile WordPress Theme by themehall.com