Orthoverse∅概観

# Orthoverse∅概観

ハッカソンで開発したプロダクト、「Orthoverse∅」の概要を説明します。

# そもそもこれはなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30257/c05d634c-bb50-18bf-3358-cde09a9e1cfd.png)

場所に紐付くARアプリ＝空間アプリのプラットフォームです。
2021年1月のPLATEAUハッカソンで開発したLITを本来のカタチに向かって発展させたものです。（[LITの技術解説](https://qiita.com/oho-sugu/items/8761352eb56d9238bd15)）
LITで実現できていた空間アプリの実行基盤に加えて、NFTの技術により、現実空間にデジタルを結びつける基盤の仕組みを開発しました。
日常的にARGlassをつけて生活する未来の実現を目指しています。

# システム構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30257/cd17d8fd-e700-7ff3-366c-738850fa6858.png)
ざっとこんな感じです。PLATEAUのところだけ予定です。

# 空間ID・NFT・空間アプリ

地球上の特定の矩形領域を表す「空間 ID」を定義します。現在は緯度経度をもとにした 14 桁の整数値です。
この「空間 ID」をトークン ID とした NFT を発行し、各トークンには URL を設定します。
空間アプリは、マークアップテキストとスクリプトによる Web アプリ様のもので、 Web サーバーから配信されます。
NFT で管理される URL からコンテンツを読み込み、 Orthoverse∅ クライアントアプリにより現実に AR 重畳します。
言い換えると本システムのNFT部分は、インターネットにおけるDNSのような役割となっています。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f33303235372f30646461343061642d653334392d626563332d306235622d3438623563373662313137372e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30257/6c7c75d5-cc54-cfb3-c0c0-f033ffff7ac2.png)

# 空間アプリ

現代のWebアプリは、HTMLでの表示とJavaScriptによるロジックが組み合わさっています。
（いや、CSSとかWebGLとかもっと複雑ではありますが、便宜上の説明として）
空間アプリも、同様にマークアップテキストとスクリプト言語により構成されます。

空間アプリは3D描画をコントロールするマークアップテキストとロジックを実行するスクリプト言語による、Webアプリ的な仕組みが空間アプリとして実行されます。
つまり、クライアントアプリは、Webブラウザに相当します。

マークアップはMozillaのA-Frameをベースにしているため、理解しやすいものです。
また、Lua言語はゲーム開発で用いられる軽量のスクリプト言語です。

また、サーバー側での処理も可能なので、クラウドと組み合わせた大きな可能性があります。

~~~md:空間アプリのマークアップ＋スクリプトの例
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Orthoverse Test</title>
<meta name='description' content='Orthoverse Test'>
<script type='text/lua'>
i = 0;
function start()
return
end
function update()
    i=i+1
    document:GetEntityByID('test'):GetComponentBase('rotation'):Set('x',''..i)
return
end
</script>
</head>
<body>
<a-scene scale="0.1 0.1 0.1">
<a-box color='red' depth='2' height='4' width='0.5'>
<a-entity geometry='primitive: cone; radiusBottom: 1; radiusTop: 0.1; height: 2;'></a-entity>
<a-entity geometry='primitive: cylinder; height: 3; radius: 2;' link='href: https://oho-sugu.github.io/ovtestpages/Test2.homl; title: My Homepage; target: _self;'></a-entity>
<a-entity geometry='primitive: cylinder; openEnded: true;'></a-entity>
<a-entity geometry='primitive: torus; radius: 2; radiusTubular: 0.2; arc: 180;'></a-entity>
<a-box id='test' color='blue' depth='1' height='1' width='1' position='1 1 1' rotation='30 0 30' scale='1.5 1.5 1.5'>
<a-sphere color='yellow' radius='0.5' position='2 1 1' link='href: https://oho-sugu.github.io/ovtestpages/Test2.homl; title: My Homepage; target: _self;'></a-sphere></a-box>
<a-box animation='property: object3D.position.z; to: 2; dur: 1000; loop: true' animation__2='property: object3D.position.x; to: 2; dur: 100; loop: true' color='green' depth='0.5' height='0.5' width='0.5' position='-1 -1 -1'></a-box>
</a-box>
</a-scene>
</body>
~~~

# PLATEAUの活用

国土交通省が主導するPLATEAUの3D都市モデルをオクルージョン用に利用しています。
全PLATEAUのデータを独自に変換し軽量化、自分がいる場所に応じて動的にオンラインロードする仕組みを構築中です。（アドベントカレンダー中に作るぞー）
今後OpenStreetMapのデータなども活用し、全世界規模のベースデータを構築する予定です。

# Orthoverse ∅ の実現したいこと

ユーザーの移動に合わせて様々な開発者・事業者が配置したその場所のアプリが複数同時並行で実行され、シームレスな体験になります。
また、ユーザーが意識せずとも情報が取得されるので、現実とARの自然な融合が期待できます。
空間アプリの仕組み上オンラインサービスとの親和性も高いので、現在のインターネットサービスを空間サービスとして展開する未来を想像できます。

# 参考資料

[プロジェクトのリポジトリ](https://github.com/oho-sugu/OrthoverseZero)
[WebXR Tech Tokyo 発表資料（LITよりもさらに以前のプロトタイプの解説）](https://drive.google.com/file/d/1JoRUDzjvwT5lZiGp4FObgnHDrlf4vfvR/view)