unity中用shader实现大海的特效

本文介绍如何在Unity中使用Shader创建更真实的海洋波动特效,通过调整顶点位置和法线来模拟水面起伏,使效果更加自然,避免之前实现的流水效果过于规律和明显的人工感。
摘要由CSDN通过智能技术生成

之前学过一个是做流水效果的

但是自我感觉效果不太好,波动太规律了,而且能看到上面的面像是由多个面组合成的,感觉有点假,不过功能是实现了。

using UnityEngine;
using System.Collections;

public class CreateWater : MonoBehaviour {

    Mesh mesh;

    public int tier = 10;//长度分段
    public int length = 10;//长
    public int width = 3;//宽
    public int hight = 10;//高

    private Vector3[] vs;//顶点坐标
    private int[] ts;//顶点序列
    private Vector2[] newUVs;//UV贴图
    private Vector3[] newNormals;//法线

    void Update()
    {
        int temp = ((tier + 1) * 8 + 4) * 3;//确定顶点数量

        vs = new Vector3[temp];
        ts = new int[temp];
        newUVs = new Vector2[temp];
        newNormals = new Vector3[temp];

        float dis = 2 * Mathf.PI / tier;//两段只差的横坐标

        int count = 0;
        for (int i = 0; i < tier; i++)
        {
            float pos1 = i * length / tier - length / 2;
            float pos2 = (i + 1) * length / tier - length / 2;
            //顶面顶点坐标
            vs[count] = new Vector3(pos1, Mathf.Sin(Time.time + i * dis), width);
            vs[count + 1] = new Vector3(pos2, Mathf.Sin(Time.time + (i + 1) * di

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值