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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Unity Shader 序列帧动画

發(fā)布時(shí)間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity Shader 序列帧动画 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

shader中的序列幀動(dòng)畫屬于紋理動(dòng)畫中的一種,主要原理是將給定的紋理進(jìn)行等分,再根據(jù)時(shí)間的變化循環(huán)播放等分中的一部分。

?

Unity Shader 內(nèi)置時(shí)間變量
名稱類型描述
_Timefloat4(t/20,t,2t,3t)? ?其中t為自該場(chǎng)景加載所經(jīng)過時(shí)間
_SinTimefloat4(t/8,t/4,t/2,t)? 其中t為自該場(chǎng)景加載所經(jīng)過時(shí)間的正弦值
_CosTimefloat4(t/8,t/4,t/2,t)??其中t為自該場(chǎng)景加載所經(jīng)過時(shí)間的余弦值
unity_DeltaTimefloat4(dt,1/dt,sdt,1/sdt)? 其中dt為時(shí)間增量,sdt為時(shí)間增量的平滑值

?

?

?

?

?

?

?

?

腳本如下:

1 Shader "MyUnlit/FrameAnimation" 2 { 3 Properties 4 { 5 _Color("Color Tint",color)=(1,1,1,1) 6 _MainTex ("Texture", 2D) = "white" {} 7 _CutX("CutX Amount",float)=4 8 _CutY("CutY Amount",float)=4 9 _Speed("Speed",range(1,100))=30 10 } 11 SubShader 12 { 13 //一般序列幀動(dòng)畫的紋理會(huì)帶有Alpha通道,因此要按透明效果渲染,需要設(shè)置標(biāo)簽,關(guān)閉深度寫入,使用并設(shè)置混合 14 Tags { "RenderType"="transparent" "queue"="transparent" "ignoreprojector"="true" } 15 ZWrite off 16 blend srcalpha oneminussrcalpha 17 18 Pass 19 { 20 Tags{"lightmode"="forwardbase"} 21 22 CGPROGRAM 23 #pragma vertex vert 24 #pragma fragment frag 25 #pragma multi_compile_fog 26 27 #include "UnityCG.cginc" 28 29 struct appdata 30 { 31 float4 vertex : POSITION; 32 float2 uv : TEXCOORD0; 33 }; 34 35 struct v2f 36 { 37 float2 uv : TEXCOORD0; 38 UNITY_FOG_COORDS(1) 39 float4 vertex : SV_POSITION; 40 }; 41 42 sampler2D _MainTex; 43 float4 _MainTex_ST; 44 fixed4 _Color; 45 float _CutX; 46 float _CutY; 47 float _Speed; 48 49 v2f vert (appdata v) 50 { 51 v2f o; 52 o.vertex = UnityObjectToClipPos(v.vertex); 53 o.uv = TRANSFORM_TEX(v.uv, _MainTex); 54 UNITY_TRANSFER_FOG(o,o.vertex); 55 return o; 56 } 57 58 fixed4 frag (v2f i) : SV_Target 59 { 60 //取得整數(shù)的時(shí)間 61 float time = floor(_Time.y*_Speed); 62 //整除部分為行(因?yàn)椴シ彭樞蚴菑淖蟮接?#xff0c;先行后列) 63 float row = floor(time / _CutX); 64 //余數(shù)部分為列 65 float column = time - row * _CutX; 66 67 //計(jì)算偏移值,其中u向?yàn)榱兴饕?#xff0c;v向?yàn)樾兴饕南喾磾?shù)(播放原點(diǎn)是左上角,而uv采樣原點(diǎn)是左下角,所以v向偏移應(yīng)該取反) 68 half2 uv = i.uv + half2(column,-row); 69 //除以行列得到最終的采樣值 70 uv.x /= _CutX; 71 uv.y /= _CutY; 72 73 fixed4 col = tex2D(_MainTex,uv); 74 col.rgb *= _Color; 75 UNITY_APPLY_FOG(i.fogCoord, col); 76 return col; 77 } 78 ENDCG 79 } 80 } 81 FallBack "Transparent/VertexLit" 82 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/koshio0219/p/11119787.html

總結(jié)

以上是生活随笔為你收集整理的Unity Shader 序列帧动画的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。