游戏思考09:服务器地形

【第一章】游戏中地形管理概念的基础

1)什么是地形,为什么要有地形管理

  • 什么是地形?

terrain - 山川河流平原沼泽

  • 为什么要有地形管理?
    1)用数据描述地形信息
    2)组织高度,阻挡信息数据结构
    3)提供高效定位访问机制
    4)为上层模块提供定位服务(最重要的服务,换句话说服务器地形更多的是承载一个校验的功能,精度不必像客户端那么精密

2)地形管理角度的游戏发展史概述(在服务器怎么描述地形数据?)

2D游戏
  • 2D游戏
    1)视角锁死
    2)建筑不可进入,没有多层信息
  • 2.客户端
    2D地形贴图
  • 3.服务器
    1)Grid网格(客户端的地图在服务器就是二维数组,也叫Grid网格,没有高度信息,只有二维网格)
    2)无高度信息,只有阻挡信息
2.5D游戏
  • 2.5D游戏
    1)视角不固定
    2)建筑不可进入,没有多层信息
  • 2.客户端
    3D地形场景
  • 3.服务器
    1)2D Grid网格
    2)无高度信息,只有阻挡信息
3D游戏
  • 3D游戏
    1)开放视角
    2)建筑可以自由进入
    3)自由跳跃,自由轻功移动,可见即可达

  • 2.客户端
    3D地形

  • 3.服务器
    3D地形

【第二章】服务器端地形管理实践

在这里插入图片描述

1)服务器2D地形是以Grid Mask 网格,也就是二维数组实现的

  • 格子解释
    1)二维数组
    2)(x,y)二元组即可描述对象位置
    3)用Mask标记格子属性
1)是否可以行走(可进入)
2)是否是水面
3)是否是沼泽
4)ect...

在这里插入图片描述

  • 格子大小(一般来说是以50cm为一个单位)
    1)格子太大,对于客户端来说不精准,锯齿形太大,在一些边缘的地方容易穿帮
    2)格子太小,对于服务器额外的计算压力太大

2)服务器3D地形实现 – Grid Layer 网格

  • 背景
    一开始是用的Grid Layer网格这种技术来做的,相当于把GRID网格扩展了一下,GRID网格只有一层
  • 简介
1)由二维数组变成三维数组(新增layer一层)
2)Grid Mask网格的扩展
3)(x,y,z,layer)三元组描述对象位置
4)可以保留mask特性
  • 缺点
    描述复杂网格建筑不准确,比如螺旋上升的建筑
    在这里插入图片描述

在这里插入图片描述

  • 遇到的问题
    复杂地形描述不了

在这里插入图片描述

3)3D地形实现 – Polygon Mesh(多边形网格)

  • 定义(大部分客户端引擎采用这个)
    1)多边形网格
    2)精度高,描述能力强
    3)数据量大,数据结构复杂,代码实现复杂
    4)不支持特定地形标记
    在这里插入图片描述
  • 其他
    有些服务器采用客户端比如虚幻对应的引擎,比如说PHYSX 、HAVOK这样的引擎,当服务器要和客户端以一样的频率、一样的帧率去跑,这个引擎计算的时候,要把整个世界里面所有对象都导进来,它本身是个黑盒再进行计算,会导致整个服务器的承载会变得非常差,服务器要承载的玩家上限比较大,这样导致优化效果比较差

4)3D地形实现 – Voxel(体素,在像素PIXEL的基础上增加了高度信息)

1)体素网格
2)描述能力强
3)服务器随机访问性能较高
4)数据结构简单,代码可维护性强

  • 使用举例
    MINECRAFT

5)基于Voxel的3D场景建模以及碰撞算法

1)先检测是否这个地形是否能行走(mask判断)
2)检测高度差是否能容纳
1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值