精华内容
下载资源
问答
  • 开源3D图形渲染引擎OGRE学习笔记

    千次阅读 2012-01-04 13:29:12
    OGRE(Object-oriented Graphics Rendering Engine)(Ogre, 食人魔),是一款成熟、稳定、可靠、灵活、跨平台、而且拥有丰富功能开源实时3D图形渲染引擎(并不是游戏引擎),由 ogre3d.org 社区维护,遵守LGPL(GNU Lesser...
      
    

    参考资料:

    电子书:《Pro OGRE 3D Programming》中文翻译本

    官方wiki: http://www.ogre3d.org/wiki/index.php/Main_Page

    中文网站(有电子书下载):http://www.ogre3d.cn/

    OGRE(Object-oriented Graphics Rendering Engine)(Ogre, 食人魔),是一款成熟、稳定、可靠、灵活、跨平台、而且拥有丰富功能开源实时3D图形渲染引擎(并不是游戏引擎),由ogre3d.org社区维护,遵守LGPL(GNULesser General Public License)协议。

    同类其他开源引擎:

    1. Irrlicht(鬼火)

    2. Nebula(星云)

    3. klayGE

    OGRE引擎特性:

    ·全面并同等的支持OpenGL和Direct3D

    ·全面支持Windows,Linux以及Mac OS X平台

    ·其完全的面向对象设计,允许您通过插件和子类毫不费力地扩展引擎的功能。

    在Ogre 3D的名字中包含“3D”是很贴切的,因为那就是它所能做的所有事情。它不能处理用户输入,不能管理你的游戏状态,不能做网络通讯,不能播放声音。它只是做为一个3D渲染引擎被设计出来,并且那就是它唯一的应用。因为专业,所以它总是能够很好的完成它本分的任务。(虽然Ogre引擎中也会包含比如输入系统等一些简单的实现,但官方的说法一般是:这只是为了支持演示程序所提供的,不建议你在自己实际的应用中使用。你需要在Ogre去中去寻找其他的库来完善你自己的工具箱。)

    当今大多数软件都会依赖于其他软件或者开发包中提供的外部功能,这样可以让软件的开发在别人已经存在的成果之上,避免了重复制造轮子。如果不需要对常用的功能重复实现,这样做最直观的好处就是促使工作团队更集中精力解决他们自身软件中所存在的问题,进而产生出更高质量的产品。而且随着开源社区的发展,越来越多优秀的软件或者程序库可以从网络上免费得到。不过更多的依赖项目也意味着需要相对更复杂的编译环境设置,甚至有时候要编译构建所依赖的项目源代码产生。如果依赖了一些在活跃开发期的项目,就意味着有可能需要经常更新。OGRE的最小依赖集有FreeType, OpenIL, zziplib。

    我能用OGRE 做游戏吗?是的,你能。并不象许多其他的3D引擎,OGRE并不是适合任何类型的游戏。由于开发的原因,OGRE只适合第一人称射击游戏。OGRE特别适合制作3D 游戏。

    Ogre 3D自发布以来,被成功地应用于诸多三维仿真领域。其中包括网络游戏和一些商业的三维仿真项目。

    在国内,基于OGRE的网游大作MMO已经有几款了,其中包括搜狐的《天龙八部》、吉比特的《问鼎》、深圳网域的《华夏2》以及久游的《疯狂飙车》。

    Ogre是一个庞大而纷杂的对象和模块集合,如果初学者希望直接从对象列表中得到什么信息的话,可能会感到眼晕。但是事实上事情远没有这么复杂,当在你真正开始使用的时候,你会体会到Ogre完全面向对象设计的好处,绝大部分的细节都被隐藏在成熟的层次结构之中,只需要你简单的调用,就能实现很绚丽的功能。对于3D API或者其他一些引擎的使用者而言,很少能有这种经历,甚至也不会去这么想:在Ogre可以用很少的代码来完成一个完整而漂亮的3D应用程序。

    引擎这个术语暗示Ogre 3D 为你的3D图形的应用程序提供了“强大的动力”,进而允许你更多关注应用程序细节而不是一个3D场景的渲染过程。作为应用程序的中间件,Ogre扮演了一个专注于处理了三维空间场景的角色。如果你熟悉Direct3D或者OpenGL,你会知道直接写一个图形程序需要多少代码,当你了解Ogre让你可以用很少量的代码来构建一个完整的三维场景(也有用在其他的方面,我们将在之后的文章中介绍)的时候,你就会庆幸有Ogre的存在。

    Ogre通过面向对象的方法实现了这样的一个入口,从实际应用进入到3D引擎具体的本职工作:把基本几何体渲染到目标区域(一般情况下指的是CRT或LCD显示设备的屏幕缓存,但也有例外)。如果你曾经使用传统而基本的方法进行过3D应用程序开发(换句话说,就是有使用OpenGL或者Direct3D这种底层API的经验),你会了解到它们有一些相似而且繁琐的过程:通过调用API设置渲染状态;通过调用API传送几何体信息;通过调用API通知GPU渲染;清理;返回到第一步,直到渲染完一帧进入下一帧。这个过程会让你陷入纷杂的API操作之中,相对于真正的应用,可能你会被浪费在基本的几何体操作中去。

    如果使用面向对象的方法来渲染几何体,就可以从几何体级别的处理工作中抽离出来,转而处理具体的场景和在场景中的物体。其中的物体包括:可活动的物体、静态物体组成的场景本身、灯光、摄像机以及其他。你只需简单的把物体放到场景之中,Ogre会帮助你完成杂乱的几何渲染处理,从而脱离对调用API的依赖。而且你也可以通过简单的方法来操作场景中的物体来代替矩阵变换:例如,可以简单的通过角度或者弧度来控制物体在不同空间内旋转(包括本地空间、世界空间和父节点空间),而不必要通过矩阵的变换这种抽象的方法来操作实现变换。简而言之,面向对象让你可以处理更具象的物体、属性和方法。而不用处理抽象的顶点列表、三角形列表、旋转矩阵等底层概念。

    Ogre的面向对象框架提供了包括全部渲染过程的对象模型。渲染系统(Render system)把复杂且不同的底层API(比如OpenGL和Direct3D)的功能抽象成一个统一的操作接口;场景图(Scene graph)也被抽象成为另外的一组接口,并且允许使用不同的场景管理算法实现“即插即用”的效果;所有可渲染(Renderable)对象,不论是动态还是静态,都被抽象出一组接口,用来被具体的渲染操作调用,比如技术(Technique)和其中的通路(Pass);可活动对象提供了一组通用接口接受各种各样的操作方法。

    Ogre做到了场景图与场景内容的分离。首先,Ogre对场景图的操作维持在接口级别;它并不关心去操作图形的具体算法实现。换言之,Ogre只是通过信号(它们的方法)来操作场景图,进而忽略了具体的算法实现。其次,Ogre的场景图接口只负责维护场景结构。节点中没有包含任何固有的内容和管理方法。具体的内容被放置到一种可渲染(Renderable)对象之中,它提供了场景中全部几何图形(包括活动的的或者其他所有的)。它们的渲染的属性(也可以说是材质)被包含在实体(Entity)对象中,在实体对象里面同样包含着一个或多个子实体(SubEntity)对象,这些子实体才是是真正可以被渲染对象。

    场景管理器可以帮助你创建具体的场景节点(Scene Node)。所谓的场景节点就是你在场景中实际移动变换的基本单元。场景中具体的场景内容需要挂接到场景节点上才能显示。这里所说的内容在大多数情况下指的就是实体(Entity)。实体继承于活动对象(MovableObject),并通过场景管理器来进行创建。如果你有已经有一个的实体的具体实例,你就可以把它绑定到已经存在的场景节点上。基本上实体都是从硬盘上的“.mesh”文件载入的模型来构建。当场景内容挂接到场景节点之后,你就可以通过场景节点来管理实体了,注意,是变换场景节点,而不是场景内容。

    其中活动对象(MobeableObject)可以直接操作所有几何体和渲染属性。它并不是场景节点的子类,而是挂接到场景节点中(可以理解为通过组合代替继承)。这意味着如果你需要,程序中的场景节点可以不用了解与之相关的可渲染对象的任何细节。也意味着你可以扩展,改变,重写,或者其他改变场景图的实现,而不会影响场景内容接口的设计和实现;他们彻底独立于场景图。场景图甚至可以完全修改而不会影响任何内容类。

    反过来说也同样适用:场景图同样不需要对所挂接的场景内容节点有任何了解,只要通过所用的接口来通知就可以完成所需要的功能。因为这些出色的设计,Ogre甚至可以完成对“用户自定义(user-defined)”内容节点的挂接。如果你决定构造一个拥有环绕立体声的场景,你可以把各种音效实现自定义节点,然后无缝的挂接到场景中。自定义的场景节点只需要实现一个简单的接口,就可以把定制数据挂接到场景中任意的节点上。

    可扩展性强的插件体系。举例来说,Ogre在接口层来管理场景图的实现,这样就意味着用户没有被限制在一定要使用哪几种场景管理算法的局限内。用户可以把任何自己程序需要的场景算法“插入”到Ogre程序库中,并且它们可以和Ogre本身提供的算法一样的良好的工作。如果在某个程序中需要KD-Tree场景算法的支持,你只要简单的按照Ogre定义的接口实现一个KD-Tree场景图的算法,并把它插入到你的Ogre程序中就能很好的使用了。

    灵活的渲染队列。Ogre采用了“场景队列”。这是一个容易理解的概念:Ogre将需要渲染的内容分别放在多个有序队列之中,并且队列之间也是有自己的顺序,Ogre分别渲染每个队列。

    健壮的材质系统。Ogre的材质是由一个或者多个渲染技术(Technique)组成,每个技术中又含有多个渲染通路(Pass)。这种通路指的是一个单独的渲染通道,它是Ogre材质渲染中的一个基本单元。换句话说,对象的每一个渲染通路将导致一次对图形硬件的绘图调用。

    独有的模型和骨骼文件格式(*.mesh和*.skeleton)。Ogre使用了自己独有的模型和骨骼数据格式。这也等于告诉你Ogre无法直接使用其他第三方的模型格式,例如商业游戏中的模型。如果你使用二进制格式来保存模型和骨骼数据文件,Ogre可以快速高效的载这些数据。这些二进制文件可以通过外部导出器或者离线工具(命令行OgreXMLConverter工具,在附录A讨论)来生成。当然,如果你愿意,OgreXMLConverter工具内部的类是允许在你自己的应用程序中使用的(假如你想从3D模型包中导出模型数据到二进制文件)。通常有一种普遍的创建二进制模型和骨骼文件的方法,先把场景或者角色模型数据从3D工具中转换到中间格式——可读的XML格式(Ogre XML),然后再通过命令行工具转换这个数据到二进制。Ogre官方网站上提供了当前大多数3D模型工具(包括商业和开源)的导出文件插件。其中包括Softimage|XSI、Autodesk 3D Studio Max 、Maya和Blender(还有很多没有在这里列举出来,你可以到Ogre官方网站上去查看详细列表)。

    Ogre支持三种动画方式:骨骼动画(Skeletal)、变形动画(Morph)以及姿态动画(Pose)。骨骼动画是通过把顶点绑定到骨骼的骨头(Bone)上来实现的(也被称为矩阵调色蒙皮技术,或简称为蒙皮技术)。在物体上的每个顶点都可以同时被四块独立的骨头影响,影响的具体力度取决于顶点对每块骨头分配的权重,当骨骼运动的时候,所有被它影响的顶点都根据骨头的位置和权重来更新自身的位置。这种算法可以模拟很多现实的顶点位移,例如可以很好的模拟在移动的胳膊的时候肩膀的外型的变化(更确切地说,因为当胳膊抬起的时候肩膀相应的肌肉会收缩)。目前Ogre还只能支持关键帧形式的正向动力学(FK)骨骼动画;也就是说没有提供对逆向动力学(IK)骨骼动画的内建支持;如果你的美工在3D模型工具中使用了逆向动力学产生相应的动画,这时候可以对骨骼每一帧进行采样来转换成正向动力学的骨骼动画。通常来说,这些工作都可以在导出插件中很好的完成。变形动画与姿态动画都属于顶点动画技术。变形动画存储了顶点在每一关键帧的绝对位置,然后在运行时对两个位置进行相应的插值计算,因为多个顶点的绝对位置无法叠,所以多个变形动画之间无法相互混合成新的动画。而姿态动画的不同之处在于它储存的是顶点的相对位置,因此多个姿态动画的轨迹可被混合起来,进而创建出更复杂的顶点动画。不过上面两种类型的动画都可以与骨骼动画很好的混合使用。

    合成器框架(Compositor framework)是Ogre新加入的一个特性,它允许用户在视口(Viewport)级别实现全屏的二维后处理(Postprocessing)特效。例如,你可以把视口中全屏的内容实现的发光或者朦胧处理、黑白渲染、锐化边缘渲染。任何你能想象的对整个视口的操作都可以在合成器框架中实现。

    资源在Ogre中的定义是“所有渲染几何体到渲染目标的数据所需要的数据”。这不仅包含模型,骨骼,材质,还包含表层(Ovelary)脚本和字体,以及有材质处理所需要的一些资源,比如合成器框架脚本、GPU程序和纹理。

    Root对象是一个Ogre应用程序的主入口点。因为它是整个Ogre引擎的外观(Façade)类(请参考设计模式中的外观模式),所以在这里作为第一个被列出来的类,它提供了方便的调用整个Ogre每个子系统的接口。通过Root对象来开启和停止Ogre是最简单的一种方式;当你构造构造一个Root实例的时候你就启动了整个Ogre,当析构的时候(让它停止活动或者执行delete删除它)Ogre也就关闭了。

    资源管理器:OGRE中的资源类型包括模型(Mesh),骨骼(Skeleton),材质脚本(Material),GPU程序,纹理(Texture),合成器脚本(Compositor),字体信息(Font)等。

    一般来说,开发者没有必要直接对渲染系统(RenderSystem)进行操作。因为渲染系统是Ogre对底层硬件API(OpenGL或者Direct3D)的一层抽象。尽管如此,你还是至少要了解渲染系统所创建的一个对象类型,即渲染目标(RenderTarget)类。它是对Ogre中两个重要概念的概括抽象:渲染到窗口和渲染到纹理。

    OGRE初始化:

    Root * root = new Root(“plugins.cfg”, “ogre.cfg”, “ogre.log”);

    bool rtn = root->showConfigDialog();

    root->initialise(true, ”My Render Window”);

    RenderWindow * window =root->getAutoCreatedWindow (); //创建render window

    root->addFrameListener(myListener); //添加帧监听

    root->startRendering(); //开始render循环

    plugins.cfg文件:Ogre中所谓的插件就是符合Ogre插件接口的代码模块(在Windows下面是DLL文件,在Linux下是.so文件),比如场景管理(SceneManager)插件和渲染系统(RenderSystem)插件等。在启动的Ogre时候,他会载入plugins.cfg配置文件来查看有哪些插件可以被使用。

    Ogre.cfg文件:在启动Ogre的时候,引擎提供了一个简单的图形界面,可以通过它来配置基本的渲染属性。该配置文件和那个图形界面功能是一样的。

    Ogre渲染窗口的概念是唯一可以被系统用来渲染场景的地方。就如同现实世界中的画布一样,Ogre把你程序的内容画到它的表面。为了实现这个目的,Ogre至少需要一个摄影机(Camera)来“拍摄”你的场景,同时也需要一个或几个视口(Viewport),用于存放摄影机的拍摄下来的“胶片”(和渲染窗口的功能有些类似)。

    在调用startRendering()之后,Ogre就会不断地渲染在你场景中所有能被渲染的东西。你可以通过关闭渲染窗口来结束这个过程(比如单击窗口右上角的x图标,或者在Windows任务栏中右键菜单中选择关闭)。当你在注册了帧监听(Frame Listener,之后会介绍)对象,然后在回调结束后返回一个false值给系统,同样也能结束程序渲染。作为备用,Ogre还提供了一个可以在程序的任何地方调用的方法Root::getSingleton().queueEndRendering()来立刻结束程序。不过在使用startRendering()进行渲染的时候,最常用的办法还是在帧监听中返回false。

    场景管理器所做的工作:

    在通常的情况下,Ogre的场景管理器会负责处理以下事情:

    ·在场景中创建和放置活动物体、灯光以及摄像机,并维护他们的在场景图中的周游和变换。

    ·载入和布置世界地图(World geometry,与活动实体不同,世界地图是巨大且可以延伸的,通常情况下是不可移动的,比如一个完整的BSP地图)。

    ·对场景查询(Scene Queries)的支持,比如回答“在世界的某个原型空间内,都包含了那些物体”。

    ·剔除不可见物体并且将可见物体放入渲染队列。

    ·根据当前和渲染物体的透视图,对无方向的光源(Nondirectional Light)进行组织和排序(按由近到远)。

    ·设置并且渲染场景中的阴影。

    ·渲染场景中的其他物体,如背景和天空盒

    ·发送组织好的内容到渲染系统执行渲染

    Ogre自身提供两个场景管理器类型:OctreeSceneManager和TerrainSceneManager。OctreeSceneManager是一个通用的场景管理器。TerrainSceneManager是一个为高度场场景优化的场景管理器。

    对于程序的开发者而言,场景管理器的直接用途一般是用来创建场景中所使用的对象,比如:灯光、摄影机、实体、粒子系统以及公告栏这些活动物体,以及天空盒、静态几何体和世界地图(World geometry)这些非活动物体。对于场景中存在的物体,不论是否能被渲染,都会交给场景管理器进行具体的管理工作。

    场景管理器用场景节点来定义场景图的结构。这些场景节点以层次的结构组织在场景管理器中:一个场景节点可以有一个父节点和任意数量的子节点。你可以对场景管理器中的节点进行绑定或者摘除操作;这里提供一个简单的办法来关闭场景中的某个部分:只要把不希望渲染部分的根节点从场景图中摘除下来,这个部分就不会被渲染了。场景节点必须通过创建它们的场景管理器来销毁。

    创建实体并进行移动、旋转、缩放:先创建Entity,然后attach到场景节点,然后对场景节点进行移动、旋转、缩放(translate, rotate/yaw/pitch/roll, scale)(注意:rotate是可以沿任意轴旋转,yaw/pitch/roll分别只是沿着x/y/z三个轴旋转)。

    场景管理起另外一个很重要的功用就是用来进行空间场景查询(从场景中得到查询的反馈信息),其中包括:光线查询(Ray Queries)、球体查询(Sphere Queries)、边界盒查询(Bounding-Box Queries)、边界平面查询(Bounding-Plane Queries)以及相交查询(Intersection Queries)。其中光线查询返回与给定光线(空间中两点组成的虚拟线)相交的物体信息;球体查询返回给定球体(通过球中点和半径确定的空间区域)中所有包含的物体信息;边界盒查询返回给定轴向包围盒(通过两个三维向量作为对角点产生的与空间轴平行的长方体空间)中所包含的物体信息;边界平面查询返回与给定的无限延伸的平面相交物体的信息;相交查询返回与指定物体相交的所有物体信息。所有的查询过程都是可进行屏蔽操作的(Maskable),这意味着你可以通过这个功能过滤到你不需要的对象。

    多个坐标系,坐标系方向如下:

    坐标系示例

    动画:Ogre有两种不同的操作动画对象的方法,一种是通过关键帧,另外一种是通过控制器。关键帧之间的是动画轨迹。Ogre支持下面几种动画轨迹类型(在同一轨迹中的所有关键帧必须使用相同类型):

    •数字动画轨迹(NumericAnimationTrack):与数字关键帧(NumericKeyFrame)对应,每个关键帧中都保存了相应的数字数据。这里使用了AnyNumeric数据类型来保存这些数值。在Ogre自身有一种特殊的数据结构被称为Any,它很类似动态语言中的可变类型,可以用来储存各种C++类型的数据。AnyNumeric是Any的子类,负责储存各种数值类型,比如实数和整形。

    •节点动画轨迹(NodeAnimationTrack):与变换关键帧(TransformKeyFrame)对应,每个关键帧都包含了两个三元向量和一个四元数,分别用来表现节点在当前帧的位置、缩放以及方向。

    •顶点动画轨迹(VertexAnimationTrack):同时对应于顶点变形关键帧(VertexMorphKeyFrame)和顶点姿态关键帧(VertexPoseKeyFrame),每个关键帧都保存了特定时间的顶点位置数据,在姿态动画(Pose)中还保存了顶点混合权重。

    你的应用程序控制Ogre中动画的的主要途径就是“动画状态(Animation State)”,在代码中你可以通过这些名字来调用实体中的某个动画部分,而物体则返回相应的动画状态以供你使用。其中包括以下动画属性:

    •长度:以秒为单位,获得动画片段的长度。

    •当前位置:得到或者设置当前播放的位置,换句话说是从动画片段(而不是整个动画)开始到当前位置所流逝的时间(秒)。

    •动画名称:尽管你可以通过物体本身得到所有的动画列表,这里仍然提供只读属性的动画名称用来在不知道动画名字情况下调用。

    •循环:设置或者得到在动画片段结束后是否循环播放。

    •启用:设置或者得到这个动画是否启用。

    •权重:动画可以被混合(但有相应的一些限制,在后面介绍)。这个属性可以设置或者得到当动画与其他动画混合的时候的影响的权重。

    代码绘制图形或者模型可以使用:ManualObject类。

    展开全文
  • 一个优秀的3D图形图像引擎,3D,ui界面,实时渲染。代码完整。可供引擎参考学习等用。Tranquillity_1.3
  • 八大渲染引擎的分析

    千次阅读 2014-10-11 14:00:23
    八大渲染引擎的分析 整理来自网页:http://www.snren.com/dispbbs.asp?boardid=36&ID=84925 一、RENDER MAN:鲜活的渲染思想  RenderMan具有功能强大的Shader编译器和抗动画模糊功能,能够让设计者创造出超...

    八大渲染引擎的分析

    整理来自网页: http://www.snren.com/dispbbs.asp?boardid=36&ID=84925

    一、RENDER MAN:鲜活的渲染思想


           RenderMan具有功能强大的Shader编译器和抗动画模糊功能,能够让设计者创造出超复杂的动作片来。同时他还有一个功能

    不可忽视,就是他的真实性。RENDERMAN能够渲染出照片级真实的图片,因此在工业界的运用很受欢迎。RENDERMAN这款顶级渲染器

    在电影界成功运用了10多年,他稳定快速有效的渲染性为广大CG爱好者所青睐。

           下面我来介绍下RenderMan的历史好了。他是于1985年著名的皮克斯公司开发的,1988年发布了RENDERMAN3.0     1989年发

    布了3.1和3.2版本,并开始正式启用。同年皮克斯为纯品康纳果汁做了第一个商业广告:(一觉醒来)。有RENDERMAN身影的动画短

    片(TIN TOY)赢得了奥斯卡最佳动画短片奖,这是第一部获得奥斯卡奖的动画短片,也是(玩具总动员)的创意来源。其次有

    RENDERMAN渲染引擎做出来的动画片还有(怪物公司)(海底总动员)(超人总动员)以及最新的(汽车总动员)其他如(THE

    MUMMY2)中的花草生长,(精灵鼠小弟)中的毛发等等。

    二、 MENTAL RAY:智能渲染器


            Mental Ray发展至今已经非常成熟了,为许多电影成功实现了视觉特效。它是除了皮克斯的RenderMan之外拥有最广泛用户

    的电影级渲染工具。对于另外一个高质量的渲染器RenderMan来说,Mental Ray的渲染效果几乎不相上下,而其操作比RenderMan简

    单的多,效率非常高。因为RenderMan渲染系统需要使用编程的技术来渲染场景,而Mental Ray一般只要在程序中设定好参数,然后

    “智能”地对需要渲染的场景自动计算,所以Mental Ray有了一个别名————“智能”渲染器。Mental Ray是一个将光线追踪算

    法推向极致的产品。利用这一渲染器,我们可以实现反射,折射,焦散,全局光照明等其他渲染器很难实现的效果。

            Mental Ray最先发布的时间是1989年。目前市场上所流行的最新商用版本是V.3.4 V.3.5版本在今年晚些时候将通过OEM合

    作伙伴推举出。Mental Ray分别被嵌入到以下产品年份:Sofimage1993年,Catia1994年,3d? Max1996年,Maya2001年,

    Solidworks2003年,AutoCad2006年。主要作品有1994年完成的(Asterix in America)是一部用Mental Ray完成的2D手绘风格的动

    画片。(Matrix2)(星战前传2)(终结者3)(后天)(Shark)以及刚上映的海难片(海神号)等影片中,Mental Ray都提供了

    惊人的视觉特效。

    三、MAXWELL RENDER:真实光线渲染引擎


            Maxwell Render是一款基于真实物理光线的渲染器。它的算法真实再现了光线在现实世界中的行为,它能够完全捕捉到光

    线对场景中所有元素交互的影响。所有的计算都使用光谱和高动态范围数据。Maxwell Render简称为MR是Next Limit公司推出的产

    品。大家也许会对Maxwell陌生,但绝大多数人不会对制作过(指环王)(查理与巧克力工厂)(机器人历险记)的Real Flow陌生

    。这两个性能卓越的软件都同出于建立于1998年的Next Limit Technologies公司,著名的工业流体模拟软件“XFlow"也是这个公司

    的产品。

            从2004年的3月测试版刚出现,Maxwell就因为其卓越的渲染效果而备受关注。但它的开始也并不是一帆风顺的,这个软件

    在开始正式版本V1.0之前,先后推出了多个测试版本,如V1.1.33以及Maxwell Render V1.2.2.a Beta版等等,在推出1.0正式版本

    之前接连推出5个RC版,因为新的版本有些严重的BUG,甚至有时候达到每天更新一个,如RC2,RC3,RC4等。它目前的最新版本为

    1.1,但这个版本推出之后仍有些对贴图支持的问题,即使这样,仍然阻挡不了使用者对这个渲染器的热爱。

    四、BRAZIL:要速度还是要质量


           Brazil以真实细腻的一流渲染效果而令人折服。不过如果为一个自己想要的渲染效果,必须等待很长时间。Brazilr/s是

    SplutterFish公司开发的一款基于3d? Max的高级渲染器,它的前身是Ghot?。2001年,Brazil便推出了它的免费ALPHA版本,在网络

    自丵由下载,供大家广泛测试。SplutterFish公司于今年发布Brazil r/s2.0,    2.0不但在GI的速度上有了进步,并且增加了3D

    motion blur,3S,渲染时间置换等重要功能,开始向全能渲染器方向发展。

           2001年,SplutterFish在其网站发布了3d? Max的渲染插件Brazil。在公开测试版的时候,该渲染器是完全免费的,作为一

    个免费的渲染插件,其渲染效果是非常惊人的,但渲染速度相对比较慢。经过一段时间测试,Brazil于2002年7月正式推出了Brazil

    r/s1.0版本。渲染算法上有了很大的进步,最被大家批评的渲染速度问题也有了一定的提高。

           其主要作品在很多中小型项目中大量运用。其中最著名的作品之一就是获得Siggraph2005最佳动画短片奖的(坠落的艺术)

    ,其他以单帧作品为主,国内也有不少忠实的粉丝哦!

    五、 VRAY:不仅仅表现建筑


           Vray渲染器一出现就以快速的全局光照明,高质量的视觉效果,使用简单灵活等优势成为我们在影视特效等项目中的首选渲

    染器之一。它超快的渲染速度和真实的渲染质量帮助我们轻松应对客户的各种要求。VRay是著名的3d? Max插件公司Chaosgroup推出

    的渲染器。作为后起之秀,VRay上市时,经过一段时间的磨合,便马上成为用户非常熟悉的一种渲染器。在各种高级渲染器都广泛

    运用的今天,VRay为我们带来的高品质的渲染结果具有很高的应用价值。它只需要简单的设置和调节和调节就可以应用

    IIIumination,Caustics,HDR,高级动态模糊等各项功能,并且品质非常优良。哪怕是个简单的场景,也能够使其瞬间产生逼真的现

    实感。Chaosgroups在3ds Max的商业平台上取得巨大的成功之后,他们决定把渲染方案延伸到Maya上。Siggraph2005上,他们展出

    了V-Ray for Maya,从此,Maya用户又多了一个选择。

           主要作品为:VRay渲染器已经成为世界上一些大的建筑工作室的首选,数以百万美元的工程都将信任投给了VRay。一些历史

    悠久的工业公司如Digital Domain Nine lnch Nails等已经将VRay成功地整合到了他们的产品中,并且利用VRay创造了高质量的视

    觉效果!

    六、FINALRENDER:3d效果的先行者


           FinalRender是3ds Max平台下比较流行的渲染器之一。由于材质精度相对不够,其渲染效果略逊色与Brazil,但由于其缘于

    Cinema 4D内嵌的优秀GI算法,速度非常快,对于普通的商业用户来说很适合,特别适合与资源和资金不足的中小型工作室。Cebas

    公司一直是3ds Max的一个非常著名的插件开发商,很早就以Luma(光能传递),Opic(光斑效果),Bov(体积效果)几个插件而

    闻名。在开发FinalRender的时候,运用了Cinema 4D内嵌优秀渲染算法,同时集成了原来的Luma,Bov插件,使得FinalRender渲染器

    不但在速度上实现了大幅度的领先。在功能上也达到当时所有渲染器前所未有的全面功能。相对别的渲染器来说,FinalRender的第

    一个版本就提供了3S(次表面散射)的功能,用与卡通渲染的功能和HDR光照的支持,同时支持不少3ds Max的效果插件(譬如粒子

    ,毛发等)。新的版本更增加了3D动态模糊等高级渲染技术,是目前3ds Max平台最全面的渲染器。

           由于其独特的效果,国外很多工业设计公司以此为第一的渲染器,国内用户在做建筑表现方面把该渲染器也作为首选之一。

    七、TURTLE:渲染速度和海龟无关


           在质量毫不逊色的同时,这款渲染软件的最大亮点就是渲染速度,以及与MAYA的完全整合。正是基于LIQUIDLIGHT1.0技术的

    商业化产品,该渲染器既能与MAYA完美整合,又能作为一款独立的应用程序使用。Turtle3.0为我们提供了一个良好的工作流程,而

    且可以使用Turule的全部渲染特性进行烘焙。例如:在viewport中进行烘焙,区域烘焙,对烘焙进行超级采样,还可以做一些原来

    只有在渲染中才能完成的事情。这些新的特性加上Turtle良好的速度,意味着你可以通过更少的时间完成更多的事情。

           TURTLE自从2003年起就被应用到产品的制作中,其客户包括了SONY,任天堂,电子艺界和Lockheed Martin等全球知名公司

    。起主要作品有(火爆狂飙)(IKEA广告)(Volvo2006年广告)


    八、CARTOON:真实的非真实再现


          逼真的视觉影像已不是梦想,人们开始寻求对传统动画2D效果的回归。“卡通渲染”由此而生。
          在3ds Max平台上的卡通渲染器插件有DavidGould_IIIustrate_v5.3        Liquid 1.3 and Pencil 1.2      FinalToon。
          在Maya平台上的卡通渲染器插件有CratoonShader V3.92        Vector矢量渲染器
          在Softimage/XSI平台上的卡通渲染器插件有mental ray
    展开全文
  • iOS图形渲染解析

    千次阅读 2016-10-08 17:10:11
    我们平时所说的硬件加速其实都是指OpenGL,Core Animation/UIKit基于GPU之上对计算机图形合成以及绘制的实现,由于CPU是渲染能力要低于GPU,所以当采用CPU绘制时动画时会有明显的卡顿。 但是其中的有些绘制会...

    原文地址:http://www.cocoachina.com/ios/20160929/17673.html

    这次主要要讲一些关于绘图方面的东西,涉及的方面可能会比较多一点,也是前段时间项目中有不少这方面的知识所以花了点时间研究了一下。文章的内容主要分为两部分,第一部分是关于iOS上一个Chart的第三方库的一些进阶使用;第二部分是在第一部分上研究的iOS上的绘图原理以及性能方面的探索。这篇文章的目的主要是为以后讲关于绘图方面的知识抛砖引玉吧,因为后面的时间会讲一些关于性能监测以及性能优化方面的内容,绘图的性能也占了里面很大的一部分。

    第一部分

    Charts(MPAndroidChart iOS版)

    MPAndroidChart是一个Andriod上被经常使用的绘制曲线的第三方库,danielgindi把这个库使用swift成功移植到了iOS/tvOS/OSX上,它几乎保留的Android的所有功能,同时代码结构上也和Android的非常的相似。个人感觉就是名字取的不好,就只是叫Charts,是在太不直观了。

    然后只要讲一些关于这个库的一些进阶使用吧,其实应该算是一些扩展方面的使用。对于那些基础的使用我就不讲了,同学们自行查看Demo应该就可以明白了。好,接下来我们看一张设计图:

    1.png

    pic_1.png

    其实我们很少情况下可以直接使用Charts的基础功能就完成我们所想要的效果,所以基本上的情况下我们都需要对原始的Charts进行扩展才能满足我们的需求。这里有一点需要注意的是不到万不得已最好永远都不要去改动第三方的库源码,采用继承的方式永远要优于修改,无论是对于扩展性来言还是以后第三方库的更新等等(在你每次想修改源码之前最好问问自己是不是真的看懂了源码的原理,作者完全没有帮你预留修改的扩张?基本上优秀的第三方库的扩展性是很鲁棒)。

    言归正传上图中有三个点需要我们在原有的库上进行扩展才可以完成我们的功能。

    关于背景色的渲染

    关于背景色的渲染,也就是我们标注的Note:One这部分的内容,Charts的基础功能其实只能做到两个点之间画上背景色,并不能做到像上图那样在同一个区间中分开画上两种颜色,所以很明显我们只能自己去实现这个需求,继承一个新的Chart然后重写它的背景绘制方法,我们来看一张演变的过程图。

    2.jpg

    pic_2.jpg
    • 默认状态是Charts可以直接支持的能力;

    • 转变状态其实就是计算出每两个坐标区间之间需要分开颜色的子区间,以子区间的坐标进行背景绘制;

    • 改进状态就是在转变状态下对绘制范围以及背景渐变做了约束;

    实际上从转变状态到改进状态虽然看上去比较简单,实际上还是有许多工作需要完成,这里介绍一下我采用的方案。

    转变状态相对比较简单,就是计算每两个坐标的子区间然后绘制一个大Rect就可以了。

    改进状态相对比较复杂,我们需要计算出个单位区间的坐标,每一个单位区间其实都是一个梯形,也就是说我们只需要通过画一个三角形和一个矩形就可以画出一个单位区间,以此类推我们就可以绘制出整个背景,其实就是基本一个线性公式.值得注意的一点是关于渐变色的渲染我们都应该从顶部至底部的方向保证不会出现颜色上的差异

    y = kx + b;
    关于第二行的X坐标以及底部的标注数据

    关于第二行的X坐标以及底部的标注数据,也就是我们标注的Note:Two和Note:Three这两部分的内容。

    当然以来基础额Charts肯定无法完成我们的需求,实现思路其实和绘制背景类似,我们重写绘制X坐标的函数,在原来的基础上利用获得的坐标值在下方再添加一行我们需要的内容。底部的标注数据的绘制也是同一个原理,在特定的位置在添加标注数据的贴图就可以完成我们的需求。

    关于Charts这部分的使用其实每个人面对的问题可能都是不一样的,每个设计都是不一样的,所以我们无法涵盖所有问题的解决方案各自是什么,当你发现这些库的基础功能无法满足你的需要时,通常遇到这种问题我的建议是两个:

    • 类似于绘图这类的第三方库它都会有很好的扩展性,你要做的就是去读源码,摸清它的原理在这个基础上去继承扩展你需要的功能,最要永远不要去做改动源码这种事。

    • 换位思考,想想作者如果是你的话,你会怎么去实现这个功能,把思路理清楚然后在动手,不要边做边想会比较好。


    第二部分

    这一部分内容我也是网上看了不少别人的博客后一些理解,之前对于这块也不是很了解,这次是理论知识而且比较粗浅,下次会分享一些实际性能优化方案,和更深层次的一些东西。

    UIView和CALayer

    关于UIView和CALayer的关系这里大致讲主要的几点:

    • 每个UIView都包含一个CALayer在背后提供内容的绘制和显示(一个layer可能包含多个子layer),并且UIView的bound,frame都由内部的Layer所提供。两者都有树状层级结构,layer内部有SubLayers,View内部有SubViews.但是Layer比View多了个AnchorPoint,AnchorPoint相比Postion的区别在于position点是相对suerLayer的,anchorPoint点是相对layer的,两者都是中心点的位置,只是相对参照物不同罢了。

    • 在View显示的时候,UIView做为Layer的CALayerDelegate,View的显示内容由内部的CALayer的display。

    • View可以接受并处理事件,而Layer不可以,因为UIKit使用UIResponder作为响应对象。

    • layer内部维护着三分layer tree,分别是presentLayer Tree(动画树),modeLayer Tree(模型树), Render Tree(渲染树),在做 iOS动画的时候,我们修改动画的属性,在动画的其实是Layer的presentLayer的属性值,而最终展示在界面上的其实是提供View的modelLayer。


    界面的绘制和渲染

    UIView是如何到显示的屏幕上的。

    这件事要从RunLoop开始,RunLoop是一个60fps的回调,也就是说每16.7ms绘制一次屏幕,也就是我们需要在这个时间内完成view的缓冲区创建,view内容的绘制这些是CPU的工作;然后把缓冲区交给GPU渲染,这里包括了多个View的拼接(Compositing),纹理的渲染(Texture)等等,最后Display到屏幕上。但是如果你在16.7ms内做的事情太多,导致CPU,GPU无法在指定时间内完成指定的工作,那么就会出现卡顿现象,也就是丢帧。

    60fps是Apple给出的最佳帧率,但是实际中我们如果能保证帧率可以稳定到30fps就能保证不会有卡顿的现象,60fps更多用在游戏上。所以如果你的应用能够保证33.4ms绘制一次屏幕,基本上就不会卡了。

    总的来说,UIView从Draw到Render的过程有如下几步:

    • 每一个UIView都有一个layer,每一个layer都有个content,这个content指向的是一块缓存,叫做backing store。

    • UIView的绘制和渲染是两个过程,当UIView被绘制时,CPU执行drawRect,通过context将数据写入backing store。

    • 当backing store写完后,通过render server交给GPU去渲染,将backing store中的bitmap数据显示在屏幕上。

    下图就是从CPU到GPU的过程

    3.jpeg

    pic_5.jpeg

    其实说到底CPU就是做绘制的操作把内容放到缓存里,GPU负责从缓存里读取数据然后渲染到屏幕上。

    就如同下图的所示

    4.jpeg

    pic_4.jpeg

    整个过程也就是一件事:CPU将准备好的bitmap放到RAM里,GPU去搬这快内存到VRAM中处理。
    而这个过程GPU所能承受的极限大概在16.7ms完成一帧的处理,所以最开始提到的60fps其实就是GPU能处理的最高频率。

    因此,GPU的挑战有两个:

    • 将数据从RAM搬到VRAM中

    • 将Texture渲染到屏幕上

    这两个中瓶颈基本在第二点上。渲染Texture基本要处理这么几个问题:

    合成(Compositing):

    Compositing是指将多个纹理拼到一起的过程,对应UIKit,是指处理多个view合到一起的情况(drawRect只有当addsubview情况下才会触发)

    [self.view addsubview:subview]

    如果view之间没有叠加,那么GPU只需要做普通渲染即可。 如果多个view之间有叠加部分,GPU需要做blending。

    尺寸(Size):

    这个问题,主要是处理image带来的,假如内存里有一张400x400的图片,要放到100x100的imageview里,如果不做任何处理,直接丢进去,问题就大了,这意味着,GPU需要对大图进行缩放到小的区域显示,需要做像素点的sampling,这种smapling的代价很高,又需要兼顾pixel alignment。计算量会飙升。

    离屏渲染(Offscreen Rendering And Mask):

    我们来看一下关于iOS中图形绘制框架的大致结构

    5.jpeg

    pic_3.jpeg

    UIKit是iOS中用来管理用户图形交互的框架,但是UIKit本身构建在CoreAnimation框架之上,CoreAnimation分成了两部分OpenGL ES和Core Graphics,OpenGL ES是直接调用底层的GPU进行渲染;Core Graphics是一个基于CPU的绘制引擎;

    我们平时所说的硬件加速其实都是指OpenGL,Core Animation/UIKit基于GPU之上对计算机图形合成以及绘制的实现,由于CPU是渲染能力要低于GPU,所以当采用CPU绘制时动画时会有明显的卡顿。

    但是其中的有些绘制会产生离屏渲染,额外增加GPU以及CPU的绘制渲染。

    OpenGL中,GPU屏幕渲染有以下两种方式:

    • On-Screen Rendering即当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。

    • Off-Screen Rendering即离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。

    离屏渲染的代价主要包括两方面内容:

    • 创建新的缓冲区

    • 上下文的切换,离屏渲染的整个过程,需要多次切换上下文环境:先是从当前屏幕(On-Screen)切换到离屏(Off-Screen);等到离屏渲染结束以后,将离屏缓冲区的渲染结果显示到屏幕上有需要将上下文环境从离屏切换到当前屏幕。而上下文环境的切换是要付出很大代价的。

    为什么需要离屏渲染?

    目的在于当使用圆角,阴影,遮罩的时候,图层属性的混合体被指定为在未预合成之前不能直接在屏幕中绘制,即当主屏的还没有绘制好的时候,所以就需要屏幕外渲染,最后当主屏已经绘制完成的时候,再将离屏的内容转移至主屏上。

    离屏渲染的触发方式:

    • shouldRasterize(光栅化)

    • masks(遮罩)

    • shadows(阴影)

    • edge antialiasing(抗锯齿)

    • group opacity(不透明)

    上述的一些属性设置都会产生离屏渲染的问题,大大降低GPU的渲染性能。

    CPU渲染:

    以上所说的都是离屏渲染发生在OpenGL SE也就是GPU中,但是CPU也会发生特殊的渲染,我们的CPU渲染,也就是我们使用Core Graphics的时候,但是要注意的一点的是只有在我们重写了drawRect方法,并且使用任何Core Graphics的技术进行了绘制操作,就涉及到了CPU渲染。整个渲染过程由CPU在App内 同步地 完成,渲染得到的bitmap最后再交由GPU用于显示。

    理论上CPU渲染应该不算是标准意义上的离屏渲染,但是由于CPU自身做渲染的性能也不好,所以这种方式也是需要尽量避免的。

    分析

    所以对于当屏渲染,离屏渲染和CPU渲染的来说,当屏渲染永远是最好的选择,但是考虑到GPU的浮点运算能力要比CPU强,但是由于离屏渲染需要重新开辟缓冲区以及屏幕的上下文切换,所以在离屏渲染和CPU渲染的性能比较上需要根据实际情况作出选择。


    总结

    其实第一部分的实现当时并没有太多考虑性能上的一些问题,所以具体绘图性能方面的优化,我会在下次的文章中阐述,也是我们App中实际遇到的一些情况以及对应的解决方案。

    引用

    http://vizlabxt.github.io/blog/2012/10/22/UIView-Rendering/(理解UIView的绘制)

    展开全文
  • 三维渲染引擎收藏(转载)

    千次阅读 2019-10-16 12:03:16
    基于 WebGL 的 Javascript 3D 绘图引擎 G3D [国产]G3D 是阿里巴巴开源的...

    G3D
    基于 WebGL 的 Javascript 3D 绘图引擎  G3D [国产]
    G3D 是阿里巴巴开源的一款基于 WebGL 的 javascript 3D 绘图引擎。与其他的 WebGL 3D 引擎相比,G3D 是更加「纯粹」的渲染引擎,也就是说,它完全不依赖任何 DOM...
    上次更新: 2018年03月06日 收藏 58 评论 5 评分 6.8
    高性能软件光栅化渲染器  OpenSWR [推荐]
    OpenSWR —— 用于OpenGL的高性能,高度可扩展的软件光栅化渲染器 OpenSWR的目的是提供一个高性能,高度可扩展的OpenGL兼容软件光栅化渲染器,允许使用未经修改的可视化软件。 ...
    OpenSWR
    ECharts-X
    全新 3D 可视化库  ECharts-X [推荐] [国产]
    ECharts-X是 ECharts 团队推出的全新 3D 可视化库,它是基于 ECharts 的扩展,底层深度整合了 WebGL 库QTEK和 Canvas2D 库ZRender。 特色 混搭...
    ECharts-X

    Blend4Web
    WebGL 框架  Blend4Web [推荐]
    Blend4Web 是一个开源的 WebGL 框架,使用 Blender 作为主要的管理工具。原生支持 Blender 的节点材料、NLA 编辑器、例子系统、弹道物理、定位音频等。
    Blend4Web

    Minko
    3D应用开发框架  Minko [推荐]
    Minko是由来自法国的Aerys公司开发的一套表现力十分出色的开源跨平台3D应用开发框架,支持HTML5、iOS、Android、Windows、OS X和Linux,能够用来开发和设计丰富、...
    Minko

    基于 WebGL 的可视化图层  deck.gl [推荐]
    deck.gl,是由 Uber 开源的基于 WebGL 的可视化图层。 用于React 的 WebGL 遮罩套件,提供了一组高性能的数据可视化叠加层。为数据可视化用例提供测试、高性能的图层,如 ...
    deck.gl

    节点链接绘制库  Ggraph [推荐]
    Ggraph 是一个基于 D3 构建的复杂混合图形的库,它扩展了节点和链接的概念。非常适合一组或者多组节点连接的展示。 示例代码: 初始化: ggraph.init('container'); ...
    Ggraph

    OpenGL
    开放图形技术规范  OpenGL
    OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网...

    JS三维模型库  Three.js
    Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。你可以在它的主页上看到许多精采的演示。不过,这款引擎目前还处在比较不成熟的开...

    Google三维API  O3D
    O3D 是一个开源的 Web API 用来在浏览器上创建界面丰富的交互式的 3D 应用程序。 这是一种基于网页的可控3D标准。此格式期望真正的基于浏览器,独立于操作系统之外,并且支持主流的3D显...
    O3D

    三维图形渲染库  OGRE 3D
    OGRE(Object-Oriented Graphics Rendering Engine,面向对象图形渲染引擎)是一个用C++开发的面向场景、非常灵活的3D引擎,它旨在让开发人员更容易、更直...
    OGRE 3D

    移动设备上的OpenGL  OpenGL ES
    OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos...
    OpenGL ES

    Web的3D绘图标准  WebGL
    WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为...
    WebGL

    开源的3D引擎  Gameplay
    黑莓制造商RIM宣布推出跨平台、开源的3D引擎Gameplay。这种3D引擎针对移动平台游戏开发者。 Gameplay及其开发工具,支持黑莓10、Playbook 2.0、iOS 5.1、And...
    Gameplay

    C#的OpenGL类库  SharpGL
    SharpGL 可以让你在 Windows Forms 或者 WPF 应用中轻松的使用 OpenGL 开发图形应用。
    SharpGL

    3D引擎  Irrlicht Engine
    Irrlicht Engine 是一个用C++开发的高性能实时的3D引擎,同时提供了.NET版本,这是一个跨平台的使用了D3D、OpenGL的3D渲染引擎。
    Irrlicht Engine

    OpenGL应用框架  GLFW
    GLFW是一个OpenGL的应用框架,支持Linux和Windows。GLFW 主要用来处理特定操作系统下的特定任务,例如 OpenGL 窗口管理、分辨率切换、键盘、鼠标以及游戏手柄、定时器输入...
    GLFW

    3D图形开发库  OpenSceneGraph
    OpenSceneGraph是一款高性能的3D图形开发库。广泛应用在可视化仿真、游戏、虚拟现实、高端技术研发以及建模等领域。使用标准的C++和 OpenGL编写而成,可以运行在Windows系列...
    OpenSceneGraph

    3D渲染引擎  Genesis3D
    Genesis3D 是实时3D渲染环境,所有的实时3D的需要。有大量的在线社区,免费网上论坛,许多链接Genesis3D开发商...你会发现所有的支持和工具,您需要 着手开发世界一流的,实时三维...
    Genesis3D

    Python的OpenGL包  PyOpenGL
    Python中要访问OpenGL函数必须加上一个PyOpenGL包。

    Catcake
    Java 3D图形引擎  Catcake
    Catcake是一款跨平台的Java 3D图形引擎,目前支持PC(J2SE)及Android环境运行(已有iPhone版规划)。该引擎在易用性和运行性能上皆有出色的表现,支持常见的游戏开发功能,...
    Catcake

    jPCT
    基于OpenGL的3D图形引擎  jPCT
    jPCT是一款基于OpenGL技术开发的3D图形引擎(PC环境为标准OpenGL,Android为OpenGL ES), 以Java语言为基础的,拥有功能强大的Java 3D解决方案。该引擎与L...

    OpenGL图形接口  GLEW
    GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到2.0以上了,要使用这些O...

    三维引擎  OpenWebGlobe
    OpenWebGlobe是一个高性能的三维引擎。可应用于可视化仿真,游戏,三维GIS,虚拟现实等领域。它使用纯javascript编写,可以运行在任何支持HTML5、WebGL的浏览器上。使用O...
    OpenWebGlobe

    OpenGL的C++封装库  OGLplus
    OGLplus (oglplus) 是一个仅包含头文件的 C++ 语言库,用于实现一个瘦面向对象的 OpenGL 门面操作接口,提供了自动资源和对象管理的封装,让在 C++ 中使用 OpenGL...
    OGLplus

    Qt3D
    Qt3D 使用 OpenGL 技术支持 3D 的脚本化 Qt Quick 应用。 获取代码:git clone git://gitorious.org/qt-labs/qt3d.git
    Qt3D

    Java绘制3D图形的类库  Jzy3D
    Jzy3D 是一个Java的类库,用来绘制各种各样的三维图形,如下图所示:
    Jzy3D

    Azul3D
    3D 游戏引擎  Azul3D
    Azul3D 是一个用 Go 语言开发的 3D 游戏引擎。支持 Windows 和 Linux,基于 OpenGL 2.x 的渲染器,基于 OpenAL 的 3D 音频。

    基于WPF的3D工具箱  Helix 3D Toolkit
    Helix 3D Toolkit 是基于WPF的3D工具箱。 目标: 为 3D 开发提供一些有用的类 测试 WPF 3D 模型的功能 体验 3D 算法 简单 顺便学习 WPF :)
    Helix 3D Toolkit

    Axiom 3D Engine
    Axiom 3D Engine 是一个开源、跨平台的 3D 图形渲染引擎,主要用于 .NET 和 Mono 开发环境。该引擎是 OGRE 引擎的高性能 C# 移植版本。

    2D/3D 图形开发库  Visualization Library
    Visualization Library 是一个 C++ 的中间件用来开发基于 OpenGL 2.1 的 2D/3D 应用程序,支持高级特性包括 OpenGL Shading 语言、帧缓冲对象...
    Visualization Library

    python的3D引擎  Soya 3D
    Soya 3D面向对象,它是一个高级的python 3D引擎。 有些人会发现Soya是专为Python 3D编程而准备的,有些则认为Soya 3D作为一个3D引擎是3D世界的UFO。

    OpenGL4Net
    OpenGL4Net 是 C# 对 OpenGL 的封装库。

    三维地图查看工具  mapgl
    mapgl 是一个使用 3D 来查看地图的工具,使用 C 语言和 OpenGL 技术。

    Cafu 3D引擎
    这个引擎支持一系列3D渲染,材质制作,多玩家在线,跨平台和可被多编译器编译。但它采用了双协议,商业版是闭源的,源代码在GPLv3许可证下发布。

    Flash 3D引擎  Alternativa3D
    Altenativa Game发布的一款由ActionScript3.0编写的Flash 3D引擎。 俄罗斯3d引擎制作商Alternativa有限责任公司最近改变了他们的经营策略,让Alter...
    收藏 13
    Ceres Solver
    Ceres Solver 是一个可移植的 C++ 库,可用来建模并解决大型复杂的非线性最小二乘问题。它的显著特性如下: • A simple, expressive API | 简单易读的 AP...

    3D建模工具  Vim3D
    Vim3D 是一款3D场景查看器/图像解析器,是使用C++和OpenGL来开发的。 Vim3D是面向开发者和工程师的,提供了很灵活方便的环境和有很多通用的工具来制作3D场景。用户可以通过把cha...
    Vim3D

    图形渲染引擎  CubeEngine [国产]
    CubeEngine 是我个人的开发的一个基于 OPENGL ES 2.0 的图形渲染引擎,旨在提高自己的在图形学方面的编程造诣。 当前引擎支持的主要功能有: 基本光照,shadowMap生成的...

    高性能3d图形库  native3d
    native3d是一个国产基于 haxe语言的高性能3d图形库。因为haxe的跨平台性,所以它可以支持导出web,flash,html5,cpp,ios,安卓应用。 native3d可以用hxs...

    glTF
    glTF
    glTF 是 WebGL、 OpenGL ES 和 OpenGL. 运行时的 asset 格式。

    3D变形模型库  Vega
    Vega允许用户模拟和移动复杂对象,实时弯曲、拉伸和扭曲对象,有可能成为动画和游戏设计师、以及设计复杂结构的工程师的一个强有力工具。BSD 许可证允许用户自由使用和修改。程序库的名字是为了纪念斯...
    Vega

    3D引擎  Apocalyx
    Apocalyx是一个基于OpenGL的3D引擎.
    Apocalyx

    跨平台3d引擎  Phoenix3d [国产]
    Phoenix3d 是一款跨平台3d引擎,使用c++进行开发,支持Windows,Andorid,IOS上的3d程序开发。它包含了游戏开发所必要的组建,拥有完整的动画,特效,UI系统等。它是用c...

    3D头像工具包  Xface
    Xface 包含一组开源的工具包用于创建 MPEG-4 和关键帧的 3D 谈话头像。
    Xface

    Tree Generator
    Tree Generator 是一个 .NET 库来生成 3D 树和森林模型。
    Tree Generator

    实时3D引擎  GLOBE_3D
    GLOBE_3D 是一个实时的3D引擎,具有可移植的特点,支持多数平台,采用 Ada 语言开发。 real-time rendering (fast with a 3D hardware-acc...
    GLOBE_3D

    实时 3D 应用编程语言  Tao3D
    Tao3D 是一个编程语言用于实时的交互式 3D 操作。你可以轻松创建动态、交互、丰富数据展示的 3D 应用。
    Tao3D

    OpenGL 的子集  TinyGL
    TinyGL 是提供给嵌入式系统或者游戏的非常小的 OpenGL 子集。TinyGL 只实现了 OpenGL 的主要函数调用。 TinyGL 最大的特色是快,简单,不完全兼容 OpenGL。最特...

    基于CSS3的3D图形引擎  DivSugar
    DivSugar是一个基于CSS3的3D图形引擎。它提供了一个3D场景图形,一个动画系统,和几何类。场景图的节点是一个扩展的div元素,所以它使得整合三维动画到现有网站上的网页变得很容易,适合制...

    C++11 的 3D 引擎  Oryol
    Oryol 是一个支持多平台的 C++11 的 3D 引擎,下面地址可以查看一些实例: http://floooh.github.io/oryol/
    Oryol

    3D场景和对象描述  X3D
    严格来说,X3D是一种技术标准,而非具体的技术产品。 X3D一种无需任何授权费用的开放标准的文件格式以及运行时架构,使用XML来描述与交换3D场景和对象。它是一套ISO认可了的标准,为应用程序中...

    创建交互式3D场景  Proscene
    Proscene 是一个用于创建交互式3D场景的 Java 类库。 Proscene 参考了 Qt 的 OpenGL c++ libqglviewer 库的交互式框架概念:包括一个可用鼠标控制的...

    DirectX工具集  DirectXTK
    DirectXTK 全称是 DirectX Tool Kit ,包含一组在 C++ 中编写 DirectX 11.x 代码的助手类。 示例代码: std::unique_ptr<SpriteBa...

    分子结构图展示库  3Dmol.js
    3Dmol.js 是一个面向对象的基于 WebGL 的 JavaScript 库,用于实现在浏览器展示分子结构图。 特性: support for pdb, sdf, mol2, xyz, an...

    OpenGL 立体渲染  Libgls
    Libgls 允许 OpenGL 立体渲染,不需要硬件支持四缓冲立体。支持许多立体显示模式,从立体眼镜的3D电视到各类立体显示器。

    3D 模型图渲染  path tracer
    pt 是用 Go 语言实现的 path tracer 用于渲染各种 3D 模型图。 示例代码: package main import (     "log"     "githu...
    path tracer

    Draco
    3D 图形开源压缩库  Draco
    Draco 是一种库,用于压缩和解压缩 3D 几何网格(geometric mesh)和点云(point cloud)。换句话说,它显著缩小了 3D 图形文件的大小,同时对 3D 图形的观看者来...
    Draco

    浏览器中3D建模工具  Shapesmith
    Shapesmith 是采用JS和HTML5编写的一款可以在浏览器中3D建模的工具,服务端支持Node.js。 效果图: 示例代码: $ npm start > shapesmith@0....
    Shapesmith

    3D图形渲染的库  SwiftShader
    SwiftShader是一个高性能的,基于CPU的OpenGL ES和Direct3D 9图形APIs的实现。它的目标是为高级3D图形提供硬件独立性。 用法 该SwiftShader库充当显卡驱...

    3D 虚拟世界开发平台  realXtend
    Tundra 是 3D 脚本化的互联网应用开发平台。它的主要目的是为应用程序开发人员,为创建网络平台3D世界与定制的内容。基于 Qt 和 Ogre3D 开发。

    2D 动画转成 3D 打印模型  T2Z
    T2Z 的意思是“convert Time to the Z axis”。它是一个 Processing 程序,可以帮你创建并操控 2D 动画,然后将这些动画转换成 3D 可打印模型。 T2Z ...
    T2Z

    OpenGL工具包  GHGLUtils
    GHGLUtils 是一组支持 OS X 和 iOS 的 OpenGL 编码工具类库。

    游戏扩展库  XEffect2D [国产]
    这是一个基于OpenGL的可以支持Windows和Linux的游戏扩展库。
    XEffect2D

    动态图形可视化库  fourd.js
    fourd.js 是一个用在浏览器上的动态图形可视化库。稍微调整一下,你就可以用它做出一些几何图形集合,此库已经在 Chrome、Firefox、IE11 上测试运行,有传言说,通过切换 Can...

    symbion
    symbion 使用三维方式记录 Java 程序运行时从一个点到另外一个点的执行记录以及函数调用关系的工具。
    symbion

    C4DtoUnity的中间件工具  C2UTool [国产]
    一款C4DtoUnity的中间件工具。支持顶点动画,脚本,Shader链接等,整合你的工作流
    C2UTool

    3D 模型的填充工具  Topper
    Topper 是一款 3D 模型的填充工具。目前有以下四种效果,可以用命令 configuration.scad 去转换它们: 序号 填充 效果图 1 球填充 2 Truncated Octoh...
    Topper

    地理信息可视化工具  Ketoper.gl
    Uber 开源其内部可视化工具包 ketoper.gl,这是一个基于 deck.gl 构建的 React 组件,高性能,用于大规模地理定位数据集的可视化探索。它对 GPU 功能的支持允许应用程序...
    Ketoper.gl

    高效3D体素实时渲染库  GigaVoxels
    GigaVoxels是一个开放的库,用于基于GPU的实时质量渲染非常详细和宽泛的对象和场景(编码为SVO - 稀疏体素八叉树 - 但不一定模糊或透明:参见历史)。它可以很容易地与普通的OpenG...
    GigaVoxels

    .NET 3D 组件集合  Helix Toolkit
    Helix Toolkit 是 .NET 的 3D 组件集合。 目前,它包含一个为 WPF 3D 模型(Media3D namespace)添加功能的组件,以及一个为 DirectX(基于 Sh...
    Helix Toolkit

    基于GPU的高效数据管理库  GigaSpace
    GigaSpace是一个开放的基于GPU的库,用于大量数据的高效数据管理。它由一组4个组件组成,全部可定制: 多尺度空间分割动态树结构,高速缓存管理器存储对应于空间分区的非空节点的常量大小的数据...



    转载来自 http://www.cnblogs.com/arxive/p/6907608.html

    展开全文
  • 跨平台渲染引擎之路:bgfx分析前言从问题出发使用流程初始化渲染平台信息PlatformData初始化bgfx资源Init构建顶点坐标、纹理坐标设置清屏色加载纹理、Shader、ProgramHandle与makeRef创建FBO,绑定纹理渲染FBO渲染...
  • 在实时渲染的图形开发中,着色器代码...Bgfx 是一款跨平台、抽象封装了众多主流图形 API 的优秀渲染引擎。作为示例,本文在 Windows 平台上演示使用 Microsoft Visual Studio* 和 RenderDoc 对 Bgfx 中的 DX11 着...
  • 1 、引言随着计算机可视化、虚拟现实技术的飞速发展,人们对...为此国外出现了许多优秀的三维渲染引擎,比如Delta3D,OGRE,OSG,Unity3d,VTK等。渲染引擎的作用是要优化遍历和显示三维模型。本文主要对OGRE与OSG...
  • 图形渲染 Q1:当关闭预渲染GI时会出现IndirectResolution,这个参数有什么用,为什么调大了以后会大大增加渲染时间,但是烘培出来却没有什么效果。 该值主要控制的是GI的烘焙密度,数值越大,表示每个单位...
  • 我看未来游戏(图形引擎的几大特性

    千次阅读 热门讨论 2011-03-04 12:39:00
    一直从事渲染引擎的开发,也经常会去关注其他游戏引擎的发展。其实开发做了很久,才会发现有一些问题需要去考虑:怎样才能算作引擎、怎样才算是优秀的引擎?我想引擎应该不只是能做出一款商业游戏就能算作称职的。再...
  • 标准化的好处一方面是学习成本低,另一方面上层的游戏引擎也可以以很低的适配成本得到复用; 跨平台:跨平台主要目地是为了扩宽使用场景、提升研发效率、降低维护成本; 跨容器: 由于业务形态的不同,Canvas需要...
  • 八大渲染引擎(如VRAY)的分析

    万次阅读 2016-07-07 21:10:30
    一、RENDER MAN:鲜活的渲染思想  RenderMan具有功能强大的Shader编译器和抗动画模糊功能,能够让设计者创造出超复杂的动作片来。同时他还有一个功能不可忽视,就是他的真实性。RENDERMAN能够渲染出照片级真实的...
  • ,现在用.Net编游戏的公司还是很少),本节我们主要介绍一下在.Net下使用渲染引擎。 在.Net平台下可用的渲染器和渲染引擎还是不少的: 1,CSGL(在.Net下使用OpenGL的库),连接...
  • 在在一些机器里,或许还能找到这个游戏,它优秀的不依靠任何硬件加速功能的 速率和严密的迷宫设计无一不体现着卡马克的心血和技术。更可贵的是,从《德 军总部3D》开始,卡马克就一直适时的将自己的游戏源代码进行...
  • 对于大部分应用而言,比起前面的 WebGL 封装,最好还是选择渲染引擎,因为大部分渲染引擎也提供了自定义 Shader 功能,也提供了 GPU 实例等功能,只是一般不能改渲染管线。 Filament google/filament ​github....
  • Cairo和Skia是老牌的2D矢量图形渲染引擎了,成熟度和稳定性都很高,且同时支持软件与硬件渲染(cairo的硬件渲染支持比较晚),性能上通常skia占优(也看具体case),不过体积大的多。nanovg和GCanvas以小而美著称,性能...
  • 三维渲染引擎专题--各种数格式总结

    千次阅读 2015-01-06 15:20:50
    COLLADA是由索尼 (Sony)提出的基于XML的一个开放的、免费的数据交换标准,通过XMLSchema的技术展现三维数字模型,正因为 COLLADA基于XML技术,所以这个标准有着十分优秀的移植性,居于不同平台的实时引擎只要支持这...
  • 开源图形/游戏引擎的点评

    千次阅读 2012-09-06 08:44:05
    开源图形/游戏引擎的点评 什么是游戏引擎?举个简单例子,在某游戏中的一个场景中,玩家控制的角色躲藏在屋子里,敌人正在屋子外面搜索玩家。突然控制的角色碰倒了桌子上的一个杯子,杯子坠地发出破碎声,敌人在...
  • 浅谈图形界面引擎开发 - 如何用 C++ 从零编写 GUI

    万次阅读 多人点赞 2017-03-24 10:43:10
    本人在知乎上关于 如何用 C++ 从零编写 GUI? 问题的回答,算是比较粗浅但全面的讲解了GUI引擎的一些开发心得
  • 从2009年中国3D产业初步兴起开始,短短...积极研发新产品、新技术、新方案,抢先占领中国3D消费市场,想要在3D应用市场实现突破和创新,好的图形三维图形引擎无疑是提高应用质量的重要保障,因为对于大多数 3D 应用程序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,976
精华内容 3,190
关键字:

优秀的图形渲染引擎