アプリ

DragonDusk コミケに出すVRゲーム

こんにちは.Kishiです.

KCSは木曜日 西地区“み”ブロック-34a に配置されました.

そのため,最近はコミケ向けの活動が多くなっています.周りを見ると,新刊本「KCS Tips!」の執筆が着々と進んでいて,みんな頑張っているなぁ…と思っておりました.ここで改めてKCSの出品する内容を見てみると,なんとソフトウェア「KCS-SOFTWARE!」も出すんですね.そういえば,自分も何かVR出すよ,と言っていたような…(˘ω˘)

はい.早急に取り掛かりました.まるでゲームジャムをやっているようでしたが,完成しましたので下に動画を載せておきます.

VR空間内では移動や攻撃が難しい課題です.最近はコントローラのあるVRも増えてきましたが,Cardboardの場合はなかなか厳しいです.そこで,それならば移動も攻撃も他人任せにしてしまおうということで,すべてドラゴンに任せました.自分のすることは,ドラゴンの攻撃対象を目線で指示してあげるだけです.3Dモデルはすべて昨年のVSGで使われた,サークル内で制作されたものです.(音楽はKCS音楽班のものではなく,VSGと同様にこちらを使わせていただきました)このゲームはAndroid専用でかつCardboardが必要ですのでご注意ください.

2016/12/27追記・・・Oculus Rift DK2用のものも用意しました.Unity 5.5からDK2向けビルドのできる5.3に下げるのが大変でした.

「KCS-SOFTWARE!」にはこの他にも,

・研究映像

・イラスト(原画,制作の流れ付き)

・暗〇ゲーム(PC向け)

・Conway’s Game of Life(ブラウザで動作)

・3Dモデル(4体)

が含まれておりますので,KCSのブースに来ていただきましたらぜひご購入ください.

新刊本「KCS Tips!」もよろしくお願いします.

 

量子コンピュータSimulatorを開発しました+量子アルゴリズムの練習をした→悲しい事実に気づく(1)

なぜ量子コンピュータを作ったのか

こんにちは.

今回は,唐突に思いついて作った量子コンピュータシミュレータと,その量子コンピュータを使った量子アルゴリズムの構築法を勉強するための練習についてのお話です.

まず,「量子コンピュータ」と聞くと,一見難しいものと思えるかもしれません.実際,僕も数日前までにはそう思ってました.ところが,数日前に,古典コンピュータ(今皆さんが使っているものです)で数値計算を行うことによって,量子コンピュータの挙動を再現することが可能だということを知りました.このときに,量子コンピュータが実際どういう仕組みで動いているかよくわかっていないことに気付いて,文献を漁って調べてみることにしました.すると,なんだか難しそうだなぁと勝手に思っていたものは,実際にはそんなに難しくなく,再現するための数値計算の手法も難しくないことを知りました.

という経緯があって,量子コンピュータが(数値計算上では)誰にでもつくれるという考えに至り,実際に作ってみようということになりました.

量子コンピュータは何で動くか

古典コンピュータは,AND回路やOR回路などの,複数の古典ビットを何らかの物理的相互作用を用いて変化させることで,様々な情報を処理しています.このことからもわかるように,古典コンピュータの情報の最小単位は,1古典Bitという,0か1かの区別であり,これより小さな情報の単位は存在しません.普段我々が目にしている古典コンピュータは,古典Bitを用いてどのように情報を処理しているのか見ることはありませんが,中身は古典Bitの膨大な操作によって,動いています.これらは,古典Bitをどのように操作するかの技術(≒アルゴリズム)によって支えられています.

一方,量子コンピュータの動作は古典Bitによるものではありません.量子コンピュータの情報の最小単位は「量子ビット(qubit)」と呼ばれるものです.量子ビットは,0か1かの厳密な区別である古典ビットと違い,0か1かの確率的な状態を保持しています.量子ビットは古典ビットではないので,表記法も異なります.例えば,1量子ビットは,a|0>+b|1>のように表記します(ディラックのブラケット記法).ここで,a,bは複素数です.つまり,量子ビットは,0と1がそれぞれa,bだけ含まれる,という状態を保持することができるのです.もちろん,量子ビットは量子(の性質を持つもの)ですから,「観測」を行うことで0か1かが確定します.すなわち,|0>か|1>になるということです.どちらに確定するかは,もともとの量子ビットの状況(a|0>+b|1>)に応じて確率的に決まります.具体的には,a|0>+b|1>である量子ビットが|0>になる確率は,|a|^2で,|1>になる確率は,|b|^2です(このことからもわかるように,|a|^2 + |b|^2 = 1 が満たされる必要があります).ここで重要なポイントは,我々は量子ビットの状態を「観測」せずに知ることができないということです.これは,a,bを直接的に知ることができないということを表しています.

