Unity3D眼鏡Shader技術實現

2021-08-05 23:34:33 字數 2096 閱讀 9743

筆者介紹:姜雪偉,it公司技術合夥人,it高階講師,csdn社群專家,特邀編輯,暢銷書作者,已出版書籍:《手把手教你架構3d遊戲引擎》電子工業出版社和《unity3d實戰核心技術詳解》電子工業出版社等。

最近在利用shader實現眼鏡的反射,透明以及高光,法線等效果,unity雖然為我們提供了很多的shader,但是在實際專案開發中,大部分不能直接使用,因為專案的需求要求實現的渲染效果時比較細緻的,我們專案目前實現的眼鏡渲染比較貼近於真實的眼鏡,這就要求我們要明白其實現原理,然後將其除錯出來,我們的眼鏡分為三部分:鏡框,鏡面,眼鼻三部分。

每一部分都單獨對其進行渲染處理,當然如果你講它們合併在一起也是可以的,鏡框的實現需要我們使用法線和原圖兩張材質就實現了高光,法線效果,非常炫,實現效果如下所示:

接下來實現鏡面效果,在這裡使用了cubemap和diffuse模擬真實環境中的鏡面反射效果,實現如下所示:

最後乙個是鏡鼻的實現,它的實現比較簡單只是用了透明處理,實現的效果如下所示:

而且實現了透明遮擋處理,以上就是關於眼鏡的實現效果,下面把眼鏡鏡面的渲染**給讀者展示如下:

shader "custom/glass_mirror" 

_cubemap_slider ("cubemap_slider", range(0, 1)) = 1

_color ("color", color) = (0.5,0.5,0.5,1)

_texture_diffuse ("texture_diffuse", 2d) = "white" {}

_alpha_slider ("_alpha_slider", range(0, 1)) = 1

}subshader

blend srcalpha oneminussrcalpha

pass

cgprogram

#pragma vertex vert

#pragma fragment frag

#define unity_pass_forwardbase

#include "unitycg.cginc"

#include "autolight.cginc"

#include "unitypbslighting.cginc"

#include "unitystandardbrdf.cginc"

#pragma multi_compile_fwdbase_fullshadows

//#pragma multi_compile_fog

//#pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2

#pragma target 3.0

// uniform float4 _lightcolor0;

uniform samplercube _cubemap;

uniform float _cubemap_slider;

uniform float4 _color;

uniform sampler2d _texture_diffuse; uniform float4 _texture_diffuse_st;

uniform float _alpha_slider;

struct vertexinput ;

struct vertexoutput ;

vertexoutput vert (vertexinput v)

float4 frag(vertexoutput i) : color

endcg}}

fallback "diffuse"

}

其實就是利用了反射,法線,透明這些基本的技術綜合在一起實現了鏡面的shader處理。。。。

unity 3D模型流光Shader

今天分享下unity中3d模型的一些shader。先來個最簡單的,就是上下滾動的純色流光。通過調整 centerrange來實現上下滾動。o.objz v.vertex.x 這裡使用模型的模型座標系模型被旋轉過所以這裡用的是x軸,同學如果想用得改下哈。flag saturate flag flag被...

Unity3D中的shader高階

unity3d shader 基礎知識 unity3d shader 官方教程翻譯 1.unity中配備了強大的陰影和材料的語言工具稱為shaderlab,以程式語言來看,它類似於cgfx和direct3d的效果框架語法,它描述了材質所必須要的一切諮詢,而不僅僅侷限於平面頂點 畫素著色。2.在uni...

Unity3D內建Shader翻譯一

unity3d內建了很多shader,文件很詳細,自己翻一下.便於加深印象.首先先解釋下unity3d的shader.unity裡面的shaders是使用一種叫shaderlab的語言編寫的,它同微軟 的.fx檔案或者nvidia的cgfx有些類似。傳統意義上的vertex shader和pixel...