MicroSplat系列翻译:核心篇

MicroSplat

原文档: https://docs.google.com/document/d/1t_ZEKW8bHJqVWulH9Tcu-V5PIMr-sBOV_Ob7k2y1XY8/edit#heading=h.6jynaot9cbnq

以下翻译为机器翻译有错误请指正

概述

请添加图片描述

MicroSplat是一个模块化的着色系统,允许你通过新的模块添加新的特性。它的核心是目前可用的最快的Splat Mapping着色器,支持多达32种纹理,并且会根据你选择的设置自动生成,以提供最优的着色器。MicroSplat使用了一个独特的着色器编译框架,这个框架使得MicroSplat比传统的着色器提供更多的选项。在传统的着色器中,你可能需要从一些预设的特性组合中选择,但有时候你可能会发现你需要的特性组合并不在预设的选项中。而在MicroSplat中,你不需要这样做,因为它可以根据你的需求自动地生成最优的着色器。

MicroSplat的主要关注点围绕以下设计:

  • 性能
  • 极高质量的渲染
  • 易用性
  • 模块化
  • 大量的特性集

资源

每个模块的文档都包含在Packages/MicroSplat-Core/Documentation中,请务必阅读它们。每个模块的特性的视频都包含在每个模型的资产描述中,并且都可以在我(Jason Booth)的YouTube频道上找到。

请注意,MicroSplat会安装在Packages文件夹下,而不是在Assets文件夹下。所有的示例都可以通过包管理器访问,只需选择“In My Project”选项卡,并为每个包安装示例即可。

请添加图片描述

可编程渲染管线

如果你正在使用如URP或HDRP等可编程渲染管线(SRP),你将需要购买适用于你正在使用的渲染管线的适配器。每个适配器都是为Unity的特定LTS版本编写的,因为Unity每年都会打破与前一年着色器的兼容性,因此它们需要被更新。

开始

如果你正在使用MicroVerse,请参阅MicroVerse的文档,了解如何将地形转换为MicroSplat。如果你有一个现有的Unity地形,只需要几次点击就可以开始使用。

  1. 选择你想要作为单一连续地形处理的所有地形。
  2. 在检查器窗口中点击“添加组件”,并选择"MicroSplatTerrain"组件。
  3. 点击“Convert to MicroSplat”按钮。

请注意,当处理多个terrain时,它们每一个都需要具有完全相同的纹理层,并且顺序也要相同,才能成功进行转换。

MicroSplat会在几秒钟内读取你地形的现有纹理,并将它们打包到自定义的纹理数组中,然后创建一个模板材质和着色器。根据你可用的纹理映射,会生成一个完整的PBR(物理基于渲染)工作流。例如,如果你只使用了漫反射图,MicroSplat将自动为你的纹理生成法线图、高度图、光滑度图和环境遮挡图。

请添加图片描述

所有创建的数据将被组织到一个名为MicroSplatData的目录中,该目录位于你的地形数据同一目录下。一般来说,最好不要重命名这些数据,因为有些数据必须通过名称进行关联(例如,材质不能引用对象)。

纹理打包器

一旦转换完成,将会打开"纹理数组配置(Texture Array Config)"。从现在开始,你将在这里管理你的地形的纹理。(你可以通过重新选择MicroSplatData目录中的TextureArrayConfig对象来返回到这个界面。)这个界面有两种模式:基础版本,只有漫反射图和法线图的插槽;以及PBR模式,允许完整的PBR工作流,并对生成的纹理有更多的控制。

请注意,无论你选择哪种模式,任何缺失的纹理都会从最佳可用纹理自动生成,因为数据被打包到生成的纹理数组中(它们不会在界面上显示,也不会写入磁盘)。然而,通过提供高质量的PBR纹理,并定义所有纹理数据,总是可以获得最佳质量。高质量的法线图和高度图对着色质量的影响最大。

