Camera可以创建深度图、深度+法向纹理、运动向量图。这算是一种简化版的G-buffer,这些纹理图可以用在post-processing中,从而实现自定义的光照模型。我们也可以使用Shader Replacement创建这类纹理图。

Camera虽然内置了创建深度图的功能,但是通常该功能是关闭的,需要在脚本中通过Camera.depthTextureMode来启用该功能。

Unity提供了三种深度图纹理模式:

- DepthTextureMode.Depth:深度图。默认情况下生成的深度值的范围是[0-1],且是非线性分布。

- DepthTextureMode.DepthNormals:同时包含深度和法向量信息。

- DepthTextureMode.MotionVectors:在屏幕空间内,每个像素点在当前帧的运动向量。这是一张RG16的纹理图,只有两个通道,每个通道深度为16。

这几种模式采用的是位标记,也就是说可以两两组合。例如,我需要深度图和运动向量图,可以执行以下操作:

camera.depthTextureMode = DepthTextureMode.Depth | DepthTextureMode.MotionVectors;

DepthTextureMode.Depth texture

此模式会创建一张屏幕大小的深度图。

深度图渲染是在ShadowCaster pass中执行的,ShadowCaster pass也是用来实现阴影采集的Shader pass。因此,如果游戏物体所挂载的Shader不支持Shadow casting,也就是Shader中没有shadow caster pass,那么这个游戏物体不会被渲染到深度图中。

因此,当我们需要渲染某些物体的深度图时,需要保证:

- 这些物体所挂载的Shader或者其fallback中的Shader具有shadow casting pass。或者

- 使用Surface Shaders,然后加入addshadow标识符,使得表面着色器能够生成shadow pass。

需要注意的是,只有"RenderType"="Opaque"的物体会被渲染到深度图中。这些物体被认为是实体,在渲染队列中的编号<=2500。

DepthTextureMode.DepthNormals texture

此模式会创建一张屏幕大小、深度为8、32位的纹理图。其中基于观察坐标系的法向量被存储到R&G通道中,而深度被存到B&A通道中。其中法向量是采用立体投影的方式进行编码,而深度是16位精度的浮点数。

在UnityCG.cginc文件中有一个DecodeDepthNormal可以用来对这里的深度以及法向量进行解码。其中解码后的深度值是范围为[0,1]的小数。

可以参考屏幕空间环境遮罩的图像后处理教程。

DepthTextureMode.MotionVectors texture

此模式会创建一张屏幕大小的、两通道的、RG16的纹理图,每个通道占16位。基于屏幕空间的运动向量就是被编码到这两个通道中,分别表示U、V两个坐标值。

当采样值的范围在[-1,1]时,这表示的是上一帧与当前帧的UV偏移值,因为UV坐标的坐标值范围是[0-1]。

Tips&Tricks

当Camera启用渲染深度图或深度+法向图时,Camera inspactor会有相应的提示语。

使用Camera.depthTextureMode方式获取深度图,当我们想关闭该功能时,需要手动设置:

camera.depthTextureMode = DepthTextureMode.None;

当我们在实现复杂Shader或者图像效果时,我们要考虑到不同平台之间的差异性。

Shader variables

当我们想在Shader中使用由camera.depthTextureMode方法生成深度图时,在Shader中可以声明_CameraDepthTexture变量:

sampler2D _CameraDepthTexture;

_CameraDepthTexture是全局Shader属性,任何Shader都可以声明并访问该变量。_CameraDepthTexture总是指向摄像机的主深度图(我理解的是当前帧第一张深度纹理)。还有_LastCameraDepthTexture,用来指向最后一个深度图(好绕。。。)。例如我们在脚本中使用第二个Camera来获取分辨率减半的纹理图。

如果生成的是运动向量图,那么可以使用_CameraMotionVectorsTexture这个全局属性。

这里强调这些纹理图是使用camera.depthTextureMode方式生成的。因为除此之外,还可以使用Shader Replacement的方式,但是这种方式生成的纹理不会自动写入到上面这几个全局变量中。

Under the hood

本节所讲的深度图,是Camera的内置功能,不需要使用者考虑如何实现。但是这种内置的深度图生成方法,却是与所使用的rendering path和硬件平台有关。通常情况下,Deferred Shading或者Legacy Deferred Lighting这两种rendering path,会自动生成深度图并存放在G-Buffer中。另外,有一些平台在渲染的时候,会自动将深度信息缓存到Depth buffer。如果前面两种情况都不满足的话,那么引擎会额外开一个Pass来生成深度图,这种额外的方式就是Shader Replacement,因此我们需要准确的使用RenderType这个标签。例如"RenderType" = "Transparent"的物体的深度信息可能会采集不到。

