HTMLとCSSで実現する3Dホログラム

# はじめに
以前、「[自作プロジェクターを作って大きめホログラム映像を見てみた](https://qiita.com/yaju/items/39e6e685ac34b454995e)」の記事を書きました。この記事はいいね数が少ないものの、検索ワードに引っかかりやすいのかアクセス数は多いです。
ちなみに3Dホログラムといっても、一昔前に流行ったスマホとCDケースの偽ホログラムの「[ペッパーズ・ゴースト](https://ja.wikipedia.org/wiki/%E3%83%9A%E3%83%83%E3%83%91%E3%83%BC%E3%82%BA%E3%83%BB%E3%82%B4%E3%83%BC%E3%82%B9%E3%83%88)」と呼ばれるものです。

ということで、Twitter経由でUnityによるホログラムの質問がきました。
![Unity.png](https://qiita-image-store.s3.amazonaws.com/0/14053/a7f18300-bad9-2fc7-f419-23847c687e52.png)
[Pepper's Ghost Hologram Pyramid Unity 動画](https://www.youtube.com/watch?v=7AFRGV4mze8)

これは自分が作成したわけでもなくネットで検索して見つけたものです。
https://github.com/KainosSoftwareLtd/PeppersGhostPyramid
作者のGit Hubからダウンロードして「Example.unity」をダブルクリックすればUnityが起動して再生すれば動作します。

それで動かしてみましたけど、ここから初心者向けには教えるには厳しいなと思いました。

偽ホログラムは原理さえ知っていれば手軽るに作成できます。

* [ペイントで3Dホログラムの画像の作り方。作ってみた。](http://www.mathtext.info/blog/2015/08/21/%E3%83%9A%E3%82%A4%E3%83%B3%E3%83%88%E3%81%A73d%E3%83%9B%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E7%94%BB%E5%83%8F%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9%E3%80%82%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF/)
* [HTML5 CanvasとiPadで実現する3Dホログラム](https://ics.media/entry/12049)

# ホログラム
## 投影機の作成
100均店で購入した透明クラフトプラパンで、スマホ用(上辺が1cm、高さ3.5cm、底辺6cm)を作りました。
![IMG_0418.JPG](https://qiita-image-store.s3.amazonaws.com/0/14053/2f651e82-a499-1db2-7d05-f32678678c0e.jpeg) ![IMG_0420.JPG](https://qiita-image-store.s3.amazonaws.com/0/14053/732936e3-fcf4-5bc1-a2dc-0e7a8911aaf0.jpeg)

投影機の作成方法はこちらの記事でもいいかと思います。
[HTML5 CanvasとiPadで実現する3Dホログラム](https://ics.media/entry/12049)

## 投影する映像の素材
素材は背景は黒で静止画ではつまらないので動作でgifファイルということで、今回はtktkさんの「moyasiエフェクト館」の戦闘エフェクト素材の一部を使わせて頂きました。
http://tktknkyo.hatenadiary.jp

![20171231081200.gif](https://qiita-image-store.s3.amazonaws.com/0/14053/0738e185-fb1e-afd6-e7ab-517d9e19a85d.gif)

## 投影する映像の作成
画像を上下左右に4つ転写します。転写の際には、投影時に正位置で見えるよう左右反転したものを90度ずつ回転させるのがポイントです。
![holoimage.gif](https://qiita-image-store.s3.amazonaws.com/0/14053/42c7f182-d1a3-75ec-1fcc-4b99542e12ce.gif)

## ソースコード
```html:index.html
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta charset="UTF-8"/>
<style>
body, canvas {
    background-color: #000;
}
.Rotate90{
     -webkit-transform: rotate(90deg);
     -moz-transform: rotate(90deg);
     -o-transform: rotate(90deg);
     -ms-transform: rotate(90deg); 
}
.Rotate180{
     -webkit-transform: rotate(180deg);
     -moz-transform: rotate(180deg);
     -o-transform: rotate(180deg);
     -ms-transform: rotate(180deg); 
}
.Rotate270{
     -webkit-transform: rotate(270deg);
     -moz-transform: rotate(270deg);
     -o-transform: rotate(270deg);
     -ms-transform: rotate(270deg);
}
</style>
</head>
<body>
<img src="20171231081200.gif" style="position:absolute; top:0px;   left:150px" />
<img src="20171231081200.gif" style="position:absolute; top:150px; left:300px" class="Rotate90" />
<img src="20171231081200.gif" style="position:absolute; top:300px; left:150px" class="Rotate180" />
<img src="20171231081200.gif" style="position:absolute; top:150px; left:0px"   class="Rotate270" />
</body>
</html>
```

## スマホで確認
Webにアップロードしてスマホから確認します。
今回、作成したのは下記サイトに置きました。
http://yaju.sakura.ne.jp/holo/index.html
スマホで画像の位置を中央に調整してください。

ちなみにGitHubにはWebサーバなくてもWebページ公開できる機能があります。

* [GitHubを使って3分でHPを公開する。](https://qiita.com/budougumi0617/items/221bb946d1c90d6769e9)
* [WebGL投稿先としてGithubを使ってみる](http://for.hatenablog.jp/entry/2017/07/11/021333)

# 最後に
投影映像を凝ったものを作りたい場合は映像自体をプログラムで作ればいいと思います。
Unityで作成するにしても2Dでカメラ1つにした方がいいかな、紹介してて何だけど3Dでカメラ4つとか行き過ぎな気がしますしね、それに光源が1つだと他3つと明るさが違ってしまう。