请添加图片描述
Basic Mode: 所有纹理只有一种分辨率可以选择,只有漫反射图和法线图可以使用。其他所有的通道(比如高度图、光滑度图等)都会自动生成。这意味着在这种模式下,你只需要提供漫反射图和法线图,其他的纹理映射会由系统自动生成。

请添加图片描述-|-
PBR mode:你可以更加灵活地控制纹理格式,导入Substance,以及提供所有的PBR(物理基于渲染)纹理通道。你甚至可以选择从哪个通道提取数据,或者如果你的纹理软件提供的是粗糙度图而不是光滑度图,你可以反转光滑度图。

如果你做了任意修改,只需点击界面底部的"Update"按钮,就可以重新生成纹理数组。

请添加图片描述

"纹理数组配置(Texture Array Config)"中的每个条目都会有一些纹理和用于数据管理的控制选项。这些选项会根据可用的特性进行变化。默认情况下,MicroSplat会根据纹理名称和数组中的索引为纹理数据创建地形层。但是,如果你想用自定义的文件名覆盖这些名称,你可以在"层名称覆盖(Layer Name Override)"中输入你想要使用的名称。请注意,你需要保证这些名称的唯一性 - 如果你将每一层都命名为“grass”,或者在同一个MicroSplatData目录中有多个数组,它们的层名称都是“grass”,那么MicroSplat只会为它们创建一个层。

纹理设置

请添加图片描述

  • 对于每种数组类型,都有可用的纹理设置,你可以为每种纹理数组类型设置纹理设置,以控制最终的输出格式。比如,你可以选择使用哪种纹理压缩格式、纹理的分辨率等。
  • Unity的工具和API经常使用分配给地形的源纹理。默认情况下,MicroSplat会保留这些纹理,但是提供了一个“Texture Size”属性,允许你自动降低这些纹理的分辨率。这可以在构建过程中节省大量的内存。
  • 请注意,不同的压缩质量会映射到不同的压缩格式。例如,在PC/Mac上,高质量的压缩映射到BC7格式,而中等和低质量的映射到DXT5。当使用ATSC压缩时,设置映射到4x4、6x6和8x8的块大小。当使用PVR压缩时,低质量的映射到每块2位,而其他设置使用4位。

着色器生成器

要快速访问着色器设置,选择Terrain并双击MicroSplatTerrain组件上的‘template material’属性的材质球将打开控制面板。

请添加图片描述

在着色器的用户界面顶部,有一个MicroSplat当前可用模块的列表。点击其中一个模块,将会跳转到资产商店,你可以在那里购买模块。一旦你下载并安装了模块(就像任何其他Unity Asset Store资产一样),新的功能将在着色器用户界面的着色器生成(特性标签)部分变得可用。

请添加图片描述

