UDN
Search public documentation:

ContentBrowserDatabaseCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > 虚幻编辑器和工具 > 内容浏览器数据库
UE3 主页 > 关卡设计师 > 内容浏览器数据库
UE3 主页 > 技术美工人员 > 内容浏览器数据库

内容浏览器数据库


概述


内容浏览器会使用特殊数据库存储资源、标签和收藏夹。

我们将这个系统称为 游戏资源数据库 (或简称为 GAD ),但是它的确是一个混合体,其中包括几个数据库组件: 一个 journal server 、一个 checkpoint filethumbnail storage 和一个 in-memory 数据库 。还有一个用于更新和维护数据库的 checkpoint commandlet

所有这些对于正在使用内容浏览器的用户来说十分透明 -- 但是它会添加一些很实用的功能。

为什么需要游戏资源数据库?


游戏资源数据库无疑会增加复杂性,但是同时会为系统提供很重要的好处:

  • 所有游戏内容立即可供浏览,无论内容加载与否。
  • 用户从来不需要检验包,就可以标示资源或将它们添加到收藏夹。
  • 显示所有资源的缩略图,甚至可以显示没有加载的资源。
  • 所有标签数据还是会适当地受源正确控制(例如,可以卷起)。

在编辑器中,支持与未加载资源之间最常用的交互。在执行该操作之前,编辑器只需按照需要加载资源。例如,如果用户将一个未加载的静态网格物体拖放到 3D 视口中,那么内容浏览器将会在放置它之前自动加载该网格物体。

内容浏览器数据库交互


编辑器启动后,它首先会从一个只读 检查点(checkpoint)文件 中加载所有资源名称、标签和收藏夹。在运行最后一个检查点进程(每天至少运行一次)时,该文件代表游戏中所有标签的状态。其次,将编辑器连接到 journal server ,然后下载任何最近应用的标签。

现在,内容浏览器了解整个游戏的所有资源、包、群组、标签和收藏夹。用户可以使用图形化界面浏览所有游戏资源(加载或者未加载的资源)。会动态生成已加载资源的 缩略图(Thumbnails) ,但是会直接从他们的 资源包 文件中快速加载未加载资源的缩略图。

当用户决定标示某个资源时,内容浏览器会更新为经过变更后的 in-memory database ,然后立即连接到 journal server 并上传标签命令。请注意: checkpoint file 从来不会被编辑器修改 -- 所有变更都会被传往 journal server 并在后来的过程中由 checkpoint commandlet 解决。

以下图表会显示内容浏览器如何与游戏资源数据库交互。

ContentBrowserDatabase_UserFlow.png

此外,可以在“脱机模式”下运行编辑器,这种模式在不使用在线服务器的情况下提供有限几个功能。请参阅靠近该页面底部有关“脱机模式”这一部分,了解有关脱机模式的更多信息。

编译系统数据库交互


下面的图标会显示运行在编译机器上的脚本如何生成和维护资源数据库数据。起初它看起来很复杂,但实际上非常简单直观,易于维护。

ContentBrowserDatabase_BuildMachineFlow.png

数据库设置


下面是设置游戏资源数据库以及检查点处理所需进行的步骤的简单概述:

  • 运行命令行开关为您的游戏创建一个新的 Checkpoint(检查点)文件。

  • 创建正规的编译流程,‘检查点’资源数据库并更新源代码控制中的文件。(我们会在每天夜里自动运行这个流程。)

  • 安装并配置 journal server

  • 在每个游戏的编辑器配置文件中设置数据库/分支设置。

  • 可选项,重新保存所有资源包自动生成缩略图(只要需要的时候就可以使用)

这里好像有很多工作要做...


没有检查点文件或日志服务器的情况下,内容浏览器仍然 可以 运行。我们不推荐这样做,但是下面是您将会得到的结果:

没有检查点文件:

  • 用户将无法浏览全部游戏内容。只有已加载的资源可以被搜索到并进行互动。
  • 有些类型的 meta 数据将不可用(例如,资源添加的日期)。
  • 体验与通用浏览器相类似,只是在这里您将仍然会看到所有包和目录。

创建检查点文件十分方便快捷,甚至只是在本地就可以,所以您应该不必常常访问检查点。

没有日志服务器:

  • 用户将无法标记资源或根据标签进行搜索(除了脱机模式中)
  • 用户无法将资源放置到收藏夹中,甚至是私人收藏夹(除了脱机模式中)
  • 用户无法与其他人共享标签和收藏夹
  • 各种“在线”功能无法使用

