X-Ray掃描動效是影視中常見的特效,變形金剛電影中汽車人掃描汽車變身的鏡頭讓人印象深刻,科技感撲面而來。那么,這么炫的技能能不能應用在智能汽車的HMI設計上?將開機動畫、汽車自檢等場景打造成X-Ray掃描動效是一種什么感受?
當!然!可!以! 一切交給KANZI
通過KANZI軟件實現X-Ray掃描動效 接下來我們將逐步講述如何使用KANZI實現X-Ray掃描特效:
1. 在車模原有效果不變的情況下,實現X光移動掃描車身的效果
在KANZI中,汽車模型一般使用特殊材質例如光照模型材質、PBR材質來實現真實的汽車效果,因此要在原有的材質效果上實現動效,需要在原有的材質Shader代碼上進行功能擴展。
本例中的車模使用的是KANZI自帶的Blinn-Phong著色模型;
在Fragment Shader中,對最后經過光照計算輸出的color值進行操作實現效果,最后通過gl_FragColor輸出。
在Vertex Shader中,定義vPos變量代表模型在世界坐標系下的頂點坐標,輸出到Fragment Shader使用。
Fragment Shader中定義ScanLinePosX和ScanLineWidthX兩個float值;
將世界坐標系下模型頂點坐標的X與ScanLinePosX相減并取絕對值,獲取每個頂點到Scan Line PosX的距離dist,與Scan Line WidthX進行判斷,在范圍內對color值進行再計算實現效果,范圍外則顯示原有車模顏色值,以此確定掃描區域的范圍;
通過Animation曲線動態更改Scan Line PosX實現掃描區域的移動;
2. X光掃描車身,模型邊緣發光效果的實現
邊緣光即Rim Light,在當前觀察視角下模型的邊緣加個光的效果,通過常見的光照模型檢測邊緣,模型頂點的法線向量(即垂直于頂點平面的向量)與攝像機和頂點間的視角向量之間的夾角越大,說明越靠近邊緣。
定義uniform 參數Rim Light Color 作為邊緣光顏色輸入值,Rim Power Factor作為邊緣光強度因子,N為標準化后的頂點法線向量,V為標準化后的頂點與攝像機間方向向量,這兩個向量在原本的光照模型Shader中都已近計算好了,可以直接使用。
OpenGL內置dot(N, V)函數表示返回兩個向量的點積,返回值越接近0表示夾角越大、越接近邊緣,Rim Power Factor參數傳入Open GL內置pow ()指數函數,控制邊緣光強度,最后獲得掃描區域rimColor顏色值。
3. X光掃描區域透視效果實現
定義uniform 參數XRay Percentage表示X-Ray透視強度,分別控制了Rim Light顏色與車模原本顏色混合強度,和掃描區域透視強度;
XRay Percentage越大區域顯示邊緣光越強,反之則顯示車模原本顏色。 實現透視效果需要車模分出內部與外殼兩個結構,設置車模外殼部分節點混合Blend Mode為阿爾法: 預乘(Alpha: Premultiplied),使車外殼模型可透明,內部模型則不需要。
rimColor的alpha通道通過內置函數smoothstep()返回0到1直接的值,并通過XRay Percentage參數控制;
最終實現X-Ray效果可控:
4. X光掃描區域網格效果及邊緣漸變的實現
定義Wire Texture傳入網格圖紋理,紋理Wrap Mode設置Repeat;
通過放到UV坐標使紋理重復擴展形成網格,定義Wire Tex Strength參數控制網格顯示強度,最后將網格紋理顏色值與rimColor混合疊加。
1)X-Ray掃描區域邊緣需要有漸變過度的效果,通過之前計算得到的模型頂點與Scan Line PosX之間的距離值dist,與區域的寬度值Scan Line WidthX相比,獲得0到1之間的值;
2)通過pow()返回它的1.5次方得到factor,表示當前模型頂點到掃描區域中心的距離因子,掃描區域邊緣的距離越遠,factor值越小;
3)再通過mix()函數混合rim Color與車模原始色,越接近掃描區域邊緣越向車模原始色漸變;
最后使用Animation或狀態機控制Shader的自定義的參數實現X-Ray掃描的效果。
責任編輯:pj
-
掃描
+關注
關注
0文章
197瀏覽量
24800 -
開機
+關注
關注
0文章
23瀏覽量
13204
發布評論請先 登錄
相關推薦
評論