在着色器生成器部分更改任何选项都会导致着色器重新编译并包含新的代码。当你添加扩展模块时,这个部分可用的选项数量将大幅增加,每个模块下都列出了它提供的选项。核心可用的选项包括:

  • Shader Type:只有当你有新的着色器类型的模块时,比如Mesh Workflow或Mesh Terrain模块,这个选项才会显示。你通常不需要手动编辑这些,因为你通常会使用这些着色器类型的设置系统。
  • PBR Workflow:这个选项允许你在金属(metallic)和镜面(specular)工作流之间选择。注意,你将需要在这个工作流中设置你的纹理数组,并为额外的纹理数组分配适当的数组到材质中。
  • Max Textures:这个控制着色器在地形上支持的纹理数量。默认为16,但你应该使用尽可能低的值,这个值应该大于你在地形上使用的纹理数量。
  • Branch Sampling:当启用时,着色器将使用动态流控制来减少每个像素采取的样本数量。这可以在开启了像纹理聚类(Texture Clustering)、随机采样(Stochastic Sampling)、三面投影(Triplanar)或距离重采样(Distance Resampling)等功能时,大大提高性能。通常,你可以将此设置为aggressive以获得最佳性能并不用去管它。
  • UV Mode:默认情况下,纹理映射将使用地形的UVs,但当你将这个设置为WorldSpace时,它将使用世界空间投影对splat map UVs进行映射,这在你希望多个地形看起来完美无缝,即使UVs缩放奇怪时,也会很有用。
  • Emissive/Metal Array:允许你使用一个额外的纹理数组,其中包含了每像素的自发光和金属贴图打包在一起。你可以在TextureArrayConfig中启用这个数组的创建,并在启用这个选项后分配结果数组。
  • Per Pixel Normal:在Unity 2018.3中,Unity为地形添加了像素法线支持。这使用一个法线贴图来存储地形的法线,并在每个像素处采样它,而不是在GPU上每个顶点计算它。这样做的主要优点是更好看的法线,这些法线不受顶点数量变化的影响。然而,Unity只在开启GPU实例化绘制时支持这个选项,在BuildIn管线中此选项与曲面细分不兼容,而且在旧版本的Unity中没有每像素法线。在2018.3中,当GPU实例化启用时,像素法线是自动的,但在Unity的旧版本中或者当GPU实例化未使用时,你可以打开这个选项来启用它。一旦启用,MicroSplatTerrain组件中就有一个烘焙法线贴图的选项,每当地形拓扑改变时,都必须更新它。
  • Texture Blend Mode
    • Height Blended:在这种模式下,高度图被用来在纹理之间进行混合,插值对比度控制混合的软硬程度。
    • Unity Linear:像Unity地形一样进行混合,非常模糊。
    • Hybrid Height Linear:基于距离在高度混合和标准化线性混合之间进行混合。这让你在远处得到柔和的混合,但在近处得到紧密的高度映射混合。
    • Normalized Linear:像Unity地形一样进行混合,但确保权重总和为一,以防止过度增亮。
Linear BlendHeight Map Blend
请添加图片描述请添加图片描述
请添加图片描述请添加图片描述

请注意,当你远离纹理时,线性混合会混合颜色,给你在纹理之间提供柔和的混合。然而,当你靠近纹理时,它就变得模糊不清。你会注意到,高度图混合在远处失去了柔和的颜色混合,这是因为在高度图混合中,会有Min Map。但是,当你靠近纹理时,沙子出现在岩石之间,看起来比线性混合要好得多。

"混合高度线性混合模式(Hybrid Height Linear blend)"结合了"高度图混合(Height Blended)"和"线性混合(Unity Linear)"的优点。在这种模式下,根据你指定的距离,高度图混合会逐渐过渡到线性混合。这样,无论是在远处还是近处,你都可以得到理想的混合效果。

  • Normal Mode
    • Disabled:这将禁用法线贴图的采样,对于不需要法线的非PBR材质非常有用。请注意,如果你处于最快的打包(fastest packing)模式,平滑度和AO也将被禁用。此外,Splat Mapping之外的模块可能仍然提供法线。
    • AutoNormal:这种模式是一种不使用Splat Mapping的法线贴图的模式。在这种模式下,法线是从高度贴图计算出来的,而高度贴图是打包到漫反射中的。这种模式不需要额外的采样。当你靠近表面时,可能会有一些人工痕迹,但是除此之外,它看起来令人惊讶地好。在低端平台上,它可以节省大量的带宽。
    • Regular:这种模式是默认的,使用传统的法线贴图进行法线映射。
    • Surface Gradient:在这种模式下,使用新的表面梯度框架代替传统的法线贴图。表面梯度允许在某些情况下更好地混合法线贴图,特别是当在彼此之上叠加多个法线贴图时,例如使用noise normaldetail/distance noise。它还会改变Triplanar模式下纹理的映射,因为在Fast模式下使用轴翻转来修复法线方向。请注意,在MicroSplat的大多数法线混合情况下,结果是相同的或非常相似的。
    • Control UV Noise:这允许你使用少量的噪声来扭曲Splat Map查找的UV坐标。这可以隐藏Splat Map的低分辨率,可以作为一种基于噪声的过渡而不是基于高度的过渡(当不使用高度混合时),并在绘制的地图中提供额外的变化
  • Control UV Noise 这个功能允许你使用少量的噪声来扭曲Splat Map查找的UV坐标。这可以改善Splat Map的低分辨率(通过使用一定量的噪声扭曲UV坐标,可以在视觉上改善Splat Map的低分辨率问题),当不使用高度混合时,可以作为一种基于噪声的过渡方式,而不是基于高度的过渡方式,并且可以在绘制的地图中提供额外的变化。