您一点也不想放弃所有这些好处,是吧? 这些完全是值得的! 继续阅读了解有关如何启动和运行。

创建检查点文件


首先,您需要为您的每个游戏创建一个初始的 checkpoint file

游戏有一个存储为 /MyGame/Content/GameAssetDatabase.checkpoint 的单独 GAD 检查点文件。这是为整个游戏中所有资源存储元数据的二进制文件(包括所有引擎资源)。该编辑器会在启动将检查点文件加载到内存中,内容浏览器会使用它快速定位资源。

创建检查点文件很容易:

  • 确保您与最新的游戏内容同步
  • 运行检查点命令行开关:
    • MyGame.exe CheckpointGameAssetDatabase
  • (它彻底了解所有游戏内容时需要几分钟时间。)
  • 就是这样! 现在,您有了这个游戏的正常运转的检查点文件。
    • 如果您加载该编辑器,那么您现在使用内容浏览器可以浏览游戏中的所有资源。
  • 正常情况下,您应该将该文件登记进入源代码控制中。您可以在下一部分中阅读更多相关内容。

检查点命令开关通常不需要任何额外的参数,但是会提供一些您可以暂时使用的选项。请参阅以下部分了解更多信息。

常规检查点处理游戏内容


对于如何处理这部分有一定灵活性。以下是我们在 Epic 进行的一些设置:

  • 每天夜里凌晨 3:00,运行我们的编译系统 (Controller) 的机器会执行一个进行以下操作的编译脚本 (CheckpointGAD.build):
    • 对于每个游戏(或者游戏分支):
      • 同步最后成功引擎编译版本 (包括二进制文件)。通常,最后一个好的编译版本在前一个版本完成后立即就已经完成。
      • 将所有游戏内容只有 游戏内容)同步到头版本。这样资源检查点就会尽可能最新,即使我们运行的是一个稍微老一点的引擎版本。
      • 签出 游戏的 GAD 检查点文件 (GameAssetDatabase.checkpoint)
      • 执行 这个 检查点命令行开关 更新检查点文件。
        • MyGame.exe CheckpointGameAssetDatabase
        • 编译系统引擎会检查该命令行开关的输出是否有错误文本。如果出现了问题,检查点会发生故障然后恢复这个文件,电子邮件会发送给合适人选。
      • 提交 已更新 GAD 检查点文件 (GameAssetDatabase.checkpoint)

现在,团队成员每天会对该文件以及余下的游戏内容进行同步,并且在整个游戏资源处于检查点签入状态时具有它们的访问权限。请注意如果需要可以每天运行这个程序一次以上,这并没有什么害处。(白天我们有时会在我们的编译系统中手动触发 GAD 检查点。)

设置日志服务器


这涉及到安装 SQL 服务器并对其进行配置,所以您的开发者可以对其进行读写操作。

内容浏览器对 SQL 的要求非常宽松,所以我们建议使用免费的 Microsoft SQL Server‘加强版’,但是如果您已经使用 MS SQL 完全版,它也会工作得很好。记住,只可以将服务器作为最近标记的资源的便签薄使用,通常只包含几千行时间点。大多数实际 GAD 数据都存储在磁盘上的‘检查点文件’中。

注意: 如果您的团队不需要资源标签、收藏夹和某些元数据类型(例如,Date Added),那么您可以跳过日志服务器设置,并在您想要刷新您的资源数据库时从头开始重建检查点文件。这由你做主。

安装 MS SQL Server


(注意: 如果准备托管您的日志服务器的计算机已经安装了一个 MS SQL Server 版本,那么您可以跳过这一步。例如,如果您的团队已经购买了 MS SQL Server 的不受限副本,那么您应该可以使用该版本。)

我们建议您安装 MS SQL Server 加强版的免费版本。(我们使用的是 2008 版,但是 2005 应该也可以使用。)

  • 安装过程可能会警告您,有关某些必须首先安装的先决条件(例如,Windows Installer、Windows Powershell。) 继续,如果有提示就安装这些先决条件。

  • 对于 MS SQL Server Express 2008,在整个安装过程中您可以使用默认安装设置。如果您使用的是不同版本的应用软件,那么请确保随服务器一起安装了 MS SQL Server Management Studio,这样您可以轻松编辑/审计设置。

  • 如果提示输入 Server Admin(服务器管理员)名称,您可以使用您自己的用户名,或者联系您的 IT 部门人员了解在这里应该使用什么名称。

  • 您可以按照自己喜欢的方式命名数据库,只是要记录下来,因为我们以后配置虚幻编辑器时会需要使用这个名称。
    • 下面的例子将会使用默认数据库名称: SQLEXPRESS

