Unity3d-UI-Shader-太極圖案

2021-01-10 OscarZheng

準備階段

基於ui的shader,先找到對應unity3d版本的內置shader包,下載下來之後找到UI-Default.shader,拷貝該文件修改名字為要編輯效果的名字。

調整shader 名稱為 OEngine/UI/TaiChi,創建材質球TaiChi.mat,設置shader為OEngine/UI/TaiChi。在場景中添加Image,並設置材質為TaiChi,調整顏色為黑色。

開始shader編輯

因為太極圖案需要兩種顏色,調整頂點函數顏色設置,去掉混合計算。如下操作注釋掉混合計算。

OUT.color = v.color ;//* _Color;

下面開始編輯frag函數,對圖片做上下分半,顏色區分顯示,在代碼中新增

half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;

//上下分色設置--新增代碼

float cc = lerp(1, 0, step( 0, IN.texcoord.y-0.5 )) ;

//插入計算代碼

color = lerp( IN.color, _Color , cc);

//--新增代碼結束

....

現在圖片展示成下面效果:

接下來我們再左右兩邊繪製兩內圓,控制第一、三象限做顏色設置,二、四象限顏色保留上一步設置,在插入代碼注釋下添加代碼

//大圓半徑

float radius = 0.5;

//左右內圓圓心

float2 center = float2(radius + step(0.5, IN.texcoord.x), 1) *0.5;

//圓心與當前點的向量

float2 dir = center-IN.texcoord.xy;

//左右內圓

cc= lerp(cc, smoothstep(radius*0.5 - _Factor ,radius*0.5, length(dir) ), step( 0, (IN.texcoord.x-0.5)*(IN.texcoord.y-0.5)));

效果如下:

很顯然這個效果的第一象限顏色不對,要做一次反轉顏色,

/對第一象限設置反轉

cc= lerp(cc, 1-cc, step(0,IN.texcoord.x-0.5)*step(0,IN.texcoord.y-0.5) );

好了,這裡得到我們想要的效果了,現在再對左右兩圓心做兩小小圓繪製。

很顯然,小小圓半徑範圍在0-0.25之間,_RadiusRang 0-1變化控制小圓大小

float r = radius*0.5*_RadiusRang;

//添加小小圓設置

cc= lerp(cc, 1-step(0, IN.texcoord.x-0.5), 1- smoothstep(r - _Factor ,r, length(dir) ));

得到下面效果:

效果出來了,最後繪製大圓,去掉邊上alpha,在

color = lerp( IN.color, _Color , cc); 後面添加代碼,

color.a =1- smoothstep(radius - _Factor ,radius, length(0.5 - IN.texcoord.xy) ) ;

最終效果太極圖案就繪製出來了。

整個frag代碼整合如下:

half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;

//大圓半徑

float radius = 0.5;

//小小圓半徑

float r = radius*0.5*_RadiusRang;

//左右內圓圓心

float2 center = float2(radius + step(0.5, IN.texcoord.x), 1) *0.5;

float2 dir = center-IN.texcoord.xy;

//上下分半

float cc = lerp(1, 0, step( 0, IN.texcoord.y-0.5 )) ;

//左右內圓

cc= lerp(cc, smoothstep(radius*0.5 - _Factor ,radius*0.5, length(dir) ), step( 0, (IN.texcoord.x-0.5)*(IN.texcoord.y-0.5)));

//對第一象限設置反轉

cc= lerp(cc, 1-cc, step(0,IN.texcoord.x-0.5)*step(0,IN.texcoord.y-0.5) );

//兩小圓

cc= lerp(cc, 1-step(0, IN.texcoord.x-0.5), 1- smoothstep(r - _Factor ,r, length(dir) ));

color = lerp( IN.color, _Color , cc);

//圓形

color.a =1- smoothstep(radius - _Factor ,radius, length(0.5 - IN.texcoord.xy) ) ;

//後面是原UI-Default的代碼