Advanced Settings

高级设置(Advanced Settings)一般情况下作者不建议新手随意修改。这里的设置可能会导致混合问题,光照问题,甚至需要你以不同的方式打包你的纹理。这些设置都有它们的用处,若非你需要解决某个具体的问题,否则应该保持它们的默认设置。

请添加图片描述

  • Packing Mode:这个设置允许你在两种纹理打包模式之间进行选择。具体信息请参见下面的部分。
  • Blend Quality:这个设置控制了每个地形像素上混合的纹理数量。虽然许多地形着色器会采样每个像素可能使用的所有纹理,但MicroSplat只采样2到4个。当设置为“最快(Fastest)”时,只有权重最大的两个纹理会被采样,但混合质量会降低,可能会出现伪影痕迹。在“平衡(Balanced)”设置下,会采样3个纹理。在“最佳质量(Best Quality)”设置下,会采样前4个纹理。这可能会在纹理之间产生不良的混合效果,适用于远距离的地形和其他可以接受的边缘情况。
  • Lighting Model-仅适用于BIRP/URP:这个设置允许你覆盖Unity的默认BDRF(镜面反射)函数。
    • Built in Render Pipeline, BIRP,Unity通常使用基于GGX的BDRF,这在侧视角度下可能看起来过于闪亮。有两种方法可以消除这种情况,第一种是“StandardShaderNoSheen”光照模型,第二种是开启“Disable Minimum Dielectric”。其他BDRF函数的附加模式也可用,如lambert着色,但请注意,这些设置会强制你的地形在运行延迟渲染时作为前向渲染对象进行渲染。如果设置为Lambert,着色器将使用Unity4的传统Lambert光照系统进行编译。请注意,这不是一种基于物理的渲染(PBR)着色器。在这种模式下,粗糙度纹理中的数据将映射到光泽值,环境遮蔽将用于镜面功率。
    • 对于URP,SimpleLit模型是可用的。
  • Shader Model:默认情况下,MicroSplat会为你的着色器选择版本最低的着色器模型。如果启用了Tessellation,那么着色器模型为3.5或4.6。然而,你可以使用这个控制项将着色器模型覆盖为4.6或5.0。
  • Sampler Mode:这个设置允许你强制使用LOD或Gradient采样模式来采样纹理。一些功能,如Branch Sampling或Per Texture UVs,需要将采样模式强制设置为LOD或Gradient。请注意,LOD采样模式是最快的,但会破坏三线性和各向异性过滤。Gradient采样通常与默认性能相似,通常是你想要的。
  • 使用自定义Splat maps:当启用此选项时,可以在MicroSplatTerrain组件上提供splat maps,而不是使用Unity Terrain系统提供的splat maps。如果你想通过程序生成或修改纹理选择,并且想避免使用标准Unity Terrain更新时的基础地图生成的卡顿,这将非常有用。请注意,所有splat maps的权重必须归一化(总和为1)。
  • Debug:调试部分让你可以查看着色器的各种数据,比如每个像素执行的采样数量,着色器的单个数据(如平滑度或法线贴图)看起来如何,等等。

Shader Properties

在设置(Settings)标签下,你会找到着色器的属性。

请添加图片描述

