糍粑大叔的獨遊之旅 u3d中2D輪廓的生成(上)

2022-09-16 10:03:11 字數 1165 閱讀 6410

對於沒有美術資源的我,能自動生成的東西,必須靠**解決。

網上有很多3d實時輪廓的生成文章,都很有借鑑意義,我也參考了其中很多內容,但這裡就不一一枚舉了。

而本文的主要區別在於:

1、對u3d的單一gameobject節點生成輪廓,而非螢幕級

2、由於(我的)遊戲裡單位,都是由很多的sprite組合而成,輪廓標記時暫時沒有的動畫需求,所有可以一次生成,但乙個紋理使用,避免了實時繪製,到來太多的消耗

第一文,爭取講清楚點,所以分多篇講述。

準備乙個camera,用來做渲染到紋理(render to texture ),以下rtcamera

根據要生成輪廓的目標(以下簡稱target)的尺寸,建立乙個rendertexture(以下簡稱rt)

儲存target的原始位置,並將target移動到乙個「非常遠」的位置,或通過設定layer的方法,以保證rtcamera裡只能繪製target

設定solidshader(只繪製白色、無光、無紋理的shader),呼叫camera.renderwithshader渲染到rt

對rt進行「擴大」處理,即多次進行blur

移回target到原始位置,並為target新增乙個子節點,使用rt作為紋理,並設定繪製shader的顏色

為了更方便的使用,封裝成了幾個類:

public rendertexture createoutterline(gameobject target, float x, float y)
生成乙個rt

public

static outterlinerenderer createoutlinerenderer(unit target)

其中unit是遊戲的單位.

在場景中,建立乙個camera綁上effectrtgenerator,在**中,直接呼叫outterlinerenderer 即可建立輪廓,不需要在遊戲邏輯中去處理rt、rtcamera,十分方便

圖中間綠點是alpha值原因導致

U3D中座標位置的表示

1 物體a前後左右上下7公尺處座標表達 vector3 qian a.transform.position a.transform.forward 7f 物體a前方7公尺的座標.vector3 hou transform.position transform.rotation vector3.bac...

U3D中物體的渲染順序

1,由shader中渲染佇列及佇列中的值決定 2,在同一佇列中,若材質相同 2.1 對於ui,按其在場景層級中的先後順序繪製 2.2 對於3d不透明物體,按其離相機的距離,由近到遠繪製,這樣可以減少畫素重繪 2.2 對於3d透明物體,按其離相機的距離,由遠到近繪製,只有這要才能正確繪製所有半透明物體...

u3d中的向量 vector3 vector2

vector3 x,y,z x代表左右,y代表上下,z代表前後 計算兩點之間的距離 如果只給了一點的話。算出的長度其實就是和vector3.zero點之間的長度 公式 a2 b2 c2 勾股定理 計算機實現 float distance2d point2d p1,point2d p2 float d...