国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Unity插件 - MeshEditor(十) 模型風力拉扯特效

2019-11-07 23:29:49
字體:
來源:轉載
供稿:網友

先上一張效果圖:

(依舊是翰老弟)

(導演:我們需要一個刮風的效果,道具組,上大風扇)

(導演:咔!!!行了,道具組你們明天不用來上班了)

(大風扇:怪我咯)

OK,效果雖然渣了點,但我們還是進入今天的正題吧,我記得在PS或者是某些圖片編輯工具里都有類似給目標添加一個大風的效果,雖然這樣做最終圖片也會被風刮得模糊不清了,但有時候就是需要這樣的效果,不是嗎?雖然我就是那樣的逗比,所以我再次秉承了暴力解決一切的終極技巧,將大風扇搬了過來。

一、原理:

我的做法是首先確定風向,然后根據風向與每個頂點的法線計算點積,最終用點積來確定每個頂點將會受到風力的影響程度。

這里用一個枚舉來統計風向,目前也就六種風向,分別是三個軸的正反向(不過注意,風向是以模型的本地坐標系計算的):

    /// <summary>    /// 風向    /// </summary>    public enum WindDirection    {        /// <summary>        /// x軸正向        /// </summary>        xForward = 0,        /// <summary>        /// x軸反向        /// </summary>        xReverse = 1,        /// <summary>        /// y軸正向        /// </summary>        yForward = 2,        /// <summary>        /// y軸反向        /// </summary>        yReverse = 3,        /// <summary>        /// z軸正向        /// </summary>        zForward = 4,        /// <summary>        /// z軸反向        /// </summary>        zReverse = 5    }

        //計算風向        switch (BlowsDirection)        {            case WindDirection.xForward:                _blowsDirection = (Vector3.zero - new Vector3(1, 0, 0)).normalized;                break;            case WindDirection.xReverse:                _blowsDirection = (Vector3.zero - new Vector3(-1, 0, 0)).normalized;                break;            case WindDirection.yForward:                _blowsDirection = (Vector3.zero - new Vector3(0, 1, 0)).normalized;                break;            case WindDirection.yReverse:                _blowsDirection = (Vector3.zero - new Vector3(0, -1, 0)).normalized;                break;            case WindDirection.zForward:                _blowsDirection = (Vector3.zero - new Vector3(0, 0, 1)).normalized;                break;            case WindDirection.zReverse:                _blowsDirection = (Vector3.zero - new Vector3(0, 0, -1)).normalized;                break;            default:                _blowsDirection = Vector3.zero;                break;        }記錄每個頂點將會受到風力的影響程度(計算風向與頂點法線點積):
        //計算每個頂點將會受到的風力影響        _dots = new float[_vertices.Length];        for (int i = 0; i < _vertices.Length; i++)        {            _dots[i] = Vector3.Dot(_mesh.normals[i], _blowsDirection);        }然后,直接開啟大風扇(也就是讓頂點開始根據風向偏移,主要是模型的邊緣頂點以及背離風向的頂點):
        for (int i = 0; i < vertices.Length; i++)        {            if (_dots[i] <= 0)            {                vertices[i] += _blowsDirection * BlowsPower * _dots[i] *                     Random.Range(BlowsPowerMinRate, BlowsPowerMaxRate);            }        }好了,代碼簡直簡單暴力得無話可說。

二、屬性面板如下:

Blows Direction:風向

Blows Power:風力

Blows Power Min Rate:風力變化最小速率(當為0時,風力為0)

Blows Power Max Rate:風力變化最大速率(當為1時,風力最大,再大則翻倍)

Update Blows:是否持續刮風?不的話就刮一次,模型保持被吹一次時的情景

Update Rate:持續刮風的速率,越小刮得越快(也就是刷新的越快,越小看著越不卡,只不過性能遭不住不怪我)

三、運行:

在任意靜態模型上添加腳本MeshBlows,勾選UpdateBlows,然后直接運行場景就可以看到效果:

再上幾張效果圖:

(橫向瞬移)

(垂直瞬移)

-----by MeshEditor


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阜平县| 淮阳县| 灵璧县| 庄浪县| 黄冈市| 和龙市| 乌鲁木齐县| 咸丰县| 墨江| 环江| 株洲县| 神农架林区| 松溪县| 澎湖县| 津市市| 迁西县| 论坛| 垫江县| 莫力| 六盘水市| 连平县| 嘉鱼县| 镇宁| 贡觉县| 石景山区| 铜陵市| 浦江县| 阿勒泰市| 肇源县| 苍南县| 互助| 汕尾市| 河北区| 宁南县| 永州市| 淳安县| 探索| 乐昌市| 腾冲县| 嘉禾县| 阿拉善盟|