Camera.activeTexture 和 Camera.targetTexture在get的时候有什么本质区别吗?

发布于 2017-02-01 04:55:01 字数 265 浏览 1079 评论 2

大家好, 有个问题一直有个疑惑,Camera.activeTexture 和 Camera.targetTexture在get的时候get到的是一个RenderTexture吗? 我知道这两个的区别是一个只能获得当前所正在渲染的RT,一个是既可以获得也可以设置渲染目标,但这样我就不知道activeTexture有什么必要性了。 还是说我对这两个的理解有错误呢?

还有大家平时说的backbuffer,在我渲染目标一直是屏幕的时候,是不是这两个方法获得的都是backbuffer?

谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2020-05-02 17:14:01

第一个问题:Camera.targetTexture是必须在相机指定了render target才会非null,Camera.activeTexture获取到的值和调用的时机有关系,官方文档中写着可以在OnPostRender中获取到,比如使用了后处理,在OnPostRender中可以获取到后处理申请的RT,在Update中是获取的话就是null。如果给相机设置了RT的话,那么targetTexture就是设置的RT,如果没有开启HDR的话,在OnPostRender中activeTexture获取到的也是这个RT,如果开启了HDR,则是一个另外申请的RT。

第二个问题:推荐使用RenderDoc查看渲染状态,分为两种情况,在安卓平台上开启了Always Blit和没开启会不一样。开启了Always Blit,会在最后多一个Present的过程,在Present之前,会将所有的渲染渲染到一个叫tex的RT上(这里不考虑后处理以及HDR导致生成了额外的RT),在Present的时候将tex Copy到Backbuffer里面。如果没有开启AlwaysBlit,比如Blit Type是Never的话,那么所有的渲染都是直接渲染到Backbuffer的(这里同样不考虑RT的情况),Blit Type为Auto的时候没有弄出来什么情况会多一个Present,在线性空间试了也不行。。。Backbuffer和那个用来Present的tex这两个对象都可以理解为系统提供的,从C#脚本中是没法获取到的,而且从Profiler里面也是看不到这两个对象的大小的。

总结起来就是:大部分情况下Camera.targetTexture都是为null的,除非相机设置了RenderTarget。
对于Camera.activeTexture,这个需要看调用时机,在OnPostRender中调用,如果有使用后处理或者HDR,则可以获取到申请到的RT,在Update里面获取是null的,其他的函数阶段没有详细测试过。

对于Backbuffer,这个系统是提供的,C#脚本是获取不到的。而且不一定是直接绘制到Backbuffer的,就算没有使用后处理或者HDR,如果开启了Always Blit,也是会多一个中间层的,在最后阶段中间层会Copy到Backbuffer。

清晨说ぺ晚安 2019-08-04 20:12:39

感谢您的回答

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文