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 水系统的基本使用需求。
如果您有任何特定的问题或需要更深入的讨论,请随时提出。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++之STL-String

目录 一、STL简介 1.1 什么是STL 1.2 STL的版本 1.3 STL的六大组件 ​编辑 1.4 STL的重要性 二、String类 2.1 Sting类的简介 2.2 string之构造函数 2.3 string类对象的容量操作 2.3.1 size() 2.3.2 length() 2.3.3 capacity() 2.3.4 empty() 2.3.5 clear() 2.3.6…

【IDEA】在IntelliJ IDEA中导入Eclipse项目:详细指南

IntelliJ IDEA和Eclipse是两款常用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;在软件开发中经常会遇到需要在它们之间迁移项目的情况。本文将重点介绍如何在IntelliJ IDEA中导入Eclipse项目&#xff0c;以帮助开发者顺利地迁移他们的项目&#xff0c;并在IntelliJ …

echarts 堆叠柱状图 顶部添加合计

堆叠有3个&#xff0c;后面加了一个对象显示顶部的数据&#xff0c; 其实主要的代码还是在series 的第四项&#xff0c;需要注意的是 series的第四项中的data需要为 data: [0, 0, 0] 顶部的统计才能显示出来 增加的代码如下 {name: 综合,type: bar,stack: total,label: {sh…

【Java框架】SpringMVC(三)——异常处理,拦截器,文件上传,SSM整合

目录 异常处理解释局部异常处理全局异常 拦截器拦截器介绍作用:拦截器和过滤器之间的区别拦截器执行流程代码实现补充 文件上传依赖配置MultipartResolver编写文件上传表单页APIMultipartFileFile.separator必须对上传文件进行重命名代码示例 SpringMVC文件上传流程多文件上传 …

AWS制作WordPress在国内外的利弊?

AWS作为全球领先的云计算服务供应商&#xff0c;为WordPress提供了强大且灵活的托管环境&#xff0c;使用AWS来搭建和运行WordPress无疑是个不错的选择。即便如此使用AWS制作还是会有些许利弊&#xff0c;九河云作为AWS的合作伙伴来为读者们仔细探讨AWS在WordPress的利弊。 利&…

学python的第十九天

网络通信和访问数据库 1.1 基本的网络知识 TCP/IP IP是低级的路由协议&#xff0c;它将数据拆分在许多小的数据包中&#xff0c;并通过网络将他们发送到某一特定地址&#xff0c;但无法保证所有包都抵达目的地&#xff0c;也不能保证包按顺序抵达 TCP&#xff08;传输控制协议…

深度学习系列65:数字人openHeygen详解

1. 主流程分析 从inference.py函数进入&#xff0c;主要流程包括&#xff1a; 1&#xff09; 使用cv2获取视频中所有帧的列表&#xff0c;如下&#xff1a; 2&#xff09;定义Croper。核心代码为69行&#xff1a;full_frames_RGB, crop, quad croper.crop(full_frames_RGB)。…

Android MVVM架构 + Retrofit完成网络请求

关于Retrofit&#xff0c;这个应该不是一个很新颖的东西了&#xff0c;简单过一下吧 1.由Square公司开发&#xff0c;基于Type-safe的REST客户端。 2.使用注解来定义API接口&#xff0c;使得HTTP请求变得简洁且易于维护。 3.支持同步和异步请求&#xff0c;可与RxJava、Corouti…

【安卓13】解决带GMS编译报super分区空间不足错误

1、错误信息 2、解决方案 不同供应商修改分区大小的文件路径不一样&#xff0c;但是万变不离其宗&#xff0c;根据报错信息全局搜索关键词BOARD_SUPER_PARTITION_SIZE 这里以RK供应商和AML供应商修改为例&#xff1a; &#xff08;1&#xff09;RK改法&#xff1a; 根目录下…

全光谱灯对人体的危害?谨记全光谱灯选购要避开的四大套路

全光谱灯对人体的危害有多大&#xff1f;近年来网上关于护眼台灯对视力有害的言论有很多&#xff0c;引发了很多人空前的关注&#xff0c;事实上这未必是一件坏事&#xff0c;因为随着护眼台灯的热度持续上涨&#xff0c;市面上浑水摸鱼的行为增多了不少&#xff0c;有着不少劣…

