一种基于游戏引擎的AR模式探讨(上)
前言
因为对 AR 游戏领域的好奇,在网上搜集了一些资料。但是关于 AR 技术在游戏中实际应用的文章较少,而且大多数文章只是简单的介绍高通的 SDK 的使用,没有关于 AR 的核心技术。
简单了解目前的 AR 模式,大多数都是通过对相机中环境的检测,包括使用一些识别图去进行 AR 的检测触发。然后再通过对图像的叠加完成增强现实的效果。后来看到一篇关于 unity 实现 AR 的文章。尽管文章中实现的是一个 APP。但是它这种关于 AR 的想法我认为是完全可行的。在该作者想法的基础上,我构建了一种不同于现在常见 AR 的一种系统架构。由于我暂时没有发现其他人对这种 AR 模式的定义,为了阐述的方便,我在这篇文章中将这种 AR 系统称为 Lefland’s AR,简称“L-AR”。
最初我是以游戏架构为主提出的,但是随着这个想法的成熟,我发现这个模式(L-AR)不仅可以创建出全新的 AR 游戏方式,而且可以应用到未来的实际生活中,作为一种生活中的 AR 技术来使用。
接下来我将分成三部分讲述这种模式(L-AR),第一是现有 AR 的分析,第二是 L-AR 架构方式的整体系统阐述,最后是 L-AR 在未来的应用与发展以及这种模式可能会出现的问题。
第一部分
现有的 AR 技术,以高通的 ARSDK 为模板来阐述一下现在的 AR 模式。先来说一下这种 AR 使用的操作,主要是以识别图为主,将所需要的识别图上传到高通的网站,然后可以生成 unity 的文件,导入到 unity 中,然后对想要显示的模型进行设定,绑好 AR 相机,就可以完成目前很常见的通过图像识别显示出的 AR。
因为其中很多的技术都被封装了,所以也不好说其中比较有技术性的部分。就单独来看最终呈现时的图像层次。后面的一层,就是我们相机拍摄的环境。前面的一层是呈现在识别图上的模型,通过识别图去定位模型的景深。最后通过两层图像的叠加,完成最后呈现给用户的状态。这种模式已经很成熟了,而且操作难度不高,个人开发者也完全可以掌握其使用。
然后我们来看一下这种模式的 AR 的缺点。总体而言,这样的 AR 很难给用户一种类似于 VR 的沉浸式体验,尤其是应用在游戏中的时候。很多时候这个 AR 只是个会动的模型,很难在游戏的模式中有所创新。而且受限于技术的封装,没有办法完成很多底层的修改。其中,识别图定位以及无图定位,都是使用图像识别技术来完成的对图像的质量要求较高,并且容易出现“漂浮感”,让人感觉模型漂浮在空中,让人很难有沉浸式的体验。较为单一的互动模式,还有对背景地点无交互(背景只是单纯的背景,换成任何其它的背景或是纯黑最后的效果也是一样的),这些都是制约了 AR 开拓游戏市场的问题。
第二部分
分析:
一、首先我们来分析一下理想中的 AR 需求,以《剧场版刀剑神域》为例,来看一下我们理想中的 AR 是一个什么样子:男主角参加了一次多人线下的 BOSS 战,然后玩家们戴上了 AR 设备,拿着体感控制器就一起上去打 BOSS 了。这一段中,我们可以看到,游戏的场景是在现实场景的基础上增强得到的,保留了场景中的可以移动的空间的设定,仅仅是在一些建筑的外形加以装饰。这是第一条,对原场景的保留和增强。在二手手游买卖平台中,我们有队员,并且可以实时看到他们在游戏中的样子,并且可以在旁边显示玩家信息。。这是第二条,多名玩家在同一场景中的实时交互。不同玩家可以在不同的位置看着同样的 BOSS 对他们发动攻击,这是第三条,公共 AR 环境的唯一性。
二、从上述几条中,我们就发现了目前 AR 系统中存在的问题。由于使用的是识别图或者是获取相机景深建立空间模型的方式,无法对多人的游戏环境进行实时的同步并且建立唯一的绝对空间。玩家设备间的互相定位和交互的实现也是较为困难的。
新的模式:
在前人的想法的基础上我构想出一种 L-AR,通过游戏引擎内对现实世界的提前构筑并通过画面的叠加来完成一种增强现实的效果。
一、画面层次分析:
最后一层是相机捕获的现实场景,向前一层是引擎中的游戏场景,游戏场景中隐藏所有地形,只保留需要在 L-AR 中出现的游戏内容。再向前一层是游戏的 UI 和玩家的操作面板。将这些叠加在一起达到增强现实的效果。
二、系统结构分析
以 Unity 为例,我们的整体思路是把玩家在现实中的实景和游戏中的场景结合起来,因此,我们需要:
- 一个第一人称的相机
- 一个按照真实场景的真实尺寸搭建的环境(在游戏中隐藏)
- 游戏中应该有的模型(NPC,敌人,BOSS,道具,武器,宝箱)
- 一个用来映像相机获得的图像的背景平面(跟随相机)
- 玩家的输入控制(1)相机的移动通过手机传感器获取的 GPS 坐标的差值进行移动,通过加速度传感对微小的移动进行矫正,并且对相机的旋转和俯仰进行控制。使得外部世界和游戏内世界始终保持同步。(2)玩家可以通过手机屏幕上点击虚拟按键来使用物品,打开宝箱,发动技能,和目前的手机游戏相同(以 RPG 游戏为例)
- ⑥和正常的同类型游戏别无二致的游戏系统
- ⑦针对你想要进行游戏的场地进行实地的考察,并且将所有的游戏元素结合现场的实际情况进行安排和布置,打造一个独一无二的 AR 游戏世界。
三、以 Unity 为例,在构建中的技术难点问题的解决方案
- 首先是玩家的移动,我们需要在 unity 中获取手机的 GPS 信息,由于目前的 GPS 定位的误差较大,无法直接用于我们的移动。所以我选择采用 GPS 位置的差值进行位置的定位。玩家需要在现实场景中一个固定的位置开始游戏,然后这时定位玩家的 GPS,作为原点。之后不断刷新玩家 GPS 信息,并且更新相机的位置。
- 相机跟随手机角度的旋转:通过手机的加速度传感器获取手机当前的状态信息,通过四元数的方式传递给游戏中的相机。传感器获得的信息可能会因为手机的抖动产生扰动导致偏移,这时我们需要在代码中加入一个低通滤波器来除去高频的杂波。
- 游戏中物体与现实世界的真实交互:我们需要整个场景的建模,然后对它们添加碰撞器,将对他们的渲染关掉,让其在相机中不显示。并且调整渲染顺序,使透明的场景可以遮挡游戏中的其他物体。达到一种“真实”的感觉。
- 联机游戏的设计:通过 P2P 对等网络进行区域内玩家信息的传输。
- 游戏性:单机游戏可以向 Rougelike 冒险发展,以随机物品和战斗为主。联机游戏可以向 MMORPG 发展,以线上线下的社交为主。
一种基于游戏引擎的AR模式探讨(上)相关推荐
- 一种基于游戏引擎的AR模式探讨(下)
引言 作者在一篇关于 unity 实现 AR 的文章的基础上构建了一种不同于现在常见 AR 的一种系统架构.由于我暂时没有发现其他人对这种 AR 模式的定义,为了阐述的方便,我在这篇文章中将这种 AR ...
- 云计算机是基于网络,【单选题】云计算是一种基于( )的超级计算模式。
A. 网格
B. 互联网
C. 人工智能
D. 分布式系统...
[单选题]云计算是一种基于( )的超级计算模式. A. 网格 B. 互联网 C. 人工智能 D. 分布式系统 更多相关问题 [问答题] 测量二次回路的绝缘电阻时,应注意哪些事项? [问答题] 新< ...
- 游戏引擎变革的三十年
红白机(Family Computer)发售已经是37年前的事情了.短短30多年时间,游戏主流平台经过了主机.PC端和移动端的迁移,热门游戏也从红白机上的<魂斗罗><超级马里奥兄弟& ...
- 《游戏引擎架构》笔记一
<游戏引擎架构>该系列的博文部分参考下面的博客: http://raytaylorlin.com/categories/%E6%8A%80%E6%9C%AF/%E6%B8%B8%E6%88 ...
- 游戏引擎与虚拟仿真系统
转自 http://blog.csdn.net/imedia_3d/article/details/5335086 1. 3D游戏引擎.仿真软件和图形引擎概述 目前3D图形技术大量应用于游戏 ...
- 游戏不单只靠烧硬件 主流游戏引擎大盘点
搭建游戏的核心所在 何谓游戏引擎 回顶部 前言:游戏引擎是一个游戏的重要核心,它既是建立游戏的基础,也是控制游戏每一个细节的指挥官,不论是游戏场景中的一个不起眼亮点,还是气势宏伟的场景视觉特效.不同的 ...
- 游戏引擎如何设计与架构
以前做过游戏引擎,也看过几个商业引擎的源码如Torque等,还有用过一些第三方的引擎来开发游戏,如Unity, Cocos, Laya等,今天来说一说一款游戏引擎应该如何架构和设计,我做了一张图,如下 ...
- opengl游戏引擎源码_跨平台渲染引擎之路:拨云见日
前言 最近在工作中越来越多地接触到一些3D以及相比常见特性更酷炫的效果,因此萌发了想要自己从0开始打造一个渲染引擎的念头,一方面是为了更好地实现公司业务的需求,另一方面则是可以学到整个渲染流水线上的方 ...
- Android 游戏引擎汇总
Android 游戏引擎汇总 1.AndEngine 简介:AndEngine 基于libGDX框架开发,使用OpenGL ES进行图形绘制.同时继承了BOX2D物理引擎,因此能实现一些较为复杂的物理 ...
最新文章
- C# 栈 、队列的概念
- Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了
- tdk磁材手册_TDK的铁氧体磁铁(FB系列) - TDK Product Center.PDF
- python开发安卓程序-python可以编写android程序吗?
- python详细教程-python入门(非常详细的教程)
- 测试机的版本高于Xcode的版本的解决方法
- Python占位符总结:%方式和format方式
- 【贪心】Sunscreen(poj 3614/luogu 2887)
- jsp中使用cookie时报错……
- d3 mysql_javascript – 在d3可视化中访问MySQL数据库
- deldir | 生成泰森多边形的一段R语言代码
- 【重点】初窥Linux 之 我最常用的20多条命令
- 创建maven工程时总是带有后缀名Maven Webapp解决办法
- redis报错: redis.exceptions.ResponseError: value is not an integer or out of range
- 数字图像直方图匹配或规定化Histogram Matching (Specification)处理
- 2.1 软件开发生命周期模型
- Elasticsearch 谷歌插件 Elasticsearch-head 使用
- 2023 《电脑PC游戏》 红警3:起义时刻
- iQOO正式面世,vivo怎么玩转独立子品牌?
- windows下,查看apk的包名、以及查找appActivity(aapt命令)
热门文章
- java doc转pdf_java 完美解决 ppt/pptx 转pdf 源码
- python打印倒等腰梯形,Linux使用shell脚本做的菱形等一些益智题
- 机器学习从零开始-Kaggle数据用PurePython实战
- 24-移动端app数据爬取
- koa连接mysql怎么做_koa-连接mysql数据库
- failed to find romfile efi-virtio.rom
- Emacs-小白入坑之旅
- Ajax中最有名axios插件(只应用于Ajax)(post方法,官网写错了,应是字符串格式)...
- react native使用百度echarts显示图表
- Java8 新特性lambda表达式(一)初始