2016-05-12 206 views
0

我目前正在Unity 5中的一個項目上工作。我正在嘗試着使用Camera.RenderWithShader將一個着色器應用到我的相機之一,然後讀取並保存圖像。下面是代碼:Camera.RenderWithShader函數無法正常工作

Texture2D screenshot = new Texture2D(this.screenWidth, this.screenHeight, TextureFormat.RGB24, false); 
this.mainCamera.RenderWithShader(this.myShader,"RenderType"); 
screenshot.ReadPixels(new Rect(0, 0, this.cameraWidth, this.cameraHeight), 0, 0); 

的問題是,在我的截圖質地保存爲位圖,着色器不應用於整個圖像上。

但是,如果我使用Camera.Render()並使用OnRenderImage(RenderTexture,RenderTexture)來應用着色器,它可以工作。

void OnRenderImage(RenderTexture source, RenderTexture destination) 
{ 
    Graphics.Blit(source, destination, this.disparityMaterial); 
} 

所以,我的問題是:這兩種方法,我怎麼可以讓Camera.RenderWithShader功能正常工作之間的區別是什麼?

回答

1

RenderWithShaderOnRenderImage是兩個完全不同的東西,彼此無關。
詳細內容請閱讀鏈接手冊頁和更好的理解,但長話短說:
此前被應用的着色器的所有(遊戲)對象的攝像機可以看到沒有應用於任何圖像濾鏡所以基本上它是關於使用不同對於相同的對象/預製件/材質的着色器,可以根據需要爲查看器更改某些內容(在您的情況下,GO也應該將其標籤設置爲「RenderType」,否則着色器將不會應用於它們),
但是一個是「後期處理」功能,在已經呈現的圖像上僅應用。即一個image effect功能。

因此,以前的一個很好的用途是例如夜視開/關,或者用玩家可以將手放在(mmmmm)等特殊眼鏡上的小雞去除布,而後者顯然只是圖像效果,例如,一個祕密特工在一個手指殺死敵人的同時拍照,但是當他被擊中時,他的裝備越來越受到損害,因此以英特爾爲代表的照片變得越來越模糊,破碎等等 - 如果這是有道理的。