Kanzi学习之路(7):Kanzi的资源管理系统

今天我们来看一下Kanzi的资源管理系统(Resource management)。


在kanzi中,资源的定义很广泛,除了普通意义上的图片,模型,材质等这些资源,kanzi将app中使用的动画、属性类型、状态等也都统一称为资源,可以在kanzi studio下的Library窗口查看,如下图:

默认Library下会显示工程所有的资源,也可以在Window菜单下选择显示单独资源的窗口。下面,对这些资源做个了解:

  • Animations 显示工程中 animation data, animation clips, timeline sequences, 和 timeline entries in your project,都是和动画相关的;
  • Bookmarks 显示工程中的快捷方式;
  • Composing 显示工程中 composers, render passes, and filters . 
  • Materials and Textures 显示工程中的brushes, materials, material types, shader formats, 和 textures . 
  • Meshes 显示工程中的mesh data.
  • Property Types 显示工程中自定义的属性类型;
  • Resource Files 以文件夹划分工程中的资源文件,同步显示工程目录下的资源文件夹下的资源。当你在工程目录下的资源文件夹中加入了资源,kanzi studio会在Resource files下更新显示,但是你删除了工程目录下的资源文件夹中的资源,Resource files下需要你手动删除。当你将想加入工程的资源文件,可以拖拽到Resource Files下,kanzi会根据资源的类型,在工程资源目录响应的目录下创建一个资源的副本。Resource files通常不是app的一部分,除非你实例化了它们。
  • State Managers 显示工程中的状态管理;
  • Textures 显示工程中的材质;
  • Trajectories 显示工程中定义使用的轨迹。
  • 这些资源kanzi是如何来进行处理的呢?通过什么方式来进行管理的呢?这就是今天的主题,kanzi的资源管理系统。


    设置资源到节点上

    在kanzi 中,你可以通过直接的方式,如使用资源的路径(resource URL),或者通过间接的方式,如使用资源的别名,将资源设置到节点上。在kanzi 

    通过资源别名去设置资源,你可以:studio中设置资源的时候,默认是使用路径。如果想做kanzi studio中使用间接的方式,就要在资源字典里为资源设置一个别名,并在节点的属性里选择这个别名。因为别名的查找是分层的,所以你要在节点树上创建别名解析的资源字典。

  • 创建和使用不同的皮肤和主题曲来改变你的App的外表;
  • 为不同的语言和区域创建不同的版本;
  • 重写资源使内容模块化。

    你还可以分享资源,去减少你的app的内存和运行时的一些需求。这使你可以复用相同的资源,并且通过修改资源去改变全局用到它的地方。比如,你可以共用一个处于动画中的Brush。

    Kanzi提供了很多在app运行时管理资源的工具。在kanzi中,你可以:

  • 使用你设备上的多核心从多线程加载资源,加快app的启动和加载时间; 
  • 预加载资源去提高app的启动和响应;
  • 从设备的存储空间选择图片;
  • 区域化你的app;
  • 创建和使用皮肤或者主题曲改变app的外表;
  • 查找某一资源是否在使用中和设置不加载没用的资源。 这就可以让你创建复杂的app,但在一开始并不立刻把所有的资源加载到内存。


    kanzi资源类型

    Aliases
    . 使用Alias 去获取某一节点的一致访问。你不但可以使用 aliases 在 Kanzi Studio 中获取对节点的访问,还可以使用在 Kanzi Engine API
    和脚本中;

    Animation Clip.使用 Animation Clip 将 Animation Data 资源应用到更复杂的动画中。你可以在不同的Animation Clip中复用相同的 

    Animation Data资源。还可以使用 Animation Child Clip 创建层级动画。

    Animation Data. 使用 Animation Data resource 资源去定义关键帧和关键帧动画的目标属性。一个 Animation Data 资源只能以一个属性作为目标。

    但 Animation Data 资源和他们的目标节点之间是独立的。这使得你可以在不同节点上复用 Animation Data 资源;

    Timeline Sequence. 使用 Timeline Sequence 去组合一系列的 Timeline Entry 资源;



    Brushes.使用brushes 可以设置2D节点的背景。在kanzi 中,所有的2D节点默认都会有一个透明的背景;

    Fonts. 使用 fonts 可以绘制文本;



    Materials. 使用 materials 去设置 Model 节点和 Material Brush 节点的外表;

    Mesh Data.  mesh 是定义了由平面、直线和三角形构成点之间表面的3D世界中固定物体形状的顶点、线、面的集合;

    Textures.使用 textures 去显示 Image 节点的内容, 去设置材质的纹理,去显示 Texture Brush 内容。你可以从普通的图片文件格式创建纹理;



    Render Pass. 使用 Render Pass 去定义你的app中节点的绘制;

    Object Source.在你的kanzi app 中,使用object sources 和 filters 可以告诉 render pass 哪个节点你想绘制。 Root Object Source 包含了当前

     Scene 节点下所有有效的节点;



    Resource Dictionary.  resource 是一系列资源键值对的集合;
    Scripts. 在Kanzi Studio中使用 JavaScript 脚本对你的app的逻辑和外表进行编程;
    State Managers. 使用 state managers 在你的app中创建不同的状态;
    Styles. 使用 styles 可以去设置某一类型下,一个或者多个节点的属性值;
    Text resources.  text resource 是用于 Text Block 3D 和 Text Block 3D 节点的文本字符;
    Trajectories. 使用 trajectories 作为沿着 Trajectory Layout 3D 和Trajectory Layout 2D 节点的路径去设置和移动它们的子节点。

    资源管理器

    kanzi的资源管理器管理着app里的资源的生命周期、加载和不加载。你可以通过kanzi engine API去获取资源管理器,并通过它指定资源的生命周期策略,移除没有用的资源。为了指定资源是否一直存储在内存中或者当资源没用的时候不加载,你必须要制定一个策略。你可以全局制定一个策略,或者针对每一个资源制定一个策略。如果你的app中的策略是将所有的资源全部加载到内存的话,你可以基于你的app的逻辑手动移除资源。比如,当在你的app中切换Page去一个新的Page,你可以手动移除之前Page节点的资源去加载新Page的资源。

    在kanzi中,你可以通过资源管理器去设置GPU资源在哪里存储。比如,这个可以通过在kanzi studio中 Library >Materials and Textures > Textures 下选择一个纹理,在它的 Properties 中设置 GPU Memory Type 属性去设置:

    • GPU Only. 将资源部署到GPU内存中去,并且在部署完成后立即从RAM中释放掉。Kanzi 会将资源一直存在GPU内存,除非你在app的代码中释放了它;

    • GPU and RAM. 资源被部署到GPU内存。Kanzi 会将这部分内存保存在 GPU 和 RAM 内存中,并且给予平台和app管理资源。Kanzi 自动管理没有加载的资源。相对于只用GPU存储,这种方式消耗更多的 RAM, 但是提供更快的回复时间。比如在 Android 上;

    • RAM Only. 仅当在app代码中使用到才会将资源部署到GPU内存中。这部分资源会存在GPU内存中,除非你在app代码中卸载它们。


  • Resource URLs

    在kanzi里,查找资源最基本的方法是使用URL路径。URL路径不仅可以在.kzb二进制文件中索引资源,还可以用于索引本地资源。当你要将资源设置到一个节点的属性上去是,你必须要提供资源的URL。在kanzi studio的Properties窗口中,kanzi会自动为你选择的资源提供URL,但是当使用脚本或者API为节点属性设置资源的时候,你需要手动提供资源的路径。想要获取资源的路径,你可以在kanzi studio中右击该资源,选择Copy as kzb URL,就可以得到该资源的路径了。如果索引本地资源,要使用file:///URL 的格式。

    当使用API,你可以直接指定一资源。节点通常都提供了可重载的方法去接收资源。比如,可以通过Image::setImage 方法去为Image节点设置图片。


    Resource dictionary

    资源字典(resource dictionary),是kanzi资源的key-value对的组合。你可以在任意节点上定义资源字典。通过资源字典中的key值,你可以间接的方式为节点设置资源,而不通过URL。在kanzi中,你可以通过查找最近的定义key解析资源的资源字典去动态解析资源。当解析一个key值的时候,它会先从使用key值节点的资源字典去检查,如果节点的资源字典中包含这个key值,那么这个节点就使用这个key,如果没有,它就去父节点的资源字典里查找key值,直到找到。如果到了scene graph的根节点都没有找到的话,有这个节点决定结果。比如,Image节点没有找到图片资源,不显示图片也是正常的情况。



  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值