缩略图渲染技术指南

有关在内容浏览器中渲染资源类型缩略图的程序员指南。

Windows
MacOS
Linux

本页面是从虚幻引擎3的文档转换而来,目前正在审阅中。信息可能已过时。

之前的渲染系统是相关对象的一部分。它是在Core中定义的,在Core中无法访问渲染缩略图所需的渲染接口。这给原型之类的对象带来了一个问题,它们无法提供缩略图视图。此外,该编辑器的唯一功能是包含在控制台上的,而在控制台上它只是消耗空间。该系统的另一个问题是,对于使用同一方法渲染缩略图的项目(即缩略图的图标),缺乏良好的重复使用。

为了减少代码重复,使代码只存在于编辑器中,并使系统后期绑定,我们创建了缩略图管理器和支持接口:缩略图渲染器和缩略图标签渲染器。缩略图管理器使用对象注册系统来匹配给定资源类型的相关渲染组件。这与GenericBrowserType类似,例外的是所有相关信息都来自"MyGameEditor.ini"文件,而不是通过原生类发现。缩略图渲染器在缩略图区域中渲染与之关联的对象。缩略图标签渲染器构建并渲染缩略图下方的文本。它们是独立的对象,以便最大限度地提高灵活性和重复使用性。大多数对象使用同一个标签渲染器,分离出接口允许一个唯一的缩略图渲染对象和一个共享的标签渲染对象。它还允许在运行时使用一些有趣的选项,例如用一个内存计数选项覆盖推荐的标签渲染器。

创建缩略图渲染器

要创建自己的缩略图渲染器,可以子类化缩略图渲染器并实现3个函数:GetThumbnailSize()、Draw()和SupportThumbnailRendering()。只有当每个对象检查都需要您的资源类型,才需要最后一个函数,也就是说,它只渲染设置有特定属性对象的缩略图。 原型缩略图渲染器就是这样的一个例子,它只有在相关对象设置了RF_ArchetypeObject标记时才渲染缩略图。GetThumbnailSize()由接口的用户使用,以便他们可以调整相关项目的位置。最后,Draw()执行您认为它会执行的工作。

现有渲染器

下面的缩略图渲染器可能适合您的需要,您无需创建一个新的类型。或者,它们可能是特定于您的任务类的良好基类。

图表缩略图渲染器 -- 提供一种实现情况,将指定纹理渲染为缩略图的"图标"。

默认大小的缩略图渲染器 -- 为渲染没有固有大小(粒子、材质实例等)的对象提供共用数据。

纹理缩略图渲染器 -- 用作支持UTexture接口的所有对象的基类。

ThumbnailHelpers.h

该头文件包含一些渲染静态网格体、材质等的助手类 。它们可以被Draw()方法的实现使用,也可以用作创建自己的助手类基础。

创建缩略图标签渲染器

创建自定义标签渲染器也很简单。从缩略图标签渲染器派生并覆盖BuildLabelList()方法。添加到传入数组中的每个字符串都将作为标签进行渲染。基类处理其余的工作。

现有标签渲染器

泛型缩略图标签渲染器 -- 添加对象的名称并调用其GetDesc()函数来构建标签列表。最常用的一个。

内存计数缩略图标签渲染器 -- 对对象使用的内存进行计数,并在对象名称下面显示该信息

向缩略图管理器注册您的渲染器

缩略图管理器使用UObject配置系统来注册支持缩略图渲染的类。所有类都按名称注册,以避免包依赖性,并允许授权用户在MyGameUnrealEd包中创建自己的类,而不必修改Epic代码。下面的片段显示了如何添加自定义渲染器。第二个条目显示了如何使用现有图标渲染器,而不是提供自定义图标渲染器。注意:这里的换行是为了可读性而存在的,当您自定义时,"DefaultEditor.ini"中不能存在它。

[UnrealEd.ThumbnailManager]
+RenderableThumbnailTypes=
   (ClassNeedingThumbnailName="MyGame.CustomResource",
   RendererClassName="MyGameUnrealEd.CustomResourceThumbnailRenderer")
+RenderableThumbnailTypes=
   (ClassNeedingThumbnailName="MyGame.CustomResourceEx",
   RendererClassName="UnrealEd.IconThumbnailRenderer")

ClassNeedingThumbnailName是需要缩略图渲染器的类的名称。RendererClassName指定在渲染缩略图时使用的对象。在启动时,缩略图管理器根据这些条目创建对象的所有实例。它缓存映射中的所有关联,以便更快地查找。每当发生GC以阻止访问UClass指针并使这些指针变得陈旧时,映射就会失效。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback