Realistic Water 使用

 

  

一、设置无限水 

"MoveWaterToCamera" and for “current camera” set your main camera
or any object that you assigned to the camera. (Character, ship, etc.)

通过在空间上的投影,你可以用水来创造一个无限的海洋。波浪是在世界空间中计算出来的,所以你可以把水向各个方向移动。要创造一个无限的海洋,你需要设置相机。运动只发生在X轴和Z轴上。水的高度是恒定的。

二、设置浮力

对于浮力,你只需要加上"Buoyancy.cs"这个脚本,脚本可以加在任何对象上,浮力基于阿基米德原理,所以你需要选择正确的设置。

脚本参数: Density:  密度-物体的密度。如果你希望你的对象是浮动的,设置一个小于1000的值。例如,木材的密度大约是700。如果值大于1000,则对象将下沉。

Slices Per Axis​  更高的值,就代表更多的点与力。例如,对于一个简单的立方体,2个点就足够了。对于船舶/小艇,大致为8-16点。对于浮动原木4点足够。更多的点-更多的负荷,但它是更好的定位精度在空间。
 

 Is Concave   是否是凹的  当对象不凸时,需要调整浮点计算

Voxels Limit    一个物体的功率点极限

  体素(voxel),是体积元素(volumepixel)的简称,如同像素,体素本身并不含有空间中位置的数据(即它们的坐标),然而却可以从它们相对于其它体素的位置来推敲,意即它们在构成单一张体积影像的数据结构中的位置。

Wave Velocity  波速-沿x轴和z轴的速度矢量倍增器。数值越大,受波驱动的物体越多。同样,脚本与unity physx一起工作。所以你需要添加碰撞器和刚体。否则他们会添加自动。脚本对刚体质量起作用。默认质量为1公斤。

三、 设置动态波纹(带有扭曲的飞溅效果)

波纹计算在cpu上。(在另一个线程中优化),结果写进纹理里。这允许使用顶点着色器来改变海浪的高度和渲染焦散的波纹。

    在无限大海里计算涟漪(波纹)几乎是不可能的。所以计算发生在一个小的区域。在当前演示场景中使用了20米平面的波浪计算。还应该增加20米的碰撞器。

3.1 使用脚本“WaterRipples .cs”来创建动态波纹。

UpdateFPS -波纹计算时间的更新。

Multithreading   多线程-计算主线程或其他线程的波动。建议使用多线程(如果你有超过2个cpu内核),这允许你释放“主线”程计算!

Displacement Resolution:计算波纹纹理的分辨率。越高,细节越好,但负载也越高。将分辨率提高到2倍,负载增加4倍!如果分辨率改变,波的速度也会改变。所以你还需要改变“速度”设置。

Damping  :  在使用时间内波动振幅的衰减。

Speed:   速度-波传播的速度。

Use Smoth Waves:平滑尖锐的波浪(比如高斯模糊纹理)

Use Projected Waves:使用投射波;只有当你使用无限的海洋时,你才有必要使用投射波,当网格水移动到相机后面时,波纹相对于世界空间应该是静态的。

 注意:如果勾选了“使用投射波(Use Projected Waves)”,你应该使用剪切纹理CutOutTexture!

Cut out Texture剪切纹理:模糊计算区域的边界

WaterRipples .cs脚本里具有公共api方法来处理ripple:

(1)Vector3 GetOffsetByPosition(Vector3 position)

      允许你在世界空间获得波浪的位置(带有涟漪)

(2)void CreateRippleByposition(Vector3 position, floa velocity)

允许您在水中创建带有速度的点涟波(正或负)

例如,如果你想通过点击鼠标在水中激起涟漪

public class CreateRipple : MonoBehaviour
{
    public WaterRipples waterRipples;
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            var ray = Camera.main.ScreenPointToRay(Input. mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                Debug.LogError(hit.point);
                waterRipples.CreateRippleByPosition(hit.point, 0.3f);
            }
        }
    }
}

3.2  要简单地创建波纹,您可以使用脚本“RippleCreator.cs”。

例如,如果您想给对象创建一个简单的波纹。(一艘船,水中的一根木头,子弹射击,移动的人,等等)只需在你的对象上添加脚本和碰撞器,这会创建一个涟漪。

IsReversedRipple:当你需要翻转前面的涟漪时,使用的反转波纹。(例如从水里跳出来)。

MaxVelocity :最高高度限制。基于物体速度(oldPosition -currectPosition)计算的当前波高。如果物体移动得很快(像摩托艇),波浪会很大。

 RandomRipplesInterval随机波动区间:增加随机波纹波动,它允许您添加更多的不均匀性

