0.译者前言
八面体碰撞器技术可以在没有网格对象的情况下发挥传统LOD的功能。它可以实现不同视角之间的平滑过渡,广泛应用于堡垒之夜。翻译笔笨重,意在抛砖引玉,共同进步。
1.导言
Amplify Impostors是用于创建不同类型替代物的,小而美的工具。它可以用简单的平面多边形来替代复杂的高面物体,并渲染原始物品的一个假的版本(工具因此得名)。很像传统的精灵图片(sprites),它们往往由简单的平面四边形或者简单多边形构成,例如总是面向摄像机的billboards。你可以把Impostors想象成你想要渲染物体的,面向的摄像机的一个纸片版本。树木,灌木,石头,废墟,建筑物,小道具等,都可以使用这个技术来用很低的面数的多边形表示远处的这些物体的样子。
2. 安装
-
打开AmplifyImpostors.unitypackage
-
在Unity加载完成后,会显示 “Importing package” 窗口,选择“All”并且点击Import。
3. 快速入门指南
-
选择场景中的游戏物体或者工程中的预制体。
-
在inspector窗口中搜寻并添加“Amplify Impostor”组件。
-
点击“Bake Impostor”并且选择保存impostor文件的位置。
4. 目前功能
4.1 Impostors的种类
目前支持三种预烘焙impostor。
Spherical:用经纬度的方式(latitude-longitude format)对物品进行多次的“拍摄”。其shader是简单且高性能,并且在近距离观察下生成的impostor大部分情况下是好的,但是在观察角度处于“拍摄”数据间交界处会有一个比较明显的突变。这种情况可以以牺牲单个“拍摄”图片分辨率,并拍“摄摄”角度数据个数的方法来缓和这种情况。
Octahedron:用八面体的方法来记录数据。这样做是为了保证一个“拍摄”的垂直面有固定3个相邻面。由此我们可以通过混合最相邻的三个面的数据来得到任何摄像机观察位置所看到的数据。Octahedron很大程度上避免了视角切换时画面突变的情况。然而,它shader的复杂度升高,并且近距离观察时有明显的可观察的重影(ghosting artifacts)。
HemiOctahedron:hemi变体类似于Octahedron,不同之处在于其记录相同的“角度拍摄”数据个数,但只记录物品的上半球方向,这有效的加倍了混合的精度。其缺点是,没有烘焙物品的下半球的数据,所以从下往上观察物品时不会得到正确的结果。这种方法被使用在确定物品总是被从上观察的情况(如摄像机从上往下的情况)。
4.2 实时渲染
-
烘焙出的多张贴图是为了支持实时光照。这是为了支持:
-
正向渲染和延迟渲染。
-
动态光照和阴影。
-
相交物品的深度写入。
-
全局光照。
-
GPU instancing。
-
Dithering cross fade
4.3 其他
包含4张烘焙出的贴图和一个自定义的材质
-
· Albedo (RGB) | Alpha Mask (A)
-
· Specular (RGB) | Smoothness (A)
-
· Object Normals (RGB) | Depth (A)
-
· Emission (RGB) | Ambient Occlusion (A)
图形编辑器:自动生成自定义的图形来最少大部分的空白区域从而减少overdraw。当然,也支持手动的图形形状。
5. 操作面板
Impostor的面板被分成两个主要的部分,一个用来设置基础引用数据,另一个用来设置预烘焙参数。
: 这里持有一个asset的引用,该asset储存了impostor的大部分数据,如果你同一个object有多个impostor,那么它们将分享同一个asset。这个asset是在你点击创建或烘焙按钮时被自动创建的,你也可以右键点击控制文件夹来创建一个空的asset。
LOD Group:如果LOD group存在的话,此处持有其对其的引用。当你添加这个组件时,工具会尝试自动获得LOD Group的引用。
References:这些是要被烘焙到impostor的renderers的引用。你可以通过改变这些引用来限制你烘焙到impostor的内容。当你添加这个组件时,工具会尝试自动设置这个引用。
Plus Button:打开文件浏览器并创建一个impostor asset,并且自动自动关联asset到Impostor Asset。这样做使得后续烘焙设置变得可用。
Bake Impostor:使用当前指定的asset来烘焙数据。
当一个impostor asset被指定到当前组件,你就可以配置预烘焙参数:
Bake Type: Impostor被烘焙和渲染的方法。目前支持三种不同的方法,以后会推出更多。
Texture Size:最后烘焙图片的像素大小。更高分辨率的图将在近距离时提供更换好的结果,但则会在储存和运行时占用更多的空间。大尺寸的贴图很少被使用,因为impostor通常用于表现远端的物体。工具提供了不同的预设,如果需要自定义分辨率,点击锁图标来自定义尺寸。
Axis Frames:每个轴方向上的画面(frame)数量。例如,设置参数为16,则代表着impostor一共有256个不同角度的“拍摄”画面。对于球形的impostors,如果自定义了贴图大小,每个轴可能有不同数量的画面。
Pixel Padding:以像素为单位的bleeding size。Bleeding/padding增加了每个成像画面边界的像素,从而避免在mipmap过程中可能产生的干扰。值为32意味着图片每个方向上会扩大32个像素。
Rendering Maps:允许单独设置每种烘焙贴图是否需要被渲染。在你需要单独重新烘焙一种贴图时会用到这个设置。
LOD Insert Mode:设置impostor是被自动设置近LOD Group的规则。只在第一次被烘焙时起效,并且会自动修改在References处引用的renderers。
-
· Do Nothing: Does nothing.
-
· Replace Culled: Replaces the culled part of LOD Group to an impostor. Uses Last LOD as reference.
-
· Replace Last: Replaces the last LOD of LOD Group to an impostor. Uses the previous LOD as reference.
-
· Replace All Except First: Replaces all LODs of LOD Group to an impostor except the first. Uses the first LOD as reference.
-
· Replace Specific: Replaces the target index LOD of LOD Group to an impostor. Uses the previous LOD as reference.
-
· Replace After Specific: Replaces all LODs after the target index LOD of LOD Group to an impostor. Uses that LOD as reference.
-
· Insert After: Inserts a new LOD as an impostor after the target index LOD. Uses that LOD as reference.
LOD Target Index:It’s the index target for the insert mode. Only available if the current insert mode supports changing the target.
Billboard Mesh
烘焙器将使用Unity内置的图形编辑器供开发者设置一个与物体近似的形状。这个生成的的形状可以通过提高顶点数和修改形状来使其与原物体更近似。因此提供了一些额外的选项来更好的控制这个过程。除了一些古怪的情况需要手动的调整,通常不需要设置这些参数。
Max Vertices[4,16] :用来定义最大的顶点数量,用来确定最后顶点数量不会超过它。如果自动生成的图形的顶点数超过了设置,那么对生成图形形状贡献小的顶点会按贡献值逐渐删除,知道剩下的顶点数等于设置值。
Outline Tolerance[0,1]:通过提高本参数或提高顶点数量,将使得最后生成的形状会更紧密贴合物件形状。参数被设置为0将产生一个包裹整个物体的形状,其形状更松散和简单。然而设置值为1,则将生成的形状更贴合物体(需要同时设置一个合理的顶点数量)。
Normal Scale [0,1]:这个值根据物体画面中形状的法线来设置顶点位置,将值设为最大,将创建一个矩形。当形成矩形时,多余的顶点将被去除。
在手动模式下你任然可以使用自动设置工具,且你可以手动调节每个顶点的位置。
全局设置
一些inspector和烘焙结果可以被整体修改。你可以在Edit > Preferences > Impostors找到设置。
New Impostor Default Path:首次烘焙数据时,如果此处不设置,那本工具编辑器将会推荐提示设置相对的文件夹路径。然后工具会为后续烘焙都会提示设置路径。你可以才此处修改文件夹路径。如果你想让一劳永逸的将所有的impostors都在同一个位置,你可以设置为Global,后通过文件夹浏览器设置。
Texture Importer Settings:当使用不同贴图分辨率设置重新烘焙impostor时,你可以在这里设置inspector的行为:
-
· Ask if resolution is different
-
· Don’t ask, always change
-
· Don’t ask, never change
Create LODGroup if not present:设置为ON将会自动创建添加LOD Group组件,并且添加一个impostor作为子物体。只在object没有添加的LOD Group组件时才会起效。
Suffixes:默认情况下创建的文件已原object名+后缀的方式命名,你可以在这里改变这个后缀。
6. 常见问题
Q:我能在impostor边界上看见一些痕迹(artifacts),我怎样修复它?
A:这种情况很少发生,因为它的发生依赖于原始物体的形状。这些痕迹实际上是相邻成像画面互相影响(peeking through)所致,你无法(译者注:原文是can’t)通过调节生成简单图形Mesh与原物体的贴合程度来解决这个问题。如果这还是没能解决问题,你可以写一个添加少量额外命令的shader来移除它:
1. 找到AmplifyImpostors.cginc文件。
2. 在文件顶部找到“#define AI_CLIP_NEIGHBOURS_FRAMES 0”,通过将其修改为“#define AI_CLIP_NEIGHBOURS_FRAMES 1”来激活它。
Q:可以和Amplify Shader Editor共同使用么?
A:可是,但请确保使用最新版本,否则你可能会遇到少量的报错。
Q:本工具可以替代LOD么?
A:大体上不能。不要把本工具作为常规LODs的替代物,因为impostor在近距离观察时,越近看起来越糟糕,impostor应该作为LOD的最后一层,从而充当为LOD一种延伸手段。在近距离到中等距离,你还是会倾向于使用常规的LOD。
Q:它支持unity的LOD groups么?
A:是的,并且还支持cross-fading.仅需要确保在不同层LOD切换时impostor看起来完全匹配就可以了。
Q:为什么impostor的影子如此怪异?特别是在很近的距离。
A:部分原因是物体特定角度成像画面不能完全匹配阴影的the binary nature,并且光源坐标系的物品深度与摄像机获得的物品深度不一致。我们将在未来进行改善,与此同时你可以尝试通过修改impostor材质和光照设置中“Shadow Bias”参数来改善阴影看起来的样子。
Q:它支持抗锯齿么?
A:大部分可以。和常规的精灵图片一样不支持MSAA,因为MSAA只帮助处理几何体的边缘。其他类型的抗锯齿可以正常工作,如FXAA或TXAA。
Q:它支持屏幕后处理么?
A:大部分情况可以。如果后处理效果依赖于深度信息(如:SSAO),那可能会有精度问题,但是大部分情况都可正常工作。
Q:它支持金属或者高光渲染管线么?
A:是的。目前烘焙器无论物体是什么材质都会生成一张高光贴图。这确保了两条管线都可以被支持,因为本工具中目前金属贴图由高光贴图转换而来。将来我们打算支持自定义贴图烘焙和自定义shader,来支持烘焙两条管线,那时金属贴图将不再由高光贴图生成。
Q:它支持skinned mesh物体么?
A:不。它支持物体动画,如:移动,旋转,缩放,但不支持角色等的蒙皮动画。我们计划提供一个实时烘焙的变体版本来支持将物体动画并一定的频率渲染到impostors。
Q:它支持SpeedTree asset么?
A:是的,也支持hue变体。默认情况下hub变体被关闭,但是你可以在impostor材质中打开它。
Q:我怎样才能提高近距离时impostor的质量?
A:很遗憾目前你唯一可以做的事是提高贴图的分辨率。并且这通常不足以修复在近距离时变得十分明显的干扰(artifacts)。请注意impostor在设计时被就没考虑会在近距离被渲染,它并不是一个“real meshes”的替代品,而是物品在远处渲染时的一种提升手段。因此推荐你使用足够高的分辨率来使它在远距离时表现良好。通常2K的贴图表现良好。在移动端你甚至可以使用1K的贴图。
7. Technical Considerations
目前只有暴露出延迟渲染路径的shader才能用于烘焙,例如:Unity Standard shaders。然而,Impostor创建完成后可以被使用在延迟渲染和正向渲染的模式。
原始文档链接: