【推荐100个unity插件】将您的场景渲染为美丽的冬季风景——Global Snow 2
文章目录
- 一、前言
- 二、插件下载安装
- 三、工作原理
- 四、设置(URP)
- 1、需求
- 2、配置
- 五、相机设置
- 六、演示场景
- 七、Global Snow 参数
- 1、Scene Setup场景设置
- 2、Quality Presets质量预设
- 3、Coverage
- 4、Appearance外观
- 5、Features特性
- 八、Terrain地形上的雪痕
- 九、配置人形角色在雪地上留下脚印
- 十、移动物体上的雪(角色、车辆等)
- 十一、遮罩编辑器
- 十二、Vehicle Physics Pro 集成
- 十三、在不同雪效果之间进行平滑过渡/插值切换
- 十四、常见问题解答 (FAQ)
- 1、如何排除某些物体不被覆盖雪?
- 2、某些物体(如浮台)上没有雪标记。它们只对地形有效。
- 3、我如何能在任何地方手动添加地形标记?
- 4、如何手动在任何地方添加脚印?
- 5、我可以自定义足迹形状吗?
- 6、我可以改变地形标记的大小吗?
- 7、我看到远处有地形标记,但没有任何东西应该引起这些标记。
- 8、我可以把“洞”添加到地形中吗?
- 9、我的 FPS 武器正在接收雪。我该如何排除它?
- 10、我如何才能通过编程知道任何位置是否有雪?
- 专栏推荐
- 完结
一、前言
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、我如何能在任何地方手动添加地形标记?
您可以使用此代码向被地形或几何体覆盖的任何数量的标记添加雪:
GlobalSnow snow = GlobalSnow.instance;
snow.MarkSnowAt(position, size);
其中,position 是一个世界空间坐标中的 Vector3,size 是一个介于 0 和 1 之间的值。
4、如何手动在任何地方添加脚印?
您可以使用此代码在任何位置添加脚印:
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,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!