HoloLens 是以怎么样的顺序对场景进行建模\u0026渲染的
关于它的『渲染顺序』,核心思想是权衡或者折衷(tradeoff)。就像是个经济学问题,CPU、GPU、HPU资源有限,你要用有限的资源去渲出更优化的 mesh 。(一直记得经济学第一课老师一直叨着:『资源是有限的,要用最小的资源做最大的事=_=』)一年前我参与了一个基于手机端的AR应用,当时会拿不同配置的手机制定缓存策略(caching strategy)。储存、渲染、处理这些 Spatial Surfaces ,都会耗费大量的计算资源和储存资源。所以就需要用到『缓存』。
所以 Hololens 内容开发的产品经理就要思考:怎样经济地使用资源,而使结果最优?哪些 mesh 应该留着,哪些应该丢弃?哪些 mesh 应该提前加载?比如用户走过一个空间的时候,你就要思考用户是怎样通过一块空间的?用户可能需要用到哪些物体的 surface ?在什么时候,有哪些 surface 会被用户看到?……
一般有两种情况会耗费大量的渲染资源:一种是空间太大,比如你在你一个大盆地或者峡谷或者操场,场景太大,从而导致消耗大量渲染资源,而不得不把 surface 和 mesh变成低精度的;而在家里或者室内的一些小型空间则因为量小,所以可以做到高精度的。第二种就是图层太多,所谓『图层』,就是很多东西,一层一层有层次地排列在那里,不管这些物体是真实的还是虚拟的……但是图层之间因为距离用户(或者说hololens上的深度摄像头)的远近不同,近处遮挡远处的。一旦物体被完全遮挡以后,那一块 surface 就暂时不需要渲染。但是如果挡住以后又马上需要渲它,那还不如留着。不过当用户走开以后,spatial surface 可以暂时隐藏起来。—————————————————————————————————————你刚打开 Hololens 的时候是先加载离你最近的地方和你的视觉前方,而你在空间中走动时空间的 surface 更新,也是先加载那里。先 spatial mapping 脚下的部分,当然你自己也被 spatial mapping 成一个低精度的 了。
Surface 加载的时候是以用户为中心向四周扩散并加载的(一般是以用户为中心的2米内,而2米,刚好是HoloLens 所说的『舒适距离』。充分体现了『以用户为中心的设计理念』,嘿嘿嘿~)从中心向四周加载,而这个中心就叫 Surface Observer 。surface ,一种是『加载』,是从无到有的过程,一种是『更新』,是你走过了这片已经 mapping 了的空间,或者你对现实的物理空间进行了改动。所以『加载』的优先级高于『更新』。
(注意mesh的边缘,经常是多个surface observer同时向四周扩展的时候需要缝合或者重叠。)
然后再渲视觉中心!重点 mapping 的区域叫做 当前显示区域(current display frustum)。(而 frustum 这个词翻译过来叫『椎体』,让我想到了人眼的椎体细胞,锥体细胞所在的区域,正是视觉中心!!)而你看不到的地方一般低精度地一笔带过或者干脆不渲了~然后就节省了一部分CPU、GPU、HPU资源……
推荐阅读
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 青年|一汽奔腾T77怎么样?车主吐槽:后排座椅太短,和坐小板凳似的
- 电商网站支付流程的流失率是怎么样的从用户点击充值/支付按钮,到支付完成,其中每一步的流失比率都是咋样的
- 中兴努比亚 Z5 的边框到底有多窄
- 作为一个服装供应商,怎么样与淘宝卖家沟通才能卖出自己的产品或者拿到订单
- 在丁丁租房工作的感受是怎么样的
- 城市数据团是怎么样一个团队
- win7中本地连接跟无线网卡同时使用时是怎么样的模式
- 猫扑网南迁广西,媒体唱衰BBS,论坛的未来会怎么样怎样改变
- 被人围攻是怎么样一种体验,包括但不限于(蛋糕,口舌,拳脚,西瓜刀,机枪,code review)