Reversed Ripple Delay:逆转涟漪延迟,计算反相波之前延迟

SplashEffect  :当一个物体与水碰撞飞溅效果

SplashEffectMoved:移动对象的飞溅效果,如果你使用粒子系统,那么粒子的大小会随着速度的变化而变化。

SplashAudioSource:当物体与水碰撞时产生的声音效果

SplashSizeMultiplier:“SplashEffectMoved”粒子的尺寸倍增器

   

四、制作水下效果

    使用“Underwaterposteffec .cs”脚本制作水下效果

    

注意,脚本使用标准脚本和着色器“sun shaft”,所以,当使用水下效果时,确保你没有删除standart文件夹和编辑器文件夹,包括在水包water pack。

FogColor - 雾色-水下色。

FogDensity 雾密度-水下的颜色密度。

UseSunShafts  使用太阳轴允许添加晒水

SunShaftIntencity:太阳光线的亮度

SunShaftScreenBlendMode:改变混合模式

五、波焦散

   焦散(表面上的光线折射)是用着色器创建的,所以你可以很容易地调整焦散的大小/亮度/速度/密度和其他参数。它允许您添加现实的结果没有基于真实的波的昂贵的焦散计算。Caustic rendering使用投影仪在表面上绘制。所以如果你想改变面积的大小,你应该改变投射灯的设置。

Tint Color - caustic color 焦散线颜色

 Caustic Strength - 焦散线的亮度。此外,亮度也取决于方向的光强度。

Wet strength -湿强度-模拟湿砂。值1不湿。看值为0.8时的不同

Caustic Texture1 and Caustic Texture2:焦散纹理1和焦散纹理2需要生成最终的焦散纹理(第一个纹理用作第二个纹理的uv坐标)

Caustic Distortion Mask:噪声纹理用来模拟焦散失真。Distortion (失真)

FallOff - 焦散的褪色纹理的高度,其中alpha通道为焦散的不透明度。

WetTex- 根据高度对湿表面的淡出纹理。其中rgb是湿表面的颜色,alpha通道是不透明度。

Caustic Direction-移动焦散纹理的方向。x是左/右移动,y是上/下移动。对于第二个焦散纹理,'Z'是左移和'w上/下。

Distortion Direction-仅使用x和y值,其中'x'是左移,' y '是上/下移动,用于失真掩模纹理

Distortion -焦散失真强度

Tint Color - caustic color 焦散线颜色

FallOff - 焦散的褪色纹理的高度,其中alpha通道为焦散的不透明度。

Ripples Strength -波纹强度-波纹焦散的亮度。此外,亮度也取决于方向的光强度。

RampStrength 纹理亮度校正。在二次亮度中,需要根据焦散的距离重新计算线性亮度。焦散看起来更真实。

六、动态反射

使用脚本“ReflectionCamera”进行反射

如果你不需要反射,你可以删除脚本(在这种情况下着色器会忽略反射)该脚本创建了一个在水的对面反射的额外摄像机

Texture Scale [0­-1]:纹理反射的比例分辨率(例如“1”当前屏幕分辨率,“0.5”一半大小,等等)分辨率越小,计算速度越快,但质量越低。

 

当相机在地形下时,地形多边形剔除可能是一个问题。您可以应用下面方案修复程序。

解决方案:1)从下载页面下载你Unity 版本的存档“builtin shaders”https://unity3d.com/ru/get-unity/download/archive

2)打开文件夹builtin shaders \ DefaultResourcesExtra \ TerrainShaders \Splats

3)复制着色器到你的项目的任何文件夹,如果你的unity5,复制“Standard-AddPass”,“Standard-Base”,“Standard-FirstPass

4)在你的项目中打开每一个复制的着色器,并在block后面添加线条“Cull Off”

"ReflectionCamera.cs" 将渲染路径设置为正向或延迟。注意,如果你有一个改变地形的第三方插件。改变他的shader。(老版本插件)

七、水材质特性

 

水流方向,其中'x'是上/下移动,'y'是左/右移动,z'是波浪动画的速度(波浪纹理1),w'是波浪动画的速度(波浪纹理2)。

泡沫方向,其中'x'是上/下移动,'y'是左/右移动和z'和'w不使用。

菲涅尔反射设置

注意:如果你的“per vertex distortion”设置得太低,相机的边框会被扭曲。不要将值设置得太低。

波浪和水的当前比例设置不依赖于预制比例(网格)。因此,你可以很容易地改变预制规模(网格)或水规模。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值