3D美術實時渲染最佳實踐 7 材質與Shader

2021-10-09 23:41:03 字數 1861 閱讀 5943

unity提供了一組mobile的shader,在移動平台上盡量使用它們

在移動平台上盡可能少用紋理,紋理取樣會導致更高的頻寬更大的功耗,影響裝置的電池壽命。

可以考慮將多個紋理打包到一張紋理中,而不是將乙個紋理用於粗糙度,乙個紋理用於金屬度。

紋理打包示例

可以選擇lit 和 unlit,當然unlit的效能更好,也可以把陰影畫在上面,此處略過

盡可能使用不透明材質,在移動平台,除非必要,不要使用透明材質。

透明材質總是比不透明材質更消耗gpu,使用許多透明材質會影響效能,尤其是許多透明物件疊在一起時。當乙個畫素在螢幕上多次重複繪製,稱為overdraw。

對於移動平台,overdraw嚴重影響效能。所以遊戲場景內盡可能讓overdraw保持最小,在unity中可以在scene中開啟overdraw的觀察模式:

有2種實現透明材質的方法:alphablend和alphatest

在移動平台上,可以使用arm的streamline來收集效能資料;

alphatest的材質要麼100%透明要麼100%不透明,可以設定閾值,在unity中稱為cutout。

注:在shader中cg對應的指令為clip(v);

alphablend和alphatest

如果想在遊戲中使用alphatest,有以下建議:

1、最好別用alphatest,除非必需

2、alphatest意味著要麼100%透明,要麼100%不透明

3、注意:alphatest會禁用了gpu的優化特性,所以在移動平台上仔細測試它的效能,並且和alphablend的效能做對比

如果想在遊戲中使用alphablend,有以下建議:

1、移動平台,unity建議alphablend替代alphatest(老劉:這個結論可能是錯的),實際上,還得分析和對比兩者的效能差異,因為它和渲染的內容相關

2、移動平台盡量不要用alphablend

3、如果一定要用alpha,讓它的渲染面積盡可能小

在靜態下,上圖沒啥問題,但是在運動時,使用alphablend看起來是錯的,樹葉的 渲染次序是錯的。而alphatest可以正確的處理次序,不過與alphablend相比,它的邊緣粗糙,有鋸齒。一般來說alphatest表現上還是可以接受的,只要鋸齒的邊緣在運動中不那麼明顯,但是當葉子和樹枝因為alphablend而前後跳動時,這種表現就不行了。

1、使用簡單shader

2、用unity系統自帶的粒子系統

3、減少overdraw,減少粒子數量

數量多的紋理取樣和alphabend及其它功能會讓shader更加複雜,影響渲染效能。建議經常剖析shader。

arm提供了一些工具,像mail offline shader compiler 和 steamline。

因為通常畫素比頂點要多,或者說ps比vs執行更頻繁,將ps內容前置到vs中;

使用varyings變數(即ps輸出並插值後的資料),

但是得注意tiler防止它成為瓶頸(tiler?),完成後還得進一步分析效能。

像sin, pow, cos, divide, noise 函式效能較差,推薦基本操作像加法,乘法,速度較快;在老的像opengl2的裝置上,盡量少用複雜的函式

3D渲染管線流程

首先用一張圖來回顧一下渲染管線的各個階段,目前為止我們接觸的著色器有頂點著色器和畫素著色器,而接觸到的渲染管線階段有 輸入裝配階段 頂點著色階段 光柵化階段 畫素著色階段 輸出合併階段.可以看到,幾何著色器是我們在將頂點送入光柵化階段之前,可以操作頂點的最後乙個階段。它同樣也允許我們編寫自己的著色器...

遊戲3D建模要美術基礎嗎?

第一 3d建模靠自學能成功的,是反常。不成功的,是正常。很多打算學習3d建模的同學剛開始學的時候,總bai是信誓旦旦的說 我要自學,我一定可以自學成功。然後一般半年以後再見,同學3d建模自學的怎麼樣了啊?基本上大多數同學都會回答 哎,老師別提了,學廢了,老不好意思了。我一般都會拍拍同學的肩膀說 別難...

遊戲中的造型師 3D美術

3d美術在遊戲製作中,相當於遊戲的造型師,遊戲的建築 人物 坐騎 怪物 山水等等,都需要3d美術師來建模,構建整個遊戲的世界。對於熱愛遊戲的朋友來說,肯定對遊戲內的美術有很多自己的想法。那我們先來了解一下3d美術設計師!主美 原畫組長 模型組長 角色原畫師 場景原畫師 角色模型師 手繪 方向 貼圖方...