相關焦點

  • Unity3D 尋路系統
    https://docs.unity3d.com/Manual/class-NavMeshAgent.html四、組件Nav Mesh Obstacle的使用http://docs.unity3d.com/Manual
  • 使用Unity 粒子系統實現 2D 人物足跡效果
    之後深入一想腳本大概要怎麼寫,感覺頭大的不行,又想到了 Hierarchy 裡面被 FootStep12345678 塞得滿滿當當的壯麗場面..還是換個方法吧 轉念一想:unity 的粒子系統似乎可以滿足所有特性:生成淡出銷毀全自動,跟隨人物也是基本操作,比較存疑的就是用腳本控制粒子的鏡像與旋轉。
  • Unity PBR Standard Shader 實現詳解(一)
    最近在學習Unity的PBR shader,有一點自己的結論,特來這裡分享一下。我自己是一個美術工作者,不是程式設計師,所以更多的是講實現效果。以及一些必須知道的原則。站在美術的角度的一些新的思考。數學原理上只提出,但不會深入分析。但這篇文章也不是純美術向的,我不會涉及美術的製作部分:比如高低模,烘焙,貼圖繪製這類的。著重於的是TA的應用方面:Shader。
  • Cocos Creator 3D v1.0.1 正式發布
    Effect 的資源面板現已支持預覽編譯後的 shader 代碼,並支持可視化編輯 shader 的每個 define。4.[FIX] 修復導入作業系統上創建的文件夾時沒有保留文件夾裡 meta 文件的問題[FIX] 修復父資源拖拽進 inspector asset 編輯框無效問題[FIX] 修復 uuid 衝突的時候,誤將舊資源 uuid 替換的問題[FIX] 修復刷新數據時資源面板中選中的文件夾和根節點文件夾摺疊狀態不準確的問題[FIX] 修復 ui
  • unity 半透明渲染技巧(3則)
    unity 半透明渲染技巧(1):固定深度法半透明渲染排序問題 長期在各種3d引擎存在,這裡將一些針對性技巧。
  • 2021新年匯總:Unity項目原型快速開發資源,看這一篇就夠
    /publishers/102  完整項目: 3D Game Kit : https://assetstore.unity.com/packages/templates/tutorials/3d-game-kit-115747
  • 塵氣旋渦遮蔽大型雙星系統 似太極圖案
    塵氣旋渦遮蔽大型雙星系統 似太極圖案 發布時間:2018-11-20 10:24:06 【編輯:李駿】 塵氣旋渦遮蔽大型雙星系統 似太極圖案
  • 懷舊的3D圖-帶立體文字的圖案
    早上,一個同事發了幾張多年前流行的3D圖(不知道為什麼又刪了,所以我將她打碼了),就是那種無規則的花紋,能在其中看到簡單圖案或文字的圖。     本篇純屬好玩。先放軟體地址免得找不著:http://www.liuhs.com/zhi/3d.exe     我突然想起大學時還專門研究過它的出處,發現還是挺有趣的小玩意兒。     晚上,巧了,看到楊老師也發了幾張在群裡讓我們猜。
  • Unity UI 批量修復工具
    作者:狂飆來源:https://networm.me/2019/12/01/unity-ui-batch-repair-tool/More:【微信公眾號】 u3dnotes
  • Unity約你來剁手啦!
    Unity Pro專業版促銷詳情:https://create.unity3d.com/big-fall-sale-cnUnity Plus加強版5折,折後價120元/月,不含稅。免費贈送價值300美金的2個資源工具包,內含多款實用Asset Store上實用資源插件。免費贈送1個Unity限量背包!
  • 【官方說明】Unity 5 引擎專業版和個人版解析
    下載:Unity 5 Personal Edition(個人版)和Professional Edition(專業版)今天可在 http://unity3d.com/cn/get-unity 立即下載。提問:如您有任何問題請在中文官方論壇中參與討論,或者聯繫:chinasales@unity3d.com
  • 博主營地 | Unity3D 實用技巧 - 理論知識庫(一)
    發稿入口:unity.cn/articles  更多Unity博主專屬權益見文末  其實學習Unity3D引擎,我們除了懂得實操,同時兼顧理解一些理論知識,也是挺不錯的積累。今天小編會把常用的一些理論問題匯總起來,後面可以做一個快速的記憶和學習。  請簡述值類型與引用類型的區別。
  • Unity 實用技巧 - 物理系統初識
    官方文檔:https://docs.unity3d.com/Manual/PhysicsSection.html01  Rigidbody(剛體)/ Rigidbody2D(2D剛體)在使用文檔連結:https://docs.unity3d.com/cn/current/Manual/PhysicsDebugVisualization.html最後,小編特別推薦一些其他大神分享的內容。
  • 【遊戲流體力學基礎及Unity代碼(二)】用平流方程模擬染料流動
    你可以試著在c++或python上寫一遍,因為之後我們在unity不會直接使用這個公式。為了畫出一張好看的二維平流圖,我們首先需要畫出一個黑白棋盤格紋理,代表染料的密度。然後新建一個用於模擬平流的著色器,我叫它Advection.shader。
  • Unity項目開發過程中常見的問題,你遇到過嗎?
    最近看到有朋友問一個unity遊戲開發團隊,需要掌握哪些知識之類的問題。
  • Unity高級知識點總結:性能優化與圖形渲染進階
    = DecodeHDR(rgbm, unity_SpecCube0_HDR);3.4、我們額外做了一個把漫反射的lightmap合併到specular上的操作,防止金屬丟失lightmap信息。4、類似的,shader中輸入的顏色默認也會被認為是 sRGB 顏色,會自動進行 Remove Gamma Correction 的操作。而如果自己定義的 Float 參數也想 Remove Gamma Correction,則需要在參數前添加 [Gamma] 的前綴。
  • unity|specular年終結
    打開上次diffuse的那個shader,我們直接在這個shader的基礎上疊加specular效果,就可以最終得到phong shader的效果。人觀察的方向可以直接用shader graph自帶的view direction來獲取,所以結果如下;因為黑色顏色值為0,但是如果是負數的話,得到的顏色也是0,所以為保證顏色值在0-1之間,我們給結果加上一個Maximum節點,去除掉小於0的值。如此便得到specular的效果,最後將其與之前做的diffuse相加,輸入到最後的輸出節點中。
  • 天下第一圖:太極圖考略
    因此,當代氣功界對此趨之若鶩,各種中醫、氣功書刊、徽章中,類似太極圖的陰陽魚圖案很多,不少圖案及解釋是今人隨意而作,有失古太極圖之真。為防以訛傳訛,有必要澄清太極圖古來真面目。世界上唯有八卦太極圖這幅形簡而意賅的圖像,能僅用陰陽(黑白)兩個符號概括出天地間萬事萬物的基本運動規律,所以它堪稱「世界第一圖」。
  • 周敦頤《太極圖》,249字道出宇宙人生的真相
    《太極圖說》全書只有249字,講述了很多人生道理,是宋代哲學家周敦頤的作品。周敦頤受《周易·繫辭傳》的啟發,寫了這本書。受《周易·繫辭傳》的啟發,周敦頤在《太極圖說》中說:"太極生於無極,太極生於陽,靜而極動,極靜再動,一動一靜互為根本,分陰為陽,兩儀立。"古人認為五行統一於陰陽,陰陽統一於太極。兩個太極用黑白兩個魚形圖案組成圓形圖案,太極一詞最早出自《易傳,繫辭》。
  • 簡化AR體驗創作,Unity MARS Query系統程序化生成場景的原理
    Unity MARS資料庫:  https://docs.unity3d.com/Packages/com.unity.mars@1.1/manual/MARSConcepts.html#the-mars-database  每條數據都以稱為數據ID(data ID)的一串數字做區分,每條數據又能包含任意數量的特徵(traits),即帶名稱的特定數據類型