RTS游戏中的战争迷雾原理
原文:http://blog.csdn.net/xoyojank/article/details/12259161
说到战争迷雾(Fog of War, FOW), 其实还是非常普遍的一项技术, 在RPG, RTS等游戏中得到了广泛的应用
- 探索范围: 通常在RPG游戏里, 用于标记走过的地图区域
- 视野范围: 通常在RTS游戏里, 用于标记友方单位可以看到的区域
绿点代表有视野的单位, 红色区域代表视野阻挡, 那么白色区域就是可见的, 灰色就是不可见的
原理其实看起来很简单, 这也是多数帖子和文章可以提到的, 但是实际做下来, 性能还是比较棘手的一个问题
- 降低更新频率
- 如果游戏是30FPS的, 那么其实没有必要每帧都去计算这个可见性. 经验值的话, 0.5秒一次差不多
- 由此带来的跳变问题, 可以保存相邻再次计算的结果, 写入迷雾纹理的两个通道, 在shader中按时间进行插值过渡
- 大量移动单位和大视野不动单位[2][3]
- 这个用个循环暴力计算显然不现实, 除非你地图很小-_-. 所以, 优化思路就是针对移动的单位重新计算, 针对不动的单位只算一次
- 首先, 我们可以用坐标(X,Y)和视野半径(R)三个值确定出一个唯一值K代表一个提供视野的单位U
- 对于每帧新加入(K当前不存在)的U, 定义其生命周期L=MAX. 其余的就对U的L进行递减
- 移除L<=0的U. 针对于L=MAX的, 计算其可见的格子, 如果可见, 则格子的计数C加1
- 每个格子的可见计数C>0的表示可见, 否则就是不可见, 然后更新到纹理上
- 对于0<L<MAX的单位U全部不用计算, 所以不动的单位就不用更新
- 预计算FOV
- 如果视野阻挡不会变化的话, 可以针对每个点计算其最大视野范围的可见性信息, 缓存起来
- 如果用1bit表示每个格子, 最大视野范围20, 地图大小256x256个格子的话, 所需要的内存空间为41x41x256x256bit=13.13MB, 如果再剔除掉视野阻挡内的点, 应该更小
RTS游戏中的战争迷雾原理相关推荐
- cocos2dx 游戏当中的战争迷雾
使用cocos2dx的tilemap制作了个斜45度的rts游戏,这东西战争迷雾怎么可能少了,于是乎就琢磨怎么做一个. 最开始的想法很简单,建立一个二维数组,里面清0,在你的视野的地方放1. 继续用t ...
- 在U3D中实现战争迷雾
原文地址: 在U3D中实现战争迷雾 一. 简介 RTS 类型的游戏经常用到战争迷雾.一开始整个地形被迷雾遮蔽,只有Viewer 的周围一定范围可见,随着Viewer 的移动,未探索的区域变成了可见. ...
- Unity ECS实现RTS游戏中的游戏单位框选、集结和移动控制
今天想给大家分享的主题是如何实现RTS类型游戏中的游戏单位角色控制 本文中会介绍如何运用最新的ECS架构来实现游戏单位控制 效果演示 效果实现 选中多个游戏单位 public class UnitCo ...
- 游戏中的“战争黑雾”和现实中的程序员处境
当还是个少年的时候,我记得经常会玩一些即时战略游戏像X-COM, Civilization, 红警之类的. 这些游戏使用一种被称作"战争迷雾"的机制.当玩家开始游戏的时候,他们被笼 ...
- unity中绘制战争迷雾
接上一篇中说的游戏,我们已经实现了client.host上的一个物体可见不可见的行为.之后我们可以加入类似检查两个单位之间的距离.或是两个单位之间有无阻挡物来进一步实现游戏机制. 在这篇随笔中我会首先 ...
- Unity3D RTS游戏中帧同步实现
帧同步技术是早期RTS游戏常用的一种同步技术,本篇文章要给大家介绍的是RTX游戏中帧同步实现,帧同步是一种前后端数据同步的方式,一般应用于对实时性要求很高的网络游戏,想要了解更多帧同步的知识,继续往下 ...
- 游戏中的脚本语言原理与发展
作者:陈嘉栋(慕容小匹夫) 源地址:http://www.cnblogs.com/murongxiaopifu/p/4557365.html 从游戏脚本语言说起,剖析Mono所搭建的脚本基础 ...
- 如何实现RTS游戏中鼠标在屏幕边缘时移动视角
文章目录
- java实现rts_java – RTS游戏中对象的多态性和类层次结构问题
Movable,Attackable是对象的各种可能行为,因此它们更适合作为接口. 至于这些行为的实现 – 为了解决重复代码的问题,你可以为每个行为设置单独的类 – 让它们命名为服务 – 例如. Mo ...
最新文章
- java逻辑符号怎么打_Java的逻辑运算符?
- Azure China (7) 使用WebMetrix将Web Site发布至Azure China
- 【转】ActiveMQ消息传送机制以及ACK机制详解
- APP元素定位操作API
- npoi 所有列调整为一页_必能用到,一页PPT中想放超多图片怎么办?
- 根据这博客复习,我收到了BAT等大厂的技术岗offer
- sklearn没有实现ID3算法
- EasyUI--messager
- C/C++中near和far的区别
- camera(9)--手机摄像头技术结构与原理
- 微信小程序商城源码C# 、Asp.Net, Mvc +sqlserver 2012+后台 微信小程序源码C#
- android keep倒计时,Android仿Keep运动休息倒计时圆形控件
- OpenGL (太阳,地球,月亮 +太阳系八大行星)
- 为您创建完美商业标识的 10 款 Logo 设计软件 【已翻译100%】
- 网易云音乐歌单可视化,有多少是你收藏过的呢
- IEEE2019论文:使用基于特征融合和缩放的具有空间上下文分析的单镜头检测器在无人机图像中检测小物体
- tty线路规程(discipline)设置
- Angular + xlsx + xlsx-js-style实现多个sheel页Excel下载
- AES-256-CBC 加密解密
- 帝国cms e loop php,帝国CMS灵动标签e:loop的使用 标签循环