前段時間剛玩《使命召喚11》的時候發現裡面新增了一種很高科技的掃瞄手榴彈,可以產生一圈類似全息效果的掃瞄圈,並顯示出牆後的敵人,類似這樣:
最近打算實現乙個用在第三人稱中類似的效果,如下:
實現方案:
1.根據_cameradepthtexture計算螢幕空間畫素點的世界座標
2.將掃瞄發起位置的世界座標傳入shader
3.計算螢幕空間世界座標到掃瞄發起位置世界座標的距離
4.根據相關引數渲染出掃瞄區域
1._cameradepthtexture中記錄了投影空間的深度資訊,通過如下方式可以得到世界座標:
fixed depth = tex2d(_cameradepthtexture, i.uv).r;
fixed4 projpos = fixed4(i.uv.x * 2 - 1, i.uv.y * 2 - 1, -depth * 2 + 1, 1);
worldpos = mul(internalcameratoworld, worldpos);
worldpos /= worldpos.w;
2.計算傳入的初始位置和螢幕空間世界座標距離:
fixed dis = length(internalcentpos.xyz - worldpos.xyz);
fixed a = 1 - saturate((abs(dis - internalarg.x) - internalarg.y) / internalarg.z);
a = a * internalfade.x + c * internalfade.y;
最終可以得到如下效果:
4.根據螢幕uv資訊將螢幕uv柵格化,並計算每個格仔中取樣到的顏色值,可以得到如下結果:
5.同樣根據剛剛柵格的結果,可以計算出每一小格的uv,根據該uv來取樣用於作為全息掃瞄效果的紋理,得到如下結果:
6.疊加最終結果:
git位址部落格原文
Unity Shader 螢幕抓取,螢幕座標
抓取螢幕,抓取後名字為name 獲取螢幕座標有3種方法 sv position語義的xy 使用sv position語義,在片元著色器中拿到的pos.xy就是螢幕空間的座標。struct v2f vpos語義 vpos語義和sv position衝突,使用vpos語義,則v2f不能定義sv posi...
Unity Shader切線空間
在使用凹凸紋理時我們經常會用到乙個叫切線空間的東西。而這個切線空間裡有三個引數,頂點法線 normal 頂點次法線 binormal 和頂點切線 tangent 這三個引數有什麼意思,是如何得來的呢?我們來詳細講下。假設有乙個三角形平面abc,a點的切線空間就如圖 t,n,b兩兩正交 注 a點座標p...
螢幕色彩空間
其中dci p3 srgb ntsc adobergb都是基於cie色彩空間標準的色彩標準,只是應用的地方有些不同。從下圖可以看到,ntsc和srgb所包含的色彩範圍是不太一樣的,ntsc所表現的色彩要更多豐富一些,而srgb所表現的色彩幾乎被ntsc所包含,下圖中藍框為srgb,綠框為ntsc,可...