もう一つ,量子ビットについての重要なポイントがあります.それは,量子の「もつれ(entanglement)」です.量子のもつれとは,簡単に言うと,複数の量子Bitがあったとき,複数の量子Bitを観測したときの確率論的独立性がない状態のことです.具体例をあげてみます.今,2つの量子ビットX,Yがあったとします.X,Yがもつれていないときは,XとYを観測したとき,観測されたXの値が0,1どちらであっても,観測されたYが0,1を取る確率は,変わりません.これは,2つのさいころをどうじに投げた状況に似ています.一方のサイコロの目が1だろうが,2だろうが,もう一方のサイコロの目は等しく1/6ですよね.しかしながら,X,Yがもつれているときは,Xの値が0,1どちらになるかによって,Yが0,1どちらになるかの確率が変わってしまうのです.サイコロの例でいうと,2つのサイコロを同じ向きで完全に固定したときに似ています.一方のサイコロの値が1であったら,もう一方は1でしょう.もちろん,一方のサイコロの値が1であったら,もう一方は奇数が出やすくなる,のような例もありですね.このようなもつれ,の状態は,もはや|X>=a|0>+b|1>,|Y>=c|0>+d|1>のような表記はできません.量子がもつれているような状態を表記するためには,|XY>=e|00>+f|01>+g|10>+h|11>のようにします.このような状態の量子ビット群では(X,Y)が(観測したときに)(0,0)を取る確率がe^2,(0,1)を取る確率がf^2,…ということを意味しています.ここまでくればお気づきでしょうが,(任意にもつれさせることのできる)量子ビットがn個あれば,2^n通りの観測結果の確率を表現できます.このことは,非常に重要なことです.すなわち,適切に量子ビットを操作することで,確率的に存在しているあらゆる組み合わせの計算を一度に行える可能性があるということです.

これらの話から,量子コンピュータは,どのようなアルゴリズムで動くのか予想がついた方もいるでしょう.すなわち,量子コンピュータは,量子ビットを操作し,もつれさせ,観測を行うことで,結果を得る,という仕組みです.

量子コンピュータをシミュレートする

と,いうのが量子コンピュータの簡単な説明なのですが,文中に会ったように,結局は,量子の状態は.量子ビット数nに対して,2^n個の複素数で表現できるということです.量子の操作は,この2^n個の複素数を,量子の操作に対応する関数を用いて,写像させることで表現できます.つまり,古典的コンピュータで,量子コンピュータがシミュレート(数値計算で仮想的に実現するということ)することができるということです.よって,作りました(演繹的).

今回は,「量子コンピュータが実装できたよ」ということを示すために,簡単な量子プログラムを作って,結果どうなったかを示したいと思います.そのために,まず(このシミュレータが)量子操作としてどのような操作が行えるのかを,簡単に書いておきます.

.量子ビット数は11qbit.(なぜ,11なのかは,特別な理由はない)

・量子ビット初期化:量子ビットを,任意の確定値にする(|XYZ…>=|01010…>)

・1つの量子ビット(任意)を,パウリ行列(X,Y,Z)とかアダマール行列(H)を用いて変換する.(詳しくは後述)

・1つの制御量子ビット,1つの目標量子ビットを,パウリ行列(X,Y,Z)とかアダマール行列(H)を用いて,制御変換する.(詳しくは後述)

・2つの制御量子ビット,1つの目標量子ビットを,パウリ行列(X)を用いて,制御制御変換する.(詳しくは後述する.)

imagee
量子コンピュータシミュレータ(開発中)の画面

これらの操作機能を持った,量子コンピュータを使って,(僕が勝手に考えた問題)4=x+yを解いてみようと考えた.

…のだが,量子プログラムを書いてからとても残念なことに気づいてしまったのである.

文章が予想以上にながくなったので,これを前半として,前後半に分けて投稿することにする.つづきは,後半で.

 

 

 

 

UnityでUWP(Windows Store)アプリを作るときに気を付けること

こんにちは。Kishiです。

まずは宣伝。以前紹介したアプリの公式ホームページができました。

http://trsasasusu.sakura.ne.jp/spinactioncreator/ja/

では、本題。

