我目前正在使用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
功能正常工作?
答案 0 :(得分:1)
RenderWithShader和OnRenderImage是两个完全不同的东西,彼此无关。
阅读链接的手册页了解详情和更好的理解,但长话短说:< br /> 先前将着色器应用于相机可以看到的所有(游戏)对象,而不使用任何图像过滤器,所以基本上它是关于为相同的对象使用不同的着色器/预制件/材料以你想要的方式改变观察者(在你的情况下,GO也应该将他们的标签设置为“RenderType”,否则着色器将不会应用于他们), Latter < / em> one是一个“后期处理”功能,仅对已渲染的图像应用过滤器 。即一个image effect功能。
因此对先前的功能有很好的用途。开启/关闭夜视,或用玩具可以放手(mmmmm)等特殊眼镜从小鸡上取下布料,而后者显然只是图像效果,例如一个秘密特工在单手杀死敌人时拍照,但是当他被击中时,他的装备越来越受损,因此作为英特尔拍摄的照片变得越来越模糊,破碎等等 - 如果这样做有意义的话。 / p>