日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

渲染到ui_虚幻4渲染编程(UI篇)【第二卷:程序化UI特效-[1]】

發布時間:2025/5/22 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 渲染到ui_虚幻4渲染编程(UI篇)【第二卷:程序化UI特效-[1]】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MY BLOG DIRECTORY:

小IVan:專題概述及目錄?zhuanlan.zhihu.com

INTRODUCTION:

當遇見某些特殊需求,比如對游戲效果有很多變化的要求,這時使用靜態的貼圖就不太適合了,這時候就需要實時計算繪制出來的數據。下面就來總結一些常用的程序化UI效果,下面的效果將全部使用公式計算的方式生成,不使用一張貼圖。


MAIN CONTENT:

【1】律動波形

使用

這個簡單的公式,把圖像畫出來

然后重復一次相減即可得到一條細線。然后再重疊第二個波上去,即可得到更有變化的效果。我這里只疊加了兩個波,如果還想更豐富還可以繼續往上疊。

上面的材質連線是不是太亂了呢,而且如果想做更復雜的疊波就比較困難了,材質編輯器能把人頭連暈,所以我下面封裝了一個框架來幫助我解決這個事情。

void GetWaveFeild(out float Up, out float Down, in float A, in float T, in float WaveWidth, in float2 UV, in float time) {float TwoPI = 3.1415926 * 2;Up = A * sin(TwoPI / T * UV.x + time);Down = A * sin(TwoPI / T * UV.x + time) + WaveWidth; }float GetWaveColor(in float FeildUp, in float FeildDown, in float UVY) {UVY = UVY - 0.5;return step(UVY, FeildDown) - step(UVY, FeildUp); }float CalculateWave(in float2 UV, float A, float T, float WaveWidth, in float time) {float Output = 0;float WaveFeildUp = 0;float WaveFeildDown = 0;// If you need more wave feild. Adding them here!float WaveUp_01 = 0;float WaveDown_01 = 0;GetWaveFeild(WaveUp_01, WaveDown_01, A, T, WaveWidth, UV, time);float WaveUp_02 = 0;float WaveDown_02 = 0;GetWaveFeild(WaveUp_02, WaveDown_02, A, T * 2, WaveWidth, UV, time * -1.2);float WaveUp_03 = 0;float WaveDown_03 = 0;GetWaveFeild(WaveUp_03, WaveDown_03, A * 5, T * 0.2, WaveWidth, UV, time * 8);//Wave field blend operationsWaveFeildUp = WaveUp_01 + WaveUp_02 * WaveUp_03 + WaveUp_03 * 0.1;WaveFeildDown = WaveDown_01 + WaveDown_02 * WaveDown_03 + WaveDown_03 * 0.1;Output = GetWaveColor(WaveFeildUp, WaveFeildDown, UV.y);return Output; }float RenderWave(in float2 UV, in float t) {float Output = 0;Output = CalculateWave(UV, 0.1, 0.2, 0.02, t * 2);return Output; } //return RenderWave(UV, t);

最后的效果:

我這里只疊了三層,其實還可以疊更多。我來稍微講解下這個框架。首先是要計算出波場,上波場和下波場,上下波場相減就能得到波的細線。GetWaveColor便是相減上下波場。我們如果要混合不同波,只能在計算波場的時候混合,在GetWaveColor之前。計算波場有很多種混合方式,相加相減相乘等。

把自變量x變成整數就可以得到柱狀波形

如果不和Y的絕對值比較的話,可以得到一邊的效果

【2】技能冷卻

先用代碼畫個圓然后畫冷卻線

step(distance(uv, float2(0.5, 0.5)) , R);

冷卻線

step(H, uv.y );

如果想要制作扇形效果,可以使用極坐標的方法,先把UV變換到中心點

然后用極坐標判斷即可

float SkillTime(float2 uv, float R, float Radius) {float2 centeruv = uv - 0.5f;float cos = dot(normalize(centeruv), float2(1,0));return step(Radius, cos); }

【3】旋轉扭曲

使用旋轉矩陣變換一下就好了,還是非常簡單的

請無視gif壓縮產生的馬賽克float2 RotateUV(float2 uv,float2 center, float angle) {float PI = 3.1415927f;float Ang = angle * (2.0f * PI/ 360.0f);float2 RowX = float2(cos(Ang), -sin(Ang));float2 RowY = float2(sin(Ang), cos(Ang));float ArgOne = dot(RowX, uv - center);float ArgTwo = dot(RowY, uv - center);return float2(ArgOne, ArgTwo) + center; }

有了最基礎的旋轉,就可以在此基礎上做些其它效果了

代碼如下:

float2 Twirl(float2 uv, float2 centeroffset, float strenth) { //Transform uv to centeruv = uv - float2(0.5, 0.5);//Offset the uv centerfloat2 delta = uv - centeroffset;float angle = strenth * length(delta);float x = cos(angle) * delta.x - sin(angle) * delta.y;float y = sin(angle) * delta.x + cos(angle) * delta.y;float RowX = x + centeroffset.x;float RowY = y + centeroffset.y;return float2(RowX, RowY); }

【4】SubUVAnimation

把水印P掉即可使用

SubUVAnimation其實是經常會使用到的東西,原理非常簡單,就是整塊整塊挪動UV,雖然很簡單但是很容易出錯。

float2 SubUV(float t, float2 coord) {float SubUVX = 4;float SubUVY = 4;float Time = floor(t);float row = floor(Time / SubUVX);float cloum = Time + row * SubUVX;float2 UV = coord + float2(cloum, row);UV.x /= SubUVX;UV.y /= SubUVY;return UV; }

首先需要確保UV的方向和貼圖的Animation方向是相同的

float row = floor(Time / SubUVX); float cloum = Time + row * SubUVX;

Cloum的數量是Row的橫軸格數的倍數加當前橫軸位置。

這里的UV偏移是非常大的,需要把UV限制到0-1所以除以X和Y的SubUV數目,這里一定是最后縮放到0-1,因為如果先縮放到0-1會產生累積誤差。最后可以再采一次time+1時候的圖像和當前圖像做插值,這樣來做幀緩存讓圖像更加順滑。


SUMMARY AND OUTLOOK:

Enjoy it!


NEXT:

YivanLee:虛幻4渲染編程(UI篇)【第三卷:程序化UI特效-[2]】

總結

以上是生活随笔為你收集整理的渲染到ui_虚幻4渲染编程(UI篇)【第二卷:程序化UI特效-[1]】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕一区二区人妻电影 | 成年黄色片 | 日本精品一区二区在线观看 | 成年人视频网站 | 国产成人午夜精品无码区久久 | 熊出没之冬日乐翻天免费高清观看 | 精品久久国产 | 久久精品午夜福利 | 中文字幕在线观看日韩 | 法国空姐在线观看免费 | 久久精品小视频 | 国产精品中文字幕在线观看 | 久久日视频 | se婷婷| 日本免费一区二区在线 | 中文有码在线播放 | 国产av无毛| 黄色福利片 | 免费看的一级片 | 欧美成人午夜影院 | 精品丰满少妇一区二区三区 | 樱花动漫无圣光 | 狠狠干2020| 国产午夜三级 | 国产精品精品久久久 | 天天在线观看 | 欧美xxxx888 | 黑人极品videos精品欧美裸 | 国产精品视频一区二区三区不卡 | 久久久www成人免费毛片 | 性视频免费 | 男人亚洲天堂 | a在线v| 一本久道久久综合 | 黑人一区二区 | 又黄又爽网站 | 人妻无码中文字幕免费视频蜜桃 | 欧美综合网站 | 色综合网站 | 91插插影库 | 国产精品av在线播放 | 黄色一级播放 | 亚洲伊人影院 | 久久wwww | 亚洲AV无码成人精品区麻豆 | 午夜av一区二区三区 | 亚洲三级网站 | 狠狠干天天干 | 大香焦久久| 色哟哟一区二区三区四区 | 一级色视频 | 国产乱妇乱子 | 男男黄网站 | 蜜桃av成人 | 色婷婷在线影院 | 日韩精品中字 | 日韩 欧美 综合 | 春日野结衣av | 在线观看一区二区视频 | 理论av| 国产精品老熟女一区二区 | 调教女m荡骚贱淫故事 | 国产日韩欧美在线观看 | 青青五月天 | 成人7777 | 野花视频在线免费观看 | 亚洲成av人片一区二区梦乃 | 亚洲精品亚洲 | 精品视频91 | 久久精品视频91 | 偷拍一区二区三区四区 | 亚洲最新av网址 | 色丁香婷婷| 成人午夜视频在线免费观看 | 高h在线观看 | 日本熟妇成熟毛茸茸 | 亚洲免费网址 | 午夜精品在线观看 | 亚洲av综合色区无码一区爱av | 中国一级片在线观看 | 日韩精品中文字幕一区二区 | a视频 | 国产精品久久久久久久久久久久久久久久 | 中国女人一级片 | 国产精品视频久久久久久 | 羞羞的视频在线观看 | 26uuu国产| 91狠狠爱 | 麻豆av剧情| 亚洲久久在线观看 | 国产美女一区二区三区 | 欧美日韩午夜精品 | 国产免费黄色网址 | 欲色综合 | 波多野结衣视频一区 | 国产精品成人aaaa在线 | 国产999精品| 久久国产在线视频 | 1024手机在线观看 |