第一版-世界观#

Data: 2026-03-01 16:59:51

我现在说一下我的这个三维世界的 世界观。

这个世界,有 四类物体,

  • 宝石,是靠近才会显示的,是物体的细节。
  • 木板,是在正常距离显示的,比如建筑的墙壁。
  • 小屋,是离得略远,但不至于太远时显示的,毕竟 电脑 内存有限,总得显示吧,但不能显示很清楚。节省内存。
  • 天际线,是离得很远很远时显示的。

于是为了方便切换,智商笨拙的蠢蛋的我,发明了 万数块 系统。

然后就是靠实例化独立体(因为实例化物体,更改实例化数量,貌似有点难,甚至影响性能??也不方便计算),里面填充不同数量的模型来区分。

这个系统 万数块 ,里面有三种,万数块、单数块、百数块 三种,统称万数块。

万数块,里面是和我引擎紧密相连的,我的引擎内部,容积是固定的,是 100w ,所以 万数块 系统是用来管理这个 100w 的,每个物体都等于入档案了,是「有名有姓」的,有自己的 index-id 。可以被删除等等。

每个入档案的物体,都有个 dpz ,原意是什么我忘了,我引擎内部,根据每帧的对主角的位置计算,然后根据 map、set 和每个物体内部储存的 区块,可以决定自己是显示,还是隐藏(单个显示,GPU 受不了,一般这里只决定是否是物理化的,)?!

不同的 dpz 是不同的距离控制。核心代码注释如下。

/**
 * DPZ 的单个区块面积大小,可认为该单位半径圆外接方内有效
 * 物理效果生效的前提是,物体最长长度应小于该 DPZ 的值的两倍,如 DPZ=4,就要小于 2*5=10。
 * dpz 的值建议物体:
 * 0:任何时候都显示
 * 1:远远看到(如,图书馆超级简单简模与普通简模的分界)
 * 2:可在附近大区块显示的建筑模型(如,图书馆简模与详细轮廓的分界)
 * 3:远远看着就显示的(如,图书馆内装修)
 * 4:走进才能看到(如,显示图书馆里的书本)
 * 5:小角落里才能看到的特殊纹理(如,书本上详细的字)
 * (与 DPZ 值挨个对应,从 0 开始)
 */

然后这个 dpz 也意味着,在激活删除的瞬间,会有激活删除函数,供开发者去使用。

因为我引擎,管理着物体的 物理 嘛,主角需要物理。这个是单个控制的。

而万数块,则是控制 1w 个物体为一个整体作为实例化进行渲染的。这样显卡能吃得消。每个万数块,都是一个 实例化整体。相同的道理,百数块、单数块 也是如此。

总之万数块是管理。

宝石,细节多,我本来设计是 1w 的实例化容器去装的。 木板,则是百数块。 小屋,我觉得也是百数块吧。 但天际线呢????

问题就来了,单数块,其实我在创建时,3000 个建筑,要录入我的引擎物理系统,才能激活 dpz 嘛。

现在单数块已经被填完了,因为我发现,单数块,根本不能用于被显示!!!只能用于储存 入档案 信息。

为什么???

因为显卡吃不消那么多 实例化 ,因此,显示只有 百数块和万数块 可以被用,单数块只用于储存那个档案信息。

百数块当前容量是 1200 个,极端情况下确实可以显示 1200 个实例化单体不卡顿,但单数块,1w 个,是绝对不行的。

而 1200 个根本不行。

于是我想搞一个独立的 实例化单体,不受系统的侵扰。然后根据动态检测当前的世界,将天际线始终完美的展现。。。。。

也就是,离得远的时候,看得见天际线,等距离达到 小屋 级别,则动态软删除(将指定位置的块块放到一个很远的地方,形状也很小),离得远了,再回来。

- end -#

© 2025 –   海牧羽工厂 HMY Factory