<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>three.js &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/three-js/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>VR、AR、MR……各領域のプロフェッショナルが語るxR技術の最先端──Webの未来を語ろう 2018</title>
		<link>/tokutoku393/25205/</link>
		<pubDate>Mon, 19 Mar 2018 01:00:01 +0000</pubDate>
		<dc:creator><![CDATA[ちゃんとく]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[HoroLens]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mixed Reality]]></category>
		<category><![CDATA[VR]]></category>
		<category><![CDATA[WebVR]]></category>
		<category><![CDATA[WebXR]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[three.js]]></category>

		<guid isPermaLink="false">/?p=25205</guid>
		<description><![CDATA[連載： Webの未来を語ろう 2018 (2)こんにちは、dotstudioのちゃんとくです。HTML5Experts.jpでは、昨年に引き続き新春企画として「Webの未来を語ろう 2018」を開催することになりました！...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/future-of-web-2018/" class="series-496" title="Webの未来を語ろう 2018" data-wpel-link="internal">Webの未来を語ろう 2018</a> (2)</div><p>こんにちは、dotstudioのちゃんとくです。HTML5Experts.jpでは、昨年に引き続き新春企画として「<strong>Webの未来を語ろう 2018</strong>」を開催することになりました！</p>

<p><a href="https://html5experts.jp/yoshikawa_t/25150/" data-wpel-link="internal">ブラウザ編</a>に続く第2弾の今回は、2017年初頭のHoloLens発売に始まり、ARKit/ARCoreとスマートフォン対応の拡充、各地にVR Zone誕生と話題を集め、一挙にホットトピック入りした<strong>xR技術の現在と未来</strong>について。各領域のプロフェッショナルを招き、編集長の<a href="https://html5experts.jp/shumpei-shiraishi/" data-wpel-link="internal">白石</a>氏をMCに、さまざまな立場から意見交換を行っていただきました。</p>

<p>広がるxR領域の現状と課題、そして未来への期待について、なかなか聞けない学会話や開発事情など、たっぷりとお楽しみください！</p>

<p><img src="/wp-content/uploads/2018/03/main.jpeg" alt="" width="640" height="419" class="alignnone size-full wp-image-25369" srcset="/wp-content/uploads/2018/03/main.jpeg 640w, /wp-content/uploads/2018/03/main-300x196.jpeg 300w, /wp-content/uploads/2018/03/main-207x136.jpeg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>ゲスト紹介</h2>

<h3>諸星 一行氏（いっこう氏）</h3>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/ac6195dd-0797-4d6d-dab2-54229bb00067.jpeg" width="200" height="200" class="alignleft size-medium" /><strong>Mercari, Inc. R4D</strong><br />
株式会社メルカリの研究開発組織&#8221;R4D&#8221;でVR/AR/MR領域を担当するリサーチエンジニア。
業務の傍らで&#8221;xR Tech Tokyo&#8221;や&#8221;例のハッカソン&#8221;といった勉強会やハッカソンなどのコミュニティ運営を行なっている。日本バーチャルリアリティ学会認定VR技術者。</p>

<div style="clear:both"></div>

<p><br /></p>

<h3>前本 知志氏</h3>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/0dd4dbdc-2309-afad-1f64-53cac8f4b7ad.jpeg" width="200" height="199" class="alignleft size-medium" /><strong>株式会社ホロラボ</strong> / <strong>システムフレンド Co-founder（取締られ役 兼 取締役）</strong><br />
数年前よりモーションセンサーの面白さに取りつかれKINECTを趣味で触り始め、会社にXRや医療機器開発のチームができる。 
センサー系飲み会コミュニティTMCNや、HoloLensに特化した株式会社ホロラボの立ち上げメンバー。
米国MicrosoftよりMixedReality分野のMVPとして認められている。</p>

<div style="clear:both"></div>

<p><br /></p>

<h3>千葉 慎二氏</h3>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/e40d6dee-996f-606d-9818-3b2efa598c8c.jpeg" width="200" height="200" class="alignleft size-midium" /><strong>日本マイクロソフト株式会社</strong><br />
ハドソン中央研究所でゲームのベースシステム等を開発後、Microsoftに転職。ゲーム機向けWindows OSやXbox SDKの開発などを行う。
近年はKinect、HoloLensといった新技術を啓蒙し、研究者や学生向けの支援活動を担当。</p>

<div style="clear:both"></div>

<p><br /></p>

<h2>2017年に印象に残ったxR領域のトピックは？</h2>

<p><strong>白石:</strong> 皆さま、本日はお集まりいただきありがとうございます！まずは簡単に自己紹介と、2017年のxR界隈で1番印象に残ったことを教えてください。</p>

<p><strong>いっこう:</strong> こんにちは、メルカリのいっこうです。2017年のホットトピックは、<strong>MicrosoftがxR領域に本腰を入れてきたこと</strong>ですね。HoloLens、immersiveと、デバイスをいろいろと出してきたのが衝撃的でした。</p>

<p><strong>前本:</strong> 株式会社システムフレンドや株式会社ホロラボで取り締まられ役をしている前本です。僕にとっても、<strong>HoloLensが発売されたこと</strong>は大きな出来事でした。HoloLensが出たから、ホロラボという会社も<a href="http://holomagicians.azurewebsites.net/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HoloMagicians</a>というコミュニティもできましたし。HoloMagiciansでのHoloLens日本発売直後のイベントで、80人もの購入者が一同に集まってみんなで繋げたワクワク感はすごかったです。</p>

<p><strong>白石:</strong> 80人×約30万……2400万円……。お金の話になるとすぐ計算しちゃう（笑）。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/46be4ac3-fcc2-a15f-f370-af68ec4ba176.jpeg" alt="DSC09322.jpg" title="DSC09322.jpg" />
▲ 発売からわずか2週間後に80人が集ったHoloMagiciansミートアップ</p>

<p><strong>千葉:</strong> Microsoftの千葉です。もともとはハドソンというゲーム会社でゲームの根底となる部分のシステム開発をしていて、Microsoftに転職してからは16年くらいずっとXboxチームにいました。HoloLensはKinectから派生してできたところがあって、Xboxチームでは一部Kinectの開発にも携わっていたので<strong>私がHoloLensのプロトタイプを見たのは実はかなり前のこと</strong>なんですよね。その頃から開発を続けて、ようやく世に出てきたな、という感覚です。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/4d92caa6-242c-6072-36cb-cdb05cc3ecb3.jpeg" alt="DSC09334.jpg" title="DSC09334.jpg" />
▲ Xboxをローンチした人にだけ配られるというジャンパーを着た千葉氏</p>

<p><strong>前本:</strong> 千葉さんのことはKinect時代から尊敬しているんですよ！僕は当時からKinectで遊んでいて、それがどんどん進化してHoloLensの形になるのを目の当たりにして、感動です。</p>

<p><strong>千葉:</strong> お二人がHoloLensをトピックに挙げてくださったように、私にとっては<strong>多くの人にHoloLensを使っていただいている</strong>ということが2017年最も印象深いことです。それとMicrosoftに勤めながら、東京女子医科大学で学生としてHoloLensを使った医療の研究をしています。業務でも研究でもHoloLensを使っています。</p>

<p><strong>白石:</strong> えーっ、じゃあ千葉さんは女子大生？周りは女子ばっかりですか？</p>

<p><strong>千葉:</strong> 私がいるのは大学院なので、おじさんばかりですよ（笑）。</p>

<p><strong>白石:</strong> ちなみに私はHTML5Experts.jpの編集長と、<a href="https://techfeed.io/main/realtime/now" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">TechFeed</a>というエンジニア向けのキュレーションサイトを作っています。私自身はWeb領域の人間でxRについては素人なので、今日はバンバン質問させていただきます！</p>

<h2>VR/AR/MRとは何か？デモで見る各領域の現在</h2>

<h3>現実と仮想が複合するMRの世界観</h3>

<p><strong>白石:</strong> 2017年のホットトピックはお三方とも「HoloLens」に関することで一致しましたね。まずはMRについて、現在の様子を伺っていきたいと思います。</p>

<p><strong>千葉:</strong> まず伺ってみたいんですが、「Mixed Reality（MR）」という言葉について正しく理解している自信があるという方？</p>

<p>（会場、手が挙がらない）</p>

<p><strong>千葉:</strong> なかなかいないですよね。それが一つ、現状の課題なんです。簡単に言うと、MRは現実の世界と仮想の世界が融合しているという形です。どう融合するかにも、現実世界の中に仮想世界を入れ込むとか、逆に仮想世界に現実世界を入れ込むとか、いろいろな考え方があります。MRは、<strong>テレビの中に入り込んで、仮想のつくられた世界を見渡すことができ、そこから現実の世界も覗くことができる</strong>、というような考え方です。</p>

<p><strong>白石:</strong> <strong>仮想と現実がMixする</strong>、という意味合いなんですね。HoloLensのデモでは、現実世界をキャラクターが動いたり、現実の壁を割っていたり、というのを見ますが、それはどちらなんですか？</p>

<p><strong>前本:</strong> その捉え方は宗教論争に近いものがあるんですよ。</p>

<p><strong>いっこう:</strong> Microsoftさんの提唱するMRと、もともと日本バーチャルリアリティ学会が学問として20年以上研究している考え方とで違う部分があるんです「VimかEmacsか」という話に近いです（笑）。</p>

<p><strong>白石:</strong> あー、よくわかりました。それは大変だ（笑）。どういう部分でお互いに違うなと思っているんですか？</p>

<p><strong>千葉:</strong> デバイスを主体で見るか、現実世界を主体で見るかなど……考え方の違いですね。揉めているわけではなく、「そういう考え方もあるよね」という感じなんですが。</p>

<p><strong>白石:</strong> なるほど。話の抽象度が高まってきたので、HoloLensの現在がわかるデモがあるといいんですが。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/8de2e5a6-237c-051a-255c-189191a7e61d.png" alt="スクリーンショット 2018-02-12 22.07.34.png" title="スクリーンショット 2018-02-12 22.07.34.png" />
▲ DNP「AR/VR/MRを活用した体感型デジタルショールーム」（<a href="https://www.youtube.com/watch?v=TNi9cK-YfJY" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">動画リンク</a>）</p>

<p><strong>前本:</strong> これはHoroLensだけでなく他のデバイスや技術を組み合わせたデジタルコンテンツエキスポでの展示なんですが、<strong>シェアリング</strong>という技術を使って同じ空間を共有する仕組みです。</p>

<p><strong>白石:</strong> これはHoloLensと、スマートフォン？</p>

<p><strong>前本:</strong> そうです。HoloLensとGoogle Tangoの技術を使って、<strong>デバイス同士がお互いの位置を認識し、他の人が操作したことを他のデバイスでも検知できる</strong>ようになっています。「いま隣の人がこの商品をいいねした」とか、「この商品を買った」とか、デバイスを介して共有できる仕組みです。</p>

<p><strong>千葉:</strong> <strong>複数の人が同じ世界をそれぞれ見ることができる</strong>、というのがシェアリングですね。</p>

<p><strong>前本:</strong> 実はtoBの事例も増えてきて、製造業とかデザインの現場とかで活用が進んでいるんですよ。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/52ac2d0d-18b4-af80-82f9-2b8d3e8922ac.png" alt="スクリーンショット 2018-02-12 22.21.22.png" title="スクリーンショット 2018-02-12 22.21.22.png" />
▲ ホロラボ「AR CAD Cloud」（<a href="https://www.youtube.com/watch?v=YkCALqPSO1E" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">動画リンク</a>）</p>

<p><strong>前本:</strong> AR CAD Cloudは、CADデータをHoloLensにダウンロードしてその場ですぐに見られるサービスです。<strong>モノを作る前に、作ったらどうなるかが確認できる時代</strong>になっています。</p>

<p><strong>千葉:</strong> <strong>日本で一番最初に業務にHoloLensを取り入れた事例は、日本航空さん</strong>ですね。1つはパイロットの訓練向け、もう1つは整備士の訓練向けシミュレーションです。飛行機は飛ばしていないと利益効率があがらないので実機での練習は難しく、シミュレータも好きな時に使えるわけではなかった。新人の方なんかは、机の上に印刷した紙を広げて手を置いて、ということをしていたらしいです。</p>

<p>VRでもいいんじゃないかと思うかもしれないですが、訓練では<strong>自分の手が認識できること</strong>が重要だそうで、外の世界をシースルーで見ることができるHoloLensが向いていたようです。</p>

<p><strong>白石:</strong> MRとVRは似たようなことができそうだけど、確実な違いがあるんですね。MRのいいところは「現実世界も見えている」というところですかね。</p>

<p><strong>千葉:</strong> そうですね。VRにも現実世界を取り込むことはできるんですが、結局カメラであって目で見る現実とは違うものなんですよね。</p>

<p><strong>白石:</strong> Windows MRというのがありますけど、どういうものなんですか？</p>

<p><strong>千葉:</strong> 最初のデバイスとしてHoloLensが発売されたんですが、やはりコンシューマー向けとしては高額じゃないですか。裾野を広げたいという意図で、Windows MRと名前を変えて、HoloLensはその一つということになりました。</p>

<p><strong>白石:</strong> HoloLensはハイエンドなWindows MR対応デバイスの一つ、というところでしょうか。</p>

<p><strong>千葉:</strong> 開発者視点でいうと、HoloLensの開発ノウハウでWindows MRが開発でき、逆も然りと。デバイスも複数社から出ていて、4〜5万円程度とそれほど高額ではないので手軽さは広がったかと思います。</p>

<h3>被るだけではないVRの領域</h3>

<p><strong>白石:</strong> 続いてVRについても伺っていきたいです。</p>

<p><strong>いっこう:</strong> 実はVRの歴史は長く、日本バーチャルリアリティ学会は25年ほど、研究分野としてのVRは50年ほど前からあります。ちなみに学会的にはVRを「仮想現実」と訳すのは少しNGで、<strong>アカデミア的には「人工現実感」を推していきたい</strong>です。……細かいんですが、一応（笑）</p>

<p><strong>白石:</strong> 訳にも違いが出るんですか。いまVRではどんなことが実現できるんですか？</p>

<p><strong>いっこう:</strong> バーチャルというのは「仮想」ではなく、「姿形はそのままだけど実際にはないもの」なんです。VRというとヘッドマウントディスプレイのイメージですが、実際には被らなくてもそこにあるという捉え方です。例えばドームスクリーンとか、匂い系のデバイスとかもVRですし、舌に電気を流して味を感じるのもVRです。<strong>頭に電気を流して、幼女にビンタされる感覚を味わうというのもVR</strong>です（笑）。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/46dbb860-4bec-d181-10e6-a28290a70bfa.jpeg" alt="DSC09309.jpg" title="DSC09309.jpg" /></p>

<p><strong>白石:</strong> 世界はそんなところまで行っているんですか（笑）！？</p>

<p><strong>いっこう:</strong> 開発者レベルなんですけどね。学術としてのVRとコミュニティのVRはやや溝があり、もう少しうまく繋がったらいいなと思っています。VRはMRに比べてデバイスが多いので、一般のガジェット好きが手軽に楽しめるのがいいところかなと思います。</p>

<p><strong>白石:</strong> 先ほどMRはシースルーなところが利点という話がありましたけど、VRの利点はやはり没入するというところですかね？</p>

<p><strong>いっこう:</strong> 被るタイプのものだと完全没入型というメリットは1つ大きいですね。あとは学会的な見方ですが、<strong>VRは「3C/3E」のための道具</strong>なんです。<strong>3CはCreation（創造）、Control（制御）、Communication（通信）</strong>。3Eは、<strong>Elucidation（解明）、Education（教育）、Entertainment（娯楽）</strong>です。</p>

<p>Control（制御）はいわゆるロボット制御だけでなく、例えば人が入れない原発などを遠隔で見る、というもVRの領域です。</p>

<p>Communication（通信）というと、最近だとVirtual YouTuber（VTuber）やVRChatが流行っていますよね。VTuberではキヅナアイちゃんがいて、去年くらいから他のVTuberがどんどん出てきてかなり盛り上がっています。アイちゃんを知っている人？</p>

<p>（会場、ほとんどが挙手）</p>

<p><strong>白石:</strong> VTuber、VR Chat、初耳です……！流行っているんですね。</p>

<p><strong>いっこう:</strong> アイちゃんに関しては既にかなり稼いでいて、スタイルとして確立しているかなと。加えて、最近は割と簡単にVTuberになれる仕組みが整ってきたと思います。ちょうど先日UnityとWindows MR（Lenovo Explorer）を使って、ほぼコードを書かずにVTuberになるという記事が上がっていました。</p>

<p>⇒ 参考: <a href="https://qiita.com/platoronical/items/754a4e3712574244ea96" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">windowsMRでバーチャル生放送をするためのセットアップ</a></p>

<p><strong>白石:</strong> これは、配信をする側がデバイスを被っているということなんですか？</p>

<p><strong>いっこう:</strong> そうです。鏡を置いて、ボイスチェンジャーを使って。最近はあえて声はおっさんのままというVTuberが流行っていますが（笑）。</p>

<p><strong>白石:</strong> うーん、すごいですね。VR Chatというのは？</p>

<p><strong>いっこう:</strong> VR Chatはここ最近でグッとユーザが伸びているんですが、セカンドライフのようなイメージで、自分のアバターを使ってワールドワイドにコミュニケーションできるものです。まだ高いんですが、一般人でも自分の身体を3Dスキャンしてアバターに使う人も出てきました。</p>

<p>⇒ 参考: <a href="http://panora.tokyo/51297/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">3Dスキャンした実写アバターで「VRオフ会」する猛者が登場　これもうオフかオンかわかんねぇな……</a></p>

<p><strong>白石:</strong> これはどうやって移動するんですか？実際に歩いて動く？</p>

<p><strong>いっこう:</strong> 手に持ったコントローラが紐付いて手の動きを自然に見せてくれ、足の動きは補完されます。</p>

<p><strong>白石:</strong> なるほど。3Eの方だとどのような具体例があるんでしょうか？</p>

<p><strong>いっこう:</strong> Entertainment（娯楽）ではVR ZoneやVR PARK TOKYOなどが流行っていますし、開発者もエンタメ系の用途で使っている人が多いですよね。HoloLensでもエンタメはできるんですけど、<strong>広く受けているのは没入感の違い</strong>かなと思います。</p>

<p><strong>千葉:</strong> 現実世界から離れたいこと、ありますもんね（笑）。</p>

<h3>各OS対応で盛り上がるAR領域</h3>

<p><strong>白石:</strong> AR領域でいうと、<strong>ARKit、ARCore</strong>がすごく盛り上がりましたよね。</p>

<p><strong>千葉:</strong> GoogleのハイエンドなARプラットホームTangoは終了が決まってしまいましたね……。後続でマス向けのARCoreが発表されました。</p>

<p><strong>いっこう:</strong> ARKitの方はアップデートで、これまで<strong>水平だけだったのが垂直も検出できる</strong>ようになり、できることが増えましたね。</p>

<p><strong>白石:</strong> スマートフォンの普及率からいうと、xRの中では一般普及するのはARが早いんでしょうか？</p>

<p><strong>千葉:</strong> 手軽に使えるという意味ではそうでしょうね。</p>

<p><strong>前本:</strong> <strong>VR、MRの課題は、手軽じゃない</strong>という部分がありますからね。買わないと、被らないといけない。最近のARはARKit/ARCoreの登場で、すごく現実感が出てきました。<strong>10cm動かすと10cm動くように精度が上がって、一つ上のステージに上がったな</strong>と思います。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/7fc22d6b-6815-f48e-f579-a285983006b3.png" alt="スクリーンショット 2018-02-13 0.45.58.png" title="スクリーンショット 2018-02-13 0.45.58.png" />
▲ AR World Sharing Demo（<a href="https://www.youtube.com/watch?v=4X6FxE7aSMs&amp;feature=youtu.be" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">動画リンク</a>）</p>

<p><strong>いっこう:</strong> Web技術の文脈では、WebVR、WebARが有用ですね。これまでアプリでしかARが実現できなかったのが、<strong>ブラウザがgetUserMediaに対応して、Webベースでカメラ情報を取得して実現できる</strong>ようになったのが大きいです。MozillaさんがWebVRとWebARを統合した<strong>WebXR</strong>を推していて、W3CではWebVRは既にAPIが用意されていますが、次のバージョンアップではWebXRにしようということになっています。</p>

<p>⇒ 参考: <a href="https://immersive-web.github.io/webxr/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebXR Device API Specification</a></p>

<p><strong>いっこう:</strong> 簡単にVRアプリケーションを開発できる、WebVRフレームワークのA-Frameもかなり盛り上がっていて、コミュニティが成熟してきていますね。</p>

<p>⇒ 参考: <a href="https://aframe.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">A-Frame</a></p>

<h2>さらなる発展へ向けて技術的課題の解決が必要</h2>

<p><strong>白石:</strong> ここまではそれぞれの技術の現状を伺ってきましたが、さらなる進歩へのボトルネックや技術的な課題といった部分も聞いてみたいですね。</p>

<p><strong>千葉:</strong> <strong>デバイスの制約</strong>は一つ大きな課題ですね。例えばデバイスを被らないといけないし、デバイスの処理能力がそれほど高くないし、バッテリーの持ちの問題もある。VRでもバッテリーとは逆にケーブル接続の制約があるかと思います。</p>

<p><strong>白石:</strong> HoloLensって、実際には電池はどれくらい持つものですか？</p>

<p><strong>千葉:</strong> 通常の使い方だと3〜4時間、積極的に使っていると2時間ほどです。技術の進歩で、将来的には解決されていく課題だとは思いますが。</p>

<p><strong>白石:</strong> 逆に2012年頃に作っていたプロトタイプから考えるとどうですか？</p>

<p><strong>千葉:</strong> 当時はいろいろ剥き出しで、サイズも大きくケーブルも多く、<strong>本当に最終製品になるんだろうか？</strong>と不安でした。でもやっぱり技術の進歩があって、5年経ってわずか579グラムです。今の課題も5年後、10年後と解決されていくはずですね。</p>

<p><strong>前本:</strong> 2017年後半は開発環境の課題が多かったですね。HoloLensのアプリケーションはまずUnityで開発して、Visual Studioに書き出して、HoloLensにデプロイするという流れなんですが、それぞれのバージョンの違いで整合性が取れないようなことがあってかなりバッドノウハウが蓄積していました。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/4be0f7e1-ca5c-c2d8-5a1a-c58e0d4ef03f.jpeg" alt="DSC09318.jpg" title="DSC09318.jpg" /></p>

<p><strong>白石:</strong> 開発環境の問題があったんですね。</p>

<p><strong>前本:</strong> いまはだいぶ落ち着いて、初めての人でも開発しやすくなりました。発売当初に初めてHoloLensを触ったときは、こんなことが生きている間にあるんだ！と思ったのに、すぐに視野が狭いとか腕が疲れるとか、思うところがでてきて、終わりがないです（笑）。</p>

<p><strong>千葉:</strong> 本当ですよね。今から10年前を考えてみると、2017年にこんなデバイスがでていると想像できなかった。10年先は想像できないけど、たぶん10年後も満足していないと思います。人間の探究心って便利じゃないところを見つけてしまうので終わりはないけど、気がついたらみんな普通に使ってましたという感じになるんじゃないかと思っています。</p>

<h2>xRで盛り上がるビジネス領域</h2>

<p><strong>白石:</strong> xRの技術的な側面をたくさん聞かせてもらいましたが、実際にはxR界隈ではどういうビジネスが生まれているんでしょうか？</p>

<p><strong>いっこう:</strong> VRでいうと、アメリカのVR/AR専門ファンドの<a href="http://www.thevrfund.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">The Venture Reality Fund</a>が年に2回作成している<strong>VRカオスマップ</strong>が参考になります。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/7a1921d5-c872-6bd4-857e-78c0aa3dbdd9.jpeg" alt="vrf_vr_industry_q1_2017_v3-2.jpg" title="vrf_vr_industry_q1_2017_v3-2.jpg" />
▲ The Venture Reality FundによるVRカオスマップ</p>

<p><strong>いっこう:</strong> 機械、ソフト、ハードとだいぶプレイヤーが多くなっていると思います。その中で一部日本の企業も入っていて、健闘しているなあと思いますね。</p>

<p><strong>白石:</strong> 大カテゴリが「Applications/Content」「Tools/Platform」「Infrastructure」。ホロラボさんはアプリケーション領域ですよね。どういうお仕事がメインですか？儲かっていますか（笑）？</p>

<p><strong>前本:</strong> まあ、お陰様でぼちぼち……（笑）。受託で作る場合と、AR CAD Cloudのように自社パッケージとして作る場合とがあり、始めたばかりなのでなんでもアリ、という感じです。</p>

<p><strong>いっこう:</strong> ゲームカテゴリだとバンダイナムコさんが入っていますね。もともとが大きい会社ですけど、VR Zoneもかなり盛り上がっていますし、VR領域では日本で一番じゃないかなと思います。</p>

<p><strong>白石:</strong> Tools/Platformというと、去年Oculas Riftが値下げをしたじゃないですか。正直、売れてないのかな？と思ったのですが……。</p>

<p><strong>いっこう:</strong> 逆に、値下げをしたことでめちゃめちゃ売れたと思います。Windows MRも手頃な値段なので、結構売れているのではと思っています。</p>

<p><strong>千葉:</strong> そうですね、各社お互いの価格を意識しつつ値段をつけていると思います。</p>

<h2>xRでどうやって「URL」にアクセスするか</h2>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/e9d969f2-e8f9-e384-d6e4-99364dd4ddf5.jpeg" alt="DSC09342.jpg" title="DSC09342.jpg" /></p>

<p><strong>白石:</strong> 会場からも質問を受け付けてみたいと思うんですが、どうでしょうか？</p>

<p><strong>参加者:</strong> 現在のマウスとキーボードで扱うコンピュータのUIは、平面を前提にしているじゃないですか。xRのような3Dで見られるHPやメディアって、どういう形になっていくんでしょうか？例えばWebページにアクセスしたい時、URLの入力はどうするんだろうって想像がつかないんです。</p>

<p><strong>前本:</strong> 一つあるのは、<strong>リアリティがあるからといって、リアルと同じようにしないといけないと疲れる</strong>んですよね。マウスやキーボードのように、操作性を上げる入力装置があったほうがいいだろうと思います。</p>

<p><strong>いっこう:</strong> HoloLensってエアタップなど手を前に出して操作しますけど、結構腕が疲れるんですよね。VR空間の移動も、ワープ方式やコントローラを使う方式があるけど、あまりしっくり来ていなくてまだ確立していない。</p>

<p><strong>千葉:</strong> これまでのUIが生きる部分と、人間の通常の行動がそのままUIになる部分とあると思います。URLでいうと声を発したら文字になって適用されるというのも
いいかもしれない。</p>

<p><strong>いっこう:</strong> いろいろな方法を試していかないとなあというところですよね。</p>

<h2>2020年に向けた期待</h2>

<p><strong>白石:</strong> たっぷりと伺ったところで締めたいと思いますが、最後に2020年の少しだけ未来に、xRはどうなっているか想像や期待を伺わせてください。</p>

<p><strong>いっこう:</strong> 2年後かあ……。VRはハード面では一体型が出てきて、画質も上がって、さらに進歩すると思うんですけど、<strong>一般普及するのは正直まだまだかなあ</strong>と思っています。</p>

<p><strong>白石:</strong> どうしたら一般普及するんでしょうね？キラーコンテンツの登場？</p>

<p><strong>いっこう:</strong> Yahoo!BBがモデムを無料で配ってADSLが普及したように、<strong>国や機関が無料で配る</strong>くらいしないと普及しないんじゃないかと思います。</p>

<p><strong>白石:</strong> 無料で！確かにそうですね。前本さんはどうでしょう？</p>

<p><strong>前本:</strong> 現実的には通信が5Gになったり、視野が広がったりと、技術的な課題がクリアされていくと思います。期待でいうと、xRネイティブな世代が遊びとしてVRやARとAIを連携したりしていて、そういう<strong>遊びの中からすごいものが出てくるんじゃないか</strong>と密かに思っています。もしかしたら攻殻機動隊も実現するんじゃないかな。</p>

<p><strong>千葉:</strong> 技術的な進歩はもちろんですけど、私が期待したいのは「xR盛り上がっているぞ」という一体感ですね。<strong>熱量のある人が増えて、ビジネスも増えて、私自身この領域の仕事にもっともっと関われたらいいな</strong>と期待しています。</p>

<p><strong>白石:</strong> それぞれの熱いお気持ち、ありがとうございます。本日は大変勉強になりました！
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/7572978a-4f65-78e6-05b8-e912d050707f.jpeg" alt="DSC09343.jpg" title="DSC09343.jpg" /></p>
]]></content:encoded>
		
		<series:name><![CDATA[Webの未来を語ろう 2018]]></series:name>
	</item>
		<item>
		<title>JSだけでVRできる！『WebVR』ことはじめ</title>
		<link>/edo_m18/18552/</link>
		<pubDate>Wed, 23 Mar 2016 00:00:08 +0000</pubDate>
		<dc:creator><![CDATA[比留間 和也]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Oculus Rift]]></category>
		<category><![CDATA[VR]]></category>
		<category><![CDATA[WebVR]]></category>
		<category><![CDATA[three.js]]></category>

		<guid isPermaLink="false">/?p=18552</guid>
		<description><![CDATA[今年はVR元年と呼ばれています。 実は過去にも何度かVR元年と呼ばれ、VRが来る、と言われていた年があります。 ですが、今年はいよいよそれが本格的になりそうな状況になってきました。 そこで今回は、「今からWebVRに備え...]]></description>
				<content:encoded><![CDATA[<p>今年はVR元年と呼ばれています。<br />
実は過去にも何度かVR元年と呼ばれ、VRが来る、と言われていた年があります。<br />
ですが、今年はいよいよそれが本格的になりそうな状況になってきました。</p>

<p>そこで今回は、「今からWebVRに備えよう！」ということで、WebVRとはなにか、それを利用して何ができるのか、利用シーンはどうか、といったことに焦点を当てたいと思います。</p>

<h2>VR元年</h2>

<p>本格的になりそうなのはなぜか。まずひとつ挙げられるのはOculus Rift（詳細は後述）に代表される、いくつかのヘッドマウントディスプレイ（以下、HMD）が比較的安価に家庭で利用できるようになったことです。<br />
今年に発売される予定のものだけでも、<a href="https://www.oculus.com/en-us/rift/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Oculus Rift</a>、<a href="http://www.htcvive.com/jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTC Vive</a>、<a href="http://www.jp.playstation.com/psvr/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PlayStation VR</a>、<a href="http://www.getfove.com/jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">FOVE</a>(開発キット版)など様々なHMDが市場に登場する予定になっています。<br />
またこれらが注目される理由として、現在のPCのハードウェア性能が、HMDの必要としている要件を満たしてきた、という点も大きいでしょう。</p>

<p>しかしながら、Oculus Riftに関して言えば 2,160 x 1,200 という高解像度の画面を90FPS、つまり1秒間に90回もレンダリングをしなければなりません。<br />
これは最近のPCであっても、ミドルハイクラス〜ハイエンドクラスのGPUが搭載されているPCが必要であり、安価と言っても「今までに比べて」という側面があることは否めません。</p>

<p>とはいえ、一般ユーザーが手にできるPCでそれを実現できる、というのはやはり大きなポイントでしょう。<br />
現在に至るまでVRは、研究所や政府機関、あるいは財力のある企業に限定されていました。<br />
Oculus Riftの登場により、その敷居が格段に下がったのが今年、というわけです。</p>

<p>例えば今までは大きなアミューズメントパークでしか体験できなかったようなことが家庭でもできる、と考えるとその凄さが実感できるでしょう？</p>

<h2>Oculus Rift</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/03/oculus-image.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/03/oculus-image-300x159.png" alt="oculus-image" width="300" height="159" class="alignnone size-medium wp-image-18553" srcset="/wp-content/uploads/2016/03/oculus-image-300x159.png 300w, /wp-content/uploads/2016/03/oculus-image.png 640w, /wp-content/uploads/2016/03/oculus-image-207x110.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>さて、そんな話題のOculus Riftとはなにか。<br />
VRの火付け役とも言えるOculus Riftは、ヘッドマウントディスプレイ、つまり頭にかぶるようにして利用するディスプレイです。<br />
今までのHMDとの大きな違いは、その視野の広さとヘッドトラッキング／ポジショントラッキング機能が搭載されたことです。</p>

<p>これらがなにをもたらしてくれるか。それは、圧倒的な没入感です。<br />
視野の広さにより、目に映るVRの世界はとても広く、「本当にそこにいるように」感じることができます。<br />
さらに、ヘッドトラッキング／ポジショントラッキングの機能により、右を向いたり、左を向いたり、当然上下も見ることができ、360度の世界を「見渡す」ことが可能となります。<br />
これらの機能によって圧倒的な没入感が生まれ、3D空間に入り込んでしまったような感覚を味わうことができるのです。</p>

<p>とはいえ、VRを説明する上で一番むずかしいのは、この没入感はHMDの機能によって「脳に錯覚」させている点です。<br />
つまりVRを体験したことがない人に言葉や動画だけではすべてを説明することができません。<br />
百聞は一見にしかず、という言葉が本当にぴったりです。</p>

<p>しかし逆を返せば、一度でも体験してもらえさえすれば、そのすごさと魅力を伝えることができるはずです。</p>

<h2>VRをWebに持ち込む意味</h2>

<p>そんな中、VRの波はWebの世界にもやって来ました。それが「WebVR」という仕様です。<br />
WebVRが何かと言うと、前述したOculus Riftに代表されるHMDをWeb上で動かそう、というものです。<br />
そうです。つまりOculus RiftをJavaScriptで動かすことができるのです。</p>

<p>WebVRの仕様や使い方についてはもう少しあとでお話しましょう。<br />
まずはVRをWebの世界に持ち込むことの意味を、筆者の考えを元に説明したいと思います。</p>

<h3>URLだけでコンテンツをシェアすることができる</h3>

<p>VRに限らず、Webのいいところはアプリなどのインストールなしに、ブラウザでアクセスするだけでコンテンツが体験・利用できるところです。<br />
これはVRについても同様のことが言えます。<br />
WebVRを利用したサイトとしては、<a href="http://mozvr.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">MozVR</a>という、Mozillaの運営するサイトがWebVRを用いて実装されています。<br />
（Oculus Riftをお持ちの方は、アクセスしてみるとすぐにでも見ることができます。このように、URLをシェアするだけで体験してもらえるのも大きなポイントのひとつですね）</p>

<p>またWebということはデバイスを限定しない、という側面もあります。<br />
まぁ実際のところハードウェア性能だったり画面解像度だったり、理想と現実で違う部分もありますが、環境を限定しないようにしていく、という視点は大事なポイントでしょう。<br />
つまりなにが言いたいかと言うと、WebにVRを持ち込むことでひとつのVRコンテンツをOculus Rift向けとスマートフォン向けに提供できる、ということです。</p>

<p>実際に、筆者が勤める面白法人カヤックの<a href="http://vr.kayac.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">VR部のサイト</a>はWebGLで実装しており、Oculus Riftが接続されたPCかスマートフォンで閲覧するとVRモードで見れるようになっています。<br />
WebGLに対応したものであれば、お手持ちのスマートフォンで見ることができるのでぜひ見てみてください。</p>

<h2>WebVRをどうコンテンツに活用するか</h2>

<p>では実際に、VRをどうWebコンテンツにしていったらいいのでしょうか。<br />
正直なところを書いてしまうと、いかようにでもできる、というのが現時点での感想です。<br />
VRは3D空間に入り込んだように見せることができるため、本当に様々な分野に活用されています。<br />
ゲームはもちろんのこと、介護や医療などにも応用されています。</p>

<p>また最近では、VR空間上でコミュニケーションできる「<a href="http://shiropen.com/2016/03/12/14183" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">BigScreen</a>」というソーシャルVRアプリが発表されました。<br />
FacebookもソーシャルとVRについて注目しています。<br />
個人的には、Skypeなどで行っている動画チャットによる会議なども、VRにすることでより自然な形で、オンライン上のやりとりができると考えています。</p>

<p>VRミーティングみたいなものはWebと相性のいい例です。なにせ、URLをシェアしてそこにアクセスするだけでミーティングが始められるわけですから。</p>

<p>以上のように、VRは様々な活用方法があり、あとはアイデア次第でいかようにもできる、というポテンシャルを秘めていると考えています。</p>

<h2>今からでもできる！　スマホVR</h2>

<p>さて、ではいよいよWebVRの仕様や使い方について解説していきます。</p>

<p>実のところ、スマホでのVRはWebVRはまったく関係ありません。<br />
というより、スマホにはVRコンテンツを表示する上で必要な機能がすでに備わっています。<br />
スマホには</p>

<ul>
<li>高解像度の画面</li>
<li>ジャイロセンサーによる頭の向きのトラッキング</li>
<li>VRコンテンツを表示するための高性能なCPU／GPU</li>
</ul>

<p>つまり、制作者側が準備さえすれば、すでにVRを体験する土台は整っている、というわけです。<br />
（実際のところはやはりそれなりのハードウェア性能が求められるので、iPhone6などの最近の端末が必要になることは否めませんが）</p>

<p>ある程度ユーザー環境を限定してしまうものの、Oculus RiftなどのHMDデバイスを持っていないユーザーに対して、それも圧倒的多数のユーザーに対してVRコンテンツを届けられるのは事実です。<br />
ただ一点だけ、解決しなければならない問題があります。<br />
それは、例えVRコンテンツを表示する準備ができたとしても、それを立体視する道具がなければ意味を成さないことです。</p>

<p>しかしご安心を。<a href="https://www.google.com/get/cardboard/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GoogleのCardboard</a>や<a href="http://hacosco.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ハコスコ</a>に代表される、段ボール製のゴーグルも最近では活発に発表されています。<br />
また、「<a href="http://www.amazon.co.jp/s/ref=nb_sb_noss_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;url=search-alias%3Delectronics&amp;field-keywords=VR%E3%82%B4%E3%83%BC%E3%82%B0%E3%83%AB" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">VRゴーグル</a>」などで検索してみると、プラスチック製の比較的しっかりしたゴーグルも様々なものが発売されていることも分かります。<br />
そしてどれもが1000〜3000円以内で購入することが可能です。</p>

<p>このように、圧倒的に安価にVRを始められるのもスマホVRのメリットです。</p>

<h2>実際にスマホVRを作ってみよう</h2>

<p>安価に体験できることは分かりました。しかしまだ読者の方の中には「でも作るのは大変なんでしょ？」と思われている方がいらっしゃるかもしれません。<br />
しかし、それも心配無用です。</p>

<p>WebVRの波に乗るように、すでにいくつかのフレームワークが登場しています。<br />
今回紹介するのは「<a href="https://github.com/borismus/webvr-boilerplate" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebVR Boilerplate</a>」です。</p>

<p>これを使えば、非常に手軽にWebVR（とスマホVR）の環境を構築することができます。<br />
このフレームワークはWebGLのライブラリとして有名な<a href="http://threejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Three.js</a>をベースに構築されています。</p>

<p>Three.jsに触れたことがある読者の方であれば、いくつかのスクリプトを読み込ませ、数行書き出すだけですぐにでもWebVRに対応させることが可能です。<br />
今回はこれを使って、ごく簡単なシーンのセットアップコードを見ながら、実際にVRコンテンツが手軽に作れることを実感してもらいたいと思います。<br />
（もしすでにThree.jsでコンテンツを作ったことがある方は、ぜひご自分のコンテンツをWebVR化してみてください）</p>

<h2>シーンの構築</h2>

<p>まずはThree.jsを使ってシーンを構築していきます。<br />
今回は長くなってしまうのでThree.jsの使い方などについての説明は割愛します。<br />
が、ごく簡単なシーンですので使ったことがない方でも、なんとなくどんなことをやっているかは分かるかと思います。</p>

<p>ちなみに今回のデモは<a href="https://github.com/edom18/html5-exp-webvr-demo" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Githubにソースコード</a>をアップしています。<br />
また<a href="http://edom18.github.io/html5-exp-webvr-demo/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">実際に動くものも公開</a>しているので、どんなものかをすぐ見ることができます。</p>

<p>スマホで実際に実行した状態は以下のようになります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/03/demo-image.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/03/demo-image-300x166.png" alt="demo-image" width="300" height="166" class="alignnone size-medium wp-image-18555" srcset="/wp-content/uploads/2016/03/demo-image-300x166.png 300w, /wp-content/uploads/2016/03/demo-image.png 640w, /wp-content/uploads/2016/03/demo-image-207x115.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a>
<a href="https://gyazo.com/d63bd8da3db4703b6600c71b73be6248" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">アニメーションgif</a></p>

<p><code>
// WebGLレンダラを生成
var renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setPixelRatio(window.devicePixelRatio);</p>

<p>// CanvasをDOMツリーに追加
document.body.appendChild(renderer.domElement);</p>

<p>// シーンを生成
var scene = new THREE.Scene();</p>

<p>// カメラを生成
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 10000);</p>

<p>// VR用コントローラを生成
var controls = new THREE.VRControls(camera);</p>

<p>// VR用エフェクトを生成（2分割の画面を構築する）
var effect = new THREE.VREffect(renderer);
effect.setSize(window.innerWidth, window.innerHeight);</p>

<p>// VRマネージャの生成
var manager = new WebVRManager(renderer, effect);
</code></p>

<p>まずはシーンのベースを構築します。<br />
シーンオブジェクト、カメラオブジェクト、あとはそれらをコントロールするコントローラにマネージャ、と名前を見ればなんとなくどんなことをやってくれるかが分かるオブジェクトたちをセットアップしています。<br />
Three.jsを触ったことがある人であれば何度も目にしている記述とほぼ同じことが分かると思います。</p>

<p>さて、土台を作ったらシーンの登場人物たちを作ります。<br />
冒頭で説明した通り、今回は宇宙空間に地球が浮いているようなものを想定しているのでそれらを作っていきます。</p>

<p><code>
// Skysphereの生成（星空）
var skysphereLoader = new THREE.TextureLoader();
skysphereLoader.load('img/bg_skyplane.png', onSkysphereTextureLoaded);
function onSkysphereTextureLoaded(texture) {
    texture.wrapS = THREE.RepeatWrapping;
    texture.wrapT = THREE.RepeatWrapping;
    texture.repeat.set(4, 4);</p>

<pre><code>var geometry = new THREE.SphereGeometry(5000, 128, 128);
var material = new THREE.MeshBasicMaterial({
    map: texture,
    color: 0xffffff,
    side: THREE.BackSide
});

var skysphere = new THREE.Mesh(geometry, material);
skysphere.position.z = 0;
scene.add(skysphere);
</code></pre>

<p>}</p>

<p>// 地球オブジェクトの生成
var earth = new THREE.Object3D();
var earthLoader = new THREE.TextureLoader();
earthLoader.load('img/earth.jpg', onEarthTextureLoaded);
function onEarthTextureLoaded(texture) {
    texture.wrapS = THREE.RepeatWrapping;
    texture.wrapT = THREE.RepeatWrapping;</p>

<pre><code>var geometry = new THREE.SphereGeometry(0.3, 32, 32);
var material = new THREE.MeshLambertMaterial({
    map: texture,
    color: 0xffffff
});

earth = new THREE.Mesh(geometry, material);
earth.position.z = -1;
scene.add(earth);
</code></pre>

<p>}</p>

<p>// ライトの生成（地球を斜め上から照らしたような演出にします）
var light = new THREE.DirectionalLight(0xffffff);
light.position.set(1, 1, 1);
scene.add(light);
</code></p>

<p>これで宇宙（星空）と地球、そして太陽に照らされているような演出ができあがりました。<br />
現時点で実行して見ると宇宙空間に地球が浮いている様子が描画されます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/03/earch-capture.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/03/earch-capture-300x233.png" alt="earch-capture" width="300" height="233" class="alignnone size-medium wp-image-18556" srcset="/wp-content/uploads/2016/03/earch-capture-300x233.png 300w, /wp-content/uploads/2016/03/earch-capture.png 640w, /wp-content/uploads/2016/03/earch-capture-207x160.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>さぁ、いよいよ最後の部分です。<br />
VRモードで見るにはジャイロで動かして、さらに立体視できるように画面を分割して表示する必要があります。</p>

<p>ジャイロで動かしたり、地球を回転させたり、といったことを実現するにはそのためのループ処理（アニメーションループ）を実装します。<br />
そのループ処理の中で地球の回転や、ジャイロをカメラに伝える処理を記述します。<br />
それを実現するのが以下の記述です。</p>

<p><code>// アニメーションループ
var lastRender = 0;
function animate(timestamp) {
    var delta = Math.min(timestamp - lastRender, 500);
    lastRender = timestamp;</p>

<pre><code>earth.rotation.x += delta * 0.000015;
earth.rotation.y += delta * 0.000025;

// VRコントローラのupdate
controls.update();

// VRマネージャを通してシーンをレンダリング
manager.render(scene, camera, timestamp);

// アニメーションループ
requestAnimationFrame(animate);
</code></pre>

<p>}</p>

<p>// アニメーションの開始
animate(performance ? performance.now() : Date.now());</code></p>

<p>アニメーションループ部分です。<br />
どうですか？　拍子抜けしましたか？<br />
見てみるとアニメーションのループの中で実際になにかしら計算っぽいことをしているのは、地球を回転させる処理だけです。<br />
それ以外はすべて、VRコントローラとマネージャが引き受けてくれます。</p>

<p>あとはこれを実際に実行してみれば、冒頭で紹介したデモと同じ状態が再現されます。</p>

<p>いかがでしょうか。こうしたフレームワークを使うことで、WebVRとスマホVRは驚くべき手軽さで実現することができるのです。</p>

<h2>WebVRでOculus Riftを動かそう！</h2>

<p>前述まででいかに手軽にスマホVRが制作できることが分かっていただけたかと思います。<br />
さて、だいーぶ前置きが長くなってしまいましたが、ここから本題です。</p>

<p>WebVRのAPIを利用してOculus Riftを動かすところを見てみましょう。<br />
実のところ、このAPI自体も自分自身で触ることはほぼないでしょう。<br />
前述したWebVR BoilerplateにはWebVRをラップしたいくつかの便利ライブラリが含まれています。</p>

<p><strong>※ 現時点の最新仕様はWebVR1.0となっており、執筆時点ではまだ正式対応がされていないようですが、WebVR1.0向けのブランチが存在しているので、そちらをダウンロードしてきて利用してもいいでしょう。</strong></p>

<p>WebVR Boilerplateを使って実装した上記の地球デモはすでにWebVRのAPIに対応した状態になっています。<br />
（ただし、上でも触れた通り、Oculus Riftの最新のRuntimeが入った状態だと、masterブランチのものでは動作しません。また、WebVR1.0に対応したブランチであっても、WebVR1.0に対応しているのはChromiumの専用ビルドだけなので注意してください）</p>

<p>ごく簡単なセットアップだけでOculus RiftとスマホVRに両対応できるのはとてもメリットです。</p>

<p>ではいよいよWebVRのAPIを説明していきましょう。<br />
・・・といきなり言われても、おそらくOculus Riftを持っている方のほうが少ないでしょう。<br />
（なんせ製品版は10万円近くもしますからね）</p>

<p>なので今回は、WebVRのAPIがどんなものなのか、それをどう使うのか、ということを解説したいと思います。<br />
最初に断っておくと、WebVRのAPI自体はとても簡単なものです。<br />
事実、APIから取得できる頭の位置、回転の情報を取得してそれをThree.jsのカメラの位置や回転に変換して適用してやるだけです。<br />
極論な例を挙げるなら、ジャイロセンサーの値をなにかしらのスマホコンテンツに利用するのとほぼ同じことと言えます。</p>

<p>デバイスから値を取り出し、それを使う。</p>

<p>本当にただこれだけです。</p>

<p>しかしVRを表現する上でスクラッチで書くには大変な部分もあります。<br />
下のキャプチャのように、中央から半分に分割されたVRの動画や画像をよく見かけると思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/03/oculus-scene.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/03/oculus-scene-300x187.gif" alt="oculus-scene" width="300" height="187" class="alignnone size-medium wp-image-18557" srcset="/wp-content/uploads/2016/03/oculus-scene-300x187.gif 300w, /wp-content/uploads/2016/03/oculus-scene-207x129.gif 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>画面を半分にし、それぞれの視点（左右の目）から見た状況をレンダリングする必要があるのです。<br />
（上の画像をよーく見ると、若干左右の画面に違いがあるのが分かると思います）</p>

<p>しかし今回は、WebVR APIの使い方のイメージを掴んでいただくために、上記のレンダリングについては触れません。<br />
これをスクラッチでやろうとすると、行列の知識や3Dの表現方法についての前提知識が必要となってしまい、説明するにはさらに多くの文章を必要としてしまうため、今回は割愛させていただきます。<br />
ただ上でも書いた通り、このあたりの処理を自前で書く、ということはほぼゼロと言っていいでしょう。</p>

<p>そのため、内部的にどういう動作をしているか、を理解するにとどめておくだけで十分だと考えています。</p>

<p>今回はThree.jsのリポジトリに含まれている、VRControlsの実装を参考に、WebVR1.0に対応させたコードを紹介します。</p>

<p><code>
var vrDisplay;</p>

<p>// VR Displayオブジェクトを取得
navigator.getVRDisplays().then(function (displays) {
    if (displays.length === 0) {
        console.log('WebVR API is not supported.');
        return;
    }</p>

<pre><code>vrDisplay = displays[0];
</code></pre>

<p>});</p>

<p>// VRモードに移行
function toVRMode() {
    var canvas = document.getElementById('canvas');
    vrDisplay.requestPresent({
        source: canvas
    });
}</p>

<p>//////////////////////////////////////////////////</p>

<p>// カメラの位置、回転を制御
(function loop() {
    // VRDisplayに実装されている<code>requestanimationframe</code>を利用する
    vrDisplay.requestAnimationFrame(loop);</p>

<pre><code>var pose = vrDisplay.getPose();

var orientation = pose.orientation;
camera.quaternion.fromArray(orientation);

var position = pose.position;
camera.position.fromArray(position);
</code></pre>

<p>}());
</code></p>

<p>とてもざっくりですが、WebVRのAPIを使った処理になります。</p>

<p><code>navigator.getVRDisplays</code>メソッドを利用してVRデバイスオブジェクトを取得します。<br />
基本的にこのオブジェクトを介して処理を進めていくことになります。</p>

<p><strong>注意</strong>
先にも書きましたが、<code>getVRDisplays</code>はWebVR API1.0の仕様であり、それ用にビルドされたChromiumでしか動きません。（執筆時：2016.03.15）<br />
FirefoxもWebVRに対応していますが、以前の仕様で実装されており、<code>getVRDevices</code>メソッドがその役割になります。<br />
しかし、取得できるデバイスオブジェクト自体が異なるため、今回紹介した方法では動きません。</p>

<p>上記で利用しているメソッドは以下です。</p>

<ul>
<li>requestPresent</li>
<li>requestAnimationFrame</li>
<li>getPose

<ul>
<li>pose.position</li>
<li>pose.orientation</li>
</ul></li>
</ul>

<p><code>requestPresent</code>メソッドはその名の通り、VRモードを表示するメソッドです。<br />
フルスクリーンになり、上のほうで掲載した歪んだ画面を表示するためのものです。</p>

<p><code>requestAnimationFrame</code>は<code>window</code>に生えているものとは別のものになります。<br />
というのも、<code>window</code>に生えているものは基本的に60Hzで動作するのに対し、VRではさらにその上の、90〜120Hzが要求され、frame数が合わないためです。<br />
なので、VRモードではこちらを利用します。</p>

<p>一番注目してもらいたいのが<code>getPose</code>で取り出される値です。<br />
読んで字のごとく、HMDの姿勢（pose）を取得するものです。</p>

<p>ここに、HMDがトラッキングした位置と回転情報が格納されています。<br />
これをそのままカメラの制御に利用すれば、HMDの情報がそのままカメラに伝播し、結果としてVR空間を好きなように見渡すことが可能になる、というものです。</p>

<p>Three.jsを利用すれば、こうしたカメラなどが抽象化され、3Dに対しての知識があまりなくても実装することが可能です。<br />
Oculusを持っている方はぜひ、簡単なサンプルでも構わないので作ってみてみてください。<br />
自身が作ったものが目の前で動いているのは、どんなにシンプルなものでも感動するはずです。</p>

<p>コードを見てもらうと気づくと思いますが、カメラやエフェクトの部分以外はWebGLでコンテンツを作ることとまったく同じです。<br />
あとはこれらを組み合わせてなにを作るか。アイデアさえ出てくれば、きっと様々なVRコンテンツを作ることができることと思います。<br />
ぜひ、これを機会にVRコンテンツ制作に手を出してみてください。</p>

<p>ちなみに、WebVR1.0の実装についてもっと詳しく知りたい方は、<a href="https://hacks.mozilla.org/2016/03/introducing-the-webvr-1-0-api-proposal/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらの記事</a>にセットアップから実行までの解説が載っているので参考にしてください。（<a href="https://mozvr.github.io/webvr-spec/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">仕様はこちら</a>）</p>

<h2>最後に</h2>

<p>いかがだったでしょうか。<br />
VRと言っても、コンテンツの作り方はWebGLとそう大きくは変わりません。<br />
コンテンツの良し悪しはWebGLでのコンテンツの良し悪しに直結します。</p>

<p>ただVRならではの問題もあり、例えば目の前を覆ってしまうため、キーボードやマウスなどのデバイスを使っての操作はあまり向かないでしょう。<br />
ゲームパッドのようなものはまだ大丈夫かもしれません。<br />
そのため、UIに関してはまだまだこれだ、という状況になっておらず、今後も様々な研究結果が出てくるものと思われます。</p>

<p>ただどちらにせよ、UIの作り方自体はWebGL（3D）上での話になるため、制作過程についてはVRのために、というよりもWebGLでどう作るか、を学ぶことで解決できると思います。</p>

<p>VRという新しい技術をどう活かすか。それは制作者である読者の方の考え方次第で無限に広がっていくと思っています。<br />
ぜひこの機会にVRコンテンツの制作を開始してみてください。<br />
（例えばモデルルームをVRで観ることができる、というものは実際に行っている例があります）</p>

<p>筆者はスマホVRが市場を牽引してくれると信じています。<br />
さらに言えば、Webで展開されるスマホVRがよりその力が強いでしょう。</p>

<p>しかしそのためにはみなさんの力が必要です。<br />
ぜひいろいろなVRコンテンツを世に広め、VRを体験したことがある人を増やせるようにしていただけると幸いです。</p>
]]></content:encoded>
			</item>
		<item>
		<title>HTML5 Experts.jp 2014年の年間読まれた記事ランキングTOP20！</title>
		<link>/yusuke-naka/11973/</link>
		<pubDate>Fri, 26 Dec 2014 06:47:16 +0000</pubDate>
		<dc:creator><![CDATA[仲 裕介]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Material Design]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Web Components]]></category>
		<category><![CDATA[Web Starter Kit]]></category>
		<category><![CDATA[ionic]]></category>
		<category><![CDATA[three.js]]></category>

		<guid isPermaLink="false">/?p=11973</guid>
		<description><![CDATA[日本初のHTML5技術専門サイト「HTML5 Experts.jp」も開設から1年5カ月が経ちました。2014年は時事ネタをタイムリーに取り入れた特集記事を充実させて参りましたが、皆様、お楽しみいただけましたでしょうか？...]]></description>
				<content:encoded><![CDATA[<p>日本初のHTML5技術専門サイト「HTML5 Experts.jp」も開設から1年5カ月が経ちました。2014年は時事ネタをタイムリーに取り入れた特集記事を充実させて参りましたが、皆様、お楽しみいただけましたでしょうか？今年最後の記事は、記事公開後１週間の閲覧数（PV）をもとに、2014年の年間読まれた記事ランキングTOP20！をお届けします。</p>

<h2>年間読まれた記事ランキングTOP20！</h2>

<p><strong>＜1位＞</strong><br>
<a href="https://html5experts.jp/furoshiki/8582/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="1" src="/wp-content/uploads/2014/07/709f657b9e0fe7c6dc483643a3c959b2.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/furoshiki/8582/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Googleはなぜモバイルに力を入れるのか？これからのWebパフォーマンスで注力すべきポイント</a></strong><br>
── <a href="https://html5experts.jp/furoshiki/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">川田寛</a></p>

<p><br><br></p>

<p><strong>＜2位＞</strong><br>
<a href="https://html5experts.jp/girlie_mac/8384/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/07/devtools-device-mode-screencast.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/girlie_mac/8384/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">モバイルWeb開発に役立つ！Chrome DevToolsの新機能「デバイスモード」</a></strong><br>
── <a href="https://html5experts.jp/girlie_mac/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Tomomi Imura</a></p>

<p><br><br></p>

<p><strong>＜3位＞</strong><br>
<a href="https://html5experts.jp/nakajmg/8931/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/08/wsk_0.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/nakajmg/8931/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Googleのベストプラクティスに沿ったモダンな製作の出発点「Web Starter Kit」 </a></strong><br>
── <a href="https://html5experts.jp/nakajmg/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">中島 直博</a></p>

<p><br><br></p>

<p><strong>＜4位＞</strong><br>
<a href="https://html5experts.jp/1000ch/8906/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/07/gmail.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/1000ch/8906/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Componentsが変えるWeb開発の未来</a></strong><br>
── <a href="https://html5experts.jp/1000ch/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">泉水翔吾</a></p>

<p><br><br></p>

<p><strong>＜5位＞</strong><br>
<a href="https://html5experts.jp/amurachi/10569/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/09/talk1.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/amurachi/10569/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5とかモバイルとかJSフレームワークとか、ぶっちゃけどうなの座談会</a></strong><br>
── <a href="https://html5experts.jp/amurachi/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">村地彰</a></p>

<p><br><br></p>

<p><strong>＜6位＞</strong><br>
<a href="https://html5experts.jp/yomotsu/5225/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/02/1.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/yomotsu/5225/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">初心者でも絶対わかる、WebGLプログラミング＜three.js最初の一歩＞</a></strong><br>
── <a href="https://html5experts.jp/yomotsu/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">小山田 晃浩</a></p>

<p><br><br></p>

<p><strong>＜7位＞</strong><br>
<a href="https://html5experts.jp/albatrosary/10855/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/09/DSC074061.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/albatrosary/10855/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">いまや最も優れたJavaScriptフレームワーク「AngularJSリファレンス」出版記念会</a></strong><br>
── <a href="https://html5experts.jp/albatrosary/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">佐川 夫美雄</a></p>

<p><br><br></p>

<p><strong>＜8位＞</strong><br>
<a href="https://html5experts.jp/girlie_mac/4558/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/01/luminosity-devices.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/girlie_mac/4558/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5で実現できる！環境光に合わせたレスポンシブなUI</a></strong><br>
── <a href="https://html5experts.jp/girlie_mac/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Tomomi Imura</a></p>

<p><br><br></p>

<p><strong>＜9位＞</strong><br>
<a href="https://html5experts.jp/shumpei-shiraishi/11315/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/11/ux2.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/shumpei-shiraishi/11315/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">いま、UXを語るのはなぜ悩ましいのか？─長谷川恭久ロングインタビュー</a></strong><br>
── <a href="https://html5experts.jp/shumpei-shiraishi/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">白石 俊平</a></p>

<p><br><br></p>

<p><strong>＜10位＞</strong><br>
<a href="https://html5experts.jp/msakamaki/9486/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/08/2a88bcbe7f516dcefdfd2218cea0988b.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/msakamaki/9486/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">エンタープライズで使える！実践から学ぶJavaScript MVCフレームワークの選び方</a></strong><br>
── <a href="https://html5experts.jp/msakamaki/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">酒巻瑞穂</a></p>

<p><br><br></p>

<p><strong>＜11位＞</strong><br>
<a href="https://html5experts.jp/iwase/7172/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/06/20140604_decode_prezen_IMG_0270.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/iwase/7172/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web技術者も知るべきデモ・プレゼンの極意（西脇資哲氏）「Microsoft de:code」イベントレポート</a></strong><br>
── <a href="https://html5experts.jp/iwase/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">岩瀬 義昌</a></p>

<p><br><br></p>

<p><strong>＜12位＞</strong><br>
<a href="https://html5experts.jp/furoshiki/9136/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/08/d6940b0c38258d9311986c932cbe9406.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/furoshiki/9136/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5が変える、エンタープライズITの可能性とこれから</a></strong><br>
── <a href="https://html5experts.jp/furoshiki/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">川田寛</a></p>

<p><br><br></p>

<p><strong>＜13位＞</strong><br>
<a href="https://html5experts.jp/iwase/7369/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/06/10453028_750539778322094_4305687654356604239_o.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/iwase/7369/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">【速報】Google I/O 2014 キーノート ライブレポート </a></strong><br>
── <a href="https://html5experts.jp/iwase/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">岩瀬 義昌</a></p>

<p><br><br><br></p>

<p><strong>＜14位＞</strong><br>
<a href="https://html5experts.jp/t32k/5743/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/03/687474703a2f2f692e696d6775722e636f6d2f38316b4b6e78482e706e67.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/t32k/5743/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">自分の書いたコードが即座に解析できる「StyleStats」でCSSを測ろう！</a></strong><br>
── <a href="https://html5experts.jp/t32k/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">石本 光司</a></p>

<p><br><br></p>

<p><strong>＜15位＞</strong><br>
<a href="https://html5experts.jp/canidoweb/7359/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/06/ionic1.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/canidoweb/7359/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">キミはionicを知っているか？AngularJS+PhoneGap+美麗コンポーネント群！</a></strong><br>
── <a href="https://html5experts.jp/canidoweb/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">金井 健一</a></p>

<p><br><br></p>

<p><strong>＜16位＞</strong><br>
<a href="https://html5experts.jp/ahomu/9307/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/07/14803538523_b7b20a90bd_z.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/ahomu/9307/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">話題のMaterial DesignをWebで実現！Polymerで「Paper Elements」を試そう</a></strong><br>
── <a href="https://html5experts.jp/ahomu/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">佐藤歩</a></p>

<p><br><br></p>

<p><strong>＜17位＞</strong><br>
<a href="https://html5experts.jp/anatoo/7253/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/06/hybrid_app_structure1.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/anatoo/7253/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5ハイブリッドアプリ開発、最新動向はやわかり！</a></strong><br>
── <a href="https://html5experts.jp/anatoo/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">久保田 光則</a></p>

<p><br><br></p>

<p><strong>＜18位＞</strong><br>
<a href="https://html5experts.jp/shumpei-shiraishi/11532/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/11/kidachi8.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/shumpei-shiraishi/11532/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ミツエーリンクスのCTOに「UXとWebアクセシビリティ」について聞いてきた─木達一仁ロングインタビュー</a></strong><br>
── <a href="https://html5experts.jp/shumpei-shiraishi/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">白石 俊平</a></p>

<p><br><br></p>

<p><strong>＜19位＞</strong><br>
<a href="https://html5experts.jp/1000ch/11142/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/10/devtools-shadowdom.png" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/1000ch/11142/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Componentsを構成する4つの仕様 ー Web Components基礎編</a></strong><br>
── <a href="https://html5experts.jp/1000ch/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">泉水翔吾</a></p>

<p><br><br><br></p>

<p><strong>＜20位＞</strong><br>
<a href="https://html5experts.jp/toshirot/4595/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img alt="2" src="/wp-content/uploads/2014/01/8__.jpg" width="207" height="156" class="alignleft size-full"></a>
<strong><a href="https://html5experts.jp/toshirot/4595/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">NUCで手のひらサイズの格安WebSocketサーバーを立ててみた(ハード組立編)</a></strong><br>
── <a href="https://html5experts.jp/toshirot/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">高橋 登史朗</a></p>

<p><br><br><br><br></p>

<h2>モバイルWeb、WebComponets、AngularJS…</h2>

<p>モバイルWebというキーワードは今年注目を集めましたね。関連記事がいくつかランクインしています。また、WebComponets、AngularJSという今年話題になった技術の記事もランクインしています。特集では、GoogleI/O特集やExperts Opinions「UX」特集が注目を集めました。UX特集は年明けにも記事公開を予定していますので、お楽しみに！</p>

<p>HTML5 Experts.jpは2014年も多くの方々にご愛読いただきまして、執筆陣・編集部共々感謝しています。ありがとうございました。来年も引き続き宜しくお願いいたします。</p>
]]></content:encoded>
			</item>
		<item>
		<title>初心者でも絶対わかる、WebGLプログラミング＜three.js最初の一歩＞</title>
		<link>/yomotsu/5225/</link>
		<pubDate>Fri, 07 Feb 2014 02:00:07 +0000</pubDate>
		<dc:creator><![CDATA[小山田 晃浩]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[3DCG]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebGL]]></category>
		<category><![CDATA[three.js]]></category>

		<guid isPermaLink="false">/?p=5225</guid>
		<description><![CDATA[連載： WebGLプログラミング (2)WebGLはとても高度な技術である一方、APIは低レベルであるためそのまま使うにはどうしても冗長な準備を行う必要があります。一方で、JavaScriptライブラリーを通して高レベル...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/webgl-news/" class="series-154" title="WebGLプログラミング" data-wpel-link="internal">WebGLプログラミング</a> (2)</div><p>WebGLはとても高度な技術である一方、APIは低レベルであるためそのまま使うにはどうしても冗長な準備を行う必要があります。一方で、JavaScriptライブラリーを通して高レベルなAPIとしてWebGLを利用する方法があります。こうしたJavaScriptライブラリーとしてはthree.js、Away3D.js、Babylon.jsなどが有名です。その中でも特に人気があるthree.jsを通して、WebGLを利用する方法を解説します。(three.jsのリビジョンは執筆現在の最新であるr65を利用します)</p>

<p><span id="more-5225"></span></p>

<h2>three.jsを手に入れる</h2>

<p>three.jsは<a href="http://threejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">http://threejs.org/</a>から手に入れることができます。downloadから、zipファイルを手に入れましょう。</p>

<p>ダウンロードしたファイルを展開すると多くのファイルが格納されていますが、必要なライブラリー本体はbuildフォルダ内にthree.min.jsとして配置されています。three.min.jsのみを取り出しましょう。three.min.js以外のファイルは不要です。</p>

<p><img src="/wp-content/uploads/2014/02/1.png" alt="" /></p>

<h2>three.jsにおける抽象化された概念</h2>

<p>まずは、基本的なコードを書きながらthree.jsにおける概念を知りましょう。ここでは皆さんの理解が深まるように図を見ながらコードの解説を進めます。</p>

<h2>コードを書き始める</h2>

<p>HTMLファイルを新規作成し、three.min.jsを読み込みます。合わせて、あなたがコードを書いていく場所も用意しましょう。今回はこれをmainという名前の関数とし、DOM構築完了を待ってから実行します。</p>

<p></p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
&lt;title&gt;get started with three.js&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;script src="three.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
var main = function () {
  // ここにあなたのコードを書いていきます
};

window.addEventListener( 'DOMContentLoaded', main, false );
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</pre><p></p>

<h2>シーンを作る</h2>

<p>まずはシーンを作ります。シーンはこれからあなたが作る3Dの世界となります。ただし、この段階ではシーンの内容は空の状態です。</p>

<p></p><pre class="crayon-plain-tag">var main = function () {
  var scene = new THREE.Scene();
};</pre><p></p>

<p><img src="/wp-content/uploads/2014/02/2.png" alt="" /></p>

<h2>カメラを作る</h2>

<p>シーンの状態を撮影するカメラを作ります。カメラに写った内容が最終的にブラウザー上で表示されることになります。</p>

<p></p><pre class="crayon-plain-tag">var main = function () {
  var scene = new THREE.Scene();

  var width  = 600;
  var height = 400;
  var fov    = 60;
  var aspect = width / height;
  var near   = 1;
  var far    = 1000;
  var camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
  camera.position.set( 0, 0, 50 );
};</pre><p></p>

<p>PerspectiveCameraは4つの引数が必要です。これらは、カメラが写す範囲を示しています。</p>

<ul>
<li>fovは画角を示します。</li>
<li>aspectは撮影結果の縦横比を示します。</li>
<li>nearはニアークリップの距離を示します。nearより近い領域は表示されません。</li>
<li>farはファークリップの距離を示します。farより遠い領域は表示されません。</li>
</ul>

<p><img src="/wp-content/uploads/2014/02/3.png" alt="" /></p>

<p>つまり、指定した画角と縦横比によって作られる四角錐の内、nearからfarまでの間が表示されるわけです。</p>

<p>このあと3Dオブジェクトを追加することを考え、カメラの位置を中心から少し手前に引いておきます。カメラインスタンスはpositionという位置を示すプロパティーがあり、positionはx、y、zの3つのプロパティーを持っています。初期ではx、y、zの値は全て0です。この値を変更するにはsetメソッドを利用します。setメソッドの引数はx, y, zの3つを順に渡します。上記のコードではset( 0, 0, 50 )としているので、カメラはzの正方向、つまり手前に50の位置に設置されるわけです。</p>

<p><img src="/wp-content/uploads/2014/02/4.png" alt="" /></p>

<p>※ 古いリビジョンのthree.jsでは、作成したカメラインスタンスをscene内に追加する必要がありましたが、現在はその必要がありません。</p>

<h2>レンダラーをDOM上に設置する</h2>

<p>ここまでで基本状態が用意できました。ただし、この状態ではHTMLと紐づいておらず表示結果を求めることができません。three.jsでは、レンダラーをDOMに設置することでこれを実現します。</p>

<p></p><pre class="crayon-plain-tag">var main = function () {
  //ここまでの内容は省略

  var renderer = new THREE.WebGLRenderer();
  renderer.setSize( width, height );
  document.body.appendChild( renderer.domElement );
};</pre><p></p>

<p>レンダラーのサイズとして渡しているwidthとheightは、先ほどカメラのアスペクトを求める際に利用した値を流用します。これでbody要素内に、横600px縦400pxのレンダラーを展開することができます。</p>

<h2>光源を追加する</h2>

<p>ここまでのコードでは空（から）のシーンとそれを写すカメラを用意できています。ここに光源を追加してみましょう。three.jsでは様々なタイプの光源を利用できますが、今回は平行光源を追加します。</p>

<p>平行光源はインスタンスを作る際に2つの引数を渡します。第一引数は光の色、第二引数はオプションで光の強さを渡します。この例では第一引数に0xffffffを渡し、白色の光としています。</p>

<p></p><pre class="crayon-plain-tag">var main = function () {
  //ここまでの内容は省略

  var directionalLight = new THREE.DirectionalLight( 0xffffff );
  directionalLight.position.set( 0, 0.7, 0.7 );
  scene.add( directionalLight );
};</pre><p></p>

<p>平行光源は光の角度を変えることができます。その場合、positionプロパティーで光源の角度を決定します。directionalLight.position.set( 0, 0.7, 0.7 )であれば上方向と手前方向、つまり斜め上前からの光となるわけです。</p>

<p><img src="/wp-content/uploads/2014/02/5.png" alt="" /></p>

<h2>物体を追加する</h2>

<p>物体を追加してみましょう。今回は箱を設置します。three.jsでは、原始的な図形を作成するためのクラスがいくつか用意されています。もちろん、3Dモデリングツールでつくった3Dモデルを読み込むこともできますが、自作のモデルを読み込む方法はまたの機会に解説します。</p>

<p>three.jsではジオメトリー(形状)とマテリアル(表面素材)を用意した上で、メッシュ(物体)を作成するという手順が必要です。</p>

<p><img src="/wp-content/uploads/2014/02/6.png" alt="" /></p>

<p></p><pre class="crayon-plain-tag">var main = function () {
  //ここまでの内容は省略

  var geometry = new THREE.CubeGeometry( 30, 30, 30 );
  var material = new THREE.MeshPhongMaterial( { color: 0xff0000 } );
  var mesh = new THREE.Mesh( geometry, material );
  scene.add( mesh );
};</pre><p></p>

<p>まずはジオメトリーを作ります。箱型のジオメトリーはCubeGeometryクラスで作成可能です。横幅、高さ、奥行きの順に数値で引数を渡します。</p>

<p>次に、マテリアルを作ります。three.jsでは様々なタイプのマテリアルが用意されていますが、今回はフォンシェーディングで表示できるMeshLambertMaterialを利用します。引数には色やカラーテクスチャ、光沢などをオブジェクトで指定することができます。今回は赤色（0xff0000）のカラーのみを指定します。</p>

<p>そして、ジオメトリーとマテリアルからメッシュを作成し、メッシュをシーンに追加します。</p>

<p><img src="/wp-content/uploads/2014/02/7.png" alt="" /></p>

<h2>表示する</h2>

<p>これで、シーン、カメラ、レンダラーを用意しシーンの中には光源と物体がある状態ができました。これをレンダリング（表示）してみましょう。</p>

<p>レンダラーインスタンスはrenderというメソッドを持っており、ここに任意のシーンとカメラを渡すことで、該当のシーンをレンダリングします。</p>

<p></p><pre class="crayon-plain-tag">var main = function () {
  //ここまでの内容は省略

  renderer.render( scene, camera );
};</pre><p></p>

<p>レンダリング結果は次の通りです。</p>

<p>(invalid jsdo.it code)</p>

<p>これを見ただけでは3Dには感じられないかもしれませんね。しかし、この状態でしっかりと3Dで赤色の箱が<strong>真正面から</strong>静止した状態で表示されています。</p>

<h2>回転アニメーション</h2>

<p>止まった状態で正面からレンダリングしても面白い結果にはなりませんでした。3Dのよさを引き出すために、箱を少しずつ回転させながら、レンダリングを繰り返してみましょう。こうすることでアニメーションで表示されます。</p>

<p>(invalid jsdo.it code)</p>

<p></p><pre class="crayon-plain-tag">var main = function () {
  //ここまでの内容は省略

  ( function renderLoop () {
    requestAnimationFrame( renderLoop );
    mesh.rotation.set(
      0,
      mesh.rotation.y + 0.01,
      mesh.rotation.z + 0.01
    )
    renderer.render( scene, camera );
  } )();
};</pre><p></p>

<p>名前付きの即時実行関数を用意し、requestAnimationFrameで自分自身を呼び出し続けることで、レンダリングを繰り返すことができます。</p>

<p>関数内部ではmesh、つまり箱のrotationプロパティーの値を少しずつ変え、直後にレンダリングを行います。これにより箱が回転するアニメーションとなるわけです。rotationプロパティーはpositionプロパティーと同様にsetメソッドで内容を変更することができます。</p>

<h2>まとめ</h2>

<p>最後にコード全文を示します。</p>

<p></p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
&lt;title&gt;get started with three.js&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;script src="three.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
var main = function () {
  var scene = new THREE.Scene();

  var width  = 600;
  var height = 400;
  var fov    = 60;
  var aspect = width / height;
  var near   = 1;
  var far    = 1000;
  var camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
  camera.position.set( 0, 0, 50 );

  var renderer = new THREE.WebGLRenderer();
  renderer.setSize( width, height );
  document.body.appendChild( renderer.domElement );

  var directionalLight = new THREE.DirectionalLight( 0xffffff );
  directionalLight.position.set( 0, 0.7, 0.7 );
  scene.add( directionalLight );

  var geometry = new THREE.CubeGeometry( 30, 30, 30 );
  var material = new THREE.MeshPhongMaterial( { color: 0xff0000 } );
  var mesh = new THREE.Mesh( geometry, material );
  scene.add( mesh );

  ( function renderLoop () {
    requestAnimationFrame( renderLoop );
    mesh.rotation.set(
      0,
      mesh.rotation.y + .01,
      mesh.rotation.z + .01
    );
    renderer.render( scene, camera );
  } )();
};

window.addEventListener( 'DOMContentLoaded', main, false );
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</pre><p></p>

<p>three.jsでは、今回解説した流れが最も基本であり、お決まりです。この抽象化された概念とシーン構築から表示までの流れを覚えておきましょう。</p>
]]></content:encoded>
		
		<series:name><![CDATA[WebGLプログラミング]]></series:name>
	</item>
		<item>
		<title>初心者でも絶対わかる、WebGLプログラミング＜基礎知識編＞</title>
		<link>/yomotsu/2897/</link>
		<pubDate>Tue, 15 Oct 2013 22:00:12 +0000</pubDate>
		<dc:creator><![CDATA[小山田 晃浩]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[3DCG]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebGL]]></category>
		<category><![CDATA[three.js]]></category>

		<guid isPermaLink="false">/?p=2897</guid>
		<description><![CDATA[連載： WebGLプログラミング (1)HTML5に関連する技術のひとつに、WebGLがあります。WebGLは、ブラウザー上で3DCGプログラミングを実現できる技術です。今回のレポートでは、WebGLプログラミングの基礎...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/webgl-news/" class="series-154" title="WebGLプログラミング" data-wpel-link="internal">WebGLプログラミング</a> (1)</div><p>HTML5に関連する技術のひとつに、WebGLがあります。WebGLは、ブラウザー上で3DCGプログラミングを実現できる技術です。今回のレポートでは、WebGLプログラミングの基礎知識についてご紹介します。</p>

<p><span id="more-2897"></span></p>

<h2>WebGLって？</h2>

<p>WebGLでどんなことができるのか──百聞は一見にしかず。まずは例を見てみましょう。demo内のスライダー部分をドラッグすることでカメラの位置などを任意に変更できますので、リアルタイムでレンダリングされていることがわかるでしょう。</p>

<p>(invalid jsdo.it code)</p>

<p>このように、ブラウザー上で<strong>プラグインに頼ることなく</strong>、なめらかな表面、自然な影、高FPSでのリアルタイムレンダリング（アニメーション）など、まるで最近の家庭用ゲーム機にも匹敵する高度な3DCG表現ができるわけです。</p>

<p>WebGLは2013年10月現在、Chrome、Firefox、Operaで標準対応されており、加えてIE11でも対応される予定です。また、Safariも現状では設定が必要なものの、WebGLを利用する準備は整っており、WebGLは多くの環境で利用できるようになりつつあります。</p>

<p><img src="/wp-content/uploads/2013/09/1.jpg" alt="when can i useのキャプチャ" />
<a href="http://caniuse.com/webgl" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Can I use WebGL?</a>より</p>

<p>WebGLの仕様自体は、クロノスグループから<a href="http://www.khronos.org/registry/webgl/specs/latest/1.0/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebGL 1.0</a>が2011年3月に正式リリース（W3Cでいう勧告）されています。従って今後APIが変更されることはなく、またWebGLのAPIはブラウザ上で「<code>WebKit</code>」や「<code>Moz</code>」といったような接頭辞なしで利用することができます。さらに2013年9月には<a href="http://www.khronos.org/registry/webgl/specs/latest/1.0/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebGL 2.0</a>の仕様策定が開始されています。</p>

<p><img src="/wp-content/uploads/2013/09/2.png" alt="WebGL 1.0" /></p>

<hr />

<h3>【コラム】WindowsなのにOpenGL系?</h3>

<p>WebGLはその名前の通り、OpenGL由来のAPIです。一方で、Windowsの一般的なグラフィックAPIはOpenGLではなく、DirectXです。しかし安心してください。Windows上でのWebGLは、最終的にDirectXに自動翻訳されて実現しています。つまり、WindowsでもMacでもAndroidでも、WebGLはプラットフォームの垣根を気にせず利用できる、共通のグラフィックAPIというわけです。</p>

<p>例えば、以下はWindows IE11におけるWebGLの仕組みです。なお、Windows用のChromeやFirefoxでも、ブラウザー内部に組み込まれた<a href="https://code.google.com/p/angleproject/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ANGLE</a>というライブラリにより、IE11と似た仕組みでWindows上のWebGLを実現しています。</p>

<p><img src="/wp-content/uploads/2013/09/3.png" alt="" />
<a href="http://channel9.msdn.com/Events/Build/2013/4-072" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Hyper-Fast Web Graphics with WebGL</a>より</p>

<hr />

<h2>WebGLプログラミングで実現できること</h2>

<p>WebGLはJavaScriptから利用するAPIです。Web開発者はJavaScriptを書くことで、閲覧者のOSに関係なくブラウザーを通してデバイスのGPU（CPUと対となる、描画処理を専門に行うためのハードウェア）にアクセスすることができます。これによりWebGLは高度な3DCG表現を実現できるわけです。</p>

<p><img src="/wp-content/uploads/2013/09/4.jpg" alt="" />
筆者のPC内に搭載されているGPU、Geforce GTX 760。ノートPCなどではGPUがCPUに内蔵されている場合も多い。</p>

<p>さて、WebGLはGPUにアクセスできるという点に少し注目してみましょう。非Web技術の話になりますが、PCで動作する3Dのオンラインゲームなどは、ネイティブのグラフィックAPIを通して、GPUでその描画を行っています。一方で、ブラウザー上で動くWebGLも同様にGPUでその描画を行います。つまりデバイスのGPUの性能にも依存しますが、WebGLは近年のPC用3Dオンラインゲームと同じレベルの描画ができるということになります。</p>

<p>例えば以下は2013年5月に公開された<a href="http://www.unrealengine.com/html5/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Epic Citadel HTML5</a>というデモで、WebGLで動いています。(
「Firefoxに最適化されている」と表示されますが、Chromeでも問題なく動作します)</p>

<p><img src="/wp-content/uploads/2013/09/5.jpg" alt="PCgameのキャプチャ" /></p>

<p>もし今あなたがモバイル端末などでこの記事を読んでいてWebGLを再生できない場合は、以下の動画を見てみるといいでしょう。</p>


<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="560" height="315" src="//www.youtube.com/embed/XsyogXtyU9o" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>


<p>また、WebGLの実態はJavaScriptと先に少し触れましたが、これはWebGLが他のWeb標準技術との相性がいいということを意味します。XHRでデータを取得したり、HTMLで用意したボタンやinput要素で3Dモデルを操作したり、JavaScriptのイベントを利用したり、といった応用が可能なのです。これにより、ただ表示するだけではなく、さまざまなWebアプリケーションへの応用も期待できます。</p>

<p>例えば、地図に利用したり、教育目的に利用したり、あるいはWebの技術でゲームを作ったりすることも可能です。</p>

<p><img src="/wp-content/uploads/2013/09/6.jpg" alt="" />
現在プレビュー版として提供中の<a href="http://www.google.com/maps/about/explore/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">新しいGoogleマップ</a>でもWebGLが使われている。東京都庁周辺の様子を見ると、高層ビル群が立体的に表示されている。</p>

<p><img src="/wp-content/uploads/2013/09/7.jpg" alt="" />
<a href="http://stations.aeracode.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ロンドンの地下鉄マップ</a>。3Dで表現するなら、複雑な立体構造の情報も提供しやすい</p>

<p><img src="/wp-content/uploads/2013/09/8.jpg" alt="" />
<a href="http://workshop.chromeexperiments.com/stars/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">銀河の観察</a>。WebGLは、教育目的のWebアプリケーションにも応用できるだろう</p>

<h2>WebGLは難しい？</h2>

<p>ここまで「WebGLはJavaScript」と繰り返しましたから、Web制作者にとって、WebGLを利用するための敷居が低く感じるかもしれませんね。しかし実際のところ、WebGLを利用するにはとても冗長な手順を踏む必要があります。さらに加えて、3DCGプログラミング（OpenGLやDirectX）の基礎知識、行列やベクトルといった線形代数学の知識、GLSLという言語の知識など、これまでWeb制作者にとってほとんど馴染みがなく、かつ学習コストの高いさまざまな知識を要します。</p>

<p>WebGLを利用する手順を図にしてみました。これを見るとWebGLの冗長さがわかるでしょう。</p>

<p><img src="/wp-content/uploads/2013/09/9.png" alt="WebGLのフロー" /></p>

<p><strong>しかし安心してください</strong>。こうした、手間のかかるところ、難しいところを吸収し、より直感的にJavaScriptでWebGLを扱うためのライブラリーがあります。</p>

<h2>WebGLのラッパーライブラリー「three.js」</h2>

<p><a href="http://threejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">three.js</a>は、現在最も有名なWebGLのラッパーライブラリーです。WebGL界のjQueryのような存在です。WebGLを採用した多くのプロジェクトは、既に当たり前のようにthree.jsを利用しています。</p>

<h3>three.jsの事例</h3>

<ul>
<li><a href="http://www.findyourwaytooz.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Find Your Way to Oz</a></li>
<li><a href="http://www.chromeweblab.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Lab</a></li>
<li><a href="http://www.pajamaclubmusic.com/3d/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Pajama Club : 3D</a></li>
</ul>

<p>Web制作者は、OpenGLのお作法、GLSLという未知の言語、線形代数学などのWebGLのための学習コストが高い関連知識がなかったとしても、JavaScriptと、わずかな3Dの基礎知識さえあればthree.jsを利用し、WebGLをコントロールすることができます。もしあなたがWebGL初心者であるならば、three.jsを利用してみるといいでしょう。</p>

<p>three.jsはWebGL上級者にも愛されているライブラリーです。行列計算のためのAPI、自身で用意した頂点データをVBOに適用するAPI、自作のGLSLをシェーダーに適用するAPIなども備えています。</p>

<p>また、<a href="http://www.webgljobs.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">海外のWebGL関連のジョブボード</a>を見てみても、three.jsがWebGL界のディファクトスタンダードライブラリーという裏付けにもなります。いくつかのWebGL関連の求人では、three.jsの経験が求められています。</p>

<p><img src="/wp-content/uploads/2013/09/10.png" alt="" /></p>

<p>three.js本体の開発はGitHubで管理されており、three.js制作者であるMr.doob氏が中心となり、世界中の多くのコミッターに支えられています。このこともthree.jsがディファクトスタンダードなライブラリーとして支持される理由でしょう。</p>

<p>こうしたさまざまな背景もあるので、もしあなたがWebGLに興味を持ったのなら、まずはthree.jsを使ってみることをおすすめします。</p>

<h2>まとめ</h2>

<p>今回はWebGLがいかに汎用的であるか、そしてそのWebGLをより簡単に利用するための手段となる、three.jsの存在についてレポートしました。
また近いうちに、three.jsの実際の利用方法についてご紹介していきます。</p>
]]></content:encoded>
		
		<series:name><![CDATA[WebGLプログラミング]]></series:name>
	</item>
	</channel>
</rss>
