别墅室外怎么建模?
楼主遇到的问题应该是如何把实际的建筑,准确的还原到游戏世界里去,这里分两个方面讲:
一、游戏世界与现实世界的尺度 很多答主给出了各种建议和方法,但可能并没有真正抓住问题的核心。如果仔细思考一下,你会发现,楼主遇到的问题,本质上是个“尺度”问题——即,如何将真实的世界,精准还原到游戏世界中。
任何渲染好的模型和贴图,都只能近似地表达现实世界,因为电脑屏幕不可能无限大;而任何真实的建筑,也根本无法完全还原到游戏世界中,因为游戏的视野范围一定大于现实中的眼睛。 所以,关键不在于怎么建立模型,而在于我们如何确定两个世界间合适的尺度。
二、合适尺度的确定 我们知道,在摄影领域有“近大远小”的透视规则,而在3D世界里也有类似的原理,即物体离我们越远看上去就越小。所以,只要保证远方物体的相对大小是接近真实的,我们就实现了现实与游戏的尺度转换。 而影响视距(视角)远近的参数有很多,如模型的面数、细分、插值等,这些在U3D中很好控制,而最困难的在于如何找到合适的参考基准。
在《侠盗猎车5》里,有一个叫做“Blame Lofty”的任务,需要我们把一辆车开到山顶上并停车,这个任务的目的就是获取远处一座塔的精确高度。 现实中,我们可以直接测量塔的高度来代替游戏世界的距离,但是如果在游戏中我们本身的位置离塔不远,那么测量的结果就会失真。所以,本任务的关键不在于如何测量,而是寻找一个合适的“参照物”——即以这个参照物的基线高度作为衡量距离的基准。 在游戏中,山是一个很好的参照物,因为每座山的纹理都在屏幕上以一定的比例显示,只要我们找到山腰处的纹理,就能够确定“山脚”(游戏世界基线高度)的位置。然后再根据需要,调整车辆与山的相对位置即可。 但问题是如何找山腰?我尝试了使用“Ray.Targets”(U3D原生不支持)追踪方法,但发现效果并不理想,最后只能放弃。
其实,山本身就是一种近似,由于软件和硬件的限制,我们无法追求绝对的准确。所以,最终我还是选择了最低成本的解决方案:把所有建筑物都简化成立方体后,再利用“视觉错觉”——将几栋房屋连在一起的地方用一条直线连接,作为所有房屋高度的基准。然后,根据“视距”的原理,计算出每个房屋与这条基线水平方向的偏移量和缩放比例,从而得到所有建筑的精确高度。
最后的话 最后,我想强调一点,无论我们如何用物理的方式来构建虚拟世界,我们的目的永远都是通过最为便捷简单的方式,来尽可能逼近真实。在面临难以两全其美的选择时,优先选择成本低且能接近真实的一方面,或许是最为明智的选择。