主要參考文章爲如下兩篇:
1. https://www.cnblogs.com/murongxiaopifu/p/7250772.html
2. https://blog.csdn.net/zsy654321/article/details/80865060
關於RGBHalf轉RGB24,上面第二篇文章已經提到了.寫代碼時在Bake的時候分別先存下最大最小值,然後對x,y,z轉換一下,再在shader裏轉回來.但是實際操作中還存在一些問題.比如如果默認生成的是asset而不是圖片格式,是沒辦法修改filter mode的,然後filter會導致在iOS平臺上(我們用的是metal)頂點顯示亂掉.因此我們需要將Texture保存下來
void SaveTextureToFile(Texture2D texture, string fileName)
{
string path = Application.dataPath + "/Test/" + fileName + ".png";
//Debug.Log(path);
var bytes = texture.EncodeToPNG();
File.WriteAllBytes(path, bytes);
}
然後修改得到的png文件的filter mode爲point(no filter).
此外,tex2Dlod也不需要mipmap(用tex2Dlod是因爲在vertex shader當中無法用tex2D,詳細解釋看這裏https://forum.unity.com/threads/how-to-sample-a-texture-in-vertex-shader.513816/),所以關閉png文件的mipmap,還可以節省約33%的內存.
最後,需要注意如果項目總體使用了LinearSpace,需要取消勾選材質的sRGB選項,避免自動進行Gamma矯正而得到錯誤的結果.
P.S. 關於如何加入隨機播放,簡單說下,只要在shader里加一個offset並暴露出來,然後在C#裏new一個MaterialPropertyBlock,用SetPropertyBlock傳一個隨機值給這個offset就好了.