我一直在将自定义地形系统(作为Unity地形的替代方案)作为一个小型副项目来开发,其核心理念是尽可能让地形在内存带宽和逐像素着色方面保持轻量化。目标是面向那些老旧的入门级PC,比如搭载Intel HD 620显卡的笔记本电脑之类的设备。
我有一个想法:完全抛弃纹理,将所有地形数据存储在可读写网格中。网格只有顶点位置,仅此而已。由于地形通常只需要高度图,我将Color32数据打包到position.x中,将自定义光照贴图器生成的烘焙全局光照/环境光遮蔽(GI/AO)作为Color32打包到position.z中,而position.y则保留为高度。这需要在着色器中进行插值才能获取xz位置,而不是直接读取,但到目前为止,在低端硬件上这似乎是一个很好的权衡,比起增加网格内存要好。
草丛完全通过CPU从网格数据中程序化生成,碰撞则通过脚本而非物理系统处理,没有网格碰撞器。
无论如何,由于我对此并非真正的专家,我想问一下:我现在的做法将来会不会导致什么实际问题?或者将非位置数据打包到网格顶点位置中有什么“坑”需要注意吗?
评论 (0)