概述
该工具的目的是生成 rendinst 模型的 impostor 纹理,以导出到游戏资源包中。
本地工作流
该工具是一个单独的可执行文件。现有的 daBuild 是控制台应用程序,因此它不支持渲染资源。
冒名顶替者纹理的生成发生在构建资源之前,因此生成的纹理也会导出
生成 impostor 纹理。
使用 daBuild 构建资源(在本地测试它们)。
提交更改:
.folder.blk, 用于树, - 生成的纹理(每个 rendinst 有 3 个),riImpostors.bin文件,这些文件被修改(位于 <content_folder>/<package_folder>/res/ 中)。
本地工作流:快速入门
要启用烘焙冒名顶替者,请查看
.folder.blk文件中的此类虚拟资产:virtual_res_blk{ find:t="^(.*bush.*)\.lod00\.dag$"...}将下面这行
lod { range:r=1000; fname:t="../dynamic_imposter.lod01.dag";}替换为
lod { range:r=1000; fname:t="../billboard_octagon_impostor.lod01.dag";}添加
impostor{}块(查看页面末尾的更多详细信息)。运行
daImpostor.cmd(在<game_folder>/develop/中)运行 daBuild。
必要的包(或只是构建所有内容)是:
vegetation.grp(或受影响的树木导出到的任何位置)<trees_foldername>_impostors.dxp(如果不同的文件夹中有树,可能会有更多)impostor_data.impostorData.blk文件的.grp。位置在application.blk文件中指定:assets/impostor_data_folder:t=...文件中指定的位置。
(可选)导出关卡二进制文件。
游戏在没有此选项的情况下运行,但旋转调色板将不可用。 如果没有此步骤,则在加载关卡时将出现 logerr。它并不危险,可以安全地忽略,但在关卡二进制导出后,关卡看起来会略有不同。
上传到 cvs 时,必须包括生成的冒充者文件夹(<trees_folder>/impostors/)中所有生成的纹理 +
.folder.blk;以及impostor_data.impostorData.blk文件,当然还要修改.folder.blk。
如何访问该工具
以下是有关如何访问该工具的说明。
Impostor 纹理分辨率
每个资产的纹理大小可在 application.blk 或 .folder.blk 中指定。
在
application.blk中:纹理高度可以全局指定,也可以基于世界空间树高度使用质量级别指定。纹理的宽度将根据树的世界空间高/宽比计算。宽树将具有宽纹理。有关配置,请查看本页末尾。
See also
For more information, see application.blk.
在
.folder.blk中:这里可以指定精确的分辨率。如果只指定了高度,宽度将根据树的世界空间高度/宽度比来计算。
impostor{}块选项的textureWidth和textureHeight选项对应的是整个生成纹理的分辨率,而不是每个切片的分辨率。生成的纹理将连续包含 9 个视图,但它们会被压缩。See also
For more information, see .folder.blk.
请记住,纹理分辨率选项将应用于最高的 hq 纹理配置。这些分辨率应该是当前游戏应该使用的分辨率和最高质量选项。Mip 偏移量适用于 mq* 和 lq,也可以选择应用于移动分发。
如果要为特定平台指定纹理质量,则必须更改 impostors/.folder.blk。生成的纹理适用于所有平台。可以使用 .folder.blk导出带有 mip 偏移的纹理。
在没有特定项目选项之前,最好更新 impostorBaker.cpp 以生成不同的默认 .folder.blk。
如何使用该工具
使用独立工具
该工具需要在 develop/ 目录下执行才能工作。它需要两个必选参数:application.blk 的路径和根目录的路径:
> G:/dagor2/tools/dagor3_cdk/bin64/impostorBaker-dev.exe ../application.blk -rootdir:G:/dagor2/enlisted/develop [options...]
选项是:
debug:<value>:classic或default,设置调试模式。assets:<asset_name1;asset_name2...>: 资产名称可以在此处列出(RendInst 类型),用;分隔。该工具将导出这些资源。packs:<pack_name1;pack_name2...>: 这些包中具有 Impostor 的资产将被导出。clean:<yes|no>: 可用于删除属于不再存在的资源的所有纹理。默认值:no.folderblk:<disabled|dont_replace|replace>: 指定如何处理 impostor 目录中的.folder.blk文件:disabled: 切勿生成或修改这些文件;dont_replace: 如果不存在,则生成.folder.blk;replace(默认值):始终生成或替换现有项。
如果设置了 assets 或 packs 选项,则只会生成这些资源。
否则,所有支持的资产(rendinst 都有一个impostor{}块)。如果检测到无效参数,应用程序将打印出包含所有这些参数的帮助菜单。
该工具将在每个目录中创建一个目录,其中包含支持冒名顶替者的 rendinst。纹理和.folder.blk文件(取决于设置)将在生成时放置在此目录中。
Note
不要在该目录中放置任何其他内容,因为它的内容是自动处理的。如果启用了 clean 选项,它将解析所有 impostor 目录,以及这些目录中的所有文件名。它将保留属于支持冒名顶替者的现有资产的所有文件;它将删除所有与 Impostor 纹理名称格式匹配的纹理,这些纹理不属于任何此类资源;在此步骤中忽略 .folder.blk 文件;如果找到任何其他文件,则清理作将中止以防止意外删除必要的文件。
使用 Asset Viewer
Note
仅当 Asset Viewer 启动时存在 impostor 纹理时,才会显示这些纹理。如果冒名顶替纹理是从 Asset Viewer 生成的,则它们只会在重新启动后出现在资产中。
让图像自己说话:
如何启用资源的 Impostor 纹理生成
首先,资源必须是rendinst类型,否则工具将跳过它。
向虚拟资产的内容添加impostor{}块。impostor{}块 必须直接位于contents{}块内,而不是在第三个块内。目前不支持 baked/runtime impostor duality。无法为不同的构建配置(例如不同的平台)设置不同的 impostor 类型。此功能是可行的,但尚未实现。
示例:
virtual_res_blk{
find:t="^(.*tree_tropic_large_.*)\.lod00\.dag$"
className:t="rendInst"
contents{
impostor{
textureWidth:i=4096
textureHeight:i=0 // 根据资产高度自动调整为宽度(适用于树木/灌木丛)
rotationPaletteSize:i=3
mipCount:i=0 // 0 表示生成所有,直到指定的最小 mip 大小 (application.blk)
}
//...
}
}
或者只是简单地
virtual_res_blk{
find:t="^(.*tree_tropic_large_.*)\.lod00\.dag$"
className:t="rendInst"
contents{
impostor{} // 自动检测冒名顶替者类型;使用默认设置
//...
}
}
impostor{}块中的任何参数都可以省略以使用默认值。该块也可以为空。该工具将生成一个纹理,该纹理由切片组成,对应于资源的不同视角。
textureWidth: 包含 9 个切片的整个纹理的 X 分辨率。textureHeight: 生成的纹理的 Y 分辨率 = 单个切片的高度。mipCount: 默认情况下(值 =0),它将根据application.blk设置生成所有 MIP。任何不同的值都将手动覆盖它。它表示包括基本纹理在内的 mip 级别的总数。rotationPaletteSize: 树将能够绕 Y 旋转,但只允许几个离散角度。对于rotationPaletteSize=3,可能的旋转将是 0°、120°、240° 度。Warning
将为每棵树的每个可能的旋转创建一个阴影纹理。
preshadowsEnabled: 为此资产启用 preshadows。crownCenterOffset1: 透射椭球体中心的 Point3 偏移量,以米为单位。crownRadOffset1: 透射椭球半径的 Point3 偏移量(以米为单位)。crownCenter2: Point3 次级透射椭球体中心,以米为单位。crownRad2: Point3 次透射椭球半径(以米为单位)。mipOffsets_hq_mq_lq:ip3=0,1,2: 这些 MIP 偏移量将直接导出到.tex.blk文件。这些选项仅影响 daBuild。mobileMipOffsets_hq_mq_lq:ip3=0,1,2: 与mipOffsets_hq_mq_lq相同,只是它适用于移动平台。如果项目不是为移动设备构建的,则无需指定它。impostorNormalMip:i=5: 有一种方法可以告诉工具哪个 Mip 将用于烘焙此资产的法线。默认情况下,它是0。
默认值可在以下位置找到:
prog/gameLibs/publicInclude/rendInst/impostorTextureMgr.h
如何在新游戏中启用 Baked Impostors
将复制当前
billboard_octagon_impostor.lod01.dag件添加到资产目录中有dynamic_imposter.lod01.dag文件的每个位置。如果已经有一个,请检查它是否相同。在
application.blk中启用impostorData资产类型:assets{ types{ type:t="impostorData"}}assets{ export{ types{ type:t="impostorData"}}}
在
application.blk中添加assets{impostor{}}块:data_folder:t: mandatory,请选择始终为游戏导出的位置(不依赖于关卡或类似位置)。相应的.grp不能包含任何使用烘焙冒名顶替者的资产。splitAt:i: 可选的splitAt值为 impostor 纹理。它将用于导出项目中的所有 impostor 纹理。defaultTextureHeight:i: 可选的,生成的 Impostor 纹理的默认纹理高度。它可以在virtual_res{}块中被覆盖。textureQualityLevels{ qualityLevel{ minHeight:r=; textureHeight:i= }}}: 基于世界空间树高度的纹理高度列表。textureHeight将应用于至少为minHeight高的树。可以指定多个 qualityLevel 块。Important
一次只能指定
defaultTextureHeight和textureQualityLevels中的一个。mobileMipOffset:i: 可选,如果游戏的移动版本需要比 PC 更小的分辨率纹理,则可以使用此选项对它们应用 MIP 偏移。纹理可以以 PC 分辨率生成,移动设备将将它们与给定的 mip 偏移量一起使用。normalMipOffset:i: 使用normal_translucency纹理时,其分辨率将低于漫反射纹理。aoSmoothnessMipOffset:i: 与normalMipOffset:i相同,但适用于 ao_smoothness 纹理。aoBrightness:r: impostor AO 效果的亮度默认值:0.7.aoFalloffStart:r: lower 表示impostor AO 效果的中心较暗 (0..1) 默认值:0.25.aoFalloffStop:r: lower 表示impostor AO 效果的边缘较暗(0..1) 默认值:1.0.preshadowsEnabled:b: 默认情况下,启用或禁用此项目的 preshadows。可以按资产覆盖它。Preshadows 通常会以牺牲性能为代价来提高质量,尽管它们并不适用于每个资产。默认值:yes.
Example
impostor{
data_folder:t="develop/assets/gameres/gameObjects"
preshadowsEnabled:b=yes
splitAt:i=256
mobileMipOffset:i=1
normalMipOffset:i=1
aoSmoothnessMipOffset:i=1
textureQualityLevels{
qualityLevel{
minHeight:r=0; textureHeight:i=32
}
qualityLevel{
minHeight:r=4; textureHeight:i=64
}
qualityLevel{
minHeight:r=8; textureHeight:i=128
}
qualityLevel{
minHeight:r=16; textureHeight:i=256
}
}
}
打开相应的
gameParams.blk删除此行(如果存在):
enableImpostorTextureManager:b=false (default=yes)(可选)添加以下行以禁用 preshadow 压缩:
enableImpostorPreshadowCompression:b = <yes/no> (default=yes)配置 cascade0 外部的透射率近似参数:
treeCrownTransmittance{
brightness:r // default = 0.5
falloffStart:r // default = 0.01
falloffStop:r // default = 1.
enabled:b // default = no
}
如何使用 ImpostorNormalMip 进行 Smoothness Hack
黑客的想法。在分支的某个 mip 处,法线纹理放置相同的纹理,但具有淡化平滑度通道。之后,用这种纹理烘烤 impostor,结果我们在游戏 impostor 中看到边缘的白色东西较少。
为植被的树枝的正常纹理设置 mipFade 功能,例如,将 4 mip 设置为淡化
Important
您应该根据重排指定 mipFade。
如下例所示,此处我们希望平滑度通道的 mip 淡入淡出,该通道存储在 Alpha 通道中。但根据 swizzling Alpha 通道进入 Red 通道。因此,我们将 mip 淡化应用于红色通道。
示例:
A 通道(平滑度)的自定义 mipmap 光照颜色仅适用于树枝,不包括棕榈树、橄榄、有光泽的树叶等。
virtual_res_blk{ find:t="^(.*branch.*_n?)\.tif$" //此处排除有光泽的叶子 className:t="tex" contents{ hqMip:i=1; mqMip:i=2; lqMip:i=3 convert:b=yes; fmt:t="BC7" rebuild_bc67:b=yes gamma:r=1 stubTexTag:t="smooth0_nx_metal0_ny" mipFilter:t="filterKaiser"; mipFilterAlpha:r=42; mipFilterStretch:r=2 addrU:t="wrap"; addrV:t="wrap" hqMip:i=0; mqMip:i=1; lqMip:i=2 swizzleARGB:t="RAGB" mipFade{ mipFadeColor:p4=1.0,-1,-1,-1 mipFadeStart:c=0,0,0,0 mipFadeEnd:c=4,4,4,4 } } }导出此导出,以应用 mipFade 功能的更改。
为 tree 的每个资产设置一个 mip,该 mip 将用于采样。
示例:
virtual_res_blk{ find:t="^(tree_autumn_.*)\.lod00\.dag$" className:t="rendInst" contents{ lod{ range:r=80; } lod{ range:r=160; } lod{ range:r=1500; fname:t="../billboard_octagon_impostor.lod01.dag"; } transition_lod{ ... } impostor{ impostorNormalMip:i=5; } allowProxyMat:b=yes } }运行 Impostor Baker,以烘培Impostor。
将整个数据导出到游戏。