Unity HDRP Water Surface 水系统 基础教程

Unity HDRP Water Surface 水系统 基础教程

  • Unity Water Surface
    • Unity 项目创建
    • Unity Water Surface:Ocean(海洋)简介
      • Ocean:Transform、General
      • Ocean:Simulation(仿真模拟)
        • Ocean:Simulation:Time Multiplier、Water Mask
        • Ocean:Simulation:Swell(海浪)
        • Ocean:Simulation:Ripples(涟漪)
        • Ocean:Simulation:Foam(泡沫)
      • Ocean:Appearance(外观)
        • Ocean:Appearance:Custom Material(自定义材质)
        • Ocean:Appearance:Smoothness(平滑)
        • Ocean:Appearance:Refraction(折射)
        • Ocean:Appearance:Scattering(散射)
        • Ocean:Appearance:Caustics(焦散线)
        • Ocean:Appearance:Under Water(水下)
      • Ocean:Miscellaneous(杂项)
    • Unity Water Surface:Pool(泳池)简介
      • Pool:Transform、General
      • Pool:Simulation(仿真模拟)
        • Pool:Simulation:Time Multiplier、Water Mask、Foam
        • Pool:Simulation:Ripples(涟漪)
      • Pool:Appearance(外观)
        • Pool:Appearance:Custom Material(自定义材质)
        • Pool:Appearance:Smoothness(平滑)
        • Pool:Appearance:Refraction(折射)
        • Pool:Appearance:Scattering(散射)
        • Ocean:Appearance:Caustics(焦散线)
        • Ocean:Appearance:Under Water(水下)
      • Pool:Appearance:Miscellaneous(杂项)
    • Unity Water Surface:River(溪流)简介
      • River:Transform、General
      • River:Simulation(仿真模拟)
        • River:Simulation:Time Multiplier、Water Mask
        • River:Simulation:Agitation(扰动)
        • River:Simulation:Ripples(涟漪)
        • River:Simulation:Foam(泡沫)
      • River:Appearance(外观)
        • River:Appearance:Custom Material(自定义材质)
        • River:Appearance:Smoothness(平滑)
        • River:Appearance:Refraction(折射)
        • River:Appearance:Scattering(散射)
        • River:Appearance:Caustics(焦散线)
        • River:Appearance:Under Water(水下)
          • River:Appearance:Under Water 碰撞创建
      • River:Miscellaneous(杂项)
    • Ocean(海洋)效果
      • Ocean(海洋)效果 水面
      • Ocean(海洋)效果 水下
    • Pool(水池)效果
      • Pool(水池)效果 水面
      • Pool(水池)效果 水下
    • River(溪流)效果
      • River(溪流) 效果 水面
      • River(溪流)效果 水下
    • Unity Water Surface 水面漂浮
      • Unity Water Surface 水面漂浮 单个对象
      • Unity Water Surface 水面漂浮 单个对象 搭载效果
      • Unity Water Surface 水面漂浮 多个对象
      • Unity Water Surface 水面漂浮 单个对象 搭载效果

在本篇博客中,我们将了解 Unity HDRP 水系统简单应用以及组件介绍。

Water Surface 提供了现成的、基于物理的水着色器,它根据 HDRP 最新推出的光照模型设计,还可用 Shader Graph 进行定制,能调整水面的平缓度、折射、吸收、漫射和光散射等属性。

散射色的作用类似于水的基础色,所以可以从这里开始设置水的整体观感。然后可以修改吸收距离和折射色,控制水的透明度以及物体经水折射出的颜色。

如果是清澈的海洋,吸收距离可以更大,散射与折射色可以是青色;如果是污浊的河流,可能要用深褐色的散射色及更小的吸收距离来形成一条几乎不透明的河流。

2022.2 版本的水体渲染存在着一些限制,部分在 2023.1 版本已经得到解决(比如穿过体积云看到后方的水体、更精确的水际线),2023.2 版本将有更好的性能,并支持渲染与水体重叠的透明表面。

Unity Water Surface

Unity 项目创建

1. 新建一个 Unity HDRP 项目,建议使用 Unity 2022.3或者 Unity6 以上版本

请添加图片描述

2. 点击 嵌入配置可编辑包 按钮。当前也可以直接关闭

请添加图片描述

3. 选择 Edit->Project Settings->Qualty->HDRP->Rendering->Water
4. 把Enable(使用)和Script Interactions(脚本交互) 勾选上

请添加图片描述

5. 在 Hierarchy 窗口 右键 Water Surface(水面)->Ocean Sea or Lake(海洋、大海或湖泊)

请添加图片描述

6. 选中 Sky and Fog Volume,点击Add Override 添加 Water Rendering(水体渲染)组件

请添加图片描述

7. 点击 ALL 打开所有效果,更改 State状态为 Enable(激活)状态

请添加图片描述

设置好后效果

请添加图片描述

这个是我简单调节后的效果

请添加图片描述

