Unity3D中摄像机常用技巧Dolly&nbs…
来源:互联网 发布:vb.net 十秒后跳转 编辑:程序博客网 时间:2024/05/18 02:44
最近学习Unity3D文档的过程中,看到了几种关于摄像机的技巧。其中Dolly Zoom和ObliqueFrustum属于摄像机的特效,而Occlusion Culling属于摄像机的优化。这里稍微总结一下。
2)ObliqueFrustum,偏移的视锥面。一般来说,摄像机的中心射线穿过视锥面的中心,视锥面围绕交点中心对称。然而通过调整视锥面对于该交点的偏移,包括水平偏移和垂直偏移,可以在视图上制造一种偏移效果。详细介绍看这里。
3)Occlusion Culling,遮挡裁剪。unity自带了Frustumculling,在视锥体外的对象是不参与渲染过程的,这可以避免每一次渲染都要渲染整个场景,大大减少了渲染的时间。然而,很多情况下,视锥体内的对象会发生相互遮挡的现象。例如,角色处于室内,墙壁则遮挡了室外的所有对象。考虑到这种现象,unitypro提供了OcclusionCulling功能。但是这种功能不是默认使用的,需要人为调用。详细参考这里。主要分为3个步骤:
1)DollyZoom,即滑动变焦,是一种常用的摄影技巧。这种技巧可以突出场景中的目标对象,目标对象来摄像机移动的过程中基本保持不变,而目标对象周围的景物则产生一种剧烈变化的扭曲效果。具体可以参考这里。
在unity中,Dolly Zoom效果也非常容易实现,可以参考unity的官方文档这里。主要分为两个步骤:
第一步:初始化过程中,通过当前摄像机的FOV角度和摄像机到目标对象的距离Distance,计算并保存目标对象的视锥体截面高度FrustumHeight。
第二部:在移动摄像机的过程中,通过当前摄像机到目标对象的距离newDistance和保存的FrustumHeight动态调整FOV角度。
2)ObliqueFrustum,偏移的视锥面。一般来说,摄像机的中心射线穿过视锥面的中心,视锥面围绕交点中心对称。然而通过调整视锥面对于该交点的偏移,包括水平偏移和垂直偏移,可以在视图上制造一种偏移效果。详细介绍看这里。
应该注意的是,ObliqueFrustum的效果以及直接调整摄像机的旋转角度的效果的细微差别。前者的视锥体的中心射线是保持不变的,而后者是变化的。通过观察下图中两个立方体的细微差别可以清楚发现。
3)Occlusion Culling,遮挡裁剪。unity自带了Frustumculling,在视锥体外的对象是不参与渲染过程的,这可以避免每一次渲染都要渲染整个场景,大大减少了渲染的时间。然而,很多情况下,视锥体内的对象会发生相互遮挡的现象。例如,角色处于室内,墙壁则遮挡了室外的所有对象。考虑到这种现象,unitypro提供了OcclusionCulling功能。但是这种功能不是默认使用的,需要人为调用。详细参考这里。主要分为3个步骤:
第一步:设置相关参数。其中Smalloccluer影响遮挡准确度和记录文件的大小。越小,则越准确,同时记录文件越大。
第二步:设置OcclusionArea。OA的作用有2个,第一是如果超过OA的范围,则OC失效。第二是OA限制了动态物体的活动区域,超过OA范围的动态物体不参与OC。在没有设置OA的情况下,OA默认为整个场景。
第三步:进行预计算和调试。可以发现,使用了Occlusionculling之后,场景中的部分对象已经不参与渲染了。
总结:
1)对于Occlusion culling,场景中的大部分静态物体应该标记为occluder static和occludeestatic。前者表面该物体可以遮挡其他物体,后者表面该物体可以被其他物体遮挡。但是也有特例,例如玻璃门应该是不可以遮挡其他物体但是可以被其他物体遮挡。
2)应该检查Occlusion area,确保需要参与OC的动态物体都在OA范围之内。
0 0
- Unity3D中摄像机常用技巧Dolly&nbs…
- Unity3D中摄像机常用技巧Dolly&nbs…
- Android中dispatchTouchEvent,&nbs…
- F4IF_INT_TABLE_VALUE_REQUEST&nbs…
- BAPI_ACC_DOCUMENT_POST&nbs…
- 研究员常用资源网址汇总&nbs…
- FaceBook 代码中重要备份&nbs…
- eclipse MyEclipse中安装&nbs…
- 在Matlab中通过JDBC连接Oracle&nbs…
- 转:UISwipeGestureRecognizer&nbs…
- util.NestedServletException:&nbs…
- Start/stop Oracle&nbs…
- zoj2008 || poj1511&nbs…
- 转Struts2+Spring2+Hibernate3&nbs…
- unsupported major.minor&nbs…
- iOS UIDeviceOrientation&nbs…
- LinearLayout和RelativeLayout&nbs…
- Remove WifiStateTracker&nbs…
- cocos2d-x内存管理初步窥探之retai…
- cocos2d-x 使用 cocostu…
- coco2dx使用控制台输出LOG信息
- unity3D中阴影渲染的shadow a…
- Unity3D中的Grobal Illuminit…
- Unity3D中摄像机常用技巧Dolly&nbs…
- The Zen of Python / Python之禅
- python\split\join
- 8051寄存器
- java中Map集合总结
- tx标签配置事务却无法回滚
- 【Python]五分钟理解元类(Metaclasses)【转载】
- 作业7.10
- 【笔记】Java与内存屏障