我試圖編寫一個後期處理效果,改變最終繪製到屏幕上的內容。但是,這需要獲取當前正在繪製的內容,對其進行修改,然後再繪製回來。遇到後期處理效應的問題
前兩個步驟似乎工作得很好。第三步......呈現灰色。
public class PostProcess : MonoBehaviour {
void OnRenderImage(RenderTexture src, RenderTexture dest)
{
Texture2D proc = new Texture2D(src.width, src.height);
proc.ReadPixels(new Rect(0, 0, src.width, src.height), 0, 0);
Color[] line = proc.GetPixels(src.width/2, 0, 1, src.height);
Debug.Log(line[0] + " : " + line[line.Length-1]);
proc.Apply(); //per comments
Graphics.Blit(proc, dest);
}
}
我的目標是最終採取從的Texture2D拉着線,並把它放回質地在另一點,創造了失真。我目前得到的是沒用的。我可以看到Texture2D.ReadPixels()
調用完美無缺地執行,因爲我可以看到該UI圖像的紅色像素在紋理中可見(通過調試線),而在該列頂部爲黑色(這是正確的:相機呈現固體黑色背景,而不是天空盒)。但是,紋理回到屏幕上會導致無用的灰色。
如果我做Graphics.Blit(src, dest);
而不是,那麼它渲染場景就好了。
更新
添加proc.Apply()
後屏幕不再灰色。它是,但是嚴重扭曲:
現場查看接近相機應該呈現什麼,而相機視圖顯示什麼實際渲染(再次,沒有空中包廂,但打開它使得整個視圖紅色和紫色暴動)。
更新2
我給的東西敲擊運行的不同(舊的)版本的Unity annd的......它工作在不同的機器上。我應該已經意識到它可能首先是一個Unity bug(這是我在第5.6版中找到的第第三個和本週的第二個)。
嘗試添加proc.Apply(); ReadPixels後 – JoRouss
@JoRouss感謝您的應用()'調用,肯定有幫助。 – Draco18s
@JoRouss嘿,取消刪除你的答案,事實證明,第二個問題是一個團結的錯誤。 – Draco18s