Unity Water Surface:Ocean(海洋)简介

Ocean:Transform、General

Transform:和其他的没什么 区别,就是Position.Y 控制海洋的高度
General:
	Surface Type:三种类型Ocean(海洋)、Pool(泳池)、River(溪流)
	
	Geometry Type:Quad(平面)、Custom Mesh(自定义网格),Infinite(无限)
	
	Script Interactions:脚本交互
		启用后,HDRP将评估c#脚本高度请求在CPU上的水模拟。启用此功能将显著增加该特性的CPU成本。
		
	Full Resolution:全分辨率
		指定应在全分辨率还是半分辨率下评估CPU模拟。在全分辨率下,视觉保真度会更高
		但仿真成本会增加。
		
	Evaluate Ripples:涟漪评估
		当启用时,HDRP在评估脚本交互的水模拟时复制CPU侧的波纹。包括涟漪将允许更高
		的视觉保真度,但模拟的成本将增加。

请添加图片描述

Ocean:Simulation(仿真模拟)

Ocean:Simulation:Time Multiplier、Water Mask
Time Multiplier:水模拟速度
	设置水模拟的速度。这允许减缓或加速波浪的速度。

Water Mask:水遮罩
	以波浪(红色通道)和波纹(绿色通道)的频率显示。

请添加图片描述

Ocean:Simulation:Swell(海浪)
Repetition Size:重复的尺寸
	以米为单位控制水片的大小。较大的值导致水面上的重复可见性较低。
	该参数还影响膨胀频带的最大振幅。
	
Distant Wind Speed:远风速
	控制在一段时间内吹过水面的以千米/小时为单位的远处风的速度。
	这间接地以非线性的方式控制了浪涌的最大振幅和形状。
	
Distant Wind Orientation:远风方向
	相对于世界 X 向量,以逆时针方向设置远处风的方向。此参数仅影响 Chaos 值小于1的膨胀。

Chaos:混乱
	控制涌浪的方向。该值越低,涌浪在远风方向上的传播越多。
	
Current:当前的
	设置涌流的电流属性。这个水流以恒定的速度在给定的方向上使涌浪移动1米
	
First Band:第一个海浪
	Amplitude Dimmer:振幅衰减器
		控制浪涌第一频带上幅度的衰减。
	Max Amplitude:最大振幅
		显示该频带的当前最大幅度。
		
Second Band:第一个海浪(就是在第一个海浪基础添加的浪波)
	Amplitude Dimmer:振幅衰减器
		控制浪涌第二频带上幅度的衰减。
	Max Amplitude:最大振幅
		显示该频带的当前最大幅度。
		
Total Amplitude:总振幅
	显示当前膨胀的最大振幅。这是第一频段和第二频段的和。

请添加图片描述

Ocean:Simulation:Ripples(涟漪)
Local Wind Speed:本地风速
	控制当前风速,以千米每小时为单位,吹过水面。间接地以非线性的方式控制波纹的最大振幅和形状。

Local Wind Orientation:局部风向
	指定本地风向是继承自涌浪的远风向还是独立设置。相对于 X 世界向量,以逆时针方向
	设置本地风的方向。此参数仅影响 Chaos 值小于1的波纹。
	有一个 Custom 自定义的选项,可以根据自己的需求调节。

Chaos:混乱
	控制波纹的方向。该值越低,波纹在局地风向中传播的越多。

请添加图片描述

Ocean:Simulation:Foam(泡沫)
Simulation Foam Amount:模拟泡沫量
	控制模拟泡沫量。较高的值产生较大的泡沫斑块。泡沫的存在高度依赖于远处的风速。
	
Simulation Foam Smoothness:模拟泡沫平滑度
	控制模拟泡沫的平滑度。
	
Texture Tiling:泡沫纹理采样
	控制模拟泡沫的平滑度。
	
Custom Texture:自定义结构
	设置用于定义泡沫视觉外观的纹理。
	
Mask:遮罩
	设置用于衰减或抑制模拟泡沫的纹理。纹理的红色通道用于遮罩。
	
Wind Speed Dimmer:风速调光器
	控制泡沫强度取决于标准化的远风速。X 轴表示归一化的远风速度,Y 轴表示调光器值。
	就是 Y 轴 越高 泡沫显示的越亮。

请添加图片描述

Ocean:Appearance(外观)

Ocean:Appearance:Custom Material(自定义材质)
Custom Material:自定义材质
	设置用于渲染水面的自定义材质。如果设置为None,则使用默认材质。(最好不设置不然不好调参)

请添加图片描述

Ocean:Appearance:Smoothness(平滑)
Close:关闭
	当水比平滑度淡出起始值更接近时,控制水的平滑度。
	
	Distant:遥远的
		当水比平滑度淡出起始值加上淡出距离值更远时,控制水的平滑度。
		
Fade Range;褪色范围
	指定平滑度从近到远插值的范围。

请添加图片描述

