【推荐100个unity插件】将您的场景渲染为美丽的冬季风景——Global Snow 2

文章目录

一、前言

Global Snow 是一款拖放式解决方案,只需几次点击即可将您的场景转换为冬季景观。只需将单个脚本添加到您的摄像机中,即可自定义效果。

Global Snow 的功能:

  • 逼真的雪景,具有浮雕阴影、遮挡和高光效果。
  • 自动雪覆盖,支持排除选项(按层、每个游戏对象、蒙版纹理)。
  • 足迹和脚步声。
  • 地形标记和地形碰撞检测器。
  • 降雪。
  • 相机结霜效果。

二、插件下载安装

资源商店地址:https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/global-snow-2-248191?locale=zh-CN

学习版:

链接:https://pan.baidu.com/s/11_gpN2OSMcYcq62t0EydnA?pwd=2akd

提取码: 2akd

三、工作原理

Global Snow for URP 需要延迟渲染。

该资源在创建 gbuffers 之后、延迟着色 pass 之前注入自定义 pass,并根据雪的设置修改反照率、法线、高光和漫反射/全局光照缓冲区。

四、设置(URP)

1、需求

URP 版本需要 Unity 2021.3。确保在 Project Settings->Quality 或 Project Settings->Graphics 中存在 URP 资源。

2、配置

要正确安装插件,您需要:

  • 在项目设置->质量中,双击渲染管线资源。它必须是 URP。

  • 在检查器中的渲染部分,双击渲染列表中的资源。

  • 在渲染->渲染路径中,将"Forward正向"改为"Deferred延迟"。

  • 点击下方添加渲染功能,并添加Global Snow Render Feature全局雪渲染功能。

五、相机设置

  • GlobalSnow 脚本添加到场景中的主摄像机上。

  • 如果需要,检查Quality preset场景设置参数,并选择一个质量预设。

  • 可选择启用footprints足迹、 terrain marks地形标记、snowfall 降雪或camera frost features摄像机结霜功能。

当然,您可以自定义其任何参数以匹配游戏氛围和需求。

六、演示场景

只需加载包含的演示场景并点击"播放"。

您将能够使用 WASD 和鼠标进行移动。按空格键跳跃,按 T 开启或关闭雪效果,或按 L 切换日光。

在将资源导入您的实际项目时,您应该完全删除 Demo 文件夹或忽略它。

七、Global Snow 参数

1、Scene Setup场景设置
  • Sun太阳:确保已分配一个适当的方向光作为太阳。计算是必要的阴影和高光效果。Global Snow 会自动为你选择一个方向光,但请确保这是合适的光源。
  • Show in Scene View在场景视图中显示:启用此选项可在场景视图中渲染雪效果。
  • Add Snow to Grass为草地添加雪:此选项将雪添加到用于地形的集成草地着色器中。停止和启动场景以刷新更改。
  • Snow Profile雪配置文件:允许您分配具有不同选项的自定义配置文件。
2、Quality Presets质量预设
  • Best Quality最佳质量:使用高分辨率覆盖纹理、浮雕阴影、遮挡和闪光效果。
  • Medium中等:使用较小分辨率的覆盖纹理、浮雕阴影、遮挡和闪光效果。它还启用了距离优化选项,默认值为 500 米。
  • Fastest最快:使用较小覆盖纹理和平面阴影(仍然看起来不错!)。它还启用了超过 100 米的距离优化。

请注意,这些预设仅将一些工厂值应用于其他设置。它们是为了方便起见,作为其他选项的快捷方式提供的。

3、Coverage

这里允许您自定义雪的渲染位置和方式:

  • Layer Mask图层蒙版 :确定哪些对象可以被"涂抹"上雪。默认情况下,所有透明对象都被排除,因为雪是在透明队列之前渲染的。
  • Default Exclusion Layer反射排除图层:这是渲染雪时使用的层的编号,用于已专门标记为被雪排除的对象。使用一个在项目中未使用的图层编号。
  • Exclusion Double Sided双面排除:想从雪中排除双面对象时启用此选项。
  • Zenithal Mask天顶蒙版 :确定哪些对象可以遮挡其下方的其他对象。默认情况下,任何对象都会取消其下方其他对象上的任何雪。请确保在此处排除任何粒子系统,以提高性能并减少覆盖问题。
  • Default Cut Off默认截止 :从对象中排除雪时使用的默认截止值。IgnoreCoverage脚本可用于特定对象,以指定每个对象的自定义临界值。
    • Use Fast Mask Shader使用快速遮罩着色器:默认情况下,Global Snow 使用快速遮罩着色器将雪排除在设计对象之外。但是,如果对象使用具有顶点动画的自定义着色器,则需要禁用此选项,以便使用对象的材质和着色器,这可能会慢一点,但更准确。
    • Default Exclusion Cut Off默认排除切割阈值:应用于被排除对象的切割阈值。如果排除半透明对象(例如,纹理中有孔洞或透明部分的对象),则很有用。
  • Minimum Altitude and Altitude Scatter最小高度和高度散布:指定雪的起始高度。使用高度散布使雪的外观更逼真。请注意,在最小高度以上,雪将始终出现。没有"最大高度"。比如默认值-10,雪只会在-10以上(可能有点偏差)高度才会出现,低于这个高度就没有雪,可以用于实现类似雪山的效果。
  • Coverage Extension覆盖范围扩展:值为 1 表示相机位置周围 256x256 米的区域。值为 2 表示 512x512 米的区域。此参数与覆盖质量共同决定雪覆盖的最终分辨率。
  • Coverage Quality覆盖质量:确定用于雪覆盖计算的内部纹理的大小。值为 1 使用 512x512 纹理,值为 2 使用 1024x1024 纹理,值为 3 使用 2048x2048 纹理。
  • Coverage Mask覆盖蒙版 :你可以使用纹理作为蒙版来指定世界中将被雪覆盖的区域。此功能假设地形围绕 0,0 位置中心。纹理的 alpha 通道将用于确定哪里可以下雪(1=下雪,0=不下雪)。
    世界大小参数指定了纹理在世界上的映射大小。例如,一个 2048x2048 像素的纹理,如果世界大小为 2048x2048,则其映射为每像素 1 米(Y 坐标被忽略)。
4、Appearance外观

允许您自定义雪的外观。

  • Snow Complexity雪的复杂度 :Flat Shading平面明暗处理是最快的,可以产生一个看起来很平的雪。Normal Mapping法线映射 。Relief Mapping地貌映射使用有限的光线追踪算法来模拟雪地上的3D波浪。
    • Occlusion遮挡:为雪添加额外的局部阴影。仅在采用Relief Mapping地貌映射时可用。当太阳高高挂在天空时,该选项非常有用,因为从天顶看,雪看起来非常明亮和白色,没有遮挡。
    • Glitter Strength闪烁强度:控制雪上闪烁的程度。当面向太阳时,闪烁往往会更亮。
  • Slope Options坡度选项:自定义雪覆盖区域的边界,可用于调整雪覆盖悬崖和山脉的外观。请注意,此功能仅在支持 DX11 和 OpenGLCore 的图形上工作。
  • Max Exposure最大曝光度:允许您限制雪反射的光量,以避免在太阳非常高或其光强度大于 1 时发生过度曝光。请注意,这是一个人为的更改,如果与其他未覆盖的几何体相比过度使用,可能会产生奇怪的结果。
5、Features特性

允许您解锁特殊的全球雪功能。

  • Footprints足迹:足迹是印在雪地上的人形脚印贴花。这个功能很有趣,可以帮助玩家走很远的距离,并能够返回相同的距离路径。

    • Duration持续时间:自定义足迹的淡出持续时间。
  • Terrain Marks地形标记:这个功能可以让你在雪地上造成小型或中型的冲击。

    • default size默认大小 :自动碰撞产生的标记的默认大小(以米为单位)。您可以调用MarkSnowAt()方法来指定自定义大小。
    • Extents范围:用于在地形上渲染标记的内部控制纹理的大小------增加它以获得更大的非重复标记区域。
    • View distance视距:允许你控制地形标记的渲染距离。最大地形标记渲染到相机的距离。减少以避免标记重复或增加延伸参数
    • FPS Marks`FPS 标记:当相机移动时添加自动terrain marks地形标记(仅在FPS相机中使用)。
  • Snowfall降雪 :启用此参数以实例化位于Resources/Prefabs 中的 SnowParticleSystem 预制体。该粒子系统将以 Intensity 速率发射雪花。你可以通过修改预制体本身来自定义雪粒子系统的外观和行为。

    • Use Illumination使用照明 :将粒子材质更改为受全局照明影响的 Standard Shader 材质。
  • Snow Dust雪尘 :类似于降雪,这个自定义粒子系统模拟了风对积雪地形的影响。启用此参数以实例化位于Resources/Prefabs 中的 SnowDustSystem 预制体,可以通过修改预制体本身来自定义其他选项,如重力或雪尘碰撞。。效果强度通过Snow Dust雪尘滑块和Vertical Offset垂直偏移(海拔与当前相机高度)进行调节。此外,降雪速度选项会影响尘埃系统的速度。

  • Camera Frost相机霜冻 :添加一个屏幕空间霜冻效果。可用于为玩家增添温度感。

八、Terrain地形上的雪痕

GlobalSnow 检测与地形的碰撞并处理雪痕。它通过在你的Terrain地形游戏对象上附加一个GlobalSnowCollisionDetector脚本来实现。

如果您有自定义地形对象或在运行时创建它们,或者您想要在其他类型的表面上创建雪标记,只需使用AddComponent<GlobalSnowCollisionDetector>()将碰撞检测器脚本添加到这些对象。

一旦发生碰撞,GlobalSnow 将在屏幕空间效果期间使用的特殊纹理上渲染标记。默认情况下,GlobalSnow 将使用 Global Snow 检视器中指定的设置:

您还可以针对每个对象自定义标记效果。将 GlobalSnowColliderExtraInfo 脚本添加到您的游戏对象上:

GlobalSnowColliderExtraInfo脚本的设置会覆盖来自Global Snow检查器的默认设置:

  • Mark Size标记大小:该物体每次撞击地面时雪标记的大小。
  • Collision Distance Threshold碰撞距离阈值:与上次撞击的最小距离,用于考虑在地面添加新的标记。
  • Is Footprint是否足迹:如果启用,当角色移动时,地面将只添加一个"印记"的标记,而不是一条连续的线。一个有脚的生物应该在每只脚上都有一个碰撞器并开启它,这样每只脚上都会留下一个足迹。而滚动物体、岩石或车辆应禁用此功能,以便它们在雪地上留下连续的痕迹。
  • Step Max Distance最大距离步长:轨迹段的最大距离。如果设置为0,将仅在碰撞点添加标记,并且不会计算新旧位置之间的插值。
  • Rotation Threshold旋转阈值:适用于轮子。这是考虑留下新标记所需的最小旋转角度。物体在地面上移动或旋转时会留下标记。
  • Ignore This Collider忽略此碰撞器:启用此选项可以忽略该碰撞器在雪地上造成的任何碰撞。

九、配置人形角色在雪地上留下脚印

通过在每个脚上放置一个碰撞体,并使用 Global Snow Collider Extra Info,当每个脚接触地面时就会留下雪痕。

十、移动物体上的雪(角色、车辆等)

Global Snow 与 g-buffers 一起工作,默认情况下它不会区分移动物体和静态物体。运动物体上的雪在某些物体上看起来可能很奇怪,因为雪会随着物体的运动而发生变化。为了避免这个问题,你有两个选择:

  • 步骤 1):排除运动物体上的雪。

    • 你可以通过将物体或预制体分配到 Global Snow 覆盖部分的排除层来实现。这样,物体就不会接收到 Global Snow 渲染在场景上的正常雪。
    • 另一种从 Global Snow 中排除游戏对象的方法是将 Global Snow Ignore Coverage 脚本添加到游戏对象本身(注意,在使用排除选项时,由于 CommandBuffers 的工作方式,结果在 SceneView 中可能不准确------始终在 GameView 中验证结果)。
  • 步骤 2) :使用一个雪自定义着色器。如果你想让运动物体显示一些雪,可以使用资产中包含的 GlobalSnow/Moving Object Snow/Opaque 着色器。这是一个基于 Standard 着色器的着色器,集成了雪的功能。这个着色器的优点是:在移动的游戏对象上渲染的雪不会在对象或角色移动时改变其形状,这会产生更逼真的效果。

    这个着色器包含一些外观选项,如上图所示,包括雪色调颜色、覆盖度(雪的量)、雪比例、散射等。尝试不同的设置,直到获得理想效果。

  • 步骤 3) :如果移动对象是车辆,并且你希望 Global Snow 在其轮子后留下雪痕,将 Global Snow Collider Extra Info 添加到车辆游戏对象的根节点。该脚本负责检查轮子与地面的接触点,并将这些碰撞信息报告给 Global Snow。

十一、遮罩编辑器

另一种在自定义区域移除/添加雪的方法是使用覆盖掩码:

覆盖掩码是一种特殊纹理,其 alpha 分量决定了雪的透明度。

在给定位置。纹理在世界空间中以"世界中心"为基准,覆盖范围为"世界大小"(因此大小为 2000 表示覆盖范围从-2000 到 2000)。

你可以提供自己的纹理蒙版,或使用集成的 SceneView 编辑器。此蒙版编辑器通过在检查器中提供的部分来启用:

遮罩编辑器允许你从零开始创建一个新的遮罩纹理。根据你需要的细节级别选择合适的分辨率。对于粗略结果,1024x1024 的纹理可能就足够了。如果你需要更精细的覆盖细节,可以使用更大的纹理(例如)。

2048, 4096 或甚至 8192 像素)。

笔刷模式、宽度、模糊度和不透明度控制着绘画工具的行为。当蒙版编辑器启用时,您可以直接在场景视图中删除或添加雪花!

点击"填充蒙版"将蒙版纹理重置为完全被雪覆盖。"清除蒙版"将清除覆盖区域的所有积雪。

请注意,如果你使用 Unity 标准树木或草地,你还需要编辑 GlobalSnowForwardOptions.cginc 或 GlobalSnowDeferredOptions.cginc 文件(取决于活动的相机渲染路径),并启用#define GLOBALSNOW_MASK 行。

十二、Vehicle Physics Pro 集成

Global Snow 可以与 Vehicle Physics Pro 等资源无缝配合,后者通过在地面上的轮式碰撞实现雪地轨迹效果,正如"移动对象"部分所述。

  • 步骤 1:确保您的车辆正确报告地面碰撞,方法是将"Global Snow Collider Extra Info"脚本添加到车辆预制件或游戏对象的根目录。此脚本用于检测轮式碰撞并向 Global Snow 报告。

  • 步骤 2 :由于车辆是移动对象,您需要将其排除在 Global Snow 覆盖范围之外(将其添加到排除层或向车辆根目录添加 Global Snow Ignore Coverage 脚本)。

    然后,使用 Global Snow/Moving Object Snow/Opaque 贴图到车辆的材质上,以在车辆部件上添加静态雪地覆盖。

十三、在不同雪效果之间进行平滑过渡/插值切换

所有global snow属性都是可动画的,但该资源还包括一个 Global Snow Lerp 脚本,它允许你快速在两组值之间进行插值。

只需创建一个游戏对象,并将"Global Snow Lerp"脚本添加到它上面(你也可以将此脚本添加到相机上):

主要设置如下:

  • Target Global Snow目标全局雪:这将在脚本启动时自动选择,但允许您分配不同的对象(如果在场景加载后实例化玩家相机时有用)。
  • Transition过渡:值从 0 到 1。值为 0 将使用配置文件 1 的设置,而值为 1 将使用配置文件 2 的设置。介于两者之间的任何值将混合配置文件 1 和 2 的值,产生平滑的效果过渡。
  • Left / Right Key左/右键:允许您指定在游戏模式中按下时将减少/增加过渡值的按键。
  • Profile1 and Profile2配置文件 1 和配置文件 2:全局雪的设置。

十四、常见问题解答 (FAQ)

1、如何排除某些物体不被覆盖雪?

这里有两种方法:

  • 1):将这些物体添加到自定义图层,并在 Global Snow 的 Layer Mask 参数(Coverage 部分)中排除该图层。
  • 2):或者直接将这些物体添加"GlobalSnowIgnoreCoverage"脚本(这样无需更改它们的图层)。

注意:在延迟渲染路径中,无法使用上述方法排除地形。请查看下一个问题以获取解决方案。

2、某些物体(如浮台)上没有雪标记。它们只对地形有效。

如果你希望在碰撞发生时支持地形标记,需要将GlobalSnowCollisionDetector 脚本添加到任何几何体(除地形外)。演示场景包含一些使用此方法允许在其上生成地形标记的几何体。

你也可以使用代码添加自定义地形标记,见下文。

3、我如何能在任何地方手动添加地形标记?

您可以使用此代码向被地形或几何体覆盖的任何数量的标记添加雪:

csharp 复制代码
GlobalSnow snow = GlobalSnow.instance;
snow.MarkSnowAt(position, size);

其中,position 是一个世界空间坐标中的 Vector3,size 是一个介于 0 和 1 之间的值。

4、如何手动在任何地方添加脚印?

您可以使用此代码在任何位置添加脚印:

csharp 复制代码
GlobalSnow snow = GlobalSnow.instance;
snow.FootprintAt(position, direction);
5、我可以自定义足迹形状吗?

是的,足迹功能使用位于 Resources/Textures 文件夹中的 Footprint 纹理。您可以自由使用其他纹理来制作足迹 。

或者,您可以使用地形标记功能来生成与足迹相似的标记,当您的 FPS 角色移动时(启用 FPS 标记选项)。

6、我可以改变地形标记的大小吗?

您可以使用 GlobalSnow 检视器指定默认标记大小,或者如果您使用 API,可以将 0 到 1 之间的值传递过去。您也可以将GlobalSnowColliderExtraInfo 脚本添加到任何对象上,并在该脚本中单独设置标记大小。

7、我看到远处有地形标记,但没有任何东西应该引起这些标记。

在 Global Snow 检查器的地形标记部分中,增加 Extents 参数或减少 View Distance 参数。

8、我可以把"洞"添加到地形中吗?

如果你使用支持洞形的自定义地形着色器,可以使用位于 GlobalSnow/Resources/Prefabs 文件夹中的"CircularHole"或"QuadHole"预制件来擦除洞口处的雪。

这些预制件只是普通的几何体,使用自定义材质"GlobalSnowEraser",并附加了"GlobalSnowIgnoreCoverage"脚本。你可以使用任何其他几何体,分配相同的材质和脚本,它将作为一个模板对象------雪不会出现在该几何图形后面。

9、我的 FPS 武器正在接收雪。我该如何排除它?

要排除雪中的物体,通常适用本手册中详细说明的排除选项。然而,由于 FPS 武器在近剪裁平面处非常靠近摄像机渲染,如果深度缓冲区中像素的位置非常小,我们只需排除任何雪覆盖即可。这个技巧只适用于延迟渲染路径。

编辑 GlobalSnowDeferredOptions.cginc 文件并取消注释 EXCLUDE_NEAR_SNOW 宏。保存更改并在您的场景中验证结果。如果武器仍然受到雪的影响,您可能需要增加 NEAR_DISTANCE_SNOW 的值。

10、我如何才能通过编程知道任何位置是否有雪?

使用 GetSnowAmountAt(worldPosition) 方法。如果该位置没有雪,该方法返回 0;如果有雪,则返回大于 0 的值。


专栏推荐

地址
【unity游戏开发入门到精通------C#篇】
【unity游戏开发入门到精通------unity通用篇】
【unity游戏开发入门到精通------unity3D篇】
【unity游戏开发入门到精通------unity2D篇】
【unity实战】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】
【unity游戏开发------模型篇】
【unity游戏开发------InputSystem】
【unity游戏开发------Animator动画】
【unity游戏开发------UGUI】
【unity游戏开发------联网篇】
【unity游戏开发------优化篇】
【unity游戏开发------shader篇】
【unity游戏开发------编辑器扩展】
【unity游戏开发------热更新】
【unity游戏开发------网络】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

相关推荐
nnsix5 分钟前
Unity OpenXR开发HTC Vive Cosmos
unity·游戏引擎
nnsix42 分钟前
Unity OpenXR,扳机键交互UI时,必须按下扳机才触发
unity·游戏引擎
nnsix1 小时前
Unity XR 编辑器VR设备模拟功能
unity·编辑器·xr
老朱佩琪!1 小时前
Unity访问者模式
unity·游戏引擎·访问者模式
不定时总结的那啥2 小时前
Unity实现点击Console消息自动选中预制体的方法
unity·游戏引擎
nnsix2 小时前
Unity OpenXR 关闭手柄的震动
unity·游戏引擎
CreasyChan2 小时前
Unity 中的反射使用详解
unity·c#·游戏引擎·游戏开发
Jessica巨人2 小时前
Shader显示为黑色
unity·shader
天途小编2 小时前
无人机操控模式解析:美国手、日本手、中国手
游戏引擎·无人机·cocos2d
90后小陈老师15 小时前
Unity教学 项目2 2D闯关游戏
游戏·unity·游戏引擎