[Unity3D]如何渲染一个在camera frustum外面的物体
来源:互联网 发布:tomcat 域名绑定 编辑:程序博客网 时间:2024/05/17 22:17
摘要
每个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 = 0v2f 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需要画出远处的物体,该怎么办。
就这么办。
0 0
- [Unity3D]如何渲染一个在camera frustum外面的物体
- [unity基础教程] Unity3D 一个物体在两个物体间移动
- Ogre 如何渲染简单的几何物体
- Ogre 如何渲染简单的几何物体
- Ogre 如何渲染简单的几何物体
- Ogre 如何渲染简单的几何物体
- Ogre 如何渲染简单的几何物体
- 在一个物体上如何调用另一个物体上的脚本
- unity3d在android的场景中选择一个物体让他旋转平移
- 透明物体的渲染
- 透明物体的渲染
- unity3d 在一个空心圆范围内随机生成物体
- unity如何在一个场景中使用另外一个参加烘培好的物体
- unity3d 从一个物体的自身位置向前发条射线
- unity3d 如何得到当前物体播放的动画
- unity3d 如何得到当前物体播放的动画
- unity3d中教你如何获得物体的尺寸
- unity3d 如何得到当前物体播放的动画
- 拷贝构造函数 -百度百科
- 移植Boa服务器到S3C2440
- java方面中,参数后面跟三个点(...)的含义---例如String...
- VC实现SMC加密技术
- pppoe抓包流程和拨号流程
- [Unity3D]如何渲染一个在camera frustum外面的物体
- DCT算法可以说是有损压缩的第一步,多用在视频压缩方面。
- Groovy入门教程
- Android两种常见错误(ANR和FC)解决办法
- C++文件读写详解(ofstream,ifstream,fstream)
- leetcode - Container With Most Water
- JAVA连接oracle数据库代码
- Jump Game - LeetCode 55
- MATLAB中Legend的一些控制方法