【Unity】大世界实现方案

前言

对各种形式的大世界的实现方案

1.固定视角大世界

游戏类型示例:银河恶魔城、暗黑系列 横版视角或者俯视视角 显示周围的9个地图块即可 没有很大的渲染压力

核心思想: 地图块预制

细节处理:

  • 边缘来回处理

  • 判断连通

  • 跨地图物件问题处理(电梯/机关)

  • 更新时机(门、间隔、手动)

2.地图块数据量大的

游戏类型:我的世界、泰拉瑞亚

多地图块 数据量大的大世界

核心思想:

  1. 噪声算法(不过需要做好改动的方案 才比较正常)

  2. 插入副本就是策划做好的,然后随机接到世界里面

  3. 地图四叉树+九宫格Mesh

3.自由视角大世界

示例:

WorldStreamer插件、龙之谷2

实现核心思想:

拆分为多场景sub scene

实现细节:

拆分成多个场景,然后加载

摄像机看不到的地方隐藏

使用LOD

实现复用(每个gird都是一个预制,所有物件都是prefab,gird都是数据,根据数据去加载不同大小缩放旋转的prefab组成)

4.GPU Driven

https://github.com/MashiroShina/GPUDrivenTerrainLearn

GPU Driven Occlusion Culling(Hiz)_hiz遮挡剔除-CSDN博客

4.优化方案

  • 万物皆可LOD,网格、贴图、甚至AI
  • 合批
  • 加载策略
    不加载 :不连通的地方 远的地方 看不见的地方; 低端机不加载特效和灯光(需要拆分场景)
    预加载 :一些即将要使用的预制、固定出现物都可以预先在进入场景时加载或者一些时机加载
    惰性加载 :需要才用到才加载 例如怪物的动画 一些小的表格
    同步加载 :logic部分
    异步加载 : 基本全部异步....渲染网格和机关、特效(逻辑渲染分离)、怪物、NPC
    分帧加载/删除 : 怪物、NPC、网格渲染和机关(队列)、渲染部分也被拆分分帧加载
    拆分加载 : 如果场景已经制作好,可以制作工具拆分场景,拆分后配合分帧,获得更顺畅的加载
    分帧LoadAsset :底层异步loadAsset分帧了
  • 使用池 : 怪物、特效、子弹等,复用就不用加载
  • 实例化卡顿 :Unity的实例化无法异步,比较好的方法是拆分分帧加载,和先加载低模,然后再到高模
  • 内存 :如果加载了保持引用,除了切换场景,不会释放ab和asset,导致玩久了内存高 调用ab的unload(true),当asset没有引用时,适当时机调用res的unloadunuse

5.更多

  • 画质要求高
    网格多 画质要求高 渲染压力大的大世界
    《天涯明月刀》手游引擎技术负责人:如何应用GPU Driven优化渲染效果?| TGDC 2020_的开发
    《天涯明月刀》用 Unity 实现 GPU Driven 地形
  • 导航
    按块切割后只导航加载的块
    全图导航放服务器,如果有可改变地形,把地形修改信息也一同发往服务器
  • 渲染
    如果使用预制无法渲染光照贴图,需要实现一套预制渲染方案,或者使用实时光,假阴影等
  • 高移速
    如果移速超越一个房间会有时空隧道问题(比较少这样的游戏 太变态了),需要逻辑有全图判断
  • 卸载
    需要有卸载资源释放内存的时机,并且会有几帧的卡顿(最新的Unity又有异步GC了)
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值