溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unity屏幕雪花另類實現方式示例

發(fā)布時間:2020-09-21 15:46:35 來源:腳本之家 閱讀:232 作者:海洋_ 欄目:編程語言

今天是圣誕節(jié)平安夜,為此特別制作了一個雪花飄落的場景,我們的雪花渲染方式不同于網上流行的使用Camera Filter,需要將腳本掛接到相機上面,而我們是掛接到空對象上面,實現方式采用的是自定義Mesh,自定義Mesh可以幫助我們實現很多的效果,而且對效率的提升非常有幫助,雪花實現方式分為:C#腳本和Shader渲染,C#負責雪花的生成,Shader負責雪花的飛舞和渲染。下面我們介紹實現方式:

關于unity,每幀可渲染65000頂點,表示雪的網狀物每1片雪花使用4個頂點,65,000 / 4 = 1,6250,這也是你可以一次畫的雪數量。

自定義Mesh,我們需要這兩個參數:雪花數量,雪花的范圍,另外實現自定義Mesh需要如下幾個參數:存放雪花頂點,雪花的三角形索引,雪花UV,最后我們需要MeshRender幫助我們渲染。首先我們針對定義的參數如下所示:

Unity屏幕雪花另類實現方式示例

變量定義好了,接下來的工作就是初始化了,我們的初始化工作只需要做一次,因此在Start函數中完成的。下面我們根據定義的變量逐步將他們填充起來,先完成雪花頂點的生成如下所示:

Unity屏幕雪花另類實現方式示例

頂點有了,再來填充索引,代碼如下所示:

Unity屏幕雪花另類實現方式示例

索引有了,下面就是UV了,再看看UV的實現方式:

Unity屏幕雪花另類實現方式示例

頂點,索引,UV定義好了后,下面就是寫自定義雪花Mesh了,將我們已經實現的頂點,索引,UV一次性的賦給我們的Mesh,如下所示:

Unity屏幕雪花另類實現方式示例

到這里,我們的自定義Mesh就完成了,我們還需要對Mesh進行渲染,這個就用到了我們的Shader了,雪花是飄動的而且還需要材質,雪花位置的變化我們在頂點著色器中實現,這個也是重點,而片段著色器只是做了簡單的渲染,核心代碼如下所示:

Unity屏幕雪花另類實現方式示例

剩下的是在C#中,使用CPU對GPU中定義的Shader傳值,Shader中定義了以下變量:

Unity屏幕雪花另類實現方式示例

這些變量需要在C#中完成對它們的傳值操作,因為需要每幀去執(zhí)行,我們將其放在了LateUpdate中完成,代碼如下所示:

Unity屏幕雪花另類實現方式示例

這樣我們的雪花制作就完成了,我們將代碼掛到自己新建的空對象上面,注意這里不是相機上,實現效果如下:

Unity屏幕雪花另類實現方式示例

我們的雪景出現了,但是效果不是特別好,渲染力度不夠,為此我將其加上,景深,霧效,Bloom渲染,再看看效果如下所示:

Unity屏幕雪花另類實現方式示例

效果明顯加強了,圖中的鹿是給大家送祝福了,祝愿開發(fā)者技術更上一層樓,就寫到這里吧,代碼后面整理一下傳上來,供參考,晚安各位。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI