游戏中的战争迷雾

author author     2022-09-25     362

关键词:

转自:http://blog.csdn.net/xoyojank/article/details/12259161

说到战争迷雾(Fog of War, FOW), 其实还是非常普遍的一项技术, 在RPG, RTS等游戏中得到了广泛的应用 

技术分享

技术分享

但是关于这方面的资料非常少, 经常会有人问怎么做, 所以就有了写这篇文章的想法
从应用上来说, 有两种:
  • 探索范围: 通常在RPG游戏里, 用于标记走过的地图区域
  • 视野范围: 通常在RTS游戏里, 用于标记友方单位可以看到的区域
当然, 在魔兽争霸3中, 两中迷雾都存在. 下面以第二种为例详细说明, 第一种看完自然就明白怎么做了
 
 
好了, 既然是个可见性问题, 那么就有阻挡视线的地方和可以看到区域, 我们抽象一下, 把地图像寻路那样表示成二维格子
技术分享
绿点代表有视野的单位, 红色区域代表视野阻挡, 那么白色区域就是可见的, 灰色就是不可见的
求解这个可以与不可见区域的问题, 其实就是一个FOV(Field of Vision, Field of View)问题, 算法上来说, 五花八门, 参见[1]
 
有了这个可见性的区域信息, 怎么绘制到场景里呢? 
既然可以表示成一个二维数组, 那么就可以把这些信息写入一张2D纹理, 然后把这个纹理投影到整个地图(不管3D还是2D, 原理一样)
那么, 纹理会不会太大? 按我们的经验来讲, 一般一米一个格子的精度是完全够用的, 256x256的大小可以适用于大多数的游戏
如果嫌锯齿太难看, 做个模糊就行了. 3D游戏中更是可以在shader中针对视野内和视野外使用不同的着色方式(比如去色)
技术分享
原理其实看起来很简单, 这也是多数帖子和文章可以提到的, 但是实际做下来, 性能还是比较棘手的一个问题
目前来说, 我们在此基础上做了一些优化:
  • 降低更新频率
    • 如果游戏是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, 如果再剔除掉视野阻挡内的点, 应该更小
另外, 对于小地图, 正好可以把迷雾纹理与背景直接混合, 做到二次利用
对于探索范围的表示, 其实只要在格子的计数器上做点手脚就好了
YY一下, 3D的体积迷雾是不是可以用Volumn纹理实现:)
参考资料

 

Libgdx:“战争迷雾”效果的帧缓冲区

...2016-03-1808:13:52【问题描述】:我正在为Android编写一个RTS游戏,我希望在玩家的单位上添加“战争迷雾”效果。这种效果意味着每个单位周围只有一个“圆圈”显示背景地图,而在没有玩家单位的地方,屏幕应该是黑色的。我不... 查看详情

unity如何实现战争迷雾?思路一(代码片段)

...下:    思路如下:建一个plane作为地面,用UI中的rawimage放在最上层作为迷雾显示,用cube作为主角移动.cube每次移动,将它的坐标转化为rawimage上相对位置的点,然后用texture2d的setpixel方法逐像素清除出一个区域出来. &nbs... 查看详情

unity战争迷雾fogofwar

...arEffect.shader做一下“颜色乘法”运算再渲染到屏幕,实现战争迷雾。你可以想象上面的col极端2种情况:于是我们把战争迷雾“庞大”(其实并不庞大)的工程,简化成解决1个大问题:把是否可视区域映射到FogOfWarEffect.shader的col。... 查看详情

如何在unity3d中实现战争迷雾效果

参考技术AiTweeniTween.CameraFadeToiTween.CameraFadeFrom,或者用深度摄像机,改切换画面color.a 查看详情

聊一聊2d地图的迷雾效果

...于川最新解决的实际项目问题。战争迷雾是很多带地图的游戏多少会考虑的一个功能。恰巧川在17年下半年开始做的项目也涉及到了这次的内容,而且在开始审题时,这简直是送分题啊!我们先来看看题。“今有2D地图一张,... 查看详情

2d游戏新手引导点光源和类迷雾实现

...、新手引导须要的遮罩效果一般做新手引导的时候,会把游戏画面变的半黑,然后须要玩家点击的地方就亮起来。经常使用的做法是採用遮罩来实现,可是仅仅能实现方形的,不能不规则图形。以及是全然挖空。做不到渐变效果... 查看详情

战争游戏

战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首都的防卫工作。首都处于一个四面环山的盆地中,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停... 查看详情

这是我的战争是使用了啥样的游戏引擎?

...》时,我们工具集最大的添加是“行为树编辑器”,因为游戏中的所有AI都使用了行为树。这些有时会变得非常大。实际上,我们的AI设计师RadekGwarek通常在大约30个LCD屏幕宽的树木上工作。他甚至计算过,如果他在液晶显示屏上... 查看详情

快印客人工智能名片,拨开销售管理中的7层“迷雾

人工智能名片,拨开销售管理中的7层“迷雾  在这个新陈代谢极快的时代里,中小企业要想从激烈的市场竞争中脱颖而出,并不容易。诸如许多中小企业在经营、管理过程中,表面看是缺人才、缺客户、缺生意,实际上是缺... 查看详情

使命召唤6现代战争2秘籍怎么用

首先启动游戏,确保游戏运行正常,且图形,操作什么的设置正确。退出游戏后进入装游戏安装目录,进入“player"文件夹。用写字板程序打开“config.cfg”,注意不要用记事本打开,记事本打开的没有格式。《使命召唤6:现... 查看详情

[tjoi2009]战争游戏-网络流,最小割(代码片段)

Description小R正在玩一个战争游戏。游戏地图是一个M行N列的矩阵,每个格子可能是障碍物,也可能是空地,在游戏开始时有若干支敌军分散在不同的空地格子中。每支敌军都可以从当前所在的格子移动到四个相邻的格子之一,但... 查看详情

战争游戏红龙mod1.1简介

前言改动战争游戏红龙数据文件用于加强中国,由于CHINA单位操作太繁琐,适用于手残玩家。使用版本V18,兼容V20新增单位80IItypeunit26277->26271,官方隐藏单位69IItypeunit->26271,官方隐藏单位海军F14公猫变成空军F14熊猫,时间从19... 查看详情

clashroyale怎么换中文部落冲突皇室战争中文设置

...法。 部落冲突皇室战争怎么设置中文?  1.首先是进入游戏的主页面中,在游戏页面的右上角有个设置的按钮,如上图的指示的部分,点击进入。   2然后有着语言的选项,这个就是游戏系统设置中切换游戏语言的选择,... 查看详情

强盗战争游戏,正确的命令但权限被拒绝?

】强盗战争游戏,正确的命令但权限被拒绝?【英文标题】:BanditWarGame,correctcommandbutpermissiondenied?【发布时间】:2021-12-0317:36:27【问题描述】:我记得我在大学里玩过BanditWargame,所以我想在这个周末再试一次以更新一些知识。... 查看详情

生存战争命令方块怎么生成像素画

参考技术A在生存战争命令方块游戏中,你可以使用以下步骤来生成像素画:找到一个平坦的区域:在游戏中找到一个平坦的区域,以便更容易地创建像素画。选择颜色:在创造模式下,选择适当的颜色方块,可以使用石头、黏... 查看详情

kn战争游戏(文字版)(代码片段)

...又不能出去玩,就决定和刘XX拾回python,做了一个游戏机制(未完善),虽然代码有点混乱且基础功较差(太久没碰了😢),但制作不易,勿喷。源码展示importrandomimporttime#主线剧情pri 查看详情

在网格中的三角形顶点之间进行插值

】在网格中的三角形顶点之间进行插值【英文标题】:Interpolatingbetweentriangleverticesinagrid【发布时间】:2017-02-1411:11:20【问题描述】:我有一张六边形地图,并尝试在其上构建战争迷雾。我正在做的是构建一个顶点为六角中心的VB... 查看详情

☀️爆肝整整一个周末写一款类似皇室战争的即时战斗类游戏demo!两万多字游戏制作过程+解析!建议收藏学习

查看详情