從效果上看,該球體是半透明的,邊緣部分泛藍光,球體表面與其他物體相交的部分會高亮,處在球體內部的其他物體形狀抖動變化。
首先,邊緣部分泛藍光,根據觀察方向繪製,使用unityworldspaceviewdir;
其次,相交部分高亮,計算場景內物體深度和球體深度差值,相交部分的差值為0,設定相機的depthtexturemode即可生成深度圖,在shader中使用_cameradepthtexture訪問深度圖,lineareyedepth,sample_depth_texture_proj,unity_proj_coord這三個方法和巨集的用法我也比較模糊,希望有柳暗花明的一天;
最後,形狀抖動變化,變化相機的grabtexure的uv,使用grabpass獲取grabtexure。
shader "chenjd/myforcefield"
_distortstrength("distortstrength", range(0,1)) = 0.2
_distorttimefactor("distorttimefactor", range(0,1)) = 0.2
} subshader
grabpass
pass
; struct v2f
;fixed4 _color;
float _power;
sampler2d _cameradepthtexture;
sampler2d _noisetexture;
float4 _noisetexture_st;
sampler2d _grabtemptex;
float4 _grabtemptex_st;
float _distorttimefactor;
float _distortstrength;
fixed4 frag (v2f i) : sv_target
endcg
} }}
學習 Shader學習整理
好久沒寫部落格了,研究了一段時間shader,整理一下 unity的shader包含三種,固定渲染管線,cg片段,su ce表面著色器,unity推薦su ce表面著色器,寫起來簡單,很多東西unity都做好了,實際中往往看具體需求而定,一般選cg片段和su ce表面著色器。然而不管怎麼說,基礎理論...
Shader學習筆記
direct和opengl兩種程式設計標準,前者是微軟提供的,一般用於windows平台,而後者是linux android ios等都共同支援的標準。由這兩種標準就衍生出來了集中gpu程式語言,諸如hlsl cg glsl等,在unity裡面,並不直接使用者三種語言去編寫,而是用自己自定義的sha...
shader 例子學習
struct su ceoutput background 最早被呼叫的渲染,用來渲染天空盒或者背景 geometry 這是預設值,用來渲染非透明物體 普通情況下,場景中的絕大多數物體應該是非透明的 alphatest 用來渲染經過alpha test的畫素,單獨為alphatest設定乙個queu...