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

2022-09-26 02:42:11 字數 1108 閱讀 3822

今天是聖誕節平安夜,為此特別製作了乙個雪花飄落的場景,我們的雪花渲染方式不同於網上流行的使用camera filter,需要將指令碼掛接到相機上面,而我們是掛接到空物件上面,實現方式採用的是自定義mesh,自定義mesh可以幫助我們實現很多的效果,而且對效率的提公升非常有幫助,雪花實現方式分為:c#指令碼和shaouiymrotoder渲染,c#負責雪花的生成,shader負責雪花的飛舞和渲染。下面我們介紹實現方式:

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

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

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

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

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

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

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

剩下的是在c#中,使用cpu對gpu中定義的shader傳值,shader中定義了以下變數:

這些變數需www.cppcns.com要在c#中完成對它們的傳值操作,因為需要每幀去執行,我們將其放在了lateupdate中完成,**如下所示:

這樣我們的雪花製作就完成了,我們將**掛到自己新建的空物件上面,注意這裡不是相機上,實現效果如下:

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

本文標題: unity螢幕雪花另類實現方式示例

本文位址: /ruanjian/csharp/278145.html

vue瀑布流的另類實現方式

最近寫介面,需要使用瀑布流方式顯示商品,網上找了很多方法,效果都不是很理想。咱對這瀑布流的要求也不高,只要兩列商品正常顯示互不影響就行了。思考了下,決定使用flex布局分成n列,每列的商品就不會互相影響,大致思考的布局是這樣。先是對介面進行布局,使用flex布局將容器劃分為n列。中分成了兩列,實際上...

Unity 實現螢幕多屏分屏效果

最近在做乙個專案用到了多屏效果,研究了一下分享一下,實現效果如下 主要用到攝像機的 viewportrect屬性 camera屬性 clear flags 很容易理解,清除一些元素,最常用的可能就是預設的skybox,只有一些特殊情況下才會修改這個屬性,比如想多個攝像機顯示不同元素的時候例如gui或...

unity 螢幕淡入淡出效果實現

private gameobject image 設定 private rawimage rawimage 設定rawimage public float speed 3f 螢幕是否要逐漸清晰 預設是需要的 private bool isclear true 螢幕是否需要逐漸變暗 預設是不需要的 p...