模型在UI上顯示

接到的任務需求是在將3d模型的內容在UI上顯示

前言

梳理了目前有3個種方式,當然沒有好壞之分,只有合適與否。在開源項目中SomeTips的Scenes文件夾中,加入3DUIWayNo1-3的場景,看到以上的實現方式。

UI和場景的混合實現

Camer是skyBox直接與UI混合。如果在放在UI節點下,因爲在同一層級下,通過控制Z值設置前後的關係。

RenderTexture

使用Rendertexur,Camera單獨照模型,攝像機的內容放到RenderTexure,在UI界面上放入Raw Image。要設置渲染層都爲RenderTexture。
renderTexture的方式,可以滿足在兩個不同的層級之間的需求。問題是美術效果上,需求要對於效果做shader上處理。用Camera和原來的在Camer下有色差,以及如果涉及粒子特效。粒子的效果的衰減。也有研究自己寫shader解決Alpha的問題。

原因在於默認的粒子效果使用到的shader中使用了ColorMask RGB,所以只有RGB三個通道的值被存入了緩衝,而沒有寫入A通道的值, 所以我們得到的texture其實沒有粒子的alpha信息,由於使用了ZWrite Off,所以也沒有粒子的深度信息,當我們把這張紋理拿出來顯示的時候,由於某些粒子所在位置alpha值爲0,所以通過alpha預存得到的RGBA值是(0, 0, 0, 0),所以最後也就看不到顏色了。

對用的解決辦法是將shader中的ColorMask RGB改爲ColorMask RGBA,寫入粒子的alpha信息就行了。

Camera混合

使用多個攝像機混合,但要同時要求Camera都是深度模式,需要腳本去改變camera的depth值。另外渲染的camera的depeth要大於UICamera的。好處在於用的時候加載,在不用的時候就卸載了。方便自己的管理。

總結

自己項目中選擇第三種,原因是在需要在不同的場景下打開,如果是美術效果最好,當然是單獨場景最好。而且背景上有更大的美術發揮空間。問題在於場景Loading會有點奇怪,不合乎策劃設計的初衷,體驗上有轉場的感受。
研究了下守望先鋒的寶箱,其實在同一個場景裏,切到了場景某個點,進行操作的,沒有加載的過程。如果在場景某個點作爲開啓的位置,目前多個場景都要處理。帶來更多的美術工作量。後期需要美術管理反而變多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章