Ocean:Appearance:Refraction(折射)
Color:颜色
	设置用于模拟水下折射的颜色。

Maximum Distance:最大距离
	控制用于限制水下折射深度的最大距离(以米为单位),值越高,增加的扭曲量越大。
	
Absorption Distance:吸收的距离
	控制相机能够通过水面感知的大致距离(以米为单位)。
	这个距离可能会因物体接收到的光线强度而有很大差异。	

请添加图片描述

Ocean:Appearance:Scattering(散射)
Color:颜色
	设置用于模拟水下折射的颜色。

Ambient Term:环境项
	控制环境散射项的强度。这可以根据艺术目的进行调整。
	
Height Term:高度项
	控制基于高度的散射强度。垂直位移越大,水受到的散射越多。这可以根据艺术目的进行调整。
	
Displacement Term:位移项
	控制基于位移的散射强度。水平位移越大,水受到的散射越多。这可以根据艺术目的进行调整
	
Direct Light Tip Term:直射光顶部
	控制直接光散射在波的尖端的强度。这种效应在掠射角度下更明显。
	
Direct Light Body Term:直射光主体
	控制直接光散射在波体上的强度,在掠角时效果更明显。

请添加图片描述

Ocean:Appearance:Caustics(焦散线)
Caustics Resolution:焦散线分辨率
	指定渲染水焦散的分辨率(仅用于模拟)。
	
Simulation Band:模拟波段评估
	控制哪个模拟波段用于焦散度评估。第一个波段(指数O)和第二个波段(指数1)来自
	膨胀模拟,第三个波段(指数2)来自波纹模拟。
	
Virtual Plane Distance:虚平面距离
	设置模拟焦散投影的距离。高值会产生更尖锐的焦散,但会产生伪影。波浪越大,得到
	尖锐焦散的平面距离就越远。

请添加图片描述

Ocean:Appearance:Under Water(水下)
Volume Depth:深度
	设置对无限曲面评估水下效应的最大深度。
	
Volume Prority:渲染排序
	设置一个优先级值,用于定义在多个重叠表面的情况下,哪个表面应该被考虑用于水下渲染。
	
Transition Size:过渡的大小
	设置到水面的垂直距离,在水面上和水下开始混合。
	
Absorbtion Distance Multiplier:吸收距离乘数
	当相机在水下时,设置吸收距离的倍增器。值为2.0意味着你在水下看到的距离是原来的两倍。

请添加图片描述

Ocean:Miscellaneous(杂项)

Decal Layer Mask:贴花图层蒙版
	指定影响水面的贴花层。
	
Light layer Mask:光层掩模
	指定影响水面的光层。

请添加图片描述

Unity Water Surface:Pool(泳池)简介

Pool:Transform、General

Transform:和其他的没什么 区别,就是Position.Y 控制海洋的高度
General:
	Surface Type:三种类型Ocean(海洋)、Pool(泳池)、River(溪流)
	
	Geometry Type:Quad(平面)、Custom Mesh(自定义网格)
	
	Script Interactions:脚本交互
		启用后,HDRP将评估c#脚本高度请求在CPU上的水模拟。启用此功能将显著增加该特性的CPU成本。
		
	Full Resolution:全分辨率
		指定应在全分辨率还是半分辨率下评估CPU模拟。在全分辨率下,视觉保真度会更高
		但仿真成本会增加。
		
	Evaluate Ripples:涟漪评估
		当启用时,HDRP在评估脚本交互的水模拟时复制CPU侧的波纹。包括涟漪将允许更高
		的视觉保真度,但模拟的成本将增加。

请添加图片描述

Pool:Simulation(仿真模拟)

Pool:Simulation:Time Multiplier、Water Mask、Foam
Time Multiplier:水模拟速度
	设置水模拟的速度。这允许减缓或加速波浪的速度。

Water Mask:水遮罩
	以波浪(红色通道)和波纹(绿色通道)的频率显示。

Foam:泡沫
	泡沫渲染目前不支持泳池。

请添加图片描述

Pool:Simulation:Ripples(涟漪)
Local Wind Speed:本地风速
	控制当前风速,以千米每小时为单位,吹过水面。间接地以非线性的方式控制波纹的最大振幅和形状。

Local Wind Orientation:局部风向
	指定本地风向是继承自涌浪的远风向还是独立设置。相对于 X 世界向量,以逆时针方向
	设置本地风的方向。此参数仅影响 Chaos 值小于1的波纹。
	有一个 Custom 自定义的选项,可以根据自己的需求调节。

Chaos:混乱
	控制波纹的方向。该值越低,波纹在局地风向中传播的越多。

Current:当前的
	使激流在给定的方向上以恒定的速度转换激流

请添加图片描述

Pool:Appearance(外观)

Pool:Appearance:Custom Material(自定义材质)
Custom Material:自定义材质
	设置用于渲染水面的自定义材质。如果设置为None,则使用默认材质。(最好不设置不然不好调参)

请添加图片描述

Pool:Appearance:Smoothness(平滑)
Close:关闭
	当水比平滑度淡出起始值更接近时,控制水的平滑度。
	
	Distant:遥远的
		当水比平滑度淡出起始值加上淡出距离值更远时,控制水的平滑度。
		
Fade Range;褪色范围
	指定平滑度从近到远插值的范围。

请添加图片描述

Pool:Appearance:Refraction(折射)
Color:颜色
	设置用于模拟水下折射的颜色。

Maximum Distance:最大距离
	控制用于限制水下折射深度的最大距离(以米为单位),值越高,增加的扭曲量越大。
	
Absorption Distance:吸收的距离
	控制相机能够通过水面感知的大致距离(以米为单位)。
	这个距离可能会因物体接收到的光线强度而有很大差异。	

请添加图片描述

Pool:Appearance:Scattering(散射)
Color:颜色
	设置用于模拟水下折射的颜色。

Ambient Term:环境项
	控制环境散射项的强度。这可以根据艺术目的进行调整。
	
Height Term:高度项
	控制基于高度的散射强度。垂直位移越大,水受到的散射越多。这可以根据艺术目的进行调整。
	
Displacement Term:位移项
	控制基于位移的散射强度。水平位移越大,水受到的散射越多。这可以根据艺术目的进行调整。
	
Direct Light Tip Term:直射光顶部
	控制直接光散射在波的尖端的强度。这种效应在掠射角度下更明显。
	
Direct Light Body Term:直射光主体
	控制直接光散射在波体上的强度,在掠角时效果更明显。

请添加图片描述

Ocean:Appearance:Caustics(焦散线)
Caustics Resolution:焦散线分辨率
	指定渲染水焦散的分辨率(仅用于模拟)。
	
Simulation Band:模拟波段评估
	控制哪个模拟波段用于焦散度评估。第一个波段(指数O)和第二个波段(指数1)来自膨胀模拟
	第三个波段(指数2)来自波纹模拟。
	
Virtual Plane Distance:虚平面距离
	设置模拟焦散投影的距离。高值会产生更尖锐的焦散,但会产生伪影。波浪越大
	得到尖锐焦散的平面距离就越远。

请添加图片描述

Ocean:Appearance:Under Water(水下)
Volume Bounds:界限
	设置一个盒子碰撞器,用于定义在无限表面上应用水下效果的体积。
	
Volume Prority:渲染排序
	设置一个优先级值,用于定义在多个重叠表面的情况下,哪个表面应该被考虑用于水下渲染。
	
Transition Size:过渡的大小
	设置到水面的垂直距离,在水面上和水下开始混合。
	
Absorbtion Distance Multiplier:吸收距离乘数
	当相机在水下时,设置吸收距离的倍增器。值为2.0意味着你在水下看到的距离是原来的两倍。

请添加图片描述

Pool:Appearance:Miscellaneous(杂项)

Decal Layer Mask:贴花图层蒙版
	指定影响水面的贴花层。
	
Light layer Mask:光层掩模
	指定影响水面的光层。

请添加图片描述

Unity Water Surface:River(溪流)简介

River:Transform、General

Transform:和其他的没什么 区别,就是Position.Y 控制海洋的高度
General:
	Surface Type:三种类型Ocean(海洋)、Pool(泳池)、River(溪流)
	
	Geometry Type:Quad(平面)、Custom Mesh(自定义网格)
	
	Script Interactions:脚本交互
		启用后,HDRP将评估c#脚本高度请求在CPU上的水模拟。启用此功能将显著增加该特性的CPU成本。
		
	Full Resolution:全分辨率
		指定应在全分辨率还是半分辨率下评估CPU模拟。在全分辨率下,视觉保真度会更高
		但仿真成本会增加。
		
	Evaluate Ripples:涟漪评估
		当启用时,HDRP在评估脚本交互的水模拟时复制CPU侧的波纹。包括涟漪将允许更高
		的视觉保真度,但模拟的成本将增加。

请添加图片描述

River:Simulation(仿真模拟)

River:Simulation:Time Multiplier、Water Mask
Time Multiplier:水模拟速度
	设置水模拟的速度。这允许减缓或加速波浪的速度。

Water Mask:水遮罩
	以波浪(红色通道)和波纹(绿色通道)的频率显示。

请添加图片描述

River:Simulation:Agitation(扰动)
Repetition Size:重复的尺寸
	以米为单位控制水片的大小。较大的值导致水面上的重复可见性较低。该参数还影响
	膨胀频率的最大振幅。
	
Distant Wind Speed:远风速
	控制在一段时间内吹过水面的以千米/小时为单位的远处风的速度。
	这间接地以非线性的方式控制了浪涌的最大振幅和形状。
	
Distant Wind Orientation:远风方向
	相对于世界 X 向量,以逆时针方向设置远处风的方向。此参数仅影响 Chaos 值小于1的膨胀。

Chaos:混乱
	控制涌浪的方向。该值越低,涌浪在远风方向上的传播越多。
	
Current:当前的
	设置涌流的电流属性。这个水流以恒定的速度在给定的方向上使涌浪移动1米
	
Amplitude Dimmer:振幅衰减器
	控制振幅在波浪频带的衰减。
	
Total Amplitude:总振幅
	显示当前膨胀的最大振幅。这是第一频段和第二频段的和。

请添加图片描述

River:Simulation:Ripples(涟漪)
Local Wind Speed:本地风速
	控制当前风速,以千米每小时为单位,吹过水面。间接地以非线性的方式控制波纹的最大振幅和形状。

Local Wind Orientation:局部风向
	指定本地风向是继承自涌浪的远风向还是独立设置。相对于 X 世界向量,以逆时针方向
	设置本地风的方向。此参数仅影响 Chaos 值小于1的波纹。
	有一个 Custom 自定义的选项,可以根据自己的需求调节。

Chaos:混乱
	控制波纹的方向。该值越低,波纹在局地风向中传播的越多。

Current:当前
	指定“当前方向”是从搅动的“当前方向”继承还是独立设置
		Agitation:扰动
			就是默认自动计算的起伏。
		Custom:自定义
			根据给定的 X Y 向量进行扰动。

请添加图片描述

River:Simulation:Foam(泡沫)
Simulation Foam Amount:模拟泡沫量
	控制模拟泡沫量。较高的值产生较大的泡沫斑块。泡沫的存在高度依赖于远处的风速。
	
Simulation Foam Smoothness:模拟泡沫平滑度
	控制模拟泡沫的平滑度。
	
Texture Tiling:泡沫纹理采样
	控制模拟泡沫的平滑度。
	
Custom Texture:自定义结构
	设置用于定义泡沫视觉外观的纹理。
	
Mask:遮罩
	设置用于衰减或抑制模拟泡沫的纹理。纹理的红色通道用于遮罩。
	
Wind Speed Dimmer:风速调光器
	控制泡沫强度取决于标准化的远风速。X 轴表示归一化的远风速度,Y 轴表示调光器值。
	就是 Y 轴 越高 泡沫显示的越亮。

请添加图片描述

River:Appearance(外观)

River:Appearance:Custom Material(自定义材质)
Custom Material:自定义材质
	设置用于渲染水面的自定义材质。如果设置为None,则使用默认材质。(最好不设置不然不好调参)

请添加图片描述

River:Appearance:Smoothness(平滑)
Close:关闭
	当水比平滑度淡出起始值更接近时,控制水的平滑度。
	
	Distant:遥远的
		当水比平滑度淡出起始值加上淡出距离值更远时,控制水的平滑度。
		
Fade Range;褪色范围
	指定平滑度从近到远插值的范围。

请添加图片描述

River:Appearance:Refraction(折射)
Color:颜色
	设置用于模拟水下折射的颜色。

Maximum Distance:最大距离
	控制用于限制水下折射深度的最大距离(以米为单位),值越高,增加的扭曲量越大。
	
Absorption Distance:吸收的距离
	控制相机能够通过水面感知的大致距离(以米为单位)。
	这个距离可能会因物体接收到的光线强度而有很大差异。	

请添加图片描述

River:Appearance:Scattering(散射)
Color:颜色
	设置用于模拟水下折射的颜色。

Ambient Term:环境项
	控制环境散射项的强度。这可以根据艺术目的进行调整。
	
Height Term:高度项
	控制基于高度的散射强度。垂直位移越大,水受到的散射越多。这可以根据艺术目的进行调整。
	
Displacement Term:位移项
	控制基于位移的散射强度。水平位移越大,水受到的散射越多。这可以根据艺术目的进行调整
	
Direct Light Tip Term:直射光顶部
	控制直接光散射在波的尖端的强度。这种效应在掠射角度下更明显。
	
Direct Light Body Term:直射光主体
	控制直接光散射在波体上的强度,在掠角时效果更明显。

请添加图片描述

River:Appearance:Caustics(焦散线)
Caustics Resolution:焦散线分辨率
	指定渲染水焦散的分辨率(仅用于模拟)。
	
Simulation Band:模拟波段评估
	控制哪个模拟波段用于焦散度评估。第一个波段(指数O)和第二个波段(指数1)来自
	膨胀模拟,第三个波段(指数2)来自波纹模拟。
	
Virtual Plane Distance:虚平面距离
	设置模拟焦散投影的距离。高值会产生更尖锐的焦散,但会产生伪影。波浪越大,
	得到尖锐焦散的平面距离就越远。

请添加图片描述

River:Appearance:Under Water(水下)
Volume Bounds:界限
	设置一个盒子碰撞器,用于定义在无限表面上应用水下效果的体积。
	
Volume Prority:渲染排序
	设置一个优先级值,用于定义在多个重叠表面的情况下,哪个表面应该被考虑用于水下渲染。
	
Transition Size:过渡的大小
	设置到水面的垂直距离,在水面上和水下开始混合。
	
Absorbtion Distance Multiplier:吸收距离乘数
	当相机在水下时,设置吸收距离的倍增器。值为2.0意味着你在水下看到的距离是原来的两倍。

请添加图片描述

River:Appearance:Under Water 碰撞创建
如果没有设置碰撞,水面将不支持水下场景。
点击 Fix 创建碰撞

请添加图片描述

生成并添加一个 Box 碰撞

请添加图片描述

River:Miscellaneous(杂项)

Decal Layer Mask:贴花图层蒙版
	指定影响水面的贴花层。
	
Light layer Mask:光层掩模
	指定影响水面的光层。

请添加图片描述

Ocean(海洋)效果

Ocean(海洋)效果 水面

请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

Ocean(海洋)效果 水下

请添加图片描述

请添加图片描述

Pool(水池)效果

Pool(水池)效果 水面

请添加图片描述

Pool(水池)效果 水下

请添加图片描述

River(溪流)效果

River(溪流) 效果 水面

请添加图片描述

River(溪流)效果 水下

请添加图片描述

Unity Water Surface 水面漂浮

Unity Water Surface 水面漂浮 单个对象

完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering.HighDefinition;
/// <summary>
/// 水面漂浮
/// </summary>
public class SurfaceFloating_ZH : MonoBehaviour
{
    [Header("水系统物体")]
    public WaterSurface _TargetSurface = null;

    // 内部搜索参数
    WaterSearchParameters _SearchParameters = new WaterSearchParameters();
    //搜索结果
    WaterSearchResult _SearchResult = new WaterSearchResult();

    void Update()
    {
        //水系统物体是否存在
        if (_TargetSurface != null)
        {
            // 构建搜索参数
            //搜索开始的位置。可以作为搜索算法的提示。
            _SearchParameters.startPosition = _SearchResult.candidateLocation;
            //搜索需要计算高度的目标位置。
            _SearchParameters.targetPosition = gameObject.transform.position;
            //算法应停止的目标误差值。
            _SearchParameters.error = 0.01f;
            //搜索算法的迭代次数。
            _SearchParameters.maxIterations = 8;

            // 进行搜索
            //计算给定位置的水面高度的函数
            //一个布尔值,用于定义函数是否能够执行求值
            if (_TargetSurface.FindWaterSurfaceHeight(_SearchParameters, out _SearchResult))
            {
                gameObject.transform.position = new Vector3(gameObject.transform.position.x, _SearchResult.height, gameObject.transform.position.z);
                Debug.Log(_SearchResult.height);
            }
            else
            {
                Debug.LogError("找不到高度值。");
            }
        }
    }
}
脚本搭载

请添加图片描述

Unity Water Surface 水面漂浮 单个对象 搭载效果

请添加图片描述

请添加图片描述

请添加图片描述

Unity Water Surface 水面漂浮 多个对象

完整代码
using System.Collections.Generic;
using Unity.Collections;
using Unity.Jobs;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.Rendering.HighDefinition;

/// <summary>
/// 水面漂浮 多个
/// </summary>
public class SurfaceFloatingArray_ZH : MonoBehaviour
{
    [Header("生成数量")]
    public Vector2 _Resolution = new Vector2(50, 50);

    [Header("水系统物体")]
    public WaterSurface _WaterSurface = null;

    //生成物体数组
    List<GameObject> _CubeList = new List<GameObject>();

    //输入作业参数
    NativeArray<float3> _TargetPositionBuffer;

    //高度集
    NativeArray<float> _HeightBuffer;

    //水平误差集
    NativeArray<float> _ErrorBuffer;

    //高度值的位置集
    NativeArray<float3> _CandidatePositionBuffer;

    //迭代缓冲器
    NativeArray<int> _StepCountBuffer;


    void Start()
    {
        // 分配缓冲区
        _TargetPositionBuffer = new NativeArray<float3>((int)(_Resolution.x * _Resolution.y), Allocator.Persistent);
        _HeightBuffer = new NativeArray<float>((int)(_Resolution.x * _Resolution.y), Allocator.Persistent);
        _ErrorBuffer = new NativeArray<float>((int)(_Resolution.x * _Resolution.y), Allocator.Persistent);
        _CandidatePositionBuffer = new NativeArray<float3>((int)(_Resolution.x * _Resolution.y), Allocator.Persistent);
        _StepCountBuffer = new NativeArray<int>((int)(_Resolution.x * _Resolution.y), Allocator.Persistent);

        //物体生成
        for (int y = 0; y < _Resolution.y; ++y)
        {
            for (int x = 0; x < _Resolution.x; ++x)
            {
                GameObject _NewCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
                _NewCube.transform.parent = this.transform;
                _NewCube.transform.localPosition = new Vector3(x * 5, 0.0f, y * 5);
                _CubeList.Add(_NewCube);
            }
        }
    }