这是主要的splat映射参数。纹理数组配置(Texture Array Config)将我们的完整PBR纹理集输出到仅有的2个纹理数组中,你可以在这里看到它们被分配的位置。如果启用了Emissive/Metal数组选项,那么会显示第三个纹理数组,用于emissive/metal数组。

  • Interpolation Contrast 这个设置控制了当在地形上绘制时纹理之间的混合。纹理的混合效果会非常接近Unity默认的地形。也就是说,不同的纹理会平滑地过渡,没有明显的边界。当它为1时,两个纹理之间的混合会非常锐利,几乎没有过渡,就像是被切割开了一样。这种混合效果是基于高度图的。

  • Global UV Scale/Offset 这些设置允许你控制纹理在地形上的平铺度以及偏移量。

Debug

请添加图片描述

着色器UI调试部分会向你展示关于你的着色器的性能信息。虽然这些数字有些近似,但是它们可以被用来了解你启用的每个特性的相对消耗。

Per Texture Properties

请添加图片描述

材质UI的Per-Texture选项卡允许你控制着色器中每个纹理的各种参数。这使你可以给每个纹理设定自己的UV缩放和偏移,调整颜色,或者调整PBR参数,比如表面的光滑度或金属感。额外的模块会为它们的各种特性添加额外的每个纹理属性,所有的属性都有工具提示,如果你将鼠标悬停在它们上方,会解释它们的作用。

每个属性部分旁边都有一个复选框。当取消勾选会重新编译着色器,并移除该代码,确保着色器尽可能的优化。一旦启用,你可以使用“index”滑块来选择一个纹理并调整属性。如果你想要把所有纹理设置为相同的值,你可以按下“All”按钮,你当前的设置将会应用到所有的地形纹理上。

这些特性中的许多应该是不言自明的,然而有些是需要解释的。

MicroShadows
这是基于《神秘海域》演讲中描述的微阴影系统(micro shadow system),根据AO(Ambient Occlusion,环境光遮蔽)在纹理中产生内阴影效果。

Fuzzy Shading
Fuzzy Shading是一种在Unreal引擎中常用的技术,用于便宜地模拟苔藓和天鹅绒的光照。当启用时,视角会被用来使纹理变暗或变亮,衰减函数则用于控制这个效果。

Curve Weights
Curve Weights改变了纹理的权重分布,使得在双线性插值的splat map数据之间形成一条曲线。在0.5时,你会得到正常的混合效果,但在0.01时,你会得到一条非常紧密的线,这条线会遵循类似于样条线的边界在你的纹理之间过渡。在模拟高尔夫球场时,你可能注意到球场的草地通常会有从短草到长草的过渡。这种过渡效果可以通过调整 “Curve weights” 来实现,使得短草和长草之间的纹理过渡更加自然或者运用在道路模拟。由于在点之间创建了一条曲线(曲线是连续的),所以这看起来比splat map(splat map是离散的)的分辨率要高很多。

Outlines
Outlines让你在纹理之间的混合区域创建一种颜色(描边)。每种纹理都可以有它自己的颜色,alpha 值越大,色彩调整的效果越强烈;alpha 值越小,色彩调整的效果越弱。当 alpha 值为 0.5 时,色彩调整的效果会消失,也就是说纹理的颜色不会被改变。

请添加图片描述
当 “Curve weights” 设置为 0.01 时,草地区域会变得非常平滑,就像一条整洁的小径或高尔夫球场一样。这是因为在这个设置下,纹理之间的过渡会变得非常紧密,几乎形成了一条明显的分界线,使得草地看起来非常整齐。这种效果在创建自然环境或模拟真实世界的场景时非常有用。

MicroSplatTerrain Component

请添加图片描述

每个 Terrain 上的组件都有一个指向模板材质的引用。你可以通过双击这个材质快速进入材质设置。当多个 terrains 一起设置时,所有的 terrains 都会使用一个单一的模板材质,而 MicroSplat 负责将模板材质的更改同步到 terrain 内部使用的实际材质。如果你通过脚本更改了模板材质的设置,你可以调用 MicroSplatTerrain.SyncAll() 来执行相同的同步。同步按钮是暴露的,但你真的不应该使用它们,除非你更改了 terrain 使用的模板材质。

