Unity Shader學習 2D3D物體描邊

2021-09-05 10:52:45 字數 2320 閱讀 6755

參考了下法線擠出的方法感覺對於法線夾角過大的物體來說效果不好,先簡單實現一下,大部分情況應該能用。ui描邊效果找不到特別好的,仿照了unity自帶的outline組建,其實方法挺差的而且估計挺費效能,基本效果還是能將就著用用。

描邊基本原理:3d物體沿發現拉公升擴大影象,渲染成純色的,然後把原影象疊上去。2d物體複製多個相同的渲染成純色的然後進行少量偏移,最後把原圖疊上去。(unity的outline組建是複製了4個,大家覺得效果不好可以試試複製八個方向的,感覺這個方法不好,透明度也基本放棄操作了,我用的2017.3,不知道官方更新過元件了沒)

3d物體shader:

//3d物體描邊效果

shader "custom/outline3d"

//描邊寬度

_outlinewidth

("outlinewidth"

,float)=

1.2_outlinecolor

("_outlinecolor"

,color)=(

1,1,

1,1)

} subshader

//描邊使用兩個pass,第乙個pass沿法線擠出一點,只輸出描邊的顏色

pass ;

v2f vert

fixed4 frag

(v2f i)

: sv_target

endcg

} pass ;

v2f vert

fixed4 frag

(v2f i)

:sv_target

endcg }}

fallback "diffuse"

}

2d物體shader:

//ui描邊效果

shader "custom/outlineimage"

_color

("maincolor"

,color)=(

1,1,

1,1)

_outlinecolor

("outlinecolor"

,color)=(

1,1,

1,1)

//寬度

_outlinefactor

("outline"

,range(0

,100))

=5} cginclude

#include

"unitycg.cginc"

sampler2d _maintex;

float _outlinefactor;

float4 _outlinecolor;

float4 _color;

struct v2f

;//描邊片元函式

float4 frag_outline

(v2f i)

:sv_target

//原片元函式

float4 frag_ori (v2f i)

: sv_target

//原頂點函式

v2f vert_ori

//描邊頂點函式1

v2f vert_0

//描邊頂點函式2

v2f vert_2

//描邊頂點函式3

v2f vert_6

//描邊頂點函式4

v2f vert_4

endcg

subshader

cgprogram

#pragma vertex vert_0

#pragma fragment frag_outline

endcg

}

pass

cgprogram

#pragma vertex vert_2

#pragma fragment frag_outline

endcg

}pass

cgprogram

#pragma vertex vert_4

#pragma fragment frag_outline

endcg

}pass

cgprogram

#pragma vertex vert_6

#pragma fragment frag_outline

endcg

}pass

cgprogram

#pragma vertex vert_ori

#pragma fragment frag_ori

endcg

}} fallback "diffuse"

}

繪製2D學習一

1 繪製矩形 void dialog paintevent qpaintevent 利用的標頭檔案 include include include 2 矩形漸變顏色改變 首先確定一條直線 qlineargradient lineargradient 100,150,300,150 確定一條直線 然後...

2D遊戲開發(2)

每次給遊戲新增新功能時,通常也會引入一些新設定。為了讓所有的設定進行統一管理,我們可以配置乙個名為 setting的模組,這個模組中包含乙個setting的類,用來儲存所有的設定。usr bin env python3.5 filename setting 儲存所有的設定 class setting...

前端2D變換

2d轉換是使元素改變形狀 尺寸和位置的一種效果 2d轉換包括 translate 位移 rotate 旋轉 scale 縮放 skew 傾斜 translate 位移 平移 translate 水平位移,垂直位移 eg 讓div水平居中 doctype html en utf 8 viewport ...