# HG changeset patch # User Yuki HAMASE # Date 1542350726 -32400 # Node ID 6e2f940dcb5a5195c7fcd9c62dfec03e562e6bce # Parent 51232f451968d15c7356697e4eda954dec5d2ce7 fix11/16 diff -r 51232f451968 -r 6e2f940dcb5a .DS_Store Binary file .DS_Store has changed diff -r 51232f451968 -r 6e2f940dcb5a midterm/.DS_Store Binary file midterm/.DS_Store has changed diff -r 51232f451968 -r 6e2f940dcb5a midterm/155718B.pdf Binary file midterm/155718B.pdf has changed diff -r 51232f451968 -r 6e2f940dcb5a midterm/midterm.aux --- a/midterm/midterm.aux Thu Nov 08 18:33:23 2018 +0900 +++ b/midterm/midterm.aux Fri Nov 16 15:45:26 2018 +0900 @@ -1,20 +1,22 @@ \relax \citation{oculus} \@writefile{toc}{\contentsline {section}{\numberline {1}研究目的}{1}} -\@writefile{toc}{\contentsline {section}{\numberline {2}VR(仮想現実)}{1}} -\@writefile{toc}{\contentsline {section}{\numberline {3}LeapMotion}{1}} -\@writefile{toc}{\contentsline {section}{\numberline {4}シミュレーションシステムの概要}{1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}エディットモード}{1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}プレイモード}{1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}オーディエンスモード}{1}} -\@writefile{toc}{\contentsline {section}{\numberline {5}課題(腕の長さ問題)}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {2}既存の音ゲーについて}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {3}提案するシステム}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {4}Oculus}{1}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces プレイの様子}}{1}} +\newlabel{fig:rbtree}{{1}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {5}LeapMotion}{1}} +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Oculus+LeapMotion}}{1}} +\newlabel{fig:rbtree}{{2}{1}} \citation{*} \bibstyle{junsrt} \bibdata{reference} \bibcite{oculus}{1} -\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}範囲外設置の禁止}{2}} -\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}演奏者の移動を可能とする}{2}} -\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}手の延長線上を選択可能とする}{2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.3.1}具体的な手法}{2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.3.2}利き目の位置の測定}{2}} -\@writefile{toc}{\contentsline {section}{\numberline {6}今後の課題}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {6}UnrealEngine4}{2}} +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces BluePrintsの例}}{2}} +\newlabel{fig:rbtree}{{3}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {7}進行状況}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {8}課題}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {9}これからの目標}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {10}今後の課題}{2}} diff -r 51232f451968 -r 6e2f940dcb5a midterm/midterm.log --- a/midterm/midterm.log Thu Nov 08 18:33:23 2018 +0900 +++ b/midterm/midterm.log Fri Nov 16 15:45:26 2018 +0900 @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.14159265-p3.8.0-180226-2.6 (utf8.euc) (TeX Live 2018) (preloaded format=platex 2018.11.8) 8 NOV 2018 16:35 +This is e-pTeX, Version 3.14159265-p3.8.0-180226-2.6 (utf8.euc) (TeX Live 2018) (preloaded format=platex 2018.11.8) 16 NOV 2018 15:42 entering extended mode restricted \write18 enabled. file:line:error style messages enabled. @@ -176,7 +176,14 @@ LaTeX Warning: Unused global option(s): [9.5pt]. -(./midterm.aux) +(./midterm.aux + +LaTeX Warning: Label `fig:rbtree' multiply defined. + + +LaTeX Warning: Label `fig:rbtree' multiply defined. + +) \openout1 = `midterm.aux'. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 41. @@ -206,10 +213,10 @@ (Font) Font shape `JT1/gt/m/n' tried instead on input line 48. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <14.4> not available (Font) Font shape `JY1/gt/m/n' tried instead on input line 48. -LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <12> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 73. -LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <12> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 73. +File: ../pic/play.jpg Graphic file (type bmp) +<../pic/play.jpg> +File: ../pic/leap.jpg Graphic file (type bmp) +<../pic/leap.jpg> File: ../pic/emblem-bitmap.pdf Graphic file (type pdf) <../pic/emblem-bitmap.pdf> @@ -223,27 +230,30 @@ ] -LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <10> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 105. -LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <10> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 105. +File: ../pic/BP.jpg Graphic file (type bmp) +<../pic/BP.jpg> + (./midterm.bbl LaTeX Font Info: External font `cmex10' loaded for size -(Font) <7> on input line 110. +(Font) <7> on input line 5. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <5> on input line 110. - (./midterm.bbl +(Font) <5> on input line 5. + Underfull \hbox (badness 10000) in paragraph at lines 4--6 \OT1/cmtt/m/n/10 https : / / developer . leapmotion . com / vr-[]setup / [] -) [2] (./midterm.aux) ) +) [2] (./midterm.aux) + +LaTeX Warning: There were multiply-defined labels. + + ) Here is how much of TeX's memory you used: - 2538 strings out of 493281 - 33006 string characters out of 6145041 - 114497 words of memory out of 5000000 - 6484 multiletter control sequences out of 15000+600000 - 13871 words of font info for 54 fonts, out of 8000000 for 9000 + 2544 strings out of 493281 + 33115 string characters out of 6145041 + 108544 words of memory out of 5000000 + 6485 multiletter control sequences out of 15000+600000 + 13256 words of font info for 52 fonts, out of 8000000 for 9000 929 hyphenation exceptions out of 8191 - 26i,16n,43p,362b,363s stack positions out of 5000i,500n,10000p,200000b,80000s + 26i,15n,45p,356b,363s stack positions out of 5000i,500n,10000p,200000b,80000s -Output written on midterm.dvi (2 pages, 15236 bytes). +Output written on midterm.dvi (2 pages, 10900 bytes). diff -r 51232f451968 -r 6e2f940dcb5a midterm/midterm.pdf Binary file midterm/midterm.pdf has changed diff -r 51232f451968 -r 6e2f940dcb5a midterm/midterm.synctex.gz Binary file midterm/midterm.synctex.gz has changed diff -r 51232f451968 -r 6e2f940dcb5a midterm/midterm.tex --- a/midterm/midterm.tex Thu Nov 08 18:33:23 2018 +0900 +++ b/midterm/midterm.tex Fri Nov 16 15:45:26 2018 +0900 @@ -39,7 +39,7 @@ \input{dummy.tex} %\renewcommand{\abstractname}{Abstract} \begin{document} -\title{VRを用いた総合楽器シミュレーションシステム} +\title{OculusとLeapMotionを用いた音ゲーの研究} \author{155718B 氏名 {浜瀬}{裕暉} 指導教員 : 河野 真治} \date{} \maketitle @@ -47,111 +47,93 @@ \section{研究目的} -3D空間上に物体を用意することは簡単である。 -それに対し、現実に物体を作成することはしばしば大きな困難を伴う。 +面白い音ゲーがしたい、と思ったことはないだろうか。私はある。ということで、音ゲーを作りたいと思う。 + +今回作成する音ゲーは3D操作を必要とする。単に3Dを使うゲームではなく、三次元空間での入力を行うため、キーボード・マウスではこれは実現できない。そこで、Oculusを使用したVR音ゲーを制作する。 -現在、様々な音楽家が伝統ある楽器ではなく、全く新しい楽器や演奏システムを使用したパフォーマンスを行なっているが、これらの開発には莫大なコストがかかり、小規模なアーディストがこれらの新しい楽器や演奏システムを開発することは難しい。 +通常、VRゲームでは棒状のコントローラーを握って操作を行うが、VRゲーム中、棒を常に握らないといけないことが煩わしいと思ったことはないだろうか。私はある。 +そこで、LeapMotionを使用することによりフリーハンドで、より自由に、体全体を動かせるようなゲームを制作する。 + +\section{既存の音ゲーについて} +現在存在する音ゲーは、列やレールに沿ってオブジェクトが流れてくるのに合わせて、タイミングよくアクションを起こすものが主流である。その多くは入力装置の斬新さに重きを置いて開発されている。 + +VRの音ゲーでは、レールに沿って流れてくるオブジェクトに触れてアクションをするものや、タイミングよくレバー・ボタン入力をするものがあるが、そのアクション要素の大半はVRである必要が今の所ない。 -そこで、新しい楽器を開発する際、実際に楽器を用意する前に簡便にその使用感、外見、その他の特徴を把握し、構想した楽器を製造するかどうかの指標を定められるようなソフトウェアを開発する。 +\section{提案するシステム} +今回私が提案するシステムは、Oculus、LeapMotionおよびUE4を複合した音ゲーである。 -\section{VR(仮想現実)} -VR(仮想現実)とは、コンピュータグラフィクスで作られた世界を、あたかも現実であるかのように体験することができるシステムである。現在、多くのVRデバイスが開発中であるが、それらの多くは「視覚」「聴覚」「触覚」に作用するものである。本研究では、「視覚」「聴覚」に注目してシステムを開発する。 +\begin{figure}[htpb] + \begin{center} + \includegraphics[width=80mm]{../pic/play.jpg} + \end{center} + \caption{プレイの様子} + \label{fig:rbtree} +\end{figure} -VRコンテンツはその没入感が非常に重要であり、これを欠いたVRコンテンツは不快感、疲労、体調不良を引き起こす原因となりうる。 +\section{Oculus} +Oculusとは、視界全体を覆うようなディスプレイ(HeadMountDisplay:HMD)と、その中での操作を補助するためのコントローラーおよび、HMD,コントローラーの位置を検出するためのカメラのことである。HMDが左右の目に異なる映像を映すことにより、立体視を体験することができる。 +HMDの位置をカメラが検出することにより、VR空間上での移動を再現できるほか、HMD自体が加速度を検出することにより細かいブレを検出することができる。 \section{LeapMotion} -LeapMotion\cite{oculus}とはVR向けに開発されたデバイスの一つで、使用者の手の相対位置、開き具合等を取得することができる装置である。LeapMotionを使用することにより、コントローラー、その他の入力デバイスを手に所持することなくVRシステムの操作を行うことが可能にとなる。 - -\section{シミュレーションシステムの概要} -本シミュレーションシステムはVR空間上に楽器を構築していくソフトウェアで、オブジェクトの直交座標配置、および極座標配置をサポートする。 -また、VR空間上での動作をすることにより、演奏者の背後に配置されるオブジェクトへの作用を簡単に行うことが可能となるなど、VR空間上でなければなしえない動作を可能とする。 +LeapMotionとはVR向けに開発されたデバイスの一つで、hand and finger motion catureと呼ばれる、使用者の手の相対位置、開き具合等を取得することができる装置である。LeapMotionをOculus等VR装置と組み合わせてを使用\cite{oculus}することにより、コントローラー、その他の入力デバイスを手に所持することなくVRシステムの操作を行うことが可能にとなる。 -打楽器、弦楽器等、複数の奏法を複合するような楽器へのシミュレーションを没入感を損なうことなく可能にすることは、コントローラー等の「手を握った状態から開くことが不可能」である入力デバイスでは困難であるが、LeapMotionを組み込むことによりこれを可能とする。 +\begin{figure}[htpb] + \begin{center} + \includegraphics[width=80mm]{../pic/leap.jpg} + \end{center} + \caption{Oculus+LeapMotion} + \label{fig:rbtree} +\end{figure} -楽器の構築をする「エディットモード」、構築した楽器を試奏する「プレイモード」、演奏の様子を観客視点から見る「オーディエンスモード」を切り替えながら操作していく。 -\subsection{エディットモード} -あらかじめ定められた楽器パーツ、およびシミュレーター使用者が独自に作成したパーツをインポートしたものを、直交座標、または極座標にしたがって配置していく。配置される座標は、数値での座標入力で決定する。 +\section{UnrealEngine4} +UnrealEngine4(UE4)とは3Dゲームエンジンであり、C++またはBluePrintsと呼ばれる独自言語を用いて3Dゲームを構築することができる。 + +BluePrintsはGUIプログラミング言語で、イベントとデータをノードで接続していくことでプログラムを構築することができる。内部処理としてBluePrintsはC++に変換されて実行される。 -配置された楽器パーツは、手で触れることで選択状態になり、再配置することが可能となる。 -\subsection{プレイモード} -エディットモードで配置された各パーツに触れることにより、規定の音が再生される。シミュレーター使用者は、このモードにより無理なく各パーツが配置されているかどうかを確認することができる。 -\subsection{オーディエンスモード} -プレイモードでは演奏者の視点で楽器を観察することができたが、オーディエンスモードでは演奏の様子を観客視点で見ることができる。このモードにより、シミュレーター使用者は想定した通りの演奏の様子となっているかどうかを確認することができる。 +\begin{figure}[htpb] + \begin{center} + \includegraphics[width=80mm]{../pic/BP.jpg} + \end{center} + \caption{BluePrintsの例} + \label{fig:rbtree} +\end{figure} + +UE4をLeapMotionおよびOculusと接続することにより、コントローラーを使用しないVRゲームを作成できる。 -%\begin{figure}[htpb] -% \begin{center} -% \includegraphics[width=50mm]{../pic/rbtree.pdf} -% \end{center} -% \caption{RedBlackTreeの例} -% \label{fig:rbtree} -%\end{figure} +\section{進行状況} +LeapMotion+Oculus+UE4の接続を行い、またそれを用いた音ゲーを作成した。LeapMotionを使用した際の独自の操作体系を構築し、それを使用したUIの作成を行った。 +また、当該ゲームは琉球大学オープンキャンパスの際に実演を行った。 + +独特な操作性のため、難しいと感じる方が多かったが、一部の音ゲー経験者は滞りなくプレイを行うことができた。 + +\section{課題} +LeapMotionをOculusと接続した際、取得した手の位置をVR空間上に表示させる必要があった。 +LeapMotionはOculusのHMD全面に貼付して使用するため、LeapMotionで取得できる手の位置はHMDからの相対位置であり、これをVR空間上のカメラ位置・カメラ回転角度に加算した位置に手を表示することで解決した。 + +また、LeapMotionを使用した手の開閉判定にはごくわずかなラグがあり、厳密なタイミング判定をすると快適なプレイングが阻害された。 +これは、タイミング判定時間を引き延ばすことで解決した。 -\section{課題(腕の長さ問題)} -エディットモード中、楽器パーツを手の届く範囲外に配置してしまった場合、手で触れることができなくなり再選択が不可能となる問題がある。 -これを解決するためには、いくつかの方法が考えられる。 -\subsection{範囲外設置の禁止} -演奏者から一定距離以上離れた位置へのオブジェクト配置を禁止する方法は、最も簡単にこの問題を解決する。 + +\section{これからの目標} +単純に制作した音ゲーのボリュームを増やしていきたい。 -しかし、この方法は演奏者の創造性を阻害する可能性がある。 -\subsection{演奏者の移動を可能とする} -シミュレーター利用者の現在位置を変更可能にすることは、この問題を解決する。 +また、全く新しい楽器を制作する場合の、楽器シミュレーションとしての側面を追加していきたい。 -しかし、本シミュレーターはLeapMotion操作を基本としており、正確な移動操作が難しいため、視点操作を搭載するとシミュレーター利用者とVR映像との間に齟齬が発生してしまう場合がある。 -その場合、シミュレーター利用者に不快感を与える原因となりうる。 -\subsection{手の延長線上を選択可能とする} -本シミュレーターでは、手が直接触れていなくても、画面上で手と重なっている楽器パーツを選択可能にすることで、この問題を解決する。 -\subsubsection{具体的な手法} -厳密に手の中心延長線上のオブジェクトを選択する場合、遠方にある小さなオブジェクトを選択することは困難である。これは、ユーザーとオブジェクトの距離が離れることにより、わずかな手の位置の誤差が遠方では大きな位置の誤差となるからである。よって、選択するオブジェクトは手の延長線上との誤差が一定値以下の集合の中で、その誤差が最小値であるオブジェクトである。 -\subsubsection{利き目の位置の測定} -VRのうち視覚に関する立体視は左右の目にそれぞれ異なる位置からのカメラ映像情報を与えることで実現している。よって、「どちらの目からの延長線をとるか」「顔の中心から目までの距離」を決定する必要がある。 +あらかじめ定められた楽器パーツ、およびシミュレーター使用者が独自に作成したパーツをインポートしたものを、直交座標、または極座標にしたがって配置していくことで、新しい楽器を構築する。 +配置された楽器パーツは、手で触れることで選択状態になり、再配置することが可能となる。 -カメラ中心の位置ベクトル$\vec{O}$および方向ベクトル$\vec{D}$をそれぞれ -\begin{eqnarray} -\vec{O}&=&(0,0,0)\\ -\vec{D}&=&(0,1,0) -\end{eqnarray} -とし(これは、ある一点の方向に顔を向けることで実現できる)、利き目測定用オブジェクト$W_1$、$W_2$の位置ベクトルをそれぞれ -\begin{eqnarray} -\vec{w_1}&=&(1,1,0)\\ -\vec{w_2}&=&(-1,1,0) -\end{eqnarray} -とした時に、シミュレーター使用者がそれぞれ決定した手の位置ベクトル$\vec{h_1}$、$\vec{h_2}$が -\begin{eqnarray} -\vec{h_1}&=&(x_1,y_1,z_1)\\ -\vec{h_2}&=&(x_2,y_2,z_2) -\end{eqnarray} -であった時、2直線 -\begin{eqnarray} -\vec{l_1}&=&\vec{w_1}+a(\vec{h_1}-\vec{w_1})(a:実数)\\ -\vec{l_2}&=&\vec{w_2}+b(\vec{h_2}-\vec{w_2})(b:実数) -\end{eqnarray} -間の距離が最小となる点Eの座標を求めれば、これがカメラ中心に対する利き目の相対位置となる。 +演奏シミュレーションとして、配置された各パーツに触れることにより、規定の音が再生されるようにする。シミュレーター使用者は、このモードにより無理なく各パーツが配置されているかどうかを確認することができる。 + +さらに、演奏シミュレーションでは演奏者の視点で楽器を観察することができたが、演奏の様子を観客視点で見ることができるオーディエンスモードを搭載したい。このモードにより、シミュレーター使用者は想定した通りの演奏の様子となっているかどうかを確認することができるようになる。 + -$l_1$、及び$l_2$上の任意の点P、Qの位置ベクトルはそれぞれ -\begin{eqnarray} -\vec{p}&=&(1,1,0)+a(x_1-1,y_1-1,z_1)\\&=&(a(x_1-1)+1,a(y_1-1)+1,az_1)\\ -\vec{q}&=&(-1,1,0)+b(x_2+1,y_2-1,z_2)\\&=&(b(x_2+1)-1,b(y_2-1)+1,bz_2)\\ -\end{eqnarray} -であるから、 -\begin{eqnarray} -PQ^2&=&[a(x_1-1)+1-\{b(x_2+1)-1\}]^2\\&+&\{a(y_1-1)-b(y_2-1)\}^2+(az_1-bz_2)^2 -\end{eqnarray} -となり、$\vec{h_1}$及び$\vec{h_2}$は既知であることから式(14)はa,bの2変数式であり、この$PQ^2$を最小とする$(a,b)$の組を求めることで$PQ$間を最小とする点P,Qの座標がわかるため、この位置ベクトルをそれぞれ$\vec{P_{min}}$,$\vec{Q_{min}}$とすると、求める利き目の位置ベクトル$\vec{E}$は -\begin{eqnarray} -\vec{E}&=&\frac{\vec{P_{min}}+\vec{Q_{min}}}{2} -\end{eqnarray} -とわかる。 -また、そのような$(a,b)$の組は、それぞれ -\begin{eqnarray} -PQ^2\frac{\partial}{\partial a}&=&0\\ -PQ^2\frac{\partial}{\partial b}&=&0 -\end{eqnarray} -を解けば求まる。 \section{今後の課題} -現段階では本シミュレーターの概要のみ考案した。 -今後、これらの構想の実装に着手していく。 +ゲームボリュームを増やすためには、ベースとなる曲をこれまで以上に集める必要がある。 + +楽器シュミレーター機能を実装する場合には、楽器パーツを新たに作成する必要がある。 +オーディエンスモードは観客視点から演奏者を観察するためのモードであるため、プレイヤーのアバターを制作する必要がある。 \nocite{*} \bibliographystyle{junsrt} diff -r 51232f451968 -r 6e2f940dcb5a pic/BP.jpg Binary file pic/BP.jpg has changed diff -r 51232f451968 -r 6e2f940dcb5a pic/leap.jpg Binary file pic/leap.jpg has changed diff -r 51232f451968 -r 6e2f940dcb5a pic/play.jpg Binary file pic/play.jpg has changed