安装了其他的模块可能会在这个组件上多出额外的控制选项。

请添加图片描述

我们提供了几种不同的工具供您选择使用:

Render Baking
Render Baking 可以用来从地形中烘焙出各种贴图,比如整体的反照率(albedo)、法线(normal)或者其他PBR值。

Weight Limiting
MicroSplat的一个主要优化是控制每个像素从地形纹理中采样的纹理集数量。这个数量可以通过混合质量(Blend Quality)设置从2(最快)到4(最好)。在大多数工作流中,单个像素使用的纹理很少超过几种,但是有些外部工具会输出使用了超过这个数量的纹理的splat贴图。Weight Limiting工具会调整你的splat贴图,使得只有最主要的贴图被用在任何给定的像素上,防止这类问题。它也可以和更快的混合质量选项一起使用,以减少由于这种优化而导致的错误。

Splat Import/Export
这些工具可以用来从Unity地形中导入或导出splat贴图。当导入splat贴图时,纹理会被调整到地形数据的大小。此外,它只会为分配了纹理的通道导入splat数据。

Debug
在正常操作中,你应该不需要查看这个部分,但偶尔会有用户解除了MicroSplat生成和管理的各种数据的链接,所以这些引用在这里被暴露出来。这些包括PropData对象,MicroSplat在其中存储了关于每个纹理属性值的信息,以及keywords对象,MicroSplat在其中存储了你想要编译进你的着色器的特性的数据。

Packing Modes

Packing Modes
在纹理数组配置(Texture Array Config)和着色器编辑器中,有Packing Mode的选项。这让你可以在两种纹理数据的打包格式中选择,权衡的是速度和质量。在默认(fastest)模式下,纹理数据被打包进两个纹理数组;一个用于漫反射(Diffuse)和高度数据,另一个用于法线(Normal)、光滑度(Smoothness)和环境光遮蔽(AO)数据。当使用“quality”设置时,法线贴图被放入单独的贴图组,光滑度/ao数据被放入另一个贴图组。

当使用纹理压缩(texture compression)时,相比更紧凑的打包模式可以提高法线、光滑度和环境光遮蔽(AO)贴图的质量。它可以减少纹理数据的存储空间。在这个过程中,RGB值(红、绿、蓝颜色通道)被视为一个可以压缩的单元。这种压缩方法利用了我们的视觉系统对颜色的感知方式,以实现更有效的压缩。如果一个像素的所有三个颜色通道(R、G、B)都包含数据,那么在压缩过程中可能会产生更多的压缩伪影。相比之下,如果只在G通道(绿色通道)中放入数据,那么压缩伪影会减少。另外,Alpha通道(透明度通道)通常是单独进行压缩的。这个问题的重要性真的取决于你使用的纹理类型,但在大多数情况下,质量差异相对较小,最好是运行在fastest 模式下。

请添加图片描述

请注意,着色器和纹理数组配置(Texture Array Config)中的打包模式必须与着色器中的匹配。一旦设置好,纹理数组配置将会输出纹理数组到MicroSplatData目录,后缀名为 _normal 和 _smoothAO 数组,而不是传统的 _normalSAO 一个。

请添加图片描述

这些必须被分配到着色器的splat部分下的材质中,对应的纹理数组插槽。请注意,这里显示的警告是因为编辑器发现了分配给法线贴图的数组上的_NormalSAO扩展。这个纹理数组仍然将光滑度和AO设置打包在法线中,没有提高质量。在这种情况下,需要分配_normal数组,而_smoothAO数组需要分配到它下面的插槽。

Additional Modules

你可以下载额外的模块来扩展MicroSplat的功能集。一旦从资产商店下载并安装,新的选项将出现在着色器生成器部分。所有模块的文档都包含在这个包中,以防你对工作流程有任何疑问。这种独特的模块的模式让你只需为你的游戏需要的功能付费,而不是购买一个大而昂贵的包。

Global Properties

