精华内容
参与话题
问答
  • unreal 3

    2016-01-11 12:05:14
    1 各个系统综述 2 一个demo 自己做的。。

    1 各个系统综述


    2 一个demo 自己做的。。

    展开全文
  • unreal3的viewport和client

    2016-10-30 23:40:21
    原文地址:unreal3的viewport和client 名字里带viewport/client的类不少,以及相关的类: FViewportFrame、FViewport FViewportClient/UScriptViewportClient/UGameViewportClient UClient/UWindowsClient UEngine...

    coffeecato写在前面:

    最近由于工作需要,需要调研ue3中Interaction的设计,直接看源码确实很吃力,层次结构有点绕,查了很久资料,终于找到这篇文章,将FViewport与UGameViewportClient之间的关系描述的较为清晰,故分享之。

    原文地址:unreal3的viewport和client

    名字里带viewport/client的类不少,以及相关的类:

    FViewportFrame、FViewport

    FViewportClient/UScriptViewportClient/UGameViewportClient

    UClient/UWindowsClient

    UEngine/UGameEngine/UEditorEngine/UUnrealEdEngine

     

    极易混淆,现整理如下:

    首先从总体层级上看,UEngine最大,它包含了UClientUGameViewportClient

    复制代码
    class UEngine : public USubsystem
    {
    public:
    ……
        class UClient* Client;
        class UGameViewportClient* GameViewport;
    ……
    复制代码

    UEngine是己只是个抽象类,实际运行时根据是游戏还是编辑器模式,创建相应子类的实例,如是游戏则UGameEngine,如是编辑器则UUnrealEdEngine

    它的实例创建出来后就存在全局变量GEngine上。

     

    在UGameEngine::Init里,先后创建了其它对象:

    1、先创建了UClient,实际的子类通过“engine-ini:Engine.Engine.Client”配置指定,在windows上是【WinDrv.WindowsClient】,在mac上则是【MacDrv.MacClient】,可见各子类就是对应各平台相关的实现;

    2、然后创建UGameViewportClient,实际的类型是通过Engine上的GameViewportClientClass这个globalconfig属性指定的,所以它会自动从配置中读取,配置的默认值是【Engine.GameViewportClient】

    3、接着创建FViewportFrame:

    复制代码
    ViewportFrame = Client->CreateViewportFrame(
                    ViewportClient,
                    *AppName,
                    GSystemSettings.ResX,
                    GSystemSettings.ResY,
                    GSystemSettings.bFullscreen
                    );
    
    复制代码
    FViewportFrame* UWindowsClient::CreateViewportFrame(FViewportClient* ViewportClient,const TCHAR* InName,UINT SizeX,UINT SizeY,UBOOL Fullscreen)
    {
      return new FWindowsViewport(this,ViewportClient,InName,SizeX,SizeY,Fullscreen,NULL);
    }

    注意:创建函数(CreateViewportFrame)是UClient上的、并把UGameViewportClient做为参数,由此可略知其从属关系。

    做为一般情形,这里创建的是FViewportFrame,所谓-Frame,也就是(操作系统层面的)外包窗口,因为通常程序总是要自己创建“主窗口”。但是在某些模式下(如内嵌于浏览器等),外包主窗口已经有了,就不需要再创建FViewportFrame,取而代之的是通过CreateWindowChildViewport接口来创建一个FViewport。

    实际上FViewportFrame接口只有两个函数,一是获取其中的FViewport,二是Resize改变大小,这个Resize更能体现其做为外包窗口的特征。

    此外,前面提到UClient的实际类型是UWindowsClient,它创建的FViewportFrame自然也是同一平台体系下的子类即FWindowsViewport。

    FWindowsViewport是一个特定于Windows平台相关的实现类,它同时实现了FViewportFrame和FViewport两个接口,当然这只是实现的方便,并不能抹杀这两个接口的差异。

    因为3中的创建方式,FViewportFrame在创建时传入了两个关键对象:UClient和UGameViewportClient,这当然都会被记在其成员变量上,以便后续使用。

     

    下面细看UEngine的三大台柱子:(UClient、UGameViewportClient、FViewport)

    台柱之一:UClient

    看起来它像是对整个app的封装,其中的Tick函数每帧被调用,主要内容就是处理窗口和输入消息。

    它的另外一个作用则是用来创建FViewport(Frame),这主要是给平台相关的子类机会,创建同一平台体系的FViewport子类。 

    UClient、UWindowsClient都是纯c++类(没有相关的脚本类),但是由于手动在声明中添加了DECLARE_ABSTRACT_CLASS_INTRINSIC,所以也遵照UObject/UClass系统规则,可以用StaticLoadClass/ConstructObject等规范函数统一创建。

     

     

    台柱之二:UGameViewportClient

    UGameViewportClient继承自->UScriptViewportClient->(UObject,FViewportClient),这里UScriptViewportClient没啥用,纯粹是打个酱油,把FViewportClient这种纯c++类转换到UClass体系链中而已。

    先看FViewportClient基类接口的方法:

    看起来它主要是用于消息处理。

    但是在UEngine这种高层基类中声明的属性GameViewport,其类型并非FViewportClient基类,而是直接作为UGameViewportClient子类变量,这主要是因为脚本要用,GameViewport属性是在UEngine的脚本类里声明的,在脚本里只用当然只能用符合UObject/UClass体系的东西,而做为继承链中间过渡的UScriptViewportClient就是起了这个作用。

    当然UGameViewportClient也添加了很多新方法和属性,如它也有一个Tick函数,也是每帧被调用。还有一个非要重要的成员GlobalInteractions,这个数组存的就是所有的输入消息处理器。

     

     

    台柱之三:FViewport

     这个,实在看不出有什么特点,只能说它是跟渲染器关联最紧密的一个类了,unreal3应该就是用FViewport来抽象一个可以渲染的区域吧。

     

    三者之间彼此关联,纠缠万分。

    首先,UEngine上存着由它创建的UClient和UGameViewportClient各一个,并且在Tick中又分别调用了它们的Tick

    然后,UGameViewportClient上存着由UClient创建的FViewportFrame(以及其内的FViewport),(UGameViewportClient::SetViewportFrame)

    还有,做为子类的UWindowsClient上存着所有由它创建的FWindowsViewport(FViewportFrame,FViewport),(static TArray<FWindowsViewport*> Viewports

    最后,作为最后被创建出来的FWindowsViewport,它当然也要记着创建它的UClient,以及用来初始化它的UGameViewportClient(这个是由基类FViewport记着的)。

     

    在消息处理方面:

    首先,系统窗口的消息处理函数是UWindowsClient::StaticWndProc

    然后,大部份消息会交给该窗口(HWnd)对应的FWindowsViewport来处理:Viewports(i)->ViewportWndProc

    然后,除了需要即时响应的消息被立即处理外,大部份输入类消息被缓存起来:Client->DeferMessage,这样一来消息处理流程又回到了UWindowsClient里

    然后,在UWindowsClient::Tick里,会调用ProcessDeferredMessages和ProcessInput,来处理所有的输入消息,前者包括了键盘和鼠标点击,后者是鼠标移动,在Unreal3里比较特别的是,鼠标移动并不通过WM_XXX类的窗口消息来获取,而是用IDirectInputDevice8接口来获取。

    ProcessDeferredMessages里面,每个消息又转给它的FWindowsViewport上的同名函数,最终都会交到它里面的FViewportClient(也就是UGameViewportClient)::InputKey/InputChar

    ProcessInput里面,取当前活跃的FWindowsViewport(通常也就一个窗口),把鼠标事件都交给它里面的FViewportClient(也就是UGameViewportClient)::InputAxis

     

    可见,键盘和鼠标操作,最终都是到了UGameViewportClient的InputXXX里,而它们里面的分派逻辑,也大致一样:

    先是给自己身上的代理处理,UGameViewportClient上的HandleInput(Axis/Key/Char)

    然后是给GlobalInteractions里的每一个去处理,这里的每个元素都是一个Interaction,Interaction是Unreal3里用来处理用户操作的基类,它身上也有一套Input(Axis/Key/Char)。

    实际运行观察结果 ,GlobalInteractions共有4个元素,分别是:

    Console,用来处理调试指令

    GFxInteraction,给swf对象分派消息

    UIInteraction,这个UI不知是啥了,可能是Unreal3自己的UI模块?

    PlayerManagerInteraction:比较逻辑的一层,把输入映射给对应的Player处理,有点难以理解,但是ini里的[Engine.PlayerInput]节中,所有bindings绑定的消息处理函数,就是由它分派的

    展开全文
  • 只有D3D渲染部分,对D3D API的一个封装,对图形引擎学习有帮助
  • Unreal3 碰撞参考指南

    千次阅读 2013-10-22 20:48:33
    碰撞参考指南 碰撞参考指南 ...概述创建骨架网格物体碰撞外壳创建静态网格物体碰撞外壳 ... K-DOP 工具创建碰撞外壳使用球体简化碰撞创建碰撞外壳使用自动凸面碰撞工具创建碰撞外壳使用您的 ...

    碰撞参考指南


    概述


    当创建图形细节时,保证游戏中的碰撞简洁是非常重要的。其中有两个原因,计算碰撞比计算多边形来说速度要快很多,而且对玩家来说加了碰撞,游戏体验就会流畅很多,玩家也不会卡在细小的缝隙中。碰撞响应分为两个不同的部分:虚幻碰撞和Physx 这篇文档主要讲解虚幻碰撞,请参阅 click here 获取更多关于Physx的信息。要了解更多有关碰撞的技术性信息,请参阅碰撞技术指南页面。

    创建骨架网格物体碰撞外壳

    请参阅 PhAT 用户指南 学习如何使用骨架网格创建碰撞外壳。

    创建静态网格物体碰撞外壳

    使用构建画刷创建碰撞外壳

    把您想添加碰撞外壳的网格物体放置到关卡中。然后在它的周围放置一个您想的碰撞外壳的形状的构建画刷。请尽量保持形状的简单性!

    Collision_CreateCollisionHullWithBrush_0.jpg

    然后选中静态网格物体,右击并从关联菜单中选择 Set Collision From Builder Brush(通过构建画刷设置碰撞)。这将会考虑您应用到静态网格物体上的任何缩放比例。

    Collision_CreateCollisionHullWithBrush_1.jpg

    注意到这个碰撞将会被添加到您已经选中的静态网格物体的所有实例上是很重要的。要看到保存画刷为碰撞的效果,您必须保存包含那个静态网格物体的包。

    Collision_CreateCollisionHullWithBrush_2.jpg

    使用 K-DOP 工具创建碰撞外壳

    K-DOP 是静态网格物体编辑器中的一个工具,用于生成简单的碰撞。K-DOP 是一种包围盒体积类型,它代表 K discrete oriented polytope(K 离散定向多面体)(这里的 K 是按照坐标轴排列平面的数量)。一般它有 K 个按照坐标轴平行排列的平面,并且使它们和网格物体尽可能的近。最终得到的形状用做碰撞模型。在静态网格物体编辑器中,K 可以是:

    • 6 - 轴对齐长方体。
    • 10 - 有四个边进行倒角处理的长方体—您可以选择按照 X-Y 或 Z 平行排列的边。
    • 18 - 在所有边上进行倒角处理的长方体。
    • 26 - 在所有边和角上进行倒角处理的长方体。

    请查看以下实例。这个工具对于包含很多管道、柱子及栏杆的包是非常便利的:

    kdop_sizes.jpg

    使用球体简化碰撞创建碰撞外壳

    该工具会轻松地用一个球体将这个静态网格物体保卫,这样可以使这个静态网格物体的每个部分都在球体的内部。当然这种方法最适用于那种有点像球体的静态网格物体。

    Collision_CreateCollisionHullWithSphere.jpg

    使用自动凸面碰撞工具创建碰撞外壳

    该工具会尝试为这个静态网格物体构建一组凸面碰撞外壳。通过调整这些参数,您可以调整凸面外壳的创建方式。

    Collision_CreateCollisionHullWithAutoConvex_0.jpg

    • Depth - 可以确定进入到这个网格物体的深度。调整这个参数可以帮助确认与这个静态网格物体更靠近的碰撞外壳。
    • Max Hull Verts - 碰撞外壳顶点的最大数量。增加这个值会增加碰撞外壳的复杂程度。
    • Allow Splits - 允许分割的最大值。增加这个值会增加创建的碰撞外壳的数量。

    Collision_CreateCollisionHullWithAutoConvex_1.jpg

    正如你所看到的那样,自动凸面碰撞相当准确,而多边形数量持续降低。

    Collision_CreateCollisionHullWithAutoConvex_2.jpg

    使用您的 3D 内容创建包创建碰撞外壳

    请参阅FBX 静态网格物体通道了解如何在 3D 内容创建包中创建静态网格物体碰撞外壳。

    体积

    这些是可以与游戏中的 actor 发生碰撞的不可见 BSP。下面的示例将会向您显示如何生成一个阻挡体积。Volumes can be both blocking collision and non blocking collision.

    如何创建阻挡体积

    首先使构建画刷的形状是正确的。

    Collision_Volume_CreateBrush.jpg

    在虚幻编辑器中右击 Volume(体积)按钮,然后从列表中选择 BlockingVolume。

    Collision_Volume_RightClickMenu.jpg

    这些通常用来阻挡 actor,使他们无法到达关卡中的某些特定区域。

    Collision_Volume_CreatedVolume.jpg

    示例


    这里是一些如何为一般的碰撞情境设置各种碰撞标记的例子。我们的目标是为物理情景正确地设置碰撞检测及标记。

    玩家移动和武器开火

    对于适当的玩家运动,尤其是将碰撞柱应用于 Pawn 运动及和其它 Pawn 的碰撞,同时使用运动骨骼来精确地进行碰撞检测(比如射枪时的光线跟踪)的情况下,请考虑以下设置:

    • 虚幻物理(比如 PHYS_Walking)将会清除 CollisionComponent(碰撞分量)的按照坐标轴排列的包围盒。当应用 PHYS_Walking 时,使用 SkeletalMeshComponent 作为 CollisionComponent 是一个糟糕的主意,因为当人物进行动画时,它的形状改变了很多。
    • 如果您将 CollideActors 和 BlockZeroExtent 设置为 true(真),线性检测将会检测附加到 Actor 上的所有 PrimitiveComponents。
    • 您没有必要使 PhysicsAssetInstance 和运动骨骼对骨骼进行线性检测。简单地分配一个 PhysicsAsset(物力资源)并设置 CollideActors 和 BlockZeroExtent 为 true(真)将会是您获得线性检测的结果(假设附加了分量)。
    • RBChannel/RBCollideWithChannel 仅影响物理引擎碰撞。如果您的玩家使用 PHYS_Walking,那么它将不会产生效果。

    基本上,您的 Pawn 需要一个 CylinderComponent 和一个 SkeletalMeshComponent。CollisionComponent 引用应该被分配给 CylinderComponent,并且 SkeletalMeshComponent 应该设置 CollideActors 和 BlockZeroExtent 为 true,您的 CylinderComponent 应该适当地设置 BlockZeroExtent 为 false,从而可以阻止它干扰武器踪迹。

    在游戏中检查碰撞


    在游戏中您可以使用几个控制台命令来检查碰撞设置。这里使其中的一些命令。输入它们并切换它们的开关状态。

    • show collision - 这将会在关卡中描画所有的碰撞模型及阻挡体积。
      Collision_ShowCollision.jpg
    • show zeroextent - 在关卡中显示碰撞,假设您是一个零粗细(线)跟踪。不可见对象没有碰撞。
      Collision_ZeroExtent.jpg
    • show nonzeroextent - 在关卡中显示碰撞,假设您是一个非零粗细(线)跟踪。
      Collision_NonZeroExtent.jpg
    • show rigidbody - 在关卡中显示碰撞,假设您是一个刚体(注意,它不会显示 RBCC 滤镜组,只显示 BlockRigidBody 和 UseSimpleRigidBodyCollision)。
      Collision_ShowRigidBody.jpg
    • nxvis collision - 这将显示关卡中的 PhysX 碰撞信息,所以您可以看到正在和哪个钢体进行碰撞。
      Collision_NxvisCollision.jpg
    • stat game - 这将为您显示各种不同碰撞类型所占用的时间的有用的统计数据。
      Collision_StatGame.jpg
    展开全文
  • Unreal3动画系统概述

    千次阅读 2012-09-19 21:40:29
    动 画系统概述 概 述 管 道 工 作流程 带 动画的网格物体 动 画混合 混 合树概述 构 建混合树 AnimTree(动画树)节点 混 合节点 动 画播放 AnimSequence(动画序列) ...AnimNodeSequence(动

    概述

    虚幻引擎动画系统为渲染的网格物体和实体添加运动效果。带动画的物体被称为 Skeletal Meshes(骨架网格物体) 。和 Static Meshes(静态网格物体) (它只能通过Matinee进行动画)不同,骨架网格物体使用一组骨骼组成一个 skeleton(骨 架) 。这些骨骼用于驱动物体的运动及在网格物体上物体的放置位置。

    动画系统有两个主要部分 – 关键帧动画数据的播放,和动画混合。

    管道

    动画系统是虚幻引擎传递途径的一部分。首先,处理一般的动画(混合的动画)。然后应用骨骼控制器(比如Inverse Kinematic)。接下来是为骨架设置物理。然后物理子系统处理剩余的物理,最后图形子系统渲染所有的物体。

    工作流程

    一般,程序员和动画制作人员一同工作来制作所需要的动画内容。动画制作人员将设置一个骨架并根据一个达成一致的惯例来为骨骼添加标签。程序员将基于管道 (类、函数、标记等)把所有的这些结合在一起。

    带动画的网格物体

    在虚幻引擎中,带动画的网格物体称为 Skeletal Meshes(骨架网格物体) ,因为基于骨骼的骨架动画是用于驱动游戏中物体的动画的主要机制。以前,也有基于顶点的动画。

    动画混合

    虚幻引擎3使用'混合树'的观念来把多个动画数据源混合到一起。这个方法允许您简单明了地创建一种多个动画混合到一起的方式,并允许您在处理的过程中很容 易地以可预测的方式来添加更多的动画。

    混合树概述

    这是一个简单的动画混合树:

    树是由一些树节点组成。节点主要有两类:

    Blend Nodes(混合节点) (圆形) 这些节点有一组子节点,并以某种方式把它们混合到一起。 Data Nodes(数据节点) (方形) 是树的叶子节点,没有子节点但实际上可以生成骨架变换。

    在这个例子中,'Directional Blend'节点将会基于actors的速度和方向来把连接到它们的定向动画混合到一起。这将会产生一个定向行走及跑动的动画。然后这些节点插入一个 'Speed-based'中,它将把两个子节点基于Actor的速度混合到一起。最后再将它和Fire混合为'Firing-based Blend'。

    基于几种简单在引擎中定义的基本混合模式来创建特定的混合类型是非常容易的。

    请查看动画节点页面来查看关于引擎中的默认动画节点的更多信息。

    构建混合树

    动画树可以使用AnimTree(动画树)编辑器进行构建,它是虚幻编辑器的一部分。您可以使用通用浏览器创建一个新的AnimTree(动画树),然后 双击它,便可以打开AnimTree(动画树)编辑器,并看到一颗新的空的树。

    然后您可以在SkeletalMeshComponent的defaultproperties(默认属性)块中告诉它使用您的AnimTree(动画 树)。

    defaultproperties
    {
    Begin Object Class=SkeletalMeshComponent Name=SkeletalMeshComponent
    SkeletalMesh=SkeletalMesh'BigCritter.CritterMesh'
    AnimSets(0)=AnimSet'BigCritter.CritterAnims'
    AnimTreeTemplate=AnimTree'BigCritter.CritterAnimTree'
    End Object
    }

    把AnimTree(动画树)分配给AnimTreeTemplate(动画树模板)是非常重要的,而不是分配给Animations(动画)。当动画播 放开始时,将复制AnimTreeTemplate(动画树模板)引用的AnimTree(动画树),然后把这个实例分配给Animations(动 画),这个实例是游戏播放中真正使用的,因为它包含着实际的状态。

    关于AnimTree(动画树)编辑器的更多信息可以从这里获得:动画树编辑器用户指南

    AnimTree(动画树)节点

    AnimTree(动画树)节点是建立一个新的AnimTree(动画树)时默认存在的节点。这是您连接Animations(动画)、Blend Nodes(混合节点)及Morph Nodes(顶点变形节点)的地方。您也可以在这里设置一些重要属性。

    Blend Nodes(混合节点)和AnimSequences (动画序列)将会产生最终的动画。下一步是应用骨骼控制器。这个工作是以单个步骤完成的,因此骨骼的顺序很重要。让我们设想一下以下的情境:人物使用IK 来移动手臂,使用程序控制器来处理手臂的关节。您将会想先使IK完成动作,然后关节完成动作,这样它可以产生最终的姿势。为了解决这个问题,骨架可以在三 次渲染中进行排列。

    ComposePrePassBoneNames 首先组成的骨骼(及它们的子节点)一般是IK Bone 链。 ComposePostPassBoneNames 最后组成的骨骼(及它们的子节点)一般是roll bones(关节)。

    混合节点

    请参照动画节点页面来获得关于虚幻引擎中的默认动画节点的更多信息。

    动画播放

    AnimSequence(动画序列)

    一个AnimSequence(动画序列)是一个单独的动画,它是一个关键帧集合,包含着许多相关的元数据信息,比如notifies(通知)。

    AnimSet(动画集)

    一个AnimSet(动画集)是一个AnimSequences(动画序列)的集合。它们存在于包中,并且可以像材质、网格物体等以同样的方式在通用浏览 器中进行查看。

    在一个动画集中的所有AnimSequences(动画系列)必须具有同样数量的轨迹,并且这些轨迹必须指向相同的骨骼。这些应该当您在 AnimSetViewer(动画集)查看器中导入一个PSA文件时为您进行处理。请查看导入动画指南页面来获得关于AnimSetViewer(动画集查看器)和导入动画的更多信息。

    请查看动画集编辑器指南页面获得更多的关于AnimSetViewer(动画集查看器)的信息。

    骨骼到轨迹的映射

    在AnimSet(动画集)中的轨迹是通过名称和骨架网格物体中的骨骼相关联的。这是因为您或许会想在骨骼数量和顺序不同的骨架网格物体上播放同样的动画 集。要想快速地查找存储着一组AnimSetMeshLinkup结构的动画集。这些是特定网格物体上的骨骼和AnimSet(动画集)的轨迹之间的映射 表。

    AdditiveAnimation(叠加型动画)

    默认情况下,AnimSequences(动画序列)存储着全部的骨架动画。但是它也可以构建并使用叠加型动画。 叠加型动画通过在AnimSet(动画集)编辑器中对两个动画相减来进行构建。然后动画树再使用几个节点把这个叠加型动画添加回去。 Additive Animation(叠加型)动画通过去掉冗余数据从而可以作为一种压缩方式。(比如:放松的走步和瞄准的走步,取出这两种走步,仅保存放松走步和瞄准走 步的不同作为一个附加部分)。尽管是一个进行操作的小技巧,但它可以在很大程度上降低所使用的动画的数量并降低所使用的内存空间。

    请查看以下链接来学习关于创建叠加型动画的更多信息:动画集编辑器用户指南#动画序列

    尽管动画集查看器中动画靠它本身便可以达到很好的效果,但是在游戏中它需要被添加到一个基础姿势中,从而看上去更加形象。

    您可以通过使用AnimNodeAdditiveBlending节点AnimationNodes#AnimNodeAdditiveBlending或者仅通 过在一个AnimNodeSlot (动画节点元素)AnimationNodes#AnimNodeSlot上根据需求播放它们来添加叠加型动 画。

    自从2009年12月份的QA版本开始,Additive(叠加)、 Target(目标)和Base(基础)动画都保持着彼此间的引用。在不同的动画集中移动这些动画并维持这些引用(但不是包)是安全的。当导入一个 Target(目标)或Base(基础)姿势的更新版本时,编辑器将会提醒用户来重新编译相应的叠加型动画。请阅读以下文章来学习关于在 AnimSetViewer(动画集查看器)中导入动画的更多内容导入动画指南

    如果您想更新现有数据并创建这些引用,您可以运行FixAdditiveReferences命令开关。

    AnimNodeSequence(动画节点序列)

    这是AnimNode(动画节点)的子类,它知道怎样播放存储在AnimSets(动画集)中的关键帧数据。它一般组成您的混合树的叶子节点。

    您想要播放的动画序列可以通过在AnimNodeSequence(动画节点序列)中的名称来指定。为了找到那个AnimSequence(动画序列), 它将会查找SkeletalMeshComponent中的整个AnimSets(动画集)数组。通过名称引用动画序列而不是通过指针进行引用的优点是: 它允许您为完全不同的网格物体/动画使用相同的树。当搜索整个AnimSets数组时,它将从末端开始并向前查找,直到找到具有那个名称的 AnimSequence的AnimSet。这允许您在数组中通过添加一个新的具有同样名称动画序列的AnimSet来覆盖特定的序列。

    AnimNodeSequence属性

    bPlaying (播放) 如果动画当前正在播放时,设置这项。如果当前动画暂停时,不设置这项。 bLooping (循环) 如果动画应该循环并永远播放时设置这项为真。 Rate(速度) 播放速度 bNoNotifies(是否没有通知) 如果设置这项,则不会触发动画通知。 bShowTimeLineSlider(是否显示时间轴滑块) 切换拖动条来控制时间的位置。

    AnimGroups(动画组)

    当组织很多不同的动画到一起时,便需要在较高的层次上快速地组织和管理这些动画。为了解决这个问题,动画系统使用了AnimGroups(动画组)的概 念。

    通过使用AnimGroups,使得同步一系列节点到一起、仅使组中最重要的节点触发通知、及全局地调整所有这些节点的播放速度成为可能。它也可以是这些 选项的组合,不是所有的节点都需要同步。

    同步

    这个过程在使用一个称为AnimNodeSynch的特殊节点前完成。这个操作自从被集成到AnimGroup系统中时便已经存在。所以我们鼓励移除 AnimNodeSynch。

    动画同步背后的原理是可以把不同长度的动画同步到一起。这是非常有用的,比如,对于运动循环。在走动和跑动间的无缝转换。这个主意是为了使动画相对同步。 比如,在整个运动循环中,左脚下降为0%,右脚下降为50%。现在,如果我们保持走步和跑动循环相对地同步到一起,我们便可以根据任务的速度和任何走步循 环的无缝变换来改变每个循环的播放速度。双脚将会被同步。

    通知

    当在相似的动画间进行变换时,也存在一个处理通知的问题。比如,具有运动动画的脚步。当在不同循环间变换并使用基于权重界线的系统来触发通知时,您可能会 以根本没有触发任何通知的情况告终(或者有时候,可以一次触发几个通知)。我们真正想要的是一个组中最重要的动画来负责触发通知,这也正事 AnimGroups所做的工作。

    组可以进行播放速度控制

    最终,AnimGroups也允许在组的层次上控制动画的播放速度。注意这是除了每个动画节点速率之外的操作。所以动画节点可以有不同的/各种各样的速 度,而组速度将在它们独立的播放速率之上来缩放那个组中所有动画节点的速率。

    设置

    为了创建一个组,请选择AnimTree节点(混合树的根节点)。展开AnimGroups,并添加一个新项,在"GroupName(组名)"属性中为 您的组输入您想使用的名称。RateScale属性是用于缩放这个组的全局播放速度。

    然后,选择您想添加到这个组中的AnimNodeSequence节点。展开它的Group部分,您将会看到以下属性:

    bForceAlwaysSlave 节点将会被同步,但是永远不会被选择为主要节点。 bSynchronize 默认为真,节点将会被同步。如果您不想同步这个节点,请不要选中此项。 SynchGroupName 这个节点所属于的组的名称。设置它为和您在AnimTree AnimGroups 数组中创建的组名称一样的组。 SynchPosOffset 如果所创建动画不是和其它动画(左脚、反向的右脚)进行相对地同步,那么通过偏移动画来使它匹配是可能的。Offset (偏移)是一个相对位置,从0.f到1.f。

    内部实现

    分组系统,当所有的节点被实时计算后,在第二次中它将会强制更新组中所有的节点。所以在混合树中的所有节点都具有最新的权重。然后每个组将会寻找两个主要 节点。一个用于同步,另一个用于通知。要使用2个主要节点的原因是不是所有的节点都需要被同步,并且也不是所有的节点都需要触发通知。所以在每个种类中的 主要节点都是最相关的节点(在树中具有最高权重的节点,可以活着被同步活着触发通知)。一旦选择了主要节点,那么所有的组节点都是补充资料,需要同步的节 点是,需要触发通知的节点也是。

    在AnimTree中有几个有用的脚本函数用于从脚本代码中控制组。添加/删除节点、控制同步位置、播放速度缩放等。

    根骨骼运动

    请参照根骨骼运动页面。

    骨骼控制器

    当动画已经被提取出来并混合到一起后,便可以应用骨骼控制器,比如IK(逆向运动学)。请查看SkeletalControllers(骨架控制器)页面 来获得关于这个步骤以及您可以使用的节点类型的更多信息使用骨架控制器

    物理动画

    关于结合物理和动画的更多信息,请参照物理动画页面。

    有用的控制台命令

    show bones - 显示用于渲染骨架网格物体的骨骼的位置。

    原帖地址:http://udn.epicgames.com/Three/AnimationOverviewCH.html

    展开全文
  • Query Occlusion in Unreal3

    2013-07-09 22:26:54
    Unreal3里面用到了Hardware Query Occlusion,虽然没有command去实时改变,代码里面还是可以改的。 在低端VGA上面,这部分的消耗是很多的,不难理解,Query这个命令在低端机上本身就是性能瓶颈,不过关掉这个功能后...
  • Unreal3的网游服务器

    2010-01-06 11:34:00
    Atlas Manager provides a simple interface for running and maintaining live game or development clusters easy management of server applications gives access to log information provides grap
  • Unreal3的D3D渲染器部分

    2012-08-29 15:23:00
    原图 未完.... 转载于:https://www.cnblogs.com/username/archive/2012/08/29/Unreal.html
  • 虚幻引擎3可谓近年来最流行的游戏引擎,基于它开发的大作无数,除《虚幻竞技场3》外,还...2009年11月5日EPIC公司开放UDK包含完整的虚幻引擎3开发功能,除基本的关卡编辑工具Unreal Editor外,组件还包括:Unreal Con
  • Unreal3SDK免费啦~

    2009-11-09 23:03:00
    今天从虚幻的官网上Download了久仰大名的Unreal 3 SDK,绝对是震撼啊!随随便便点两下,一个FPS的场景就出来了。太牛了~~1.安装好后,直接打开IDE,载入一个自带的场景模型,编辑界面和3DSMAX类似,都是正视图的多...
  • Powered by unreal3 engine!

    2004-10-30 21:23:00
    [img]http://images.3dgamers.com/screenimages/games/es4oblivion/tes4mountainhorse.jpg[/img]http://images.3dgamers.com/screenimages/games/es4oblivion/tes4mountainhorse.jpg[img]http://images.3dgamers.com
  • • 64-bit color High Dynamic Range rendering pipeline. The gamma-correct, linear color space renderer provides forimmaculate color precision while supporting a wide range of post processing effects ...
  • Unreal3 window下内存管理实现详解

    千次阅读 2015-11-30 18:29:05
    Unreal3 window下内存管理实现详解  最近组里面同事加入了一个很牛叉的内存管理代码,勾起我对内存管理的强烈欲望,以前也做过内存管理,在没有遇到U3以前看了3,4种算法(C++游戏编程 这本书 里面一个,内存...
  • UnrealScript Game Flow通过Script看Unreal3的完整流程 注,此篇转自UDN,谨以学习之用,俗话说,好记性不如烂笔头,多码码字,加上实践,效果远胜于纸上谈兵~ 通过Script脚本的流程分析Unreal3游戏的整体流程,及...
  • Unreal3游戏引擎UObject源码阅读分析

    千次阅读 2011-03-14 22:05:00
    Unreal3(以下简称U3)是一个以脚本为主体的游戏引擎,所有代码几乎都为脚本服务,意味着所有源码都会提供相应的脚本函数在脚本中使用。 UObject是U3中很重要的一个基类,所有由UObject派生的类都可以...
  • Unreal3 DirectX 11 中的延迟着色

    千次阅读 2011-12-28 12:00:22
    在着色之前调用传统的 UE3 光照,因为动态光照计算会与场景的网格物体渲染同时进行。采用延迟着色后,渲染这些网格物体的时候会将诸如漫反射颜色这样的材质属性存储在渲染目标(被称为 GBuffer)中,但是没有进行...
  • Mozilla携手Epic游戏带来了Unreal 3网络游戏引擎。这是一个高端的游戏引擎,会改变你对网页游戏的看法。 Unreal 3引擎之前在Flash上,这次是第一次在web上的可安装免费(且移动设备友好)的版本。 Mozilla希望这个...
  • 使用了Unreal3 引擎一个月了,这一个月令我大开眼界,使用如此好的游戏开发软件,使我对游戏开发有了更好的认识。 我们的项目不大,目前只有2个程序员,本来我们两个是高度一致的,不过目前我们出了一点分歧:...
  • MAX大会放出了一个对网页游戏开发者来说可以算是天大的好消息:采用新近发布的Flash Player 11,Unreal Engine 3(《虚幻》第三代引擎)的华丽效果在浏览器中也可以展现了。 实际上,这一消息在新的Flash Player...
  • The Unreal 3 Editor is a powerful game development tool that ships free with most Unreal 3 games (Unreal Tournament, Gears of War, Roboblitz). It's quickly becoming a standard tool in the game devel
  • 前言 ... 一来是对我辛苦写这篇文章肯定,二来我可以有更多机会和你们这些朋友交流   制作关卡时除了要考虑视觉效果以外,还需要关注性能和内存。 ...内存即载入关卡时所需要的数据量,被暂存在内存里。...
  • 前言 ... 一来是对我辛苦写这篇文章肯定,二来我可以有更多机会和你们这些朋友交流 1.打开引擎 运行引擎目录\Binaries\Editor.bat(每个引擎中这个文件命名方式都有点出入,但是差不多) ...——(按住)左键+ (按住...
  • 这通常发生在我们添加了新的native类,而且在当前包里生成了新的C++头文件的时候,比如说我们添加一个新的ExampleGameEngine的Native类。这样会重新生成一个ExampleGameGameEngineClasses.h头文件。...
  • Unreal Engine 3Unreal Engine 4

    千次阅读 2015-07-02 19:38:32
    介绍Unreal Engine 4与Unreal Engine 3的一些不同点。

空空如也

1 2 3 4 5 ... 20
收藏数 899
精华内容 359
关键字:

unreal3