STM32H7使用FileX库BUG,SD卡挂载失败

问题描述&#xff1a; 使用STM32H7ThreadXFileX&#xff0c;之前使用swissbit牌的存储卡可正常使用&#xff0c;最近项目用了金士顿的存储卡&#xff0c;发现无法挂载文件系统。 原因分析&#xff1a; 调试过程发现&#xff0c;关闭D-Cache可以挂载使用exfat文件系统。 File…

一文看够,植物线粒体基因组分析套路

线粒体堪称生命活动的“能量供给站”&#xff0c;植物线粒体是线粒体基因组研究中难度最高的&#xff0c;其基因组大小差异较大&#xff0c;100kb-10Mb&#xff0c;大部分由非编码DNA序列组成&#xff0c;且有许多同源序列&#xff0c;占基因组总长的2%-60%&#xff0c;基因间区…

制作github.io学术个人主页

制作如图的学术个人主页。About me - Xianwen Ling’s Blog 学术个人主页是一个学者展示个人学术成果和研究方向的重要工具。个人主页可以集中展示学者的研究论文、出版物、演讲和发布的项目等学术成果&#xff0c;这样其他人可以更方便地了解和评估学者的研究贡献。个人主页可…

Maven 安装及配置教程(Windows)【安装】

文章目录 一、 下载1. 官网下载2. 其它渠道 二、 安装三、 配置四、 验证五、 本地仓储配置六、 配置镜像七、 配置JDK八、完整配置九、常用命令十、IDEA 中配置 Maven1. 配置当前项目2. 配置新建 / 新打开 项目 软件 / 环境安装及配置目录 一、 下载 1. 官网下载 安装地址&a…

书生·浦语大模型第二期实战营第七节-OpenCompass 大模型评测实战 笔记和作业

来源&#xff1a; 视频教程&#xff1a;https://www.bilibili.com/video/BV1Pm41127jU/?spm_id_from333.788&vd_sourcef4a51f7f5a63e756f73ad0dff318c1a3 文字教程&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md 作业来源&#x…

【Hadoop】- MapReduce YARN 初体验[9]

目录 提交MapReduce程序至YARN运行 1、提交wordcount示例程序 1.1、先准备words.txt文件上传到hdfs&#xff0c;文件内容如下&#xff1a; 1.2、在hdfs中创建两个文件夹&#xff0c;分别为/input、/output 1.3、将创建好的words.txt文件上传到hdfs中/input 1.4、提交MapR…

HotSpot JVM 中的应用程序/动态类数据共享

0.前言 本文的目的是详细讨论 HotSpot JVM 自 JDK 1.5 以来提供的一项功能&#xff0c;该功能可以减少启动时间&#xff0c;但如果在多个 JVM 之间共享相同的类数据共享 (CDS) 存档&#xff0c;则还可以减少内存占用。 1.类数据共享 (CDS) CDS 的想法是使用特定格式将预处理…

状态模式和策略模式对比

状态模式和策略模式都是行为型设计模式&#xff0c;它们的主要目标都是将变化的行为封装起来&#xff0c;使得程序更加灵活和可维护。之所以将状态模式和策略模式进行比较&#xff0c;主要是因为两个设计模式的类图相似度较高。但是&#xff0c;从状态模式和策略模式的应用场景…

Pulsar Meetup 深圳 2024 会务介绍

“ Hi&#xff0c;各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar Meetup 深圳 2024 报名倒计时啦&#xff0c;快来报名。这里汇集了腾讯、华为和谙流科技等大量 Pulsar 大咖&#xff0c;干货多多&#xff0c;礼品多多&#xff0c;不容错过啊。 ” 活动介绍 由 AscentStream 谙…

Python 0基础_变现_38岁_day 16(文件操作)

在python&#xff0c;使用内置函数open()进行文件的一些读写操作 文件操作格式&#xff1a;open(文件路径&#xff0c;访问模式&#xff0c;字符编码) 前面两个参数是必备参数&#xff0c;后面的字符编码为选填&#xff0c;但是大多数情况下都会协商字符编码 访问模式 r 只读 w…