最近剛好用上了這個效果所以記錄一下,原理不再贅述,通過之前的透明原理和渲染佇列詳解就可以了解。遮擋透視可以區分為兩部分,第一部分未被遮擋的頂點則正常柵格化著色,第二部分被遮擋的頂點則ztest greater(也就是判斷當前頂點depth更大距離相機更遠則柵格化著色),下面實現shader**:
shader "unlit/outrayshader"
subshader
lod 100
//正常渲染的outline
pass
; struct v2f
;float4 _outlinecolor; /*外描邊顏色*/
float _outscale;
//縮放矩陣
static float4x4 _mats = float4x4(
_outscale, 0, 0, 0,
0, _outscale, 0, 0,
0, 0, _outscale, 0,
0, 0, 0, 1
);fixed4 frag(v2f i) : sv_target
endcg
} //透視著色
pass
; struct v2f
;float4 _raycolor; /*透視顏色*/
float _rayscale;
static float4x4 _mats = float4x4(
_rayscale, 0, 0, 0,
0, _rayscale, 0, 0,
0, 0, _rayscale, 0,
0, 0, 0, 1
);fixed4 frag(v2f i) : sv_target
endcg
} }
}
效果如下:
可以看得出來正常渲染紅色,透視渲染綠色。
當然了一般情況下我們的透視shader屬於輔助著色功能,是在不影響原來美術調整好的著色效果情況下實現的第二層材質渲染,所以還得改一下,如下:
shader "custom/transparencyshader"
subshader
lod 100
//只需要透視渲染
pass
;struct v2f
;float4 _raycolor;
fixed4 frag (v2f i) : sv_target
endcg}}
}
只對透視部分進行渲染,效果如下:
差不多就得到遮擋透視渲染的效果了。
C for Graphic 頂點片段變色
今天中午深圳老同事問我怎麼搞模型逐漸變色,他們策劃需要模型有個變色的過程,他自己就只在c 中做color.lerp,達不到要求,週六被拉著加班。我也正好在家裡做自己的小遊戲,所以幫他寫了兩個,原理無非是頂點或者片段依次變色就好了。想著這需求還挺常見的,就水一篇部落格。如果我們使用的頂點著色,也就是頂...
C for Graphic 螢幕特效畫素畫
雙十一從同學手上搞了臺3dsll,又開始猛肝塞爾達傳說 時之笛 假面 三角力量2 了,每天晚上六點半到家吃個飯七點開始搞到凌晨一點鐘,真尼瑪扛不住。剛拿到3dsll的那天和我的老小三對比了一下,上屏解析度不變 雙眼400 240 尺寸增大到4.8英吋,下螢幕解析度也不變 320 240 尺寸增大到4...
焦點透視與成角透視
我們之前說過透視現象有三種,按消失點的個數依次為焦點透視 成角透視和三點透視。那麼出現這三種透視現象是有條件的,前提條件是只有平視的情況下才會出現焦點透視和成角透視,同樣的,僅有非平視的時候才會出現三點透視。那麼,我們怎麼去理解這2個概念呢?圖九,通過三張立面示意圖可以看到。平視即視平線與水平面重疊...