    void Update()
    {
        //水系统物体是否存在
        if (_WaterSurface == null)
        {
            return;
        }

        // 如果有的话,尝试获取模拟数据
        WaterSimSearchData _SimData = new WaterSimSearchData();
        if (!_WaterSurface.FillWaterSearchData(ref _SimData))
        {
            return;
        }

        // 填充输入位置
        int _NumElements = (int)(_Resolution.x * _Resolution.y);
        for (int i = 0; i < _NumElements; ++i)
        {
            _TargetPositionBuffer[i] = _CubeList[i].transform.position;
        }

        //水面模拟搜索
        WaterSimulationSearchJob _SearchJob = new WaterSimulationSearchJob();

        // 分配模拟数据
        _SearchJob.simSearchData = _SimData;

        // 填写输入数据
        //搜索需要计算高度的目标位置
        _SearchJob.targetPositionBuffer = _TargetPositionBuffer;

        //搜索开始的位置  可以作为搜索算法的提示
        _SearchJob.startPositionBuffer = _TargetPositionBuffer;

        //搜索算法的迭代次数
        _SearchJob.maxIterations = 8;

        //算法应停止的目标误差值
        _SearchJob.error = 0.01f;

        //输出本机数组  其中包含为每个目标位置计算的高度集
        _SearchJob.heightBuffer = _HeightBuffer;

        //输出保存每个目标位置的水平误差集的本机数组
        _SearchJob.errorBuffer = _ErrorBuffer;

        //输出本机数组 其中包含用于生成高度值的位置集
        _SearchJob.candidateLocationBuffer = _CandidatePositionBuffer;

        //输出本机数组,其中包含为查找高度而执行的一组步骤。
        _SearchJob.stepCountBuffer = _StepCountBuffer;

        // 调度作业时,对结果数组中的每个索引执行一次 Execute,并且每个处理批处理只有1个项
        JobHandle _Handle = _SearchJob.Schedule(_NumElements, 1);
        _Handle.Complete();

        // 填充输入位置
        for (int i = 0; i < _NumElements; ++i)
        {
            _CubeList[i].transform.position = new Vector3(_CubeList[i].transform.position.x, _HeightBuffer[i], _CubeList[i].transform.position.z);
        }
    }

    /// <summary>
    /// 关闭执行
    /// </summary>
    private void OnDestroy()
    {
        _TargetPositionBuffer.Dispose();
        _HeightBuffer.Dispose();
        _ErrorBuffer.Dispose();
        _CandidatePositionBuffer.Dispose();
        _StepCountBuffer.Dispose();
    }
}
脚本搭载

请添加图片描述

Unity Water Surface 水面漂浮 单个对象 搭载效果

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

希望这些信息能够进一步满足您对Unity HDRP 中 Water Surface 水系统的基本使用需求。
如果您有任何特定的问题或需要更深入的讨论,请随时提出。

路漫漫其修远兮,与君共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/561949.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pnpm - Failed to resolve loader: cache-loader. You may need to install it.

起因 工作原因需要研究 vue-grid-layout 的源码&#xff0c;于是下载到本地。因为我习惯使用 pnpm&#xff0c;所以直接用 pnpm i 安装依赖&#xff0c;npm run serve 启动失败。折腾了一番没成功。 看到源码里有 yarn.lock&#xff0c;于是重新用 yarn install 安装依赖&…

多模态大语言模型综述

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

车控操作系统

车控操作系统 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看…

贪吃蛇游戏实现(VS编译环境)

贪吃蛇游戏 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C语言&#x1f353; &#x1f33c;文章目录&#x1f33c; 0. 前言 1. 游戏背景 2. 实现后游戏画面展示 3. 技术要求 4. Win32 API介绍 4.1 Win32 API 4.2 控制台程序 4.…

使用脚本启动和关闭微服务

使用脚本启动和关闭微服务 一、前言二、启动1、处理每个服务2、编写启动脚本3、其他启动脚本&#xff08;无效&#xff0c;有兴趣可以看看&#xff09;4、启动 三、关闭1、测试拿服务进程id的命令是否正确2、编写关闭脚本3、关闭 一、前言 假如在服务器中部署微服务不使用 doc…

【C++类和对象】const成员函数及流插入提取

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

地图图源#ESRI ArcGIS XYZ Tiles系列(TMS)

目录 1、前言 2、地图图源网址 2.1、Satellite 卫星图源 2.2、Terrain 地形图源 2.3、Street 路网/标注图源 2.4、Specifity 特色设计图源 3、专业推荐”穿搭“ 4、图源配置下载及使用 图源名称图层类别特别注意谷歌 Google①地形 ②影像 ③矢量及标注 ④特色图源国内大…

Nessus【部署 03】Docker部署漏洞扫描工具Nessus详细过程分享(下载+安装+注册+激活)文末福利

Docker部署漏洞扫描工具Nessus 1.安装2.配置2.1 添加用户2.2 获取Challenge code2.3 获取插件和许可证2.4 注册 3.使用4.进阶 整体流程&#xff1a; 1.安装 # 1.查询镜像 docker search nessus# 2.拉取镜像 docker pull tenableofficial/nessus# 3.启动镜像【挂载目录用于放置…

【Java框架】Spring框架(一)——Spring基本核心(IOC/DI)

目录 Java企业级框架企业级系统EJB概念解析EJB与Spring的恩怨情仇 Spring系统架构1. Data Access/Integration&#xff08;数据访问&#xff0f;集成&#xff09;2. Web 模块3. Core Container&#xff08;Spring 的核心容器&#xff09;4. AOP、Aspects、Instrumentation 和 M…

冰达ROS机器人快速使用指南

欢迎来到《冰达ROS机器人极简使用指南》 Q&#xff1a;这份教程适合谁&#xff1f; A&#xff1a;适合完全0基础新手&#xff0c;需要快速跑起来机器人的基本功能。也适合技术大佬需要快速的了解冰达ROS机器人的使用方法。 Q&#xff1a;这份教程内容很少&#xff0c;是不是…

迅雷下载不了的资源怎么下载?

我想下载Boost库&#xff0c;但是下载不下来 用迅雷下载是一直卡在0k 后来尝试在centos上用wget进行下载&#xff0c;竟然可以 wget https://boostorg.jfrog.io/artifactory/main/release/1.85.0/source/boost_1_85_0.tar.gz

信息打点--语言框架

指纹识别 后端 CMS:一般php开发居多源码程序&#xff0c;其他语言也存在&#xff0c;但不易识别&#xff08;利用源码程序名去搜漏洞情况&#xff0c;源码下载进行后期的代码审计&#xff09; 前端 js框架&#xff08;爬取更多的js从里面筛选URL或敏感泄露key&#xff09;等…

docker-compose 安装MongoDB续:创建用户及赋权

文章目录 1. 问题描述2. 分析2.1 admin2.2 config2.3 local 3. 如何连接3.解决 1. 问题描述 在这一篇使用docker-compose创建MongoDB环境的笔记里&#xff0c;我们创建了数据库&#xff0c;但是似乎没有办法使用如Robo 3T这样的工具去连接数据库。连接的时候会返回这样的错误&…

C++参考手册使用说明

C参考手册使用说明 文章目录 C参考手册使用说明1 为什么要使用C参考手册2 网站3 C参考手册离线格式4 C参考手册使用说明1.1 离线C参考手册下载1.2 html离线C参考手册1.3 chm离线C参考手册1.4 linux安装包C参考手册&#xff08;只有英文版本&#xff09;1.5 qch离线C参考手册 更…

2 逻辑斯蒂回归(分类)

目录 1 理论 逻辑回归假设数据服从伯努利分布&#xff08;二分类&#xff09;,通过极大化似然函数的方法&#xff0c;运用梯度下降来求解参数&#xff0c;来达到将数据二分类的目的。 逻辑斯蒂回归&#xff08;Logistic Regression&#xff09;是一种用于解决分类问题的…

MySQL下载与安装

文章目录 1&#xff1a;MySQL下载与安装2&#xff1a;配置环境变量3&#xff1a;验证是否安装成功 1&#xff1a;MySQL下载与安装 打开MySQL官网&#xff0c;MySQL 下载链接选择合适的版本和操作系统&#xff0c;页面跳转之后选择No thanks, just start my download.等待下载即…

seatable部署之后network error【seatable】

这里写自定义目录标题 问题汇总 问题汇总 seatable服务部署后&#xff0c;组件显示正常运行&#xff0c;创建表单&#xff0c;显示Network error 点击错误信息&#xff0c;查看其跳转至另一个页面

详解JVM类加载

从类被加载到虚拟机内存中开始&#xff0c;到释放内存总共有7个步骤&#xff1a;加载&#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff08;Resolution&#xff09;、初始化&#xff08;Ini…

Jenkins构建实用场景指南

1 总体说明 本文主要介绍在研发实战时,通过Jenkins解决企业级软件构建打包一些实用场景。通常是在打包构建前,通过命令和工具进行预处理,避免修改源码,可按需配置构建任务,自动持续集成。 2 Jenkins简介 2.1 复制任务 研发实战创建构建任务,推荐从已有的构建任务进行…

项目管理-项目成本管理

目录 一、成本管理概述 二、成本估算 2.1 定义 2.2 成本估算方法 2.2.1 自顶向下的估算 2.2.1.1 估算方法 2.2.1.2 优点 2.2.1.3 缺点 2.2.2 自底向上的估算 2.2.2.1 估算方法 2.2.2.2 优点 2.2.2.3 缺点 2.2.3 差别估算法 三、成本预算 3.1 定义 3.2 成本预算的…