自动化日志服务器设置(推荐)


  • 使用 CreateContentJournal.sql 脚本创建一个日志服务器实例。
    • 可以在 UE3 源代码中找到该脚本: /Development/Src/Engine/SQL/CreateContentJournal.sql
    • 使用 sqlcmd.exe 命令行应用程序执行该脚本。
      • 您需要传递运行服务器的计算机的名称以及服务器的名称(除非它是默认服务器实例)。
      • 您还要传递 UDN 中 CreateContentJournal.sql 文件的路径和文件名称。
      • 例如: sqlcmd -S Computer_Name\Server_Name -i CreateContentJournal.sql
    • 如果一切顺利的话,您将不会看到任何错误消息,而且您的日志服务器可以开始工作了!

  • 注意: 默认情况下,在您的新服务器上应该启用常规 Windows 验证,但是您可能需要询问您的 IT 部门人员,确保一切都已经配置完成,这样您的团队成员的计算机才可以直接与它进行通信。

  • 如果因为某些原因,您需要手动创建这个服务器,那么请按照下一部分中的步骤进行操作。

手动日志服务器设置(只适用于必要情况)


您只需按在不太可能发生的情况下执行这些步骤,比如, CreateContentJournal.sql 脚本无法运行的情况。如果您成功运行该脚本,那么已经创建了数据库,您可以跳过整个这一部分!

  • 加载 MS SQL Server Management Studio 并连接到您的数据库。

  • 在左侧的对象浏览器(Object Explorer)中,右击“数据库”并单击“新建数据库...”。将会弹出“新建数据库”对话窗口。
    • 将“数据库名称”设置为: ContentJournal
    • 点击“确定”关闭对话框并保存新建的数据库。

  • 在对象浏览器中的“数据库”下方,展开 "ContentJournal",这样您就可以看到它的组件(表格、视图等等)。

  • 在对象浏览器中的 "ContentJournal" 下方,右击“表格”并单击“新建表格...”。该表格设计者将会在应用程序的内容区域中打开。
    • 配置表格的列,如下所示:
      • 第一列:
        • 将“列名称”设置为: DatabaseIndex
        • 将“数据类型”设置为: int
        • 将“允许空”设置为: (取消勾选)
      • 第一列的属性:
        • 将“识别指标 -> (Is Identity)" 设置为:
      • 右击第一列 ("DatabaseIndex") 并单击”设置主要按键“
      • 第二列:
        • 将“列名称”设置为: Text(文本)
        • 将“数据类型”设置为: nvarchar(MAX)
        • 将“允许空”设置为: (取消勾选)
    • 按下 Ctrl+S 保存新的表格。将会弹出保存对话框。
      • 使用以下名称保存新建表格: Entries

  • 非常好! 日志服务器现在存在并正在运作。

  • 注意: 默认情况下,在您的新服务器上应该启用常规 Windows 验证,但是您可能需要询问您的 IT 部门人员,确保一切都已经配置完成,这样您的团队成员的计算机才可以直接与它进行通信。

配置虚幻编辑器


好的,您差不多快完成了!

日志服务器设置完成后,您需要告诉 UnrealEd 在哪里可以找到它。此外,您需要为编辑器正在其中运行的游戏的特殊源代码控制分支设置“分支名称”。

  • 在一个文本编辑器中打开 BaseEditor.ini*。(*/Engine/Config/BaseEditor.ini)
    • 如果您需要一个游戏特定设置,那么您可以在 /MyGame/Config/DefaultEditor.ini 进行以下变更

  • 在 .ini 文件中找到 [GameAssetDatabase] 部分。如果它还不存在,那么继续并创建这部分内容。

  • JournalServer 设置为到日志 SQL 服务器的路径 (Computer_Name\SQL_Server_Name)
    • 例如: JournalServer=ServerComputer\MYSERVERNAME
    • 如果您的服务器是远程计算机上的 默认 SQL 服务器实例 ,那么您可以省略服务器名称
      • 例如: JournalServer=ServerComputer

  • 为您的 depot 路径 相应设置 BranchName
    • 例如: BranchName=Main
    • 您可以为您的分支使用您认为合适的任何名称,但是您必须只能使用 alpha 数字字符。
    • 尽量使分支名称稍微短一些,因为它会被赋给每个单独的日志条目。

  • 当我们在 .ini 设置的对象上时,用户有一些优先权可以允许或不允许标签和收藏夹的创建和删除。您应该让您的美术指导和技术美工通过设置以下各项启用标签创建:
    • MyGameEditorUserSettings.ini 中,为 [内容浏览器安全(ContentBrowserSecurity)] 添加一部分。
    • 在该部分下方,设置 bIsUserTagAdmin=TruebIsUserCollectionsAdmin=true
    • 注意:事实上这本不应算作安全系统 -- 它只是会帮助阻止人们意外损坏数据。