Unityは本当に様々なプラットフォームに対応しています。その中にUWP、Universal Windows Platformも含まれています。そこで、せっかくスピンアクションクリエイターをAndroid向けに出しているのだからこちらにも進出してみようということで、Android版から何も変えずにBuild SettingsからSwitch Platformしてビルドしてみました。

すると、エラーが出るわ出るわでビルドできませんでした。

最終的にはリリースまでこぎつけたのですが、そこまでにぶつかった壁を紹介していきます。

1. AES問題

このゲームではAESを用いて暗号化していたのですが、なんとAesManagedなどの暗号化で通常用いられているクラスが使用できないのです。そのため、

<br />
#if NETFX_CORE<br />
// UWP用の処理<br />
#else<br />
// その他のプラットフォーム用の処理<br />
#endif<br />

を用いて他のプラットフォームと分岐させなければなりません。UWP用の暗号化については、 http://qiita.com/utisam/items/4ff154335519650d189b#_reference-834101a5ec3afe6a51acが非常にわかりやすいです。

2. StreamWriterのClose()がない

ただびっくり。Dispose()を使いましょう。

3. シェーダーでTRANSFER_SHADOW(o)が使えない

必要な場所でこれがないと死ぬプラットフォーム(Androidで強制終了くらった)と、これがあると死ぬプラットフォームがあるので注意。

4. タッチのできるデバイスとできないデバイスがある

公式にこれに対応するためのソースコードが出ていますが、以下の

<br />
UnityEngine.WSA.Application.InvokeOnUIThread(() =&gt;<br />
    {<br />
      isInTouchMode =<br />
        UIViewSettings.GetForCurrentView().UserInteractionMode ==<br />
        UserInteractionMode.Touch;<br />
    }, true);<br />

<br />
UnityEngine.WSA.Application.InvokeOnUIThread(() =&gt;<br />
    {<br />
      isInTouchMode =<br />
        Windows.UI.ViewManagement.UIViewSettings.GetForCurrentView().UserInteractionMode ==<br />
        Windows.UI.ViewManagement.UserInteractionMode.Touch;<br />
    }, true);<br />

としないとビルドできません(または、usingするか)。そもそもタッチのできるWindowsデバイスを自分は持っていないので本当に動いているのか検証できていません。(おそらくテスターの方々によるテストを通っているので動作しているのだと思います)

5. Handheld.PlayFullScreenMovie()に注意

StreamingAssetsに入れたビデオが再生されなくてびっくりしました。公式には確かに使えそうなことが書いてあったので。そこで、調べてみるとどこかの海外のフォーラムにて、第1引数を

<br />
&quot;hoge.mp4&quot;<br />

から

<br />
System.IO.Path.Combine(Application.streamingAssetsPath, &quot;hoge.mp4&quot;)<br />

と書き直すと動く、と書いてあったので実際にやってみたら動きました。Android(おそらくiOSも)だったら省略できるのに…。

 

ここからは、.slnを作った後の話です。

6. ここまで来てビルドできない

UWPアプリをUnity以外で普通に開発するときのクラス名と被っているとエラーが出ます。自分はUnityで独自にFileIOクラスを作っていたので、これと被ってエラーを吐かれました。Windows.Storage.FileIOというように名前空間を直接つけて修正しましょう。

7. Debugビルドの実行が異様に遅い

普通の動作テストはReleaseビルドで行いましょう。そして、リリースするときはMasterビルドにしましょう。海外のフォーラムにも結構上がっています。

8. Masterビルドのx64版が死ぬ

正確には、uGUIのScroll Rectが死にます。他にも何か死んでいて、もう実態がつかめないのでx64版はあきらめました。x86版とARM版だけで行きました。

 

ここからはリリース前後の話です。

9. 手続きが大変

これはしょうがないです。決められた大きさのスクリーンショットが必要だったり、課金のために条約が何とかあったりといろいろありますが、がんばりましょう。もちろん認定のために審査があるので、Androidに比べてリリースには時間がかかります。

10. 突然の更新リジェクト

謎。テスターへの文面を英語と日本語両方で丁寧に書いたら通りました。

 

とりあえず、以上です。予想以上に大変でしたが、無事リリースできました(宣伝)

以下の公式バッジは https://developer.microsoft.com/en-us/store/badges で作ることができます。

Get it on Windows 10

スピンアクションクリエイターはWindows Storeで「ゲームを作る」と検索するだけで候補に出てきます。この記事を読んで役に立った方は、ぜひ評価をしていただきたく存じます。そうしていただけるとものすごく嬉しいです(ものすごくものすごく宣伝)