MotionVectors纹理图是通过额外开启一个Pass生成的。只有运动的物体会被采集,通过对别前后帧物体的运动来计算像素运动向量。

unity摄影机depth模式_摄像机的深度图相关推荐

  1. unity摄影机depth模式_Unity3d摄像机详解

    一 概述 Unity的相机用来将游戏世界呈现给玩家.你始终至少有一个相机在场景中,你也可以有多个.多相机可以给你一个双人分屏效果或创建高级的自定义效果.你可以让相机动起来,或用物理(组件)控制它们.几 ...

  2. unity摄影机depth模式_Unity3D Camera 摄像机属性详解

    unity3d 摄像机参数 1. Clear Flags: 清除标记.决定屏幕的哪部分将被清除.一般用户使用对台摄像机来 描绘不同游戏对象的情况,有 3 中模式选择: Skybox : 天空盒. 默认 ...

  3. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成高性能高可用组件 Keepalived_03

    服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...

  4. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02

    服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...

  5. 小米6怎么解除温控_小米6性能模式_小米6性能模式怎么关

    小米6性能模式怎么关_小米手机6_MIUI论坛 1080x1920 - 201KB - PNG 小米6性能模式没了 720x1280 - 32KB - JPEG 小米6怎么没有性能模式了_开发者交流_ ...

  6. unity vr是加一个摄像机就行吗_Unity实时光线追踪功能演示项目创作过程

    今年3月,Unity宣布提供针对NVIDIA RTX实时光线追踪技术的支持,实时光线追踪技术为Unity的高清晰渲染管线HDRP加入了逼真的光照质量,给Unity的视觉功能赋予新的潜力. Unity中 ...

  7. Unity unsigned(debug) 模式下的签名理解

    用unity打包apk时,通常渠道都会进行二次签名,因此经常有人选择签名时用Unity unsigned(debug) 模式,但是也有部分渠道不会去重新签名(比如360),这个时候每次更新包,就必须用 ...

  8. unity 飞机 残骸模型_训练残骸模式– Java 8中的改进实现

    unity 飞机 残骸模型 Venkat Subramaniam在今天的演讲中提到了有关"级联方法"模式或"火车残骸"模式的内容,如下所示: >someO ...

  9. unity vr是加一个摄像机就行吗_《狮子王》:引入VR虚拟制作技术的真人动画电影...

    迪士尼动画电影<狮子王>自2019年7月12日上映以来,排场几近爆满,深受影迷喜爱,目前三天多的票房总计已高达四亿.其实从去年11月23日爆出预告片以后,迪士尼动画粉的胃口就已经被吊了起来 ...

最新文章

  1. libpcap-mmap分析(五)
  2. 【自动驾驶】26.【很清晰】旋转矩阵,欧拉角,四元数,旋转向量和齐次变换矩阵
  3. OpenV P N + AD(Ldap) + GoogleAuth认证安装
  4. 常见的C#异常及其修复方法
  5. 数据结构:排序算法之交换排序(冒泡排序、快速排序)
  6. [BJWC2011]元素
  7. IBM将剥离传统IT基础设施部门;迅雷前CEO陈磊涉嫌职务侵占罪被调查 ;Python 3.9发布|极客头条
  8. python函数编写_python 函数编写条规-阿里云开发者社区
  9. python字符串 切片_Python切片字符串
  10. python读图片生成ROI并保存
  11. c语言城市交通灯优化,城市智能交通灯系毕业设计论文.doc
  12. 迅捷PDF编辑器怎么编辑修改PDF文件?
  13. 烧牛肉,烧肥肠,泡椒兔,炸胡豆炸豌豆?做法指南
  14. 连平县新视界-连平2018年公开招聘教职员66人
  15. 小孩子爱玩手机学计算机编程好吗,学习编程教育对孩子的哪些重要意义
  16. windows7微软官方_Microsoft Windows 7 | 第1部分
  17. NOIP 2017 游记
  18. 有些爱意,在岁月中飘遥
  19. 安全漏洞中的倚天剑——XSS跨站脚本攻击
  20. 单枪匹马撸个聊天室, 支持Web/Android/iOS三端

热门文章

  1. 蓝牙耳机已连接电脑仍外放
  2. 为什么微信分享的链接有的会有logo图和描述,有人分享的却没有呢?
  3. 短信群发的前景如何?是朝阳还是夕阳?
  4. 截取字符串方法?(js)
  5. JavaScript深拷贝封装
  6. Django深入研究(URL编写、视图探究)
  7. android盒子安装windows,Android TV x86发布:吃灰老电脑秒变高清盒子
  8. JAVA后端需要会js吗_Java后端需要掌握的JS-------BOM
  9. redis三种模式对比
  10. SURF C++代码 详细阅读(三)—— SURF描述符