Unity Shader序列幀動畫學習筆記

2022-08-26 13:06:10 字數 1096 閱讀 1449

在學shader的序列幀動畫時,書上寫了這樣一段**:

fixed4 frag(v2f i)
一開始我看到上面的**的時候是蒙蔽的!_time.y表示從遊戲開始到現在經過的時間,而行數和列數跟time變數是成正比例的,我就想。

答案是當行數和列數急劇增加的時候,在後面的**中計算他們的偏移也會急速的增長,見下面的**:

// 對uv座標進行偏移

half2 uv = float2(i.uv.x/_horizontalamount,i.uv.y/_verticallamount);

uv.x += column / _horizontalamount;

uv.y -= row / _verticallamount;

其中column/_horizontalamount和row/_verticalamount會不停的變大,當前uv的偏移座標大於(1,1)的時候,repeat屬性就起到了作用!repeat屬性規定當uv座標超過(1,1)時,就會不停的重複本身的圖形。

但是,個人認為直接這樣寫還是不妥,實際測試中,當speed超過10^6,影象就會變得失真,變成一團馬賽克,如下圖所示。

所以,最好的方法是,將題目中的row和column限制在一定範圍,下面是我改動的**。

// 獲得整數時間

float time = floor(_time.y * _speed) % (_horizontalamount*_verticallamount);

// 根據時間計算當前行數和列數

float row = floor(time/_horizontalamount);

float column = time - row * _horizontalamount;

Unity Shader 序列幀動畫

unity shader 內建時間變數 名稱型別 描述 time float4 t 20,t,2t,3t 其中t為自該場景載入所經過時間 sintime float4 t 8,t 4,t 2,t 其中t為自該場景載入所經過時間的正弦值 costime float4 t 8,t 4,t 2,t 其中t...

序列幀動畫

關於影象的例項化 1.imagenamed 系統推薦使用的,但是影象是例項化之後的釋放由系統負責,如果要自己釋放,不能使用imagenamed方法。2.如果要自己釋放,需要使用imagewithcontentsoffile nsstring path nsbundle mainbundle path...

序列型動規

d i 中的i表示前i的元素的某種性質。有一排n棟房子,每棟房子要漆成k種顏色中的一種 任何兩棟相鄰的房子不能漆成同樣的顏色 房子i染成第j種顏色的花費是cost i j 問最少需要花多少錢油漆這些房子 輸入 n 3,k 3 cost 14,2,11 11,14,5 14,3,10 輸出 10 房子...