你可能经常想从一个外部控制系统,比如Enviro这样的天气管理器,来控制MicroSplat的各个方面。当一个属性旁边有一个“G”按钮时,你可以切换它由全局着色器属性驱动。当这些被启用时,G会变成黄色,该属性将不再可编辑。

请添加图片描述

你可以通过代码全局设置这些值,使用Shader.SetGlobal函数,比如:

Shader.SetGlobalVector("_Global_WetnessParams", new Vector2(minWetness, maxWetness));

以下是所有可能的全局值的列表:

属性类型描述
_Global_WetnessParamsVector2场景中的最小和最大湿度。期望的值是0到1。
_Global_PuddleParamsfloat场景中的最大水坑数量。期望的值是0到1。
_Global_StreamMaxfloat溪流的最大高度。期望的值是0到1。
_Global_RainIntensityfloat雨滴的强度。期望的值是0到1。
_Global_SnowLevelfloat总的雪量。期望的值是0到1。
_Global_SnowMinMaxHeightVector2场景中雪的开始和结束高度,单位是米。
_Global_WindParticulateRotationfloat风粒子流动的方向,单位是弧度。运行时不应该进行动画。
_Global_WindParticulateStrengthfloat风粒子效果的强度。期望的值是0到1。
_Global_SnowParticulateStrengthfloat雪粒子效果的强度。期望的值是0到1。

Vegetation Studio Integration

当你安装了Vegetation Studio(一种植被生成工具)后,会有一些额外的选项可以使用。其中的“Vegetation Studio Grass Mask”就是其中之一。这个选项可以用来在地形纹理中添加植被,特别是在实际绘制植被不可行的远距离处。换句话说,即使在你无法在地形上真实地绘制出植被的地方,也可以通过使用这个“Grass Mask”选项,在地形纹理上添加出植被的效果。

"Vegetation Studio Shadow Map"可以启用来为远处的树添加光线投射阴影。这允许树木和其他远超过Unity阴影边界的物体仍然能够在地形上投射出随着太阳位置和角度正确移动和拉长的阴影。

最后,MicroSplat可以渲染出一个色彩映射,这允许你的植被的底部使用适当的着色器向地形纹理着色。

请参阅Vegetation Studio文档以获取这些功能的更多信息。

Working with Multiple Terrains

首先,确保你的所有地形都有一个单独的名字。MicroSplat使用地形的名字作为前缀来生成每个地形所需的各种资源,所以如果多个地形有相同的名字,它们会互相覆盖。

当你处理多个地形时,你可以通过选择所有地形并进行转换,将所有地形设置为一个“系统”。这将为所有地形的数据创建一个MicroSplatData目录,所有地形都使用一个共享的材质、着色器和每个纹理属性对象。需要生成额外纹理或数据的模块将基于地形名字创建这些,并将它们放在同一个目录中。

如果你希望有多个地形,但它们的设置不共享,建议将Unity创建的每个TerrainData资产放入它自己的文件夹,并一次设置一个。这将生成每个地形自己的MicroSplatData目录,有自己的着色器、材质和每个纹理属性数据对象。

请注意,你应该避免在MicroSplatData目录中重命名东西,因为这可能在对象需要找到彼此时引起各种问题,通常会导致MicroSplat从头开始重新生成它需要的数据,或者可能找到错误的数据。还要注意,像全局贴图这样的纹理可以在每个地形的MicroSplatTerrain对象上被覆盖,所以你可以有一个被多个地形使用的MicroSplat系统,但每个地形可以有它的全局贴图。

Origin Shift

MicroSplat支持原点偏移以支持大世界。你可以在着色器生成部分的高级部分中启用这个功能。一旦启用,你需要在你的原点偏移代码中设置全局矩阵:

Shader.SetGlobalMatrix("_GlobalOriginMTX", mtx);

您可能还需要使用WorldSpace UV模式对地形进行纹理处理。


下一篇 : MicroSplat插件文档翻译【一】: Texture Cluster

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值