Camera.RenderWithShader功能无法正常工作

时间:2016-05-12 10:36:26

标签: c# game-engine unity5

我目前正在使用Unity 5中的一个项目。我正在尝试使用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 个答案:

答案 0 :(得分:1)

RenderWithShaderOnRenderImage是两个完全不同的东西,彼此无关。
阅读链接的手册页了解详情和更好的理解,但长话短说:< br /> 先前将着色器应用于相机可以看到的所有(游戏)对象,而不使用任何图像过滤器,所以基本上它是关于为相同的对象使用不同的着色器/预制件/材料以你想要的方式改变观察者(在你的情况下,GO也应该将他们的标签设置为“RenderType”,否则着色器将不会应用于他们), Latter < / em> one是一个“后期处理”功能,仅对已渲染的图像应用过滤器 。即一个image effect功能。

因此对先前的功能有很好的用途。开启/关闭夜视,或用玩具可以放手(mmmmm)等特殊眼镜从小鸡上取下布料,而后者显然只是图像效果,例如一个秘密特工在单手杀死敌人时拍照,但是当他被击中时,他的装备越来越受损,因此作为英特尔拍摄的照片变得越来越模糊,破碎等等 - 如果这样做有意义的话。 / p>