[Unity3D]如何渲染一个在camera frustum外面的物体
2015-06-20 20:40
393 查看
摘要
每个camera都对应一个六面体,如果某物体完全与这个六面体不相交,则会被剔除,不会被渲染。但是又非得画这个物体,怎么办呢。正文
强行更改物体的bound。在该物体的vertex shader中设定特殊的、指定的SV_POSITION。
这样能发生什么:
用代码强行更改一个物体的bound,变大或者移动。如果这个bound和camera的frustum相交,则Unity不会对其剔除,那么这个物体的shader将被执行,在vertex shader中再修改SV_POSITION,就可以让该物体在指定的位置渲染,far clip,near clip,或者其他位置。
//将vertex移动到far clip位置。同理移动到near clip对应o.vertex.z = 0 v2f vert(data i){ v2f o; o.vertex = mul(UNITY_MATRIX_MVP, i.vertex); o.vertex.z = o.vertex.w; return o; }
上面所说的方法可以实现下图中的功能:
有些时候,如果物体与far clip部分相交,那么可以采用下面这种方式来实现对物体部分vertex的修改:
v2f vert(data i){ v2f o; o.vertex = mul(UNITY_MATRIX_MVP, i.vertex); o.vertex .z = min(o.vertex .z, o.vertex .w); return o; }
上述shader将far clip外的vertex都显示了出来,又保证了far clip内的vertex的depth信息。
最后
在大型3D场景中,camera的nearclip和farclip差的太大会产生Zfight,避免这个的方式是采用两个camera,区分layer来渲染。一个camera负责近处,一个负责远处,那么如果近处的camera需要画出远处的物体,该怎么办。就这么办。
相关文章推荐
- jquery mobile动态添加元素之后不能正确渲染解决方法说明
- camera录制视频的缩略图获取原理心得分享
- android系统在静音模式下关闭camera拍照声音的方法
- 浏览器加载、渲染和解析过程黑箱简析
- Android变形(Transform)之Camera使用介绍
- Android Camera是否支持变焦的判断方法总结
- Camera Framework学习笔记(1)
- Linux下使用V4L2读取获取拍照(获取静态图像)
- 什么是渲染
- Android camera使用
- 浏览器渲染过程中的reflow是什么
- 反编译ARB program to GLSL shader日记
- 虚幻3引擎
- 基于顶点纹理的无限大海水仿真
- 图形加速卡技术 [专业的基础技术文章]
- 关于VR(主要是虚拟城市场景)的一些想法及实现(可能会连载)
- 编译ics
- 项目中的简单shader
- Simulating Ocean Water
- 在c++中模以”委托“