首页 > 编程知识 正文

unity onrenderimage

时间:2023-05-05 02:10:17 阅读:157688 作者:4213

我现在在做一个小项目。 需要实现战争的雾的效果。 参考了很多文章,有各种各样的方案。 其中之一是使用照相机的后处理技术显示雾的纹理。

于是我们进行了实验,编写了cs脚本,响应OnRenderImage方法,将脚本添加到了camera中。

将graphics.blit(source,destination,mat )添加到OnRenderImage

我的理解是,source是屏幕图像,destination是最终显示的图像,中间的处理在mat中进行。mat是材质球和纹理的软件包。所以需要纹理贴图和材质球

因此准备纹理贴图,写shader来处理这个纹理贴图。shader很简单,就是去掉纹理的颜色然后直接返回。

然后,将材质球和纹理添加到材质中。 将纹理指定给_MainTex,并将材质指定给此cs。 (也可以手动创建。 我在外部创建,并分配给脚本的成员变量。 ) )

我的理解是,最终应该会显示出我赋予材质的纹理。

但是,出乎意料的是,显示的是原来的屏幕。 为什么没有显示我的纹理贴图呢?

我开始觉得自己哪里错了,进行了各种各样的调试和实验。 去掉这个词,显示黑屏也没关系,证明了OnRenderImage是工作。 回到纯颜色的表示也没关系,shadert也证明了是工作。

怎么想都不知道。

那么,为什么不显示我的纹理,而是显示原来的屏幕图像呢?

本来问题就出在blit的结构上。 blit是默认情况下为材质指定source的_MainTex。 因此,你处理的纹理实际上是source,而不是自己设定的纹理。 除非重命名_MainTex或将source设置为null。

以前,我看到过示例中的source在cs上手动设置为_MainTex。 这误会了我,我以为必须手动设定。 其实没有必要。 官方文档中也有说明

于是改名为_MainTex,实验成功,最终在画面上显示出了自己的纹理。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。