重要事项: 在所有您的游戏源代码控制分支中必须正确设置分支名称,否则资源和标签将会在分支中发生冲突(这种情况真的真的会很糟糕)。如果您对您的游戏进行分支,并且在每一个分支中都有美工/LD 进行工作,那么在新的分支中更新 BranchName(分支名称)变得至关重要。

生成资源的缩略图


当内容浏览器需要为目前还没有加载的资源显示缩略图时,它会检查资源包看看是否有这个资源的缩略图并快速加载,然后显示缩略图。这会在没有实际加载资源包或它的任何数据的情况下发生。

通过使用 UnrealEd 为大多数资源类型自动生成缩略图。您只需加载并 保存包 ,编辑器就会确保为所有支持的资源类型渲染缩略图。

如果您看到内容浏览器中的很多资源 _没有缩略图_,这可能意味着包 需要在 UnrealEd 中进行重新保存 。注意:有很多资源类型还不支持自定义缩略图(例如,声音、CameraAnims 等等)。还要注意。您必须在编辑器中保存包才能更新缩略图。命令行开关(例如 ResavePackages)无法生成缩略图,因为它们需要有渲染器才能生成缩略图。

对于已加载资源,编辑器会实时生成它们的缩略图(我们不会从包文件中加载缩略图)。

缩略图会在内存中缓冲片刻,这样可以改善性能,但是大多数情况都会被快速驱逐,以便可以尽可能少量使用内存。

高级主题


脱机模式

可以在“脱机模式”中运行内容浏览器,这个模式不需要 SQL 连接,但是您仍然可以使用标签和收藏夹。

要使用脱机模式,请在您的 EditorUserSetings.ini 文件中设置以下选项:

[GameAssetDatabase] OfflineMode=true

现在,编辑器在启动时不必麻烦地尝试连接到 SQL 数据库。相反,它会在将存储您的标签和收藏夹操作的磁盘上创建一个日志文件。

在处理不同 PC 上的标签和收藏夹时,您需要确保您的用户名相符合。例如,如果您在家里通过 VPN 连接进行工作,而且想要与您工作时创建的私人收藏夹进行互动,那么您需要在您的收藏文件中设置“覆盖用户名”。

要设置“覆盖用户名”,请打开 EditorUserSettings.ini 并设置以下选项:

[GameAssetDatabase] OverrideUserName=MyUserName

注意,在脱机模式中,您无法与其他用户共享您的标签或收藏夹。然而,如果您在可以使用 SQL 数据库后最终禁用脱机模式,那么编辑器会自动上传您所累积的标签变更。

脱机日志报警

编辑器第一次运行时,将日期字段 "UserJournalUpdateAlarm" 添加到 UTEditorUserSettings.ini 并设置为以后的第 7 天。这表示下一次闹钟会响(注意 - 应用程序关闭后会保存该项设置)。

测试:

  • 将该条目的时间设置为您下次的执行时间,以确保闹钟会响。
  • 重启编辑器。
  • 启动的时候,您将会看到以下对话框:
JournalUpdateAlarm.png

  • “现在就检查”会运行检查点更新程序,制作日志文件的一个副本,删除初始日志文件,并将闹钟设置为 7 天以后。
  • 如果闹钟设置正确可以在下一次运行时正常响起,那么“下一次运行”选项没有起到任何作用。
  • “等待一天”和“等待一周”会将闹钟时间从当前时间向前设置预期的时间量。

通过在 UTEditor.ini 中将“[GameAssetDatabase]OfflineMode”设置为 TRUE 并确保“[GameAssetDatabase]UseJournalUpdateAlarm”为 TRUE(默认值),可以为在线编译版本启用该项功能。这应该仅适用于测试,因为 Epic 和授权许可使用的应该是内容服务器。同样,将“[GameAssetDatabase]UseJournalUpdateAlarm”设置为 FALSE 将会禁用 Asset Database Maintenance(资源数据库维护)功能。

检查点命令行开关选项

命令行开关还有一些除了调试问题时您实际上应该不需要使用的其他选项:

  • -NoDeletes 会通知命令行开关不要删除 SQL 服务器中任何过期的日志条目。任何比内置阀值老的条目将会被留在数据库中。注意,如果您一直使用该选项,您的 SQL 数据库将会变的很大,而您的编辑器启动性能会降低。下次您运行 没有 这个参数的检查点程序时,它会像平常一样进行并删除过期的资源。
  • -ImportOldTags (在 2009 年 5 月 QA Build, 变更列表 33172 中被删除) 从所有包中导入遗留的内容标签数据,然后将其合并到游戏资源数据库中。请参阅下面这部分有关导入遗留的内容标签的内容了解更多信息。
  • -PurgeGhosts 强制命令行开关立即使数据库中任何 Ghost 资源条目过期(删除)。正常情况下,ghost 资源会在固定天数后自动过期,除非资源在那之前就在包中成为现实。
  • -Repair 会尝试修复数据库中的任何错误。注意,对于错误,修复相当于彻底消除数据库中有问题的条目。
  • -Reset 会从头开始构建一个全新的检查点文件。它会忽略全部现有的标签、收藏夹、日志服务器数据和元数据,全部重新开始。除非您知道您在做什么,否则您最好不要使用这项功能。
  • -Verify 只会检查数据库和报告警告的状态。实际上,它不会发生什么变更或保存状态。
  • -DeleteCollections 会删除公共和私人收藏夹

导入遗留的内容标签

以前的内容标签浏览器以及所有相关的功能,包括包文件中的数据,都在 2009 年 5 月 QA 编译版本中从 UE3 删除(变更列表 # 333172)。如果您已经在您的资源上设置了很多内容标签,而且想要将这些标签转换到新的系统,那么您必须按照下面的步骤进行操作:

  • 注意不要使用 09 年 5 月 QA 编译版本(变更列表 333172)或以后的版本重新保存任何内容包! 重新保存包将会 破坏您的内容标签
  • 同步到 09 年 4 月 QA 编译版本,或同步到 09 年 5 月 QA 编译版本 略去 变更列表 333172。
  • 针对每个游戏,运行 GAD 命令行开关以便转换以前的内容标签:
    • MyGame.exe CheckpointGameAssetDatabase -ImportOldTags
  • 这将会创建一个包含您的全部标签的文件 (GameAssetDatabase.checkpoint)
    • 内容浏览器会一直从该文件中加载���签数据
  • 现在,您可以同步到后来的 QA 编译版本(所有变更列表),您最好进行同步!

未检验的资源和 Ghosts

您可能时常会在内容浏览器中看到一个在外观上标记为 未检验 的资源 。这只是说明该资源的信息是从日志服务器上下载的,而且还没有经过检查点命令行开关的“祝福”

当检查点程序运行时,它会下载从日志服务器上下载 未检验 资源,然后检查以确保这些资源在游戏内容中实际存在。(通常,您的编译系统正在进行检查点工作,所以这意味着将这些资源发送给源代码控制。)

假设检查点命令行开关发现了资源,下次用户同步到最新的检查点文件时,该资源将不会再被标记为 未检验

然而,如果没有发现该资源(可能是因为用户还没有在新建的资源中进行检查,或者可能甚至是从来就没有进行保存),检查点工具会将该资源标记为 *Ghost*。Ghost 资源在磁盘上不存在,所以从来不会在内容浏览器中显示,因此大多数用户甚至从来就没了解过这个功能。

一段固定的时间内,资源 ghost 仍然会在数据库中履行职责,以便有用户最后要签入这个资源。因为该资源可能已经有赋予它的标签或其他元数据,所以这一点很重要,尽管它还没有提交到源代码控制中。最后,ghost 会过期并从数据库中删除。

如果您一点也不希望在编辑器中看到其他用户的 Unverified(未检验)资源,您可以使用 -NoLiveTags 命令行参数,它会通知编辑器只下载与您创建的资源相关的信息。