top of page
简易我的世界

项目总览
程序化生成
基于Perlin Noise的程序化地图生成,包含草地、泥土、海滩、雪原、河流、海洋并且根据不同的地形生成各种植被

程序化生成
每个Chunk程序生成代码
Hidden Surface Removal
通过使用背面剔除来剔除 99% 的面以优化性能,即使有1 亿个块,也能保持大约600 FPS。对于每个块,只有当相邻块为空气时,我才将顶点信息放入顶点缓冲区。

Hidden Surface Removal
每个方块Hidden Surface Removal的代码
基于体素的光照
每当玩家放置一个方块时,该方块都会使用方块迭代器检查所有附近的方块(16x16),并进行光强度衰减(初始强度为 16,迭代每个方块时为 -1)重建Chunk,并根据光强度在着色器中设置亮度。

将 GlowStone 放到世界中

体素光照传播
放置/移除方块时把Chunk标记为Dirty并处理灯光
放置/挖掘方块
我使用了快速射线投射与方块相交,并且在此基础上,为了提高性能,我还使用方块迭代器来加速相交过程。

将方块放置到世界里
方块迭代器类的代码
使用方块迭代器进行射线投射
地图流式加载
我使用多线程根据玩家 的世界位置每帧仅加载一个Chunk(32768个方块) ,并取消最大半径之外的Chunk。
通过距离雾来掩盖新Chunk的加载。

地图流式加载和雾
地图流式加载代码
截图

sm1

sm3

sm4

sm1
1/4
bottom of page