unity3d 模型XRay效果實現

2021-08-08 09:20:33 字數 2395 閱讀 1768

xray效果常常用來顯示被牆體及其它物體遮擋的物體的輪廓,效果一般如下圖所示,如人物身上的藍色部分。

演算法原理:

使用兩個pass對人物進行繪製,其它第乙個pass正常對人物進行繪製,第二個pass使用半透明模式根據z-test繪製被遮擋的部分。引擎對不透明物體(opaque)和半透明物體進行分開繪製,並且一定是先繪製opaque物體,然後再繪製半透明物體,所以可以在第二pass中根據已經繪製opaque物體的z值來判斷物體的某一部分是否需要再次繪製,只有z-buffer中的值大於當前的z值才說明該部分被遮擋。判斷條件為:

ztest

greater

shader製作:

1,建立乙個su***ce shader,  命名xrayeffect。

2,在xrayeffect的基礎上增加乙個pass, **如下:

pass;

v2f o;

o.pos=unityobjecttoclippos(v.vertex);

return o;

}float4 frag(v2f in):color

endcg

}

3,將模型的shader替換成xrayeffect,效果如下,明顯感覺到效果不對,由於在編輯器模式下該模型並未被其它物體遮擋,但是還是繪製出了xray效果,顯然這不並是我們需要的,這是由於模型自身部分的遮擋導致的。

4,為了去除上一步看到的部分,我們使用stencil進行過濾,該shader的第乙個pass中我們向stencil buffer中寫入乙個值254,在xray的pass中,如果stencil的值為254,則不再繪製效果如下:

附完整shader**:

shader "custom/xrayeffect" 

_glossiness ("smoothness", range(0,1)) = 0.5

_metallic ("metallic", range(0,1)) = 0.0

} subshader

lod 200

stencil

cgprogram

// physically based standard lighting model, and enable shadows on all light types

#pragma su***ce surf standard fullforwardshadows

// use shader model 3.0 target, to get nicer looking lighting

#pragma target 3.0

sampler2d _maintex;

struct input ;

half _glossiness;

half _metallic;

fixed4 _color;

// add instancing support for this shader. you need to check 'enable instancing' on materials that use the shader.

// see for more information about instancing.

// #pragma instancing_options assumeuniformscaling

unity_instancing_cbuffer_start(props)

// put more per-instance properties here

unity_instancing_cbuffer_end

void surf (input in, inout su***ceoutputstandard o)

endcg

pass

cgprogram

#pragma vertex vert

#pragma fragment frag

#pragma target 3.0

#include "unitycg.cginc"

struct v2f;

v2f o;

o.pos=unityobjecttoclippos(v.vertex);

return o;

}float4 frag(v2f in):color

endcg

}} fallback "diffuse"

}

Unity3d流光效果

之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光移動照射物體的效果,之前是使用shader 每幀傳遞乙個 offs...

Unity3D戰爭迷霧效果

最近一直都在做flash相關的東西,很久沒有空搞unity3d了,今天稍微有空,就做點小效果玩玩。這次做了乙個戰爭迷霧的效果 戰爭迷霧大家應該很熟悉了,一開始地圖全部都是黑的,只有主角的一定範圍內能看得到。隨著主角的移動,未探索的區域變成了可見。我這個demo還做了視角切換的功能,可以看看切換攝像機...

Unity3D模型製作規範

unity3d模型製作規範 一.單位,比例統一 在建模型前先設定好單位,在同一場景中會用到的模型的單位設定必須一樣,模型與模型之間的比例要正確,和程式的匯入單位一致,即便到程式需要縮放也可以統一調整縮放比例。統一單位為公尺。二.模型規範 所有角色模型最好站立在原點。沒有特定要求下,必須以物體物件中心...