Amplify Imposter 插件使用指南
Table of Contents
请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com
描述
Amplify Impostors 是一款小巧但功能强大的工具,可用于创建不同类型的 Impostors,这些 Impostors 是平面和简单多边形构成的复杂高多边形对象的替代品(substitutes ),可渲染原始对象的虚假版本(fake version)(因此得名)。与传统精灵非常相似,它们通常由单个平面四边形或简单多边形组成,并且像经典广告牌(classic billboard)一样始终面向相机。将它们视为要渲染的面向相机的纸板版本。使用此类技术的常见目的是能够用非常低的多边形表示远处的物体,例如树木、灌木丛、岩石、废墟、建筑物、道具等。
有多种方法可以创建这些 impostor,每种方法都有各自的优点和缺点。此工具旨在提供最有用和最流行的技术,同时使创建过程尽可能简单。
安装
- 打开 AmplifyImpostors.unitypackage
- Unity 加载后会显示“导入包”窗口,选择全部并点击导入
- 警告 - 如果您在同一个项目中使用 Amplify Shader Editor请确保两个软件包都是最新的;检查您的控制台是否存在与之相关的任何错误
快速入门说明
- 选择场景中的游戏对象或项目中的预制件
- 在检查器窗口中搜索并添加“Amplify Impostor”组件
- 按“Bake Impostor”并选择要保存impostor文件的位置
当前功能
Impostor类型
目前支持三种预先烘焙的 Impostor 类型 (左边是真实网格,右边是冒名顶替网格)
效果图 | 示意图 | 描述 |
---|---|---|
![]() |
![]() |
球面(spherical):以典型的经纬度格式拍摄多张照片。着色器更简单、更快速,近距离拍摄时, impostor看起来基本没问题,但帧间跳动相当明显。可以通过增加轴帧数(以牺牲分辨率为代价)来缓解这一问题。 |
![]() |
![]() |
八面 (Octahedron) :以十球面格式(icosphere format)拍摄多张照片。这样做是为了保证相邻帧数固定为 3,这样在相对于相机的任何给定位置,我们都可以混合最近的三帧。这样做的好处是消除帧之间的弹出。另一方面,着色器复杂度更高,当近距离观察时,混合变得太明显,出现明显的重影伪影。 |
![]() |
![]() |
半八面体(HemiOctahedron):半八面体变体与正八面体类似,不同之处在于只从物体的上半球拍摄相同数量的镜头,从而有效地使混合精度翻倍。但缺点是,由于不烘焙下半球,从下方看时会产生不正确的结果。这种方法通常仅在您知道物体将始终从上方观看时使用(即:自上而下的相机(top-down cameras))。 |
实时渲染
这些预烘焙解决方案中的每一个方案,都会渲染表面的构成部分贴图,以支持实时照明。这些方案支持:
- 可编写脚本的渲染管道(HD 和 LW)(v4.9.0+)
- 标准/旧版前向渲染和延迟渲染
- 动态灯光和阴影
- 对象交叉点(object intersection)的深度写入
- 全局照明
- 烘焙光照贴图(通过自定义烘焙)
- GPU 实例
- 抖动交叉淡入淡出
其他的
- 自定义打包贴图(package map):使用标准材质烘焙渲染最多 4 张贴图和自定义材质,使用自定义烘焙渲染最多 8 张不同的地图(支持 PNG 和未压缩的 TGA)
- 反照率 (RGB) | Alpha 蒙版 (A)
- 镜面反射 (RGB) | 平滑度 (A)
- 物体法线 (RGB) | 深度 (A)
- 发射 (RGB) | 环境光遮蔽 (A)
- 自定义形状编辑器(Custom Shape Editor):自动生成自定义形状,以移除替代器的大部分透明区域,从而减少过度绘制。还支持手动编辑。
- 烘焙预设(baking presets):定义烘焙替代者的预设,其中还包含各种导入和导出选项。
脚本化的渲染管道(scriptable render pipeline)
为了将 Amplify Impostors 与 SRP 一起使用,请务必导入所需的包 ( AmplifyImpostors\Plugins\EditorResources\RenderPipelinePackages )。
请注意,对于HDRP ,有两个可用的包,因为最新的HDRP 10发生了很大变化,必须创建一组新的着色器和烘焙工具。
当使用最高9.xx版本的HDRP时,要导入的正确包是: AmplifyImpostors\Plugins\EditorResources\RenderPipelinePackages\Legacy\ImpostorsHDRP 9xx (Legacy).unitypackage
对于HDRP 10版本,请导入: AmplifyImpostors\Plugins\EditorResources\RenderPipelinePackages\ImpostorsHDRP.unitypackage
Inspector面板
imposter的检查器分为两个主要部分,一个是设置其基本定义,另一个是提供更高级的烘焙设置。
这是主要检查员:
- Impostor Asset:这是对将保存大部分 impostor数据的资产的引用,因此如果同一对象有多个 impostor,这些数据将在它们之间共享。此资产是使用创建或烘焙按钮自动创建的,但也可以右键单击项目文件夹并创建一个空的impostor asset。
- LOD Group:如果存在 LOD 组,则为该组的引用。这允许在给定的 LOD 组中自动设置impostor。当添加组件时,检查器将尝试填充此引用。
- References:这些是对将用于烘焙替代器(bake impostor)的渲染器的引用。您可以通过相应地更改这些引用来限制烘焙到替代器的内容。当您添加组件时,检查器将尝试为您填充此引用。
- Add按钮:打开文件浏览器并创建 impostor asset,然后自动将其分配给组件。这样做还可以使烘焙设置可用。
- Bake Impostor:使用当前数据资产和给定路径烘焙 impostor。
当将 impostor asset分配给组件时,您可以配置高级烘焙设置:
- Bake Type:用于烘焙和渲染 impostor的技术。目前支持三种不同的技术,未来将支持更多技术。请参阅 impostor类型。
- Texture Size:最终烘焙图像的纹理大小(以像素为单位)。分辨率更高的图像在近距离下可提供更好的效果,但存储和运行时占用的空间更大。考虑到替代器的目的是在远距离进行渲染,大纹理大小很少是必要的。提供了各种预设,如果需要自定义分辨率,请按右侧的锁定图标以允许自定义尺寸字段。
- Axis Frames:每个轴的帧数。例如,值 16 表示单个 impostor总共有 256 个不同的镜头(16 x 16 = 256)。对于球形 impostor,可以通过按下右侧的锁定按钮来为每个轴设置不同的帧数。
- Pixel Padding:以像素为单位的出血大小。出血/填充会扩大单个镜头的边缘像素,以避免 mipmapping 导致的渲染伪影。值为 32 表示图像将向各个方向扩展 32 个像素。
- LOD Insert Mode:替代器如何自动包含在 LOD 组中的规则。这仅在首次烘焙时可用,它将自动适当更改“引用”字段中的渲染器。
- Do Nothing:不做任何事。
- Replace Culled:将 LOD 组中剔除的部分(culled part)替换为impostor。使用最后一个LOD 作为参考。
- Replace Last:将 LOD 组的最后一个 LOD 替换为替代impostor。使用前一个 LOD 作为参考。
- Replace All Except First:将 LOD 组中除第一个外的所有 LOD 替换为替代 LOD。使用第一个 LOD 作为参考。
- Replace Specific:将 LOD 组的目标索引 LOD 替换为替代 LOD。使用前一个 LOD 作为参考。
- Replace After Specific:将 LOD 组的目标索引 LOD 之后的所有 LOD 替换为替代 LOD。使用该 LOD 作为参考。
- Insert After:在目标索引 LOD 后插入新的 LOD 作为替代。使用该 LOD 作为参考。
- LOD Target Index: 插入模式的索引目标。仅当当前插入模式支持更改目标时才可用。
广告牌网格
烘焙器使用 Unity 内置的形状编辑器来找到形状的近似值。此近似值可能仍需要在多边形数量和形状方面进行改进,因此提供了一些附加选项来更好地控制它。通常不需要触碰这些设置,但可能存在一些奇怪的情况下,甚至手动模式对于一些更精细的调整也是必要的。
![]() |
最大顶点数[4,16]:通过定义最大顶点数,可确保最终创建的数量不超过该值。如果发生这种情况,则将删除对形状贡献最小面积的每个顶点,直到达到指定值。 |
![]() |
轮廓公差[0,1]:此参数允许最终形状通过增加其顶点数量来更紧密地贴合对象。公差为 0 将确保生成的形状封装整个对象,即使这意味着更松散和简化的网格,而公差为 1 将尝试使用合理数量的顶点尽可能贴合形状。 |
![]() |
法线缩放[0,1]:根据形状法线缩放顶点。如果形状接触预览四边形边界,则它们会被限制,并且顶点会被消除(如有必要)。生成四边形的快速方法是最大化此值。 |
![]() |
在手动模式下,您仍然可以使用自动工具,但可以进一步单独调整每个顶点的位置。 |
烘焙预设
有时,您希望使用标准设置烘焙替代材质,但需要进行一两处更改,此烘焙预设允许您创建并使用配置预设来自定义烘焙结果。这对于自定义烘焙特别有用,因为它还用于将着色器和烘焙纹理链接到最终的替代材质。
在第一个字段中,您可以选择之前创建的预设,也可以创建一个新的预设。请注意,当您选择预设文件时,您只能在预设检查器中更改预设本身。否则,在 impostor检查器中所做的所有更改都只是每个 impostor保存的单独覆盖。这就是为什么默认情况下,所有其他字段都变灰并锁定的原因。
- 烘焙着色器(Bake Shader):这是用于烘焙替代对象的着色器。当为空时,它会自动使用原始对象所具有的相同着色器的延迟通道。
- 运行时着色器(Runtime Shader:):这是实际使用烘焙结果并渲染 impostor的着色器。当为空时,它会自动使用包中附带的默认着色器。
- RT#:编号的渲染纹理输出文件。如果您只需要重新烘焙一些地图,则可以将其打开或关闭。
- 后缀(Suffix):纹理文件后缀和材质属性引用。这将用于将输出纹理正确链接到最终材质中的正确字段。
- 比例(Scale):这是一个相对比例参数,允许自动配置纹理导入设置,将纹理大小调整为原始大小的一半、四分之一和八分之一。如果您不需要所有贴图都达到全分辨率,则可用于减小单个纹理大小。
- sRGB():这标记纹理导入器使用颜色 sRGB 标准或线性信息。根据经验,如果信息是颜色,则将其设置为 true,如果只是数据,则将其设置为 false。
- 压缩(Compression):更改纹理导入器压缩设置。压缩率越高,纹理越小,但烘焙时间也越长,纹理质量越低。
- 格式(Format):最终文件格式,目前只有 PNG 和未压缩的 TGA。TGA 烘焙和保存到磁盘的速度更快,但占用更多磁盘空间。这不会影响纹理的压缩和质量。
- Ov(覆盖掩码 Override Mask):这是一个多选掩码字段,允许您控制要覆盖哪些参数。您可以只覆盖一个参数或整个纹理输出设置。
全局偏好设置
可以全局更改检查器和生成的烘焙的某些行为。您可以在“编辑”>“首选项”>“Impostors”中找到这些设置。
- New Impostor Default Path:第一次烘焙时,如果未设置,则当对象是预制件或预制件实例时,编辑器将建议一个相对文件夹。然后它会记住每次后续烘焙的路径。您可以在此处使用相对有效路径更改建议的文件夹。如果您想将所有 impostor放在同一个位置并且不再受到打扰,您也可以通过将选项更改为Global将它们设置在全局文件夹中,然后您可以使用正确的浏览按钮。
- Texture Importer Settings:当使用不同的纹理分辨率重新烘焙替代器时,您可以在此处更改检查器的行为方式(选项不言自明):
- 询问分辨率是否不同
- 别问,总是改变
- 不问,永不改变
- Create LODGroup if not present:设置为 ON 将自动创建具有 LOD 组的层次结构,并设置原始对象和其中的替代对象。仅当原始对象尚无 LOD 组时才有效。 后缀:默认情况下,生成的文件与原始对象共享相同的名称,但添加了后缀,您可以在此处更改后缀。
- Suffixes: HDRP 自定义扩散配置文件烘焙可能会导致烘焙不正确,我们正在调查此问题。
已知问题
HDRP 自定义扩散配置文件烘焙可能会导致烘焙不正确,我们正在调查此问题。
常问问题
- 问:它是否支持可编写脚本的渲染管线,如通用 (URP) 或高清 (HDRP) SRP?
- 答:是的,从 0.9.3 版开始,两种渲染管道均受支持,只需确保在创建替代者之前导入相应的包(AmplifyImpostors\Plugins\EditorResources\RenderPipelinePackages),并且您选择的 SRP 使用任何 >=4.9.0 的版本。所使用的渲染管道会自动检测。如果您使用自己的渲染管道,则需要使用自定义烘焙创建适当的烘焙和运行时着色器。
- 问:我可以在 impostor的边缘看到一些瑕疵,我该如何修复它?
- 答:此问题很少发生,因为它取决于原始物体形状。这些瑕疵实际上是相邻帧透过来窥视的,为了消除它,您不能尝试调整网格以更紧密地贴合物体。如果这仍然无济于事,您可以激活着色器定义以将其移除,但需要一些额外的指令:
- 搜索并打开 AmplifyImpostorsConfig.cginc 文件。
- 在顶部找到#define AI_CLIP_NEIGHBOURS_FRAMES 0条目并通过将其更改为#define AI_CLIP_NEIGHBOURS_FRAMES 1并保存来激活它。
- 问:它与 Amplify Shader Editor 一起使用吗?
- 答:是的,特别是关于创建自定义 Bake 和 Runtime Impostor 着色器。请务必使用最新版本,否则您可能会遇到一些错误。导入 AI 或 ASE 后,请检查您的控制台是否存在任何可能的问题。
- 问:这会取代 LOD 吗?
- 答:基本上不会。不要将其视为常规 LOD 的替代品,因为 impostor在近距离下看起来会越来越差,而应将其视为通过替换最后一个 LOD 级别而对其进行的扩展。对于近距离到中距离,您仍然希望使用常规 LOD 网格。
- 问:它支持统一 LOD 组吗?
- 答:是的,还支持交叉淡入淡出。只需确保烘焙与前一个 LOD 级别对象匹配的替代对象,以便在 LOD 级别之间转换时实现最佳匹配。
- 问:为什么 impostor的影子如此奇怪?尤其是近距离看。
- 答:部分原因是帧之间的混合并不总是与阴影的二进制性质相匹配,而且灯光“看到”的深度与相机渲染的深度之间存在差异。我们将尝试在未来改进这一点,同时您可以尝试通过更改灯光设置和/或替代材质属性中的“阴影偏差”和“阴影视图”来优化阴影的外观。前者将阴影推得更远,后者根据视图使阴影深度变平。
- 问:它支持抗锯齿吗?
- 答:大部分情况下是的。与常规精灵一样,MSAA 不受支持,因为它仅对几何图形的边缘有帮助,但其他屏幕空间解决方案确实有效,例如 FXAA 或 TXAA。
- 问:它支持图像效果吗?
- 答:大多数情况下是可以的。如果效果依赖于深度,比如 SSAO,可能会出现一些精度问题,但大多数情况下应该可以正常工作。
- 问:它支持金属和镜面管道吗?
- 答:是的。目前,烘焙器会生成高光贴图,而不管标准材质的输入材质是什么。这确保了两种管道都受支持,因为金属贴图会转换为高光贴图。但是,您可以使用自定义烘焙来指定金属管道的使用,甚至可以将其与其他贴图打包在一起,从而减少整体纹理数量。
- 问:它支持蒙皮网格对象吗?
- 答:不可以。不过,它确实支持移动、旋转和缩放等对象的动画,但不支持角色等动画蒙皮网格。我们确实计划提供一种实时烘焙变体,允许以某个指定速率将动画对象渲染为替代对象。
- 问:它支持 SpeedTree 资产吗?
- 答:是的,还支持色调变化。默认情况下色调变化是关闭的,但您可以在 impostor材质中将其打开。
- 问:如何才能提高近距离拍摄的质量?
- 答:遗憾的是,您目前唯一能做的就是提高纹理分辨率。这通常不足以在近距离正确渲染 impostor,因为其他瑕疵开始变得明显。请注意, impostor并非旨在在近距离渲染,它们不是“真实网格”的替代品,而是在远距离渲染时的性能改进。因此,建议您使用足以应对远距离的分辨率。2k 地图通常可以满足这一要求,对于移动设备,您甚至可以使用 1k 地图。
技术考虑
请注意,目前,仅当着色器公开延迟路径(例如 Unity 标准着色器)时才支持标准烘焙。但是,创建的 Impostors 可以在正向和延迟模式下使用。如果原始网格具有自定义正向着色器(例如卡通自定义照明),就像资产商店中的许多资产一样,您需要使用自定义烘焙着色器对其进行烘焙。
当将 Amplify Impostors 与 Amplify Shader Editor 结合使用时,请务必使用最新版本,否则会导致一些错误。