<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:webfeeds="http://webfeeds.org/rss/1.0">
  <title>VR カテゴリ | フューチャー技術ブログ</title>
  <subtitle>VR カテゴリの記事一覧</subtitle>
  <icon>https://future-architect.github.io/feed_icon.png</icon>
  <logo>https://future-architect.github.io/apple-touch-icon.png</logo>
  <webfeeds:icon>https://future-architect.github.io/apple-touch-icon.png</webfeeds:icon>
  <webfeeds:accentColor>258fb8</webfeeds:accentColor>
  <link href="https://future-architect.github.io/categories/VR/atom.xml" rel="self"/>
  <link href="https://future-architect.github.io/categories/VR/"/>
  <updated>2025-08-11T15:00:00.000Z</updated>
  <id>https://future-architect.github.io/categories/VR/</id>
  <generator uri="https://hexo.io/">Hexo</generator>
  <entry>
    <title>FutureブラサカVR部　開発合宿(横須賀編)</title>
    <link href="https://future-architect.github.io/articles/20250812a/"/>
    <id>https://future-architect.github.io/articles/20250812a/</id>
    <published>2025-08-11T15:00:00.000Z</published>
    <updated>2025-08-11T15:00:00.000Z</updated>
    <author><name>関根正大</name></author>
    <content type="html"><![CDATA[<h2 id="はじめに">はじめに</h2><p>はじめまして。フューチャーの関根と申します。</p>
<p>2025年3月29,30日に社内部活のブラサカVR部で開発合宿を実施しました！ その時の様子をお届けします👍</p>
<h2 id="ブラインドサッカー・フューチャーブラサカVR部とは？">ブラインドサッカー・フューチャーブラサカVR部とは？</h2><p>ブラインドサッカー（以後、ブラサカで省略）は視覚に障がいのある選手が行うサッカーになります。ゴールキーパー以外が全盲の選手で、アイマスクを装着しながら、鈴の入ったボールやそのほかの音のみを頼りに行うサッカーです。</p>
<p>詳しい説明はブラインドサッカー協会の公式HPをご覧ください。</p>
<p>私たちブラサカVR部は、2017年にTokyo2020の経済界協議会でブラインドサッカー協会と意気投合し、ブラサカ競技復興のためにVRアプリを開発したことを皮切りに、協会の目指す健常者・障がい者が混ざり合う世界の体感提供をITで支えるべく、ビジネスや開発の観点でサポートをしています。</p>
<p>2018年からはブラインドサッカー協会のサプライサービスパートナーとなり、公式にブラサカVR体験アプリ提供やブース出展、IT施策相談を行ってきました。コロナで活動が休止していましたが、活動を再開し、ブラインドサッカーを盛り上げていければと思っています！また少し前の話にはなりますが、過去小学生向けのスポーツ教育の推進も行い、品川区立日野学園にて実施したブラインドサッカーの体験授業が、文部科学省「青少年の体験活動推進企業表彰」奨励賞を受賞したりしています。</p>
<ul>
<li>フューチャーのＣＳＲ事業 フューチャー イノベーション フォーラム（ＦＩＦ） 文部科学省 「青少年の体験活動推進企業表彰」 ２年連続受賞</li>
</ul>
<p>このように日々活動領域を広げながら活動をしています！</p>
<h2 id="開催場所">開催場所</h2><p>そんなブラサカVR部ですが、活動再開と合わせてアプリも新しくしていきたいね！とのことで開発合宿を行うことに。事前にブラサカ部のSlack上で話し合い、横須賀にて開催することになりました！</p>
<p>3月末だったので宿空いてるかなー、なんて思っていたらどっこい。結構埋まっていてびっくりでした。宿の手配をしてくださったメンバーの方には本当に感謝。</p>
<h2 id="1日目の様子">1日目の様子</h2><h3 id="宿へ向かう">宿へ向かう</h3><img fetchpriority="high" src="/images/2025/20250812a/20250329-1I3A0545.jpg" alt="20250329-1I3A0545.jpg" width="1200" height="900">

<p>お昼の13時頃に横須賀駅に集合。時間通りに来た人は自分を含めて二人だけでした。<br>（間違えて各駅乗っちゃった方もいたり、休日なので皆マイペース）</p>
<p>集まった人たちだけでひとまずお先に宿へ向かいます。</p>
<img src="/images/2025/20250812a/20250329-1I3A0546-強化-NR-2.jpg" alt="20250329-1I3A0546-強化-NR-2.jpg" width="1200" height="900" loading="lazy">

<p>生憎雨が降っていましたが、気にせずGo！</p>
<h3 id="早速開発！">早速開発！</h3><img src="/images/2025/20250812a/20250329-1I3A0557-強化-NR-2.jpg" alt="20250329-1I3A0557-強化-NR-2.jpg" width="1200" height="900" loading="lazy">

<p>宴の準備だけ済ませたらすぐに開発が始まりました。</p>
<p>もう少しゆっくりしてからスタートするかと思いきや、みなさんちゃんとやる気モードでした🔥</p>
<img src="/images/2025/20250812a/20250329-1I3A0551.jpg" alt="20250329-1I3A0551.jpg" width="1200" height="900" loading="lazy">

<p>お酒もしっかり開きました🍺</p>
<img src="/images/2025/20250812a/20250329-1I3A0552-強化-NR-2.jpg" alt="20250329-1I3A0552-強化-NR-2.jpg" width="1200" height="900" loading="lazy">

<p>久しぶりのUnity開発である事もあり、お互い相談をしながらガツガツと開発を進めていました。その場で気軽に相談し合えるのが開発合宿の良い所ですね。</p>
<p>アプリの改修自体が4,5年ぶりになるので、Unityのことを覚えている人は少数。しかしここはFuture。さすがみんなエンジニアと思わずにはいられないほど、ガツガツと改修していきます。<br>（さすが！）</p>
<img src="/images/2025/20250812a/20250329-1I3A0562-強化-NR-2.jpg" alt="20250329-1I3A0562-強化-NR-2.jpg" width="1200" height="960" loading="lazy">

<p>ブラサカVR部に入ったばかりの人もいましたが、わからない事は教えあったりしてわいわいと開発が進行！</p>
<p>合宿中、かなり熱心にみなさん取り組んでいたこともありgitに溜まっていたissueがこの日だけで5つほど消化することに成功。</p>
<p><del>もっと開発進まないと思っていました。</del></p>
<h3 id="夕食・カラオケ大会からのボドゲ大会">夕食・カラオケ大会からのボドゲ大会</h3><img src="/images/2025/20250812a/20250330-1I3A0579.jpg" alt="20250330-1I3A0579.jpg" width="1200" height="960" loading="lazy">

<p>改修がある程度煮詰まった頃にはもう日が暮れていたのでそのまま全員で夕食へ。夕食後はカラオケ大会・ボドゲ大会が開催されました。<br>（夕食・カラオケ大会の写真撮ってないのやってしまった）</p>
<p>集中するところはしっかりと、オフの時はがっつりオフモードでメリハリつけて楽しみました。</p>
<img src="/images/2025/20250812a/20250330-1I3A0577.jpg" alt="20250330-1I3A0577.jpg" width="1200" height="960" loading="lazy">

<p>ギルニダンダーは強い。</p>
<h2 id="2日目の様子">2日目の様子</h2><h3 id="全く観光出来ていなかったので">全く観光出来ていなかったので</h3><img src="/images/2025/20250812a/20250330-1I3A0615.jpg" alt="20250330-1I3A0615.jpg" width="1200" height="960" loading="lazy">

<p>2日目は予定がある方も多く、朝には帰宅された方も多かったので残っている人たちで横須賀を散策。横須賀といったら戦艦三笠でしょ、とのことで戦艦三笠へ。</p>
<img src="/images/2025/20250812a/20250330-1I3A0622.jpg" alt="20250330-1I3A0622.jpg" width="1200" height="960" loading="lazy">

<p>この日は天気が良くて、三笠の上から見える景色も良かったです。天気晴朗なれども波は無し。</p>
<h3 id="帰りに合宿に来られなかった人と合流して振り返り会を実施">帰りに合宿に来られなかった人と合流して振り返り会を実施</h3><p>予定が合わずに合宿に参加できなかったメンバーもいたので、2日目のお昼にその方も交えて振り返り会を実施しました。</p>
<h3 id="振り返り">振り返り</h3><p>自分はブラサカ部が設立されてから初めての開発合宿の参加をさせていただきましたが、非常に楽しい会でした。</p>
<p>やる時はしっかりと開発しつつ、オフにする時はしっかりとオフモードで楽しむ。メリハリがついていて良かったと思います！</p>
<p>すでに次の合宿はどうしようか、という話がブラサカ部のミーティング内でも出ているので、またブラサカVRアプリのアップデートに向けて進めていこうと思います！</p>
]]></content>
    <summary type="html">2025年3月29,30日に社内部活のブラサカVR部で開発合宿を実施しました！ その時の様子をお届けします👍</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
    <category term="ブラインドサッカー" scheme="https://future-architect.github.io/tags/%E3%83%96%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%89%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC/"/>
    <category term="開発合宿" scheme="https://future-architect.github.io/tags/%E9%96%8B%E7%99%BA%E5%90%88%E5%AE%BF/"/>
  </entry>
  <entry>
    <title>Apple Vision Pro における LLM 利用について</title>
    <link href="https://future-architect.github.io/articles/20250714a/"/>
    <id>https://future-architect.github.io/articles/20250714a/</id>
    <published>2025-07-13T15:00:00.000Z</published>
    <updated>2025-07-13T15:00:00.000Z</updated>
    <author><name>山本力世</name></author>
    <content type="html"><![CDATA[<p>AI Tips連載の3本目の記事となります。</p>
<p>Apple Vision ProでLLMを利用する方法について整理します（ユーザ向けのAI機能であるApple Intelligence自身が提供する各機能については本記事では対象にしません）。</p>
<p>注）LLMはLarge Language Modelの略称ですが、この記事では、SML(Small Language Model)、VML(Vision Language Model)、基盤モデル(Foundation Model)などが指し示す概念についても包括して便宜的に「LLM」という単語を用いて説明しています。</p>
<h2 id="LLMの配置パターン">LLMの配置パターン</h2><p>Vision ProでLLMを利用する際のLLMをどこに置くかという観点から説明していきたいと思います。</p>
<h2 id="1-クラウド上のLLMを利用する方法">1. クラウド上のLLMを利用する方法</h2><img fetchpriority="high" src="/images/2025/20250714a/cloudllm.png" alt="cloudllm.png" width="960" height="380">

<p>Vision Pro を Wi-Fiなどを経由してインターネットに接続し、クラウド上で提供されているLLMサービスへアクセスする方法です。<br>OpenAI、Anthropic、Googleなどが提供しているLLMのAPIなどを利用する場合がこれに該当します。</p>
<p>利点としては、Vision Pro自身にモデルデータを格納する必要がなく、また、Vision Pro自身のコンピューティング能力に依存しないので性能のスケーラビリティがあり、かつ、利用する際のコード量も最小限で済むところです。欠点としては、インターネットへの接続が必要なことと、Vision Proからの情報がクラウド内へ流れてしまう点です。</p>
<h2 id="2-ローカルネットワーク上のMac（やPC）のLLMを利用する方法">2. ローカルネットワーク上のMac（やPC）のLLMを利用する方法</h2><img src="/images/2025/20250714a/macllm.png" alt="macllm.png" width="960" height="424" loading="lazy">

<p>Vision ProをWi-Fiなどを経由してローカルネットワークに接続し、Mac上で提供されているLLMサービスへアクセスする方法です。</p>
<p>利点としては、1と同じ点と、1で欠点としてあげていた点が生じないところになります。欠点としては、Mac上にLLMの環境をあらかじめ用意しておく必要がある点となります。こちらはLM Studioを使用するとお手軽に導入できます。</p>
<p>Vision Proの場合、メモリ容量についてはバリエーションはなく16GBのみとなり、こちらが動作させることができるLLMのサイズに制限が大きくかかってくる点となります。なお、Mac上でLLMを動作させる場合は512GB搭載のMac Studioも選択肢として存在しますのでVision Proの場合と比べるとかなり利用するLLMの選択肢を広げることができます。</p>
<p>ちなみに、グラフィック描画については、Vision Pro上での描画をMac側へ移譲するような仕組みがありますが、そのLLM版みたいな感じなのがこちらの方法かと思います。</p>
<h2 id="3-Vision-Pro上のLLMを利用する方法">3. Vision Pro上のLLMを利用する方法</h2><img src="/images/2025/20250714a/visionprollm.png" alt="visionprollm.png" width="960" height="398" loading="lazy">

<p>Vision Pro上にLLMのモデルデータを組み込んで動作させる方法です。</p>
<p>利点としては、Vision Proの外に一切の情報が流れないところです。欠点としては、Vision Proの中にLLMのモデルデータを格納しないといけないので、その分、初めに大きめのサイズのデータをダウンロードする必要がある点と、その分、Vision Proのストレージを逼迫させてしまう点などになります。</p>
<p>なお、次期OSであるvisionOS 26からはFoundation Models frameworkというApple Intelligenceの中核をなす、OSに組み込まれたオンデバイス基盤モデルを利用するための仕組みが用意されるのでこの欠点については緩和されるかもしれません。Vision Proには、MacBook&#x2F;Air&#x2F;ProやiPad&#x2F;Proなどでも採用されているApple M2チップが搭載されています。</p>
<h2 id="Apple-Silicon上でLLMを利用する">Apple Silicon上でLLMを利用する</h2><p>Vision ProやMac上でLLMを動かす場合は、Apple Silicon内にある、CPU、GPU、Neural Engineの3つのいずれかでLLMを動かすることになります。</p>
<p>この時、Neural Engine上で動作させるためには、Appleが提供するCore MLを利用する必要があります。ただし、visionOS 2では企業向けにしか提供されていないため限定的な動作のみとなりますが、visionOS 26では一般向けでも利用できるようになるとのことです。</p>
<p>なお、Neural Engine以外の、CPU、GPU上で動作させる場合には、AppleがOSSで提供しているMLXを利用するのがApple SiliconのUMAに最適化されているのでオススメです。</p>
<p>Vision Proについては計算負荷が大きい場合にある程度動作リミッターがかかってしまいますが、企業向けには解除する方法も提供されています。</p>
<p>ちなみに、Vision Proに搭載されているM2チップの場合、CPUは高性能コアと高効率コアがそれぞれ4つ、GPUは10個、Neural Engineは16個のそれぞれマルチコアで構成されています。</p>
<img src="/images/2025/20250714a/applem2.png" alt="applem2.png" width="960" height="720" loading="lazy">

<p>Apple M2チップ内の構成（チップ内の機能を抜粋して図示）</p>
<h2 id="LLM利用のサンプルコード">LLM利用のサンプルコード</h2><p>MLXを利用してLLMを動作させるためのサンプルソースコードは下記で公開されてますので、こちらを元に様々なLLMの動作を試してみると良いかと思います。主要なLLMを少し試したいだけならば、次の節で紹介しているアプリをAppStoreからインストールし、試してみると良いかと思います。</p>
<p>https://github.com/ml-explore/mlx-swift-examples/tree/main/Applications/LLMEval</p>
<p>また、本サンプルの実行については、下記のサイトで手順を追って丁寧に説明されていますので参考にしてみてください。</p>
<p>iPad で、LLM を動作させる手順詳細（Deep Seek R1, Qwen , MLX）、オンデバイスAIに向けて<br><img src="/images/2025/20250714a/IMG_0266.png" alt="IMG_0266.png" width="1200" height="675" loading="lazy"></p>
<h2 id="AppStoreで公開されているLLM関連アプリ">AppStoreで公開されているLLM関連アプリ</h2><p>次に実際にAppStoreに公開されているVision Proで利用できる（他のAppleデバイスにも対応してます）アプリをいくつかあげておきます。</p>
<p>注）これらのアプリは私や当社が何らか動作や利用について何ら保障するものではありません。</p>
<ul>
<li><p>AI Pro - AIチャットボット助手</p>
<ul>
<li>「1.クラウド上のLLMを利用する方法」の例<img src="/images/2025/20250714a/IMG_0265.png" alt="IMG_0265.png" width="1200" height="675" loading="lazy"></li>
</ul>
</li>
<li><p>On-Device AI: Offline &amp; Secure</p>
<ul>
<li>「2. ローカルネットワーク上のMac（やPC）のLLMを利用する方法」「3. Vision Pro上のLLMを利用する方法」の例<img src="/images/2025/20250714a/IMG_0264.png" alt="IMG_0264.png" width="1200" height="675" loading="lazy"></li>
</ul>
</li>
<li><p>fullmoon: local intelligence</p>
<ul>
<li>「3. Vision Pro上のLLMを利用する方法」の例<img src="/images/2025/20250714a/IMG_0262.png" alt="IMG_0262.png" width="1200" height="675" loading="lazy"></li>
</ul>
</li>
</ul>
<h2 id="まとめ">まとめ</h2><p>今回は、Apple Vision ProにてLLMを利用したアプリの作成や実行についてまとめてみました。</p>
<p>より詳細な情報については、次の参考リンクでリストアップしていますので、そちらを参照してみてください。</p>
<h2 id="参考">参考</h2><ul>
<li>ML &amp; AI<ul>
<li>WWDC25: Discover machine learning &amp; AI frameworks on Apple platforms</li>
</ul>
</li>
<li>MLX<ul>
<li>WWDC25: Get started with MLX for Apple silicon</li>
<li>WWDC25: Explore large language models on Apple silicon with MLX</li>
</ul>
</li>
<li>Foundation Models</li>
<li>WWDC25: Meet the Foundation Models framework<ul>
<li>WWDC25: Deep dive into the Foundation Models framework</li>
<li>WWDC25: Explore prompt design &amp; safety for on-device foundation models</li>
<li>WWDC25: Code-along: Bring on-device AI to your app using the Foundation Models framework</li>
</ul>
</li>
<li>visionOS<ul>
<li>WWDC24: Introducing enterprise APIs for visionOS</li>
<li>WWDC25: Explore enhancements to your spatial business app</li>
<li>WWDC25: What’s new in Metal rendering for immersive apps</li>
</ul>
</li>
</ul>
]]></content>
    <summary type="html">Apple Vision ProでLLMを利用する方法について整理していきます</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="Apple" scheme="https://future-architect.github.io/tags/Apple/"/>
    <category term="LLM" scheme="https://future-architect.github.io/tags/LLM/"/>
    <category term="VisionPro" scheme="https://future-architect.github.io/tags/VisionPro/"/>
  </entry>
  <entry>
    <title>Apple Vision Pro で Enterprise API を使う方法</title>
    <link href="https://future-architect.github.io/articles/20240906a/"/>
    <id>https://future-architect.github.io/articles/20240906a/</id>
    <published>2024-09-05T15:00:00.000Z</published>
    <updated>2024-09-05T15:00:00.000Z</updated>
    <author><name>山本力世</name></author>
    <content type="html"><![CDATA[<figure><img fetchpriority="high" src="/images/2024/20240906a/スクリーンショット_2024-09-05_16.04.34.png" alt="" width="604" height="345"><figcaption>▼WWDC2024: visionOS向けエンタープライズAPIのご紹介 より</figcaption></figure>
<hr>
<p>visionOS 2.0からはEnterprise APIという、企業向けのAPIを利用できます。</p>
<p>ただし、利用するにはAppleへ申請し、承認されると送られてくるライセンスファイルをプロジェクト内に含めてビルドする必要がありますので、利用までの一連の手続きをまとめます。</p>
<h2 id="Enterprise-API">Enterprise API</h2><p>Enterprise APIには次のようなものが用意されています。</p>
<h3 id="センサーへの拡張アクセス">センサーへの拡張アクセス</h3><ul>
<li>Main Camera Access<ul>
<li>前方のメインカメラからの入力データの取得</li>
</ul>
</li>
<li>Passthrough in Screen Capture<ul>
<li>Vision Proを装着している人が見ている、現実世界とデジタルコンテンツが合わさっている表示へのアクセス</li>
</ul>
</li>
<li>Spatial Barcode and QR code Scanning<ul>
<li>空間にあるバーコードとQRコードのスキャン</li>
</ul>
</li>
</ul>
<h3 id="visionOSを最大限駆使するためのプラットフォーム制御">visionOSを最大限駆使するためのプラットフォーム制御</h3><ul>
<li>Apple Neural Engine access<ul>
<li>機械学習タスク用のApple ニューラルエンジンへのアクセス</li>
</ul>
</li>
<li>Object Tracking Parameter Adjustment<br>-　既知オブジェクトの検出と設定可能なパラメータを使ったトラッキングの最適化</li>
<li>Increased Performance Headroom<ul>
<li>熱使用量の増加とバッテリー寿命の低下のトレードオフを伴った、高い計算能力が必要な場合のCPUとGPUのパワーを追加</li>
</ul>
</li>
</ul>
<p>これらの具体的な紹介については、次のWWDC2024のビデオが参考になります。（字幕はデフォルトだと英語なので日本語に切り替えてから再生してください）</p>
<ul>
<li>visionOS向けエンタープライズAPIのご紹介</li>
</ul>
<p>次にこれらのEnterprise APIを利用するための手順を紹介します。</p>
<h2 id="Appleへの申請">Appleへの申請</h2><p>Building spatial experiences for business apps with enterprise APIs for visionOSページ内に「Development Only request」と書かれている部分にリンクが張ってあるのでそちらをクリックしその先のページで申請をします。申請時は使用したい機能などを記入していきます。</p>
<p>注意する点としては、Apple Developer Program もしくは Apple Developer Enterprise Programのそれぞれアカウントホルダーでないと申請手続きが行えません。申請後はAppleからアカウントホルダーへ承認メールが来るまで待ちます。</p>
<p>参考情報となりますが、先日申請した際は10日程経った後、ライセンスファイルが添付されたメールが届きました。</p>
<h2 id="ライセンスファイルのプロジェクトへの追加">ライセンスファイルのプロジェクトへの追加</h2><p>上記メールに添付されていたライセンスファイルは、プロジェクトに含める必要があるので、プロジェクトフォルダ内へコピーします。プロジェクト内であればネストしたフォルダ配下でも大丈夫なようです。なお、このファイルは有効期限が設定されています。</p>
<p>参考情報となりますが、今回の申請では、始めに届いたファイルは有効期限が１ヶ月弱で、有効期限が切れる少し前に更新された新しいライセンスファイルがAppleから届きました。</p>
<h2 id="エンタイトルメントファイルの作成">エンタイトルメントファイルの作成</h2><p>プロジェクト設定の「+Capability」をクリックし、使用したい機能を追加します。</p>
<p>TeamがPersonal TeamやNoneに設定されていると候補に出てこないので注意してください。</p>
<p>具体的な手順はAdding capabilities to your appなどを参照しましょう。</p>
<h2 id="プログラムの作成">プログラムの作成</h2><p>AppleからEnterprise APIを使った例が示されていますのでそれを参考に作成してみましょう。<br>Locating and decoding barcodes in 3D space</p>
<p>上記例はImmersiveView.swiftについてしか示されていないので、あらかじめvisionOSアプリの新規プロジェクトを作成し、その中のImmersiveView.swiftの内容を上記ページに記載されている内容に置き換えます。その後、上記に書いてきているEnterprise API を使う手順を全て行い、ビルドし実行すると実機にて動作を確認（コード状に黄緑色の四角い面が重なったアニメーションが表示され、コンソールにデコードされた値が表示されます）できます。</p>
<p>ちなみに検出できるコードのサイズはQRコードの場合だと2,3cm以上ないとダメなようです。</p>
<h2 id="トラブルシューティング">トラブルシューティング</h2><p>必要な権限が含まれているライセンスファイルがプロジェクトに含まれていない、もしくはライセンスファイルの有効期限が切れている場合は、</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">App not authorized.</span><br></pre></td></tr></table></figure>

<p>とコンソールに出て、プログラム内で呼び出しているEnterprise APIが実行できません。</p>
<h2 id="まとめ">まとめ</h2><p>Vision ProでEnterprise API を使う方法についてまとめました。</p>
<p>今後も引き続き、Vision Pro関係の記事を投稿していく予定です。</p>
]]></content>
    <summary type="html">WWDC2024: visionOS向けエンタープライズAPIのご紹介 よりvisionOS 2.0からはEnterprise APIという、企業向けのAPIを利用できます。ただし、利用するにはAppleへ申請し、承認されると送られてくるライセンスファイルをプロジェクト内に含めてビルドする必要がありますので、利用までの一連の手続きをまとめておきたいと思います。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="Apple" scheme="https://future-architect.github.io/tags/Apple/"/>
    <category term="VisionPro" scheme="https://future-architect.github.io/tags/VisionPro/"/>
  </entry>
  <entry>
    <title>Apple Vision Pro を利用するために有益なアクセサリー類の検証</title>
    <link href="https://future-architect.github.io/articles/20240905a/"/>
    <id>https://future-architect.github.io/articles/20240905a/</id>
    <published>2024-09-04T15:00:00.000Z</published>
    <updated>2024-09-04T15:00:00.000Z</updated>
    <author><name>山本力世</name></author>
    <content type="html"><![CDATA[<figure><img fetchpriority="high" src="/images/2024/20240905a/Image_20240905_101403.png" alt="" width="1061" height="885"><figcaption>▼SoloニットバンドM&#x2F;S、Soloニット用バッテリーホルダー、SoloTop、Lens Protectorを組み合わせた例</figcaption></figure>
<hr>
<h2 id="はじめに">はじめに</h2><p>2024年初めから米国で発売開始されたApple Vision Proですが、国内でも販売が開始されたので、早速、当社でも手に入れてみました。</p>
<p>以前、当社ではMicrosoftのHoloLens(2ではない)を検証したこともありましたが、今回のAppleのVision Proはそれらなどの問題点などをよく研究してきたものであると感じました。</p>
<p>主観ですが、HoloLensは光学シースルー方式で、Vision Proはビデオシースルー方式です。そのため、現実の風景の解像度についてはHoloLensには勝りませんが、半透明にならずに完全に現実を仮想を合成できます。Meta Quest3よりは鮮明でフレームレートもそれなりに高く、自分の場合は装着したまま外を歩いたり階段を上り下りできるレベルと感じました。重さなどについては別として、画質としては実用レベルかと思いました。（被ったまま紙の本などを読むなどはちょっと辛い）</p>
<p>今回は、アプリケーションの利用やプログラミング開発ではなく、物理的な部分にフォーカスしたいと思います。</p>
<p>やはり、スターンドアローン型のHMDである Vision Proはそれなりに重く（500mmペットボトル1本超ぐらいの重さ）、装着時にその重量をうまく分散させることが利用時の快適さを向上させるために重要となります。</p>
<p>ネットで共有されていた既存の情報や、自分で色々検索し、サードパーティから提供されているアクセサリーを色々手に入れ検証してみましたので、それらの使用感などを共有したいと思います。</p>
<p>あくまでも、記載している内容は会社ではなく私の全て主観的な感想となります。また、おおよその金額も記載していますがあくまでも参考額なので、ご了承ください。</p>
<h3 id="Soloニット用バッテリーホルダー">Soloニット用バッテリーホルダー</h3><ul>
<li>Soloニットにクリップで取り付ける</li>
<li>3Dプリンタで出力されたもの</li>
<li>取り付けると頭部前方の本体の重さに対するカウンターウェイトになり前後のバランスが良くなる</li>
<li>バッテリーのケーブルを巻き取ることができる</li>
<li>色味、質感は微妙</li>
<li>3,000円弱</li>
</ul>
<h3 id="Anker-モバイルバッテリー-Power-Bank-10000mAh-30W">Anker モバイルバッテリー Power Bank (10000mAh, 30W)</h3><ul>
<li>Vision Proのバッテリーは動作させながらの交換はできないので、Vision Proのバッテリーに別のモバイルバッテリーを接続することで稼働時間を伸ばすことができる</li>
<li>2個用意し、それらを交互に交換・充電することでVision Proの連続稼働を実現させることができる</li>
<li>6,000円弱</li>
</ul>
<h2 id="ケースなど">ケースなど</h2><h3 id="ユニクロ-ラウンドミニショルダーバッグ">ユニクロ ラウンドミニショルダーバッグ</h3><ul>
<li>頑張って詰め込むと、ギリギリジッパーを閉めることも可能</li>
<li>ジッパーを開けっぱなしにして軽く持ち運ぶのもあり</li>
<li>1,500円</li>
</ul>
<h3 id="Ulanzi-カメラ用ラッピングクロス-45cm×45cm">Ulanzi カメラ用ラッピングクロス 45cm×45cm</h3><ul>
<li>他の入れ物に入れる際はさっと使え便利</li>
<li>2,000円弱</li>
</ul>
<h3 id="elago-シリコントレー">elago シリコントレー</h3><ul>
<li>デスクに本体を置く場合にはこれを使用すると本体も傷付かないので良い</li>
<li>4,000円弱</li>
</ul>
<h3 id="Apple-Vision-Pro用デベロッパストラップ">Apple Vision Pro用デベロッパストラップ</h3><ul>
<li>Macと有線で接続するためには必要。無線接続でも開発したアプリなどをMacから送ったりデバッグなどできるが、VPN接続された環境などだと接続できなかったりするのであったほうが便利</li>
<li>5万円超</li>
</ul>
<p>以下では、ライトシーリングを装着した状態と外した状態それぞれのパターンでまとめています。</p>
<p>なお、ライトシーリングを外した状態での利用はApple非サポートの使用方法となりますが、顔面に接触する部分がなくなるので開放感があり普段使いに適していると感じました。他者に試してもらう際も衛生感が向上するかと思います。</p>
<h2 id="ライトシーリングを装着した状態でのセッティング例">ライトシーリングを装着した状態でのセッティング例</h2><h3 id="SHINOBU工房-Lens-Protector">SHINOBU工房 Lens Protector</h3><ul>
<li>標準で用意して欲しいレベルの小物</li>
<li>持ち運び時には必ず使いたい</li>
<li>1,000円弱</li>
</ul>
<h3 id="SoloTop-上方向にSoloニットを追加するためのアダプター">SoloTop: 上方向にSoloニットを追加するためのアダプター</h3><ul>
<li>3Dプリンタで出力されたもの</li>
<li>Apple Vision Pro用デベロッパストラップと組み合わせることができない</li>
<li>Soloニットを追加で用意する必要がある</li>
<li>自分の場合は、上方向にはSサイズのSoloニットを組み合わせるとちょうどよかった</li>
<li>2,000円弱</li>
</ul>
<h2 id="ライトシーリングを外した状態でのセッティング例">ライトシーリングを外した状態でのセッティング例</h2><h3 id="SHINOBU工房-ヘッドバンド-Band-Pro-v2-1-with-SHINOBU工房-ノーズパッド-Nose-Pro">SHINOBU工房 ヘッドバンド Band Pro v2.1 with SHINOBU工房 ノーズパッド Nose Pro</h3><ul>
<li>自分の場合は、ヘッドバンド取り付け部分がVision Proのオーディオストラップの内側になるため、幅が若干狭くなりその部分が痛くなった</li>
<li>ノーズパッド部分も痛かった</li>
<li>2,000円弱+1,280円</li>
</ul>
<h3 id="ANNAPRO-圧力低減コンフォート-ヘッドストラップ">ANNAPRO 圧力低減コンフォート ヘッドストラップ</h3><ul>
<li>ヘッドバンドと違い、固定された部品なため安定して、おでこ部分でおさえることができる</li>
<li>ただ、本体との距離の調整がヘッドストラップ部分につける厚さが異なる数種のクッションでしか調整できないため、ライトシール装着時よりも顔を本体に寄せることができない</li>
<li>6,000円弱</li>
</ul>
<h3 id="INFINITY-ONE-Air-Cover-2-0-with-Nylon-Tape（検証予定）">INFINITY ONE Air Cover 2.0 with Nylon Tape（検証予定）</h3><ul>
<li>2よりも本体との距離を縮められそう</li>
<li>Nylon Tapeによって頭頂部でも重量を分散でき、良さそう</li>
<li>外部光の遮断も上と横方向について行われており、良さそう</li>
<li>8,000円弱</li>
</ul>
<h2 id="まとめ">まとめ</h2><p>Apple Vision Proを利用する際に必要となったり、より快適になるアクセサリー類を検証した内容をまとめてみました。</p>
<p>現在は、企業向けアプリで利用できるEnterprise APIの検証なども行っているため、次回はそれらについての記事も書きたいと考えています。</p>
<p>*<em>2024年12月9日追記 続編が公開されました</em>:</p>
<ul>
<li>「続 Apple Vision Pro を利用するために有益なアクセサリー類の検証」</li>
</ul>
]]></content>
    <summary type="html">2024年初めから米国で発売開始されたApple Vision Proですが、国内でも販売が開始されたので、早速、当社でも手に入れてみました。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="Apple" scheme="https://future-architect.github.io/tags/Apple/"/>
    <category term="VisionPro" scheme="https://future-architect.github.io/tags/VisionPro/"/>
  </entry>
  <entry>
    <title>「自在化身体論」の読書感想文</title>
    <link href="https://future-architect.github.io/articles/20231109a/"/>
    <id>https://future-architect.github.io/articles/20231109a/</id>
    <published>2023-11-08T15:00:00.000Z</published>
    <updated>2023-11-08T15:00:00.000Z</updated>
    <author><name>森直也</name></author>
    <content type="html"><![CDATA[
<img fetchpriority="high" src="/images/2023/20231109a/jisai.jpg" alt="" width="400" height="543">


<h2 id="はじめに">はじめに</h2><p>こんにちは、2022年4月新卒入社、金融グループ所属の森です。</p>
<p>秋のブログ週間20232週目の記事として、自在化身体論の感想文を掲載します。</p>
<p>私はフロントエンドやアルゴリズム関連の書籍を読むことが多いのですが、読書の秋！ ということで、思い切って普段は読まないような分野の本を手に取ってみました。</p>
<h2 id="本の概要">本の概要</h2><p>「自在化身体」という概念や、それに関する研究、技術についての本です。<br>「自在化」の概念は本書で以下のように述べられています。</p>
<blockquote>
<p>「 機械によって拡張された能力を、人が自在に扱えること」</p>
</blockquote>
<p>想像しやすいところで言えば、人間の筋力を増強する「パワードスーツ」などが「自在化身体」の1つと言えるでしょう。</p>
<p>しかし、ロボットによる人体の拡張に限らず、バーチャル世界での身体、ひとりで複数の身体を扱うこと、逆に複数人でひとつの身体を制御することなど、「自在化身体」の様々な在り方が紹介されていきます。</p>
<p>章立てです。</p>
<p>各章で「自在化身体」の各研究グループのリーダーが自身の経歴や研究の内容、将来像について紹介していく形式になっています。</p>
<ul>
<li>第1章　変身・分身・合体まで ― 自在化身体が作る人類の未来</li>
<li>第2章　身体の束縛から人を開放したい ― コミュニケーションの変革も</li>
<li>第3章　拡張身体の内部表現を通して脳に潜む謎を暴きたい</li>
<li>第4章　自在化身体は第4世代ロボット ― 神経科学で境界を超える</li>
<li>第5章　今役立つロボットで自在化を促す ― 飛び込んでみないと自分はわからない</li>
<li>第6章　バーチャル環境を活用した身体自在化とその限界を探る</li>
<li>第7章　柔軟な人間と機械との融合</li>
<li>第8章　情報的身体変工としての自在化技術 ― 美的価値と社会的倫理観の醸成に向けて</li>
</ul>
<h2 id="感想">感想</h2><p>「パワードスーツ」のような、ロボット工学の話題を中心に構成されていると思っていましたが、バーチャル空間上での身体についての研究や、心理学、脳科学の知見を利用した自在化身体の応用、自在化身体と美的感覚、倫理観の関係など非常に幅広い話題があり驚かされました。</p>
<p>興味深く感じた話題について紹介します。</p>
<h3 id="自在と自動">自在と自動</h3><p>「自在化」において大切なことは、あくまで人間に新しい能力を授けることだとされています。</p>
<p>書籍では自動運転技術とドラえもんのタケコプターを比較して説明しています。どちらの技術でもユーザーは移動という目的を達成できますが、自在化で目指すのはタケコプターのように人間に移動能力を付加することです。</p>
<p>あくまで主体は人間であるという点と、行動の結果のみを重要視しているわけではない点に、単に利便性のための技術にとどまらない可能性を感じて好印象でした。</p>
<h3 id="第3の腕">第3の腕</h3><p>ロボットハンドを体に装着し自由自在に扱えるようにする研究や、ロボットハンドを自身の体から離れたところに設置し動かす研究が紹介されていました。</p>
<p>ロボットハンドを遠隔操作する場合、操作している腕の位置や角度に応じて操作者の背中に刺激を与えると作業効率が上がる実験結果が得られているそうです。</p>
<p>ロボットハンドという本来自分の体にないパーツからのフィードバックに脳が対応できる点が非常に興味深かったです。</p>
<p>この他にも人間の適応能力の高さを利用した研究や、逆に脳がどれだけの身体拡張を許容できるのか調べる研究についても紹介されていました。</p>
<h3 id="身体感覚の編集">身体感覚の編集</h3><p>モーションキャプチャでユーザーの全身の動きを取得し、VR空間上のアバターの動きに反映させるシステムを用いた実験が紹介されていました。</p>
<p>ユーザーはヘッドマウントディスプレイを通してVR空間上で自身の動きをリアルタイムに観測します。ここで、アバターの表示に遅延を入れる、もしくはアバターの次の動きを予測し、数フレーム先の動作を表示すると、ユーザーは「体が重い」もしくは「体が軽い」という感覚を得るそうです。</p>
<p>アバターという拡張された身体を経由することで人間の感覚の制御ができる、という話を聞くと、いずれ自身の思い通りに感覚を制御しながら生活ができるのでは？ と夢が広がりますね！</p>
<h2 id="さいごに">さいごに</h2><p>自分にとって初めての概念が多く登場する本でしたが、具体的な研究内容の紹介や図表による説明が十分にあったため、あまり困ることなく読み進めることができました。</p>
<p>子供の頃に夢見たSFの世界がすぐそこに迫っている事実にワクワクが止まりません（書籍の内容ではありませんが、自在化身体研究プロジェクトで作成された自在肢がカッコイイ…）</p>
<p>SFが好きな方、VR、ロボット工学、心理学、脳科学に興味がある方など様々な人にオススメできる本です。</p>
<p>次は栗栖さんのリファクタリング本を読んで良いコードとは何かを知るです。</p>
]]></content>
    <summary type="html">本の概要 「自在化身体」という概念や、それに関する研究、技術についての本です。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="ロボット" scheme="https://future-architect.github.io/tags/%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88/"/>
    <category term="書評" scheme="https://future-architect.github.io/tags/%E6%9B%B8%E8%A9%95/"/>
  </entry>
  <entry>
    <title>Meta Quest 3開封の儀＆フルカラーパススルーで家にテルミンを置いた</title>
    <link href="https://future-architect.github.io/articles/20231013a/"/>
    <id>https://future-architect.github.io/articles/20231013a/</id>
    <published>2023-10-12T15:00:00.000Z</published>
    <updated>2023-10-12T15:00:00.000Z</updated>
    <author><name>藤井亮佑</name></author>
    <content type="html"><![CDATA[<h2 id="はじめに">はじめに</h2><p>こんにちは。TIG DX ユニット所属、金欠コンサルタントの藤井です。</p>
<p>2023年10月10日、とうとう発売されましたね。Meta Quest 3（以下 Quest3 と略記）が。しっかり予約して発売日に手に入れようとしたんですが、何故か配達日がズレて 1 日遅れで入手しました。<br>せっかくなので、開封の儀と、Quest3 の目玉機能の1つである、フルカラーパススルーを使って遊んでみようと思います。</p>
<p>ちなみに、この記事はimmersedを用いて、VR 空間のバーチャルディスプレイを使って書いています。バーチャルデスクトップについては井上さんの記事をご参照ください。</p>
<h2 id="開封の儀">開封の儀</h2><h3 id="外観確認・Quest2-との比較">外観確認・Quest2 との比較</h3><p>それでは早速開封していきます。<br>ケースと箱はシンプルで、思ったよりコンパクトでした（ダンボールに梱包されて届いた時点で想像より小さかったのでちょっと驚きました）。</p>
<img fetchpriority="high" src="/images/2023/20231013a/box.jpg" alt="box.jpg" width="1200" height="1091">

<p>箱から取り出して Quest2 と比較してみます。</p>
<p>まずは本体を上から見た図です（右が Quest3）</p>
<img src="/images/2023/20231013a/up.jpg" alt="up.jpg" width="1200" height="841" loading="lazy">

<p>ディスプレイ部分が明らかに薄くなっており、全体的にコンパクトに感じます。<br>レンズをパンケーキレンズに変更したことでサイズダウンするとは聞いていましたが、思ったより大幅に薄くなっていました。</p>
<p>装着する部分のバンドも明らかに見た目が違うのですが、これは私が Quest2 のバンドをバッテリー付きの Elite ストラップに変更しているからというのもあります。</p>
<p>この Elite ストラップというのが非常につけ心地が良いのもあり、正直 Quest3 のバンドはちょっと微妙でした。あまり頭にフィットせず、調整も難しいです。Quest3 用の Elite ストラップも買うことにしました。</p>
<p>一応 Quest2 の頃から改修は加えられており、頭頂部～後頭部部分が Y 字になって、よりフィットしやすくなってはいるようです（この Y 字が開くことで締め付けが調整できる、というのになかなか気づけず…Quest3 を装着してから見ることができるチュートリアルで調整の仕方が紹介されるため、先にチュートリアルを進めるのが良いかもしれません）。</p>
<p>次に前から見た図がこちらです（下が Quest3）ついでにコントローラーも並べています。</p>
<img src="/images/2023/20231013a/front.jpg" alt="front.jpg" width="1200" height="1155" loading="lazy">

<p>本体には特徴的な3つ目がついており、左右のそれぞれに RGB カメラと IR カメラが1つずつ、真ん中には深度センサーが取り付けられています。これらを用いてフルカラーパススルー及び MR のための空間認識機能を提供しているようです。<br>また、これに加えて、底面側に 2 つカメラがついているので、トータルで 6 つのカメラと 1 つの深度センサーが搭載されています。</p>
<p>コントローラーも大幅に変化していて、Quest2 のコントローラーにあったリングが無くなっています。元々このリングは赤外線を発しており、それを本体の赤外線カメラで検知することでコントローラーのトラッキング（位置・姿勢の取得）していました。</p>
<p>Quest3 ではリングが無くなった分、上面（ボタンやスティックが配置されている面）から赤外線を発しているようです。ただ、コントローラーを握っていたり、回転させると本体に赤外線が届かなくなってしまいます。そこで赤外線の検知に加え、ハンドトラッキングも並列で行ったり、加速度センサー・ジャイロセンサーの入力で補正したりと、多角的にトラッキングを行うことで安定したトラッキングを実現しているようです。<sup id="fnref:1">1</sup></p>
<p>ハンドトラッキングに関しては私の記事でちょっとだけ解説しています（この記事はもう1回参照します）。実際の使用感としても、リングが無くなったことでトラッキングの精度が落ちた実感はありませんでした。</p>
<h3 id="フルカラーパススルーと-MR-を体験してみる">フルカラーパススルーと MR を体験してみる</h3><p>開封も済んだので、3つ目を活かしたフルカラーパススルー・MR を体験してみようと思います。Meta が Quest3 の MR 体験用に提供しているゲームであるFirst Encountersをプレイしてみました。何枚かキャプチャも撮ったのですが、あんまりキャプチャだと凄さが伝わりそうになかったため、あえて文字だけで紹介してみます。できれば体験会や持っている知人に頼んで実際にプレイしてみていただきたいです。</p>
<p>まずゲームが始まる前に、プレイエリアを認識するため、部屋のスキャンを行います。と言っても、やることは部屋中をぐるりと眺めるぐらいです。ここで3つ目が活用され、リアルタイムに壁や障害物が認識されていきます。部屋のスキャンが完了すればゲーム開始です。ゲーム内容は簡単な FPS（ちょっとだけパズル要素あり）という感じなのですが、そこは MR、舞台は今自分がいる部屋なので、慣れ親しんだ空間がプレイエリアになるのでとても楽しい…と言う話ではありません（多分それは AR）。なんとゲームが始まると早々に天井の一部が崩れ落ちて宇宙船が落ちてきたのです。上階の人が床をぶち抜いたのかと思いました。</p>
<p>その後もちっちゃい宇宙人が壁を壊して部屋に入り込んできたり、自分が撃った弾が壁を壊したりと、だんだんと自分の部屋だったはずの空間が広大な空間（どこかの星）に変わっていきます。</p>
<p>こうなるともう脳はしっかり騙されてしまい、段々とどこが自分の部屋でどこがゲーム空間かわからなくなってきます。シームレスに現実と仮想空間が混ざり合っていく。なるほどこれが Mixed Reality か、という気持ちになりました。<br>（なお、二度ほど壁にぶつかりました。痛い）。</p>
<p>繰り返しになりますが、スクリーンショットやプレイ動画、文章だけではこの感覚は伝わらないので、ぜひとも何らかの方法で一度体験していただきたいです。</p>
<h2 id="フルカラーパススルーを使って、家にテルミンを置いてみる">フルカラーパススルーを使って、家にテルミンを置いてみる</h2><p>さて、公式のしっかりした MR を体験したところで、自分でも触ってみたくなったので、まずはフルカラーパススルーを試してみます。<br>とはいえ一からコンテンツを作っていると時間がかかるので、以前作成したハンドトラッキングテルミンシミュレータを流用して、我が家にテルミンを召喚してみましょう。</p>
<p>Oculus Integration のパッケージを導入していましたが、かなりアップデートが入っていたため、執筆時最新バージョンである 57.0 にアップデートした上で開発していきます（その他 Unity のバージョンも 2022 まで上げたりしています）。</p>
<p>いつの間にか Oculus Integration が非常に便利になっており、直感的に必要なあれこれをシーンに追加できるようになっていました。メニューバーから Oculus -&gt; Tools -&gt; Building Blocks と行くと、各機能ごとのブロックが表示されるので、この中から必要なものをヒエラルキーに D&amp;D するだけで導入が完了します。</p>
<p>今回は Camera Rig と Hand Tracking（以前テルミンシミュレータを作ったときのもとと競合するので、そちらは削除してから）を導入し、加えてパススルーを提供してくれる、Background Passthrough を導入します。</p>
<img src="/images/2023/20231013a/image.png" alt="image.png" width="1200" height="906" loading="lazy">

<p>あとはテルミン側のスクリプトから、ハンドトラッキングの参照を設定し直せば準備完了です。ビルドして動かしてみましょう。</p>
<p>我が家にテルミンが来た！（思ったより大きい）</p>
<img src="/images/2023/20231013a/6e962269ed7aea050fd5c2cf96faf4fa.png" alt="6e962269ed7aea050fd5c2cf96faf4fa.png" width="1200" height="1066" loading="lazy">

<p>床にもちゃんと接してますね（画像だとわかりにくいですが）</p>
<p>ただ、自分の手との前後関係はパススルーのみでは判定しようがないので、（本当はテルミンのほうが奥にあるのに）手の手前にテルミンが描画されてしまっています。このあたりはおそらく深度センサーを適切に使うことで解決する気はします。</p>
<p>ところでテルミンの 3D モデル、全く作り込んでいないのであからさまに 3D オブジェクト、という感じなのですが、それでもフルカラーパススルーで現実世界に登場させると、一気にそこに物があるような錯覚に襲われます（ぶつかりそうになったら無意識に避けようとしてしまうぐらい）</p>
<p>もっとリアルなものを登場させたり、逆に First Encounters のようなコミカルなものと現実世界を融合させたりと、可能性は非常に広そうだと改めて感じました。</p>
<h2 id="おわりに">おわりに</h2><p>テルミン、やっぱり難しい。</p>
<p>というのは冗談として、やはり新しいデバイスというのは胸が躍りますね。私が XR 系が好きだというのもありますが、特に XR 系の発展は身近に未来を感じられてハッピーです。</p>
<p>今後も新しい技術・デバイスが現れる度に色々とトライしていきたいと思います。</p>
<p>とりあえず直近は、深度センサーも活用してなにか作って遊べないか試したいです。</p>
<div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="vertical-align: top; padding-right: 10px;">1.</span><span style="vertical-align: top;">Meta Reveals How Quest 3 Controller Tracking Works As Beat Saber Founder Gives His Take https://www.uploadvr.com/meta-explains-quest-3-controller-tracking/</span> ↩</li></ol></div></div>]]></content>
    <summary type="html">2023年10月10日、とうとう発売されましたね。Meta Quest 3（以下 Quest3 と略記）が。しっかり予約して発売日に手に入れようとしたんですが、何故か配達日がズレて 1 日遅れで入手しました。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="MetaQuest" scheme="https://future-architect.github.io/tags/MetaQuest/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
    <category term="音楽" scheme="https://future-architect.github.io/tags/%E9%9F%B3%E6%A5%BD/"/>
  </entry>
  <entry>
    <title>UnityのShaderでVRプラネタリウムを作ったけどうまくいかず悔しかったので自作の星を作ったら宇宙が終わった</title>
    <link href="https://future-architect.github.io/articles/20230901a/"/>
    <id>https://future-architect.github.io/articles/20230901a/</id>
    <published>2023-08-31T15:00:00.000Z</published>
    <updated>2023-08-31T15:00:00.000Z</updated>
    <author><name>藤井亮佑</name></author>
    <content type="html"><![CDATA[<h2 id="はじめに">はじめに</h2><p>こんにちは。TIG DX ユニット所属、金欠コンサルタントの藤井です。</p>
<p>夏の自由研究連載の第2弾です。夏休みの宿題っぽいものを題材にしてみました。</p>
<p>実は私、星を見るのが好きなので、天体望遠鏡を買ったり、星を撮るためにカメラを買ったりしています。せっかくならいい環境で見たいので、南は沖縄から北は北海道まで星を見に行っています（海外も行きたい）。ただ、星を見に行くとなるとどうしても長距離移動になるので、お金もかかるし大変です。天気に左右されるのもつらいところです。</p>
<p>ということで今回は、遠出しなくてもいろんな星を見ることができるように、VR でプラネタリウムを作ろうと思います。</p>
<p>なお、本記事では Unity そのものの機能や、Shader の基本的な部分には触れず、作成したソースを参照しながら、重要な部分のみを詳細に記載しています。</p>
<h2 id="事前準備等">事前準備等</h2><h3 id="大方針">大方針</h3><p>VR プラネタリウムを作るためには、VR 空間上で星の配置を再現していく必要があります。実現方針としては概ね以下の 2 つに分かれるかと思います。</p>
<ol>
<li>実際に宇宙空間を作成し、星をオブジェクトとして配置していく<ul>
<li>メリット：非常にわかりやすく、実装コストが低い。</li>
<li>デメリット：大量のオブジェクトを作成することになるため、負荷が高い。</li>
</ul>
</li>
<li>天球を作成し、天球上に星の絵（テクスチャ）を描く<ul>
<li>メリット：オブジェクトは天球のみのため、負荷が低い。</li>
<li>デメリット：テクスチャの解像度に依存して厳密性が低下する。</li>
</ul>
</li>
</ol>
<p>ところで皆さんは宇宙にどれぐらいの星（恒星）があるかご存知でしょうか。星の数ほど、というぐらいなので途方もない数であるということはイメージできると思います。結論としては、宇宙の大きさが無限大なので、星の数も無限大です。とはいえ、我々が地球から観測できる星の数は有限であるため、十分な観測技術があれば星の数を数えることは原理上は可能なはずです（現在確認可能な範囲でも数十億個はあると言われています）。</p>
<p>この観測できる星をすべて網羅した、星表と呼ばれるものを作りたい、という野望を天文学者は古より抱いており、紀元前から現代に至るまで様々な星表が作られてきました。ただ、これらの星表はもちろん完璧なものではなく、実際に記載されているのは数十万程度です。</p>
<p>母数が多いので、数十万と聞くと少なく見えますが、決して小さい値ではありません。特に今回は Meta Quest 2 を用いてプラネタリウムを作ろうと思っているので、マシンスペックもそこまで高くありません。そのため今回は、負荷を低減できる方針 2 を採用します。</p>
<h2 id="Shader-で-Skybox-に動的に星を描いてみる">Shader で Skybox に動的に星を描いてみる</h2><p>では、天球上に星を描いてみましょう。ただし今回は天球用のオブジェクトは作成せず、Skybox と呼ばれるものを使います。Unity にデフォルトで用意されている、オブジェクトが存在しなければ描画される背景のようなもので、ゲーム空間を取り囲むように配置されています。</p>
<p>Skybox に星の絵を描くに当たり、実際に星空のテクスチャを描いて貼り付けても良いのですが、今回は Shader で動的に星景を作成することにしてみました。理由は Shader を書いてみたかったからです。</p>
<p>Unity では、「ゲーム空間内の<code>(x,y,z)</code>という座標に hoge というオブジェクトが有るから、画面上の<code>(X,Y)</code>座標のピクセルには<code>(r,g,b)</code>という色を出力しよう」という処理を Shader と呼ばれるものが行っています。<br>つまり Shader に適切な指示を出してもらえば、実態としてはゲーム空間内に何も存在していないにも関わらず、画面上には何かが表示されている、ということができます。</p>
<p>これにより、単純にゲーム空間内に召喚するオブジェクトが減るという効果はもちろんあるのですが、それに加えて Unity では、C#で書かれたロジックは CPU で（ほぼ）直列に処理がされ、Shader は GPU で並列に処理がされます。基本的に描写する対象の数が多いほど、処理の並列度が重要になってくるため、星の表示はすべて Shader にまかせてしまえば、非常に軽快に宇宙を再現できるのではないか、という気がしてきました。<br>なお、結論から記載すると、これはダメでした。</p>
<h3 id="Shader-を書いてみる">Shader を書いてみる</h3><p>Unity の Shader では、HLSL と呼ばれる言語を用いて処理を記述していきます。</p>
<p>とりあえず試しに 2 つ、白と赤の星が表示されるようなものを作ってみたものがこちらの sample1.shaderです。</p>
<p>重要なのは以下のあたりです。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 星の存在する方向や色、明るさを定義</span></span><br><span class="line"><span class="type">static</span> <span class="type">const</span> Star stars[<span class="number">2</span>] = &#123;</span><br><span class="line">      createStar(float3(<span class="number">1</span>, <span class="number">1</span>, <span class="number">0</span>), fixed3(<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>), <span class="number">0.5</span>),</span><br><span class="line">      createStar(float3(<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>), fixed3(<span class="number">1</span>, <span class="number">0.5</span>, <span class="number">0.5</span>), <span class="number">1</span>),</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 背景色を定義</span></span><br><span class="line">fixed4 <span class="title function_">drawBackground</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">      <span class="keyword">return</span> fixed4(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 星を描画</span></span><br><span class="line">fixed4 <span class="title function_">drawStars</span><span class="params">(float3 dir)</span></span><br><span class="line">&#123;</span><br><span class="line">      float3 o = float3(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>);</span><br><span class="line">      <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; <span class="number">2</span>; i++)</span><br><span class="line">      &#123;</span><br><span class="line">            float3 direction = normalize(stars[i].direction);</span><br><span class="line">            fixed3 color = normalize(stars[i].color);</span><br><span class="line">            <span class="type">float</span> angle = dot(dir, direction);</span><br><span class="line">            o += color * <span class="built_in">pow</span>(max(<span class="number">0.0</span>, angle), _radiusCoefficient * (stars[i].magnitude + <span class="number">2</span>)) * <span class="built_in">pow</span>(<span class="number">2.5</span>, <span class="number">-1</span> * stars[i].magnitude) * _brightnessCoefficient;</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">return</span> float4(o, <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 各ピクセルごとの色を決定</span></span><br><span class="line">fixed4 <span class="title function_">frag</span><span class="params">(v2f i)</span> : SV_Target</span><br><span class="line">&#123;</span><br><span class="line">      <span class="keyword">return</span> drawBackground() + drawStars(i.texcoord);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>コメントで書いている通りなのですが、<code>frag()</code>という関数の返り値に応じて、画面上の各ピクセルごとの色が決定されます（<code>#pragma fragment frag</code>という記述で定義しています）</p>
<p>この<code>frag()</code>の引数である<code>i</code>のメンバー変数<code>texcoord</code>には、画面内の各ピクセルにおける視線方向のベクトルが格納されています。この視線方向のベクトルと、別途定義している星の存在する方向を示しているベクトルとの内積を取ることで、どのピクセルに星を描画するべきかを決定しているのが<code>drawStars()</code>です。ざっくり書くと、視線方向と星の存在する方向が同じであれば星を描画し、若干ずれていたとしても、星の明るさに応じてほんの少しは描画する。みたいなことを表現しています。これを星の数だけ繰り返すようループしています。なお、shader では単純なループは適切に最適化され、並列処理が行われます。配列の要素間のやり取りなど、直列実行が不可避なものに関しては並列化されませんが、そもそもそういう処理は GPU で実施することを推奨されません。</p>
<p>さて、この Shader を Skybox に適用するとどのように星が見えるかというと、こんな感じです。</p>
<img fetchpriority="high" src="/images/2023/20230901a/image.png" alt="image.png" width="1200" height="602">

<p>結構それっぽい気がしますね。</p>
<p>ではここからどんどん星を増やしていきましょう。と思ったのですが、以下のような制約の壁にぶつかり続け、結局は断念しました。</p>
<ul>
<li>Shader では外部ファイルからデータを読み込んで描画できない。<ul>
<li>そのため、星の情報をすべてハードコーディングすることになりました。</li>
<li>ファイル読み込みを C#で行い、Shader に結果を渡す、みたいなこともできる気がしたのですが、うまく行かず…</li>
</ul>
</li>
<li>Shader で利用できる配列の要素数に上限があった。<ul>
<li>1 配列の要素数、ではなく、全配列の要素数の合計が 4096 以下である必要があるようでした。</li>
<li>そのため、配列ではなく個別に変数を大量に宣言することになりました。</li>
</ul>
</li>
<li>10 万個の星を描こうとしたところ、Shader のコンパイルがタイムアウトした。<ul>
<li>個別変数の数に応じてコンパイル時間が伸びていき、やがてはタイムアウトしてしまいました。</li>
<li>環境変数でタイムアウト時間が設定されているようなので、伸ばすことは可能そうなのですが、とりあえずは星の数を減らして試してみることにしました。</li>
</ul>
</li>
<li>1 万個ぐらいの星を描いたあたりで、PC が唸りを上げ始めた。<ul>
<li>GPU がフル回転を始めました。</li>
<li>あと普通にめちゃくちゃ重たくなっていたため、ここで心が折れました。</li>
</ul>
</li>
</ul>
<p>一応ある程度は描けていたので供養のためキャプチャを掲載しておきます。</p>
<img src="/images/2023/20230901a/image_2.png" alt="" width="1200" height="728" loading="lazy">

<p>なんか、星空って感じではないですね？</p>
<p>もしかしたら色や明るさを計算するロジックにバグがあるのかもしれませんが、心が折れたのでこれ以上は深追いしません。</p>
<h2 id="テクスチャを描いて貼り付ける方針に切り替える">テクスチャを描いて貼り付ける方針に切り替える</h2><p>Skybox に動的に星を描く方針は頓挫したし、とりあえず Shader を書いてみるという目的は達成したため、素直にテクスチャを描いて、それを貼り付ける方針に切り替えます。切り替えは大事。</p>
<h3 id="テクスチャを描く">テクスチャを描く</h3><p>まずはテクスチャを作成するための星のデータを用意します。</p>
<p>今回 VR プラネタリウムを作るにあたって、とりあえずは実際の星空を再現したいので、観測データを用いることにします。冒頭で星表というものを紹介しましたが、今回はその中でも、ヒッパルコス星表というものを使っていきます。ヒッパルコス衛星により取得されたデータを編纂したもので、12 万弱の星のデータが記録されています。NASA がデータを公開してくれているので、こちらから必要なデータを取得していきます。</p>
<p>HIP 番号（name）、赤経（ra）、赤緯（dec）、等級（vmag）、B-V 色指数（bv_color）を選択してダウンロードしました。そのままだと使いづらいので、以下コマンドなどで csv に変換しておきます。</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">cat</span> hip.txt | sed <span class="string">&#x27;1,5d&#x27;</span> | sed <span class="string">&#x27;s/ \+|/|/g&#x27;</span> | sed <span class="string">&#x27;s/| \+/|/g&#x27;</span> | awk -F <span class="string">&#x27;|&#x27;</span> -v <span class="string">&#x27;OFS=,&#x27;</span> <span class="string">&#x27;&#123;print $2,$3,$4,$5,$6&#125;&#x27;</span> &gt; hip.csv</span><br></pre></td></tr></table></figure>

<p>この csv をもとにテクスチャを描画するpython スクリプトを作成しました。</p>
<p>ざっくりこんな感じのことをしています。</p>
<ul>
<li>赤経・赤緯を度（degree）に変換して描画する位置を決定する。</li>
<li>等級と赤緯から画像上での星の大きさを決定する。<ul>
<li>本来星はものすごく遠いため、明るさによらず点として見えるはずですが、人の目の錯覚として明るいものは大きく見えたり、大気による散乱効果が明るいほど強いことなどを踏まえ、明るい星ほど大きく描画しています。</li>
<li>天球を平面のテクスチャで表現するため、赤道部分はそのままに、極地に近づくほど横に引き伸ばした描画とする必要があります。</li>
</ul>
</li>
<li>等級・B-V 色指数から各星の色・明るさを決定する。<ul>
<li>観測値である B-V 色指数から星の表面温度を推定、黒体を仮定して表面温度から RGB 値を算出しています。</li>
<li>等級が 1 変わると、2.5 倍明るさが変わるので、HSV 色空間における V 値が等級に応じて増減するようにしています。<ul>
<li>ただし、人の目が明るさ（暗さ）に慣れたり、カメラの露光時間を長くしたりすることで、絶対的な明るさと見かけの明るさは必ずしも一致しないことを考慮し、可変パラメータとしています。</li>
</ul>
</li>
<li>計算の根拠はスクリプト上に参考 URL を記載しています。</li>
</ul>
</li>
<li>ガンマ補正する。<ul>
<li>人間の目やカメラによる補正として、ガンマ補正ができるようにしています。こちらもパラメータは可変です。</li>
</ul>
</li>
</ul>
<p>スクリプトにより描画したテクスチャがこちらです。</p>
<img src="/images/2023/20230901a/texture3.9_2.5.png" alt="" width="1200" height="600" loading="lazy">

<p>高解像度画像に、小さな星の点を表示しているので、あまりきらびやかではないです。</p>
<h3 id="テクスチャを-Skybox-に適用する">テクスチャを Skybox に適用する</h3><p>テクスチャが生成できればあとは Unity に取り込んで、適切に設定するだけです。</p>
<p>まずは Import して、解像度を高めに設定しておきます。</p>
<img src="/images/2023/20230901a/image_3.png" alt="image.png" width="898" height="790" loading="lazy">

<p>そしたら Skybox 用のマテリアルを作成し、Shader を<code>Skybox/Panoramic</code>に、Mapping を<code>Latitude Longitude Layout</code>に設定し、テクスチャのところにインポートしたテクスチャを適用します。</p>
<img src="/images/2023/20230901a/image_4.png" alt="image.png" width="896" height="666" loading="lazy">

<p>最後にメニューの Window -&gt; Rendering &gt; Lighting から Lighting 設定を開き、Environment タブにある Skybox Material に作成した Material をセットします。</p>
<p>これで準備は完了です。VR 環境で見てみましょう。</p>
<img src="/images/2023/20230901a/output.gif" alt="output.gif" width="1024" height="1024" loading="lazy">

<p>うーん…とりあえず、星空っぽくはある…？（なんか、オリオン座の形おかしい気がする）。</p>
<h2 id="おわりに">おわりに</h2><p>ここまでやっておいてなんなんですが、思ったより微妙でした。<br>考えられる要因はいくつか有ります。</p>
<ul>
<li>解像度が足りていない。<ul>
<li>テクスチャの解像度・VR ヘッドセットの解像度ともに、現実世界には遠く及びません。そのためどうしても星というよりは、なんか光っている点、みたいに見えてしまいます。</li>
</ul>
</li>
<li>星の数が少ない。<ul>
<li>10 万強の星を再現しているとはいえ、当然宇宙に存在するすべての星を再現できているわけではありません。</li>
<li>特に、天の川銀河の外にある銀河の星や、星雲などのデータはヒッパルコス星表には含まれていないため、どうしても実際の星空とは異なってしまいます。</li>
<li>この問題を解決するには、実際に世界各地で撮った星景写真をつなぎ合わせてテクスチャを作るしかないかなあと思います。</li>
</ul>
</li>
<li>臨場感がない。<ul>
<li>これは現実のプラネタリウムにも言えることですが、やはり現地で自然に囲まれながら見る星空、というものに、言語化できない魅力があります。気温や風、音など、単に視覚情報に限らない様々な情報が多角的に私達を魅了しているのだと実感しました。</li>
<li>現実のプラネタリウムでは、この問題を、魅力的なナレーションや上映内容によって補っているのだと思います。</li>
<li>ゲームの背景など、脇役に据えるのであれば、このぐらいでも良いのかもしれません。</li>
</ul>
</li>
</ul>
<p>頑張った割にはこんなものか、というオチになってしまい悔しいですが、ともあれある程度のプラネタリウムを再現できたので、夏の自由研究としては良しとします。<br>ちなみに、今回はヒッパルコス星表のデータを使用しましたが、同じフォーマットでデータを追加することで、自由に星を追加できます。</p>
<p>・・・・・・・・</p>
<img src="/images/2023/20230901a/image_5.png" alt="image.png" width="1200" height="193" loading="lazy">

<p>せっかくなので-75 等星である、「スーパー明るい藤井星」を追加してみました。見てみましょう。</p>
<img src="/images/2023/20230901a/output2.gif" alt="output2.gif" width="1024" height="1024" loading="lazy">

<p>宇宙は、なんか亀裂入ったし光に包まれて終わりました。</p>
]]></content>
    <summary type="html">実は私、星を見るのが好きなので、天体望遠鏡を買ったり、星を撮るためにカメラを買ったりしています。せっかくならいい環境で見たいので、南は沖縄から北は北海道まで星を見に行っています。（海外も行きたい）</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
    <category term="宇宙" scheme="https://future-architect.github.io/tags/%E5%AE%87%E5%AE%99/"/>
  </entry>
  <entry>
    <title>究極の？トランザクションスクリプト用言語Verse</title>
    <link href="https://future-architect.github.io/articles/20230324a/"/>
    <id>https://future-architect.github.io/articles/20230324a/</id>
    <published>2023-03-23T15:00:00.000Z</published>
    <updated>2023-03-23T15:00:00.000Z</updated>
    <author><name>澁川喜規</name></author>
    <content type="html"><![CDATA[<p>Unreal Engineで有名なEpic Gamesが、現在開催中のGDC（Game Developer Conference）でVerseの詳細を解説しており、その動画が公開されています。</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/teTroOAGZjM?start=22486" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

<p>ドキュメントもすでに公開されています。</p>
<p>https://dev.epicgames.com/documentation/en-us/uefn/verse-language-reference</p>
<p>現在処理系は、Unreal Editor for Fortnite(UEFN)の中に組み込まれているようですが、Windowsにしか対応していません。ちょろっと動かした程度で、まだコードをしっかり書いてはなくて、プレゼンを見た感想で書いているので、いろいろ間違ったところとかもあるかもしれません。そういうのはご指摘いただいたり、Pull Request（ブログの上の鉛筆アイコンで送れます）を出してもらえれば、と思います。</p>
<img fetchpriority="high" src="/images/2023/20230324a/image.png" alt="image.png" width="1200" height="505">

<p>UEFNのVerseボタンを押すと、こんな感じでVSCodeがぴょこっと起動します。</p>
<img src="/images/2023/20230324a/スクリーンショット_2023-03-23_18.57.26.png" alt="スクリーンショット_2023-03-23_18.57.26.png" width="1200" height="804" loading="lazy">

<p>Verseはメタバース用の言語です。メタバースではすでにある3Dの空間の上に、いろいろな企業や個人がコンテンツを作っていきます。一般的なゲームと違い、どのような3Dモデルがあるか、どのような動き（プログラム）があるかは事前には決まりません。後から追加されたコンテンツをロードしてユーザーが実行するという、スクリプト言語が必要であり、そのために作られた、とあります。</p>
<p>将来的にはオープンソースになり、ブラウザでも動くことを目指しているようです。</p>
<p>10億人規模のユーザーがプレイしている、今まさに動いている環境に後から100万人規模の開発者がコンテンツを作っていくという、そういう世界観です。ある意味、Smalltalkが目指していた世界のさらに先、という感じですね(おっさんにしか伝わらない例)。</p>
<h2 id="基本的な言語設計">基本的な言語設計</h2><p>関数型言語、オブジェクト指向、命令型のエッセンスを集めて作られた言語となっています。12月に発表されたときは関数型言語、というのを押し出した感じの紹介になっていて、特に追いかけてなかったのですが、色んなパラダイムをバランスよく取り入れている感じがしました。</p>
<p>基本的な設計は今時の言語っぽい感じです。</p>
<ul>
<li>mutable&#x2F;immutable</li>
<li>静的型つけ(TypeScript的な後置)</li>
<li>構造体</li>
<li>クラス、インターフェース(継承も)</li>
<li>ジェネリクス(クラス、関数)</li>
<li>Pathと呼ばれるネームスペース（Javaのpackageっぽい）</li>
</ul>
<p>タプルとかもあるし、配列、辞書もあって、タプルで関数の引数をまとめて渡したり、デフォルト引数があったり。</p>
<h3 id="関数型っぽい要素">関数型っぽい要素</h3><p>forループ構文は、他の言語にも良くある構文に一見見えますが、forとは見ないで、C#のLINQだったりJavaのストリームだったり汎用リスト処理っぽいもの、と考えた方が良さそうです。</p>
<p>シンプルな例としては、配列の中の要素に対するループだけど、追加でフィルタを指定できたりするところは面白いですね。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="keyword">for</span> (X : SomeArray; X &lt;&gt; <span class="number">100</span>):</span><br><span class="line">    Print(X)</span><br></pre></td></tr></table></figure>

<p>なんかすごいループの例がこれです。マインスイーパの隣接するセルの爆弾の数のカウントを1つのループでするそうな。<code>Y-&gt;CellRow:Cells</code>はループごとに、インデックスを<code>Y</code>に、値を<code>CellRow</code>にアサインするようです。その下の<code>X-&gt;Cell:CellRow</code>はそれを<code>X</code>と<code>Cell</code>にやっていて2重ループになります。そのX, Yに対して隣接する9つのX, Y（それぞれ-1から1のオフセット）の組みを次の2行で作り出しており、4重ループになりました。その後は<code>Cell&lt;&gt;AdjacentCell</code>で自分自身をのぞき、　<code>AdjacentCell.Mined?</code>で爆弾があるセルだけにフィルタリングするという・・・値からリストを作り出したりしつつ多重ループをしていくという流れですね。このあたりは関数型を意識した機能になっているように見えます。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="keyword">for</span>:</span><br><span class="line">    Y-&gt;CellRow:Cells</span><br><span class="line">    X-&gt;Cell:CellRow</span><br><span class="line">    AdjacentX:=X<span class="number">-1.</span>.X+<span class="number">1</span></span><br><span class="line">    AdjacentY:=Y<span class="number">-1.</span>.Y+<span class="number">1</span></span><br><span class="line">    AdjacentCell := Cells[AdjacentY][AdjacentX]</span><br><span class="line">    Cell&lt;&gt;AdjacentCell</span><br><span class="line">    AdjacentCell.Mined?</span><br><span class="line"><span class="keyword">do</span>:</span><br><span class="line">    <span class="built_in">set</span> Cell.AdjacentMines += <span class="number">1</span></span><br></pre></td></tr></table></figure>

<h3 id="Fail">Fail</h3><p>if文も他の言語とちょっと違っていて、成功・失敗の可能性のある式に対して適用する、ということになっています。次の式は、インデックスが配列の範囲に入っていて成功したときだけ後ろが実行される、という感じです。今時の他の言語だと、null安全とかで、「nullになっていない」という条件を媒介にして「失敗しないコード」を書きます。しかし、Verseだと、失敗した場合は、関数型言語でいうところの空配列に対してリスト処理する（実行されない）ぐらいの軽い感覚で、アプローチは違いますが、安全なコードをシンプルに書けます。こういう割り切りは面白いな、と思いました。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="keyword">if</span> (Element := MyArray[Index]): Log(Element)</span><br></pre></td></tr></table></figure>

<p>これらに近いのは、Reactの<code>Suspense</code>とか<code>ErrorBoundary</code>ですかね。正常ケースで書いていくが、未ロード時とか失敗時にはこれらのコンポーネントが拾ってフォールバックします。</p>
<h2 id="トランザクション">トランザクション</h2><p>ifは他の言語と違うと紹介しましたが、前のFailはまだまだ序の口です。これには述語的な条件文が書けます。この場合、実行後にこの条件にマッチしないと、それまでに行った操作が巻き戻るらしいです。ドキュメントによると、ファイルI&#x2F;Oやログ出力などの言語の外へのインタラクションとか、no_rollbackがついた処理以外にはこれが適用されるとのことです。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="keyword">if</span>:</span><br><span class="line">    DoSomeEffect()</span><br><span class="line">    X &lt; <span class="number">100</span></span><br><span class="line">then:</span><br><span class="line">    SomethingElse()</span><br></pre></td></tr></table></figure>

<p>これはプレゼンテーションで紹介された言語の基盤となるアイデアの2番目にも書かれています。100万人規模の開発者が並行性を管理する唯一の方法とあります。確かに、絶対成功するのであれば、Goで採用されているCSP(Communicating Sequential Process)はパフォーマンスを維持しつつ並行処理を進めるには最適です。あるいは、やりとりの方向性が一方通行であっても問題はないでしょう。しかし、失敗時のロールバックを別のプロセスに依頼というをミスなく組み込むのは困難です。</p>
<img src="/images/2023/20230324a/スクリーンショット_2023-03-23_18.11.04.png" alt="スクリーンショット_2023-03-23_18.11.04.png" width="1200" height="716" loading="lazy">

<p>ゲームの場合は、たくさんのオブジェクトが並行で動いていて相互に複雑にインタラクションしますので、こういう方向性になっているんじゃないかと思います。ゲームは速度が命、と思われるかもしれませんが、「ボタンを押した」「物体同士がぶつかった」「ビヘイビアツリーの思考ルーチンで何かやることを決めた」みたいなイベントはそれほど多くは起きません。そして、それらによって決まったアクションを毎フレーム実行する（たくさんの破片が回転しながら飛んでいくなど）部分では大量に並行で動作します。このトランザクションは前者のコントロールフロー部分で使い、後者の大量にCPU使って効率を上げられるところはエンジン内部で・・・みたいな使い分けなんじゃないかと思います。</p>
<h2 id="非同期周りの機能が面白い">非同期周りの機能が面白い</h2><p>ゲームだと、同時に発生するさまざまな事象を同時に扱う必要があります。格闘ゲームの開始前のシーケンスを見ても、1P側のキャラクターのアニメーションが再生されて、その後2P側のアニメーションも再生されます。ただ、ボタンを押すとスキップできるよ、とか、ゲージ類が移動アニメーションしながら画面にカットインするとか、そういうやつです。フレームを跨いで処理を記述する必要があり、たいていゲームエンジンには、直列だったり並列のイベントを扱う仕組みがあったりします（以下はCocos2d-xの例）。</p>
<img src="/images/2023/20230324a/スクリーンショット_2023-03-23_15.23.46.png" alt="スクリーンショット_2023-03-23_15.23.46.png" width="1200" height="678" loading="lazy">

<p>Verseでは同期のblockも含めて、5つの制御構文があります。JavaScriptの<code>Promise</code>と一部似ていますね。<code>sync</code>は<code>Promise.all()</code>相当です。<code>Promise.race()</code>相当は<code>rush</code>で、<code>race</code>は別物な点は要注意です。</p>
<p>先ほどのFail&#x2F;トランザクションとの組み合わせでゲームのコンテンツを作る事例が動画にあります。1本のスクリプトだけど、プレイヤーーが特定のエリアに行ったら敵がでる、火が燃える、安全なエリアに到達したら敵を削除、ヘリに乗ったらアニメーション再生して完了など、ユーザーの体験に従ったスクリプトになっています。この複雑なユーザー体験を駆動する部分に、これらの非同期のブロックが活用されています。</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/teTroOAGZjM?start=24695" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

<p>Cypressのテストコードがこれに近いものを目指していますが、JavaScriptの上に作り上げているので通常の構文と組み合わせられなくて変数の取り扱いがちょっと不便だったりしますが、これは最初からこの非同期をうまく使うことを考慮しているので、なんかエレガントですね。</p>
<h2 id="トランザクションスクリプト">トランザクションスクリプト</h2><p>エリック・エヴァンスのDDD本では、オブジェクト指向型のドメインモデルと対比してトランザクションスクリプトはダメだ、と言っています。</p>
<blockquote>
<p>利口なUIについて議論したのは、レイヤ化アーキテクチャのようなパターンが、ドメイン層を隔離するために必要になる理由と、それがどういう時なのかを明確にするためだけだ。利口なUIとレイヤ化アーキテクチャとの中間には、他にも解決策がある。例えば、Fowler（2002）が説明しているトランザクションスクリプト（TRANSACTIONSCRIPT）は、ユーザインターフェースをアプリケーションから分離はするが、オブジェクトモデルは提供しない。<br>:<br>他の開発スタイルにもそれなりの存在意義があるが、複雑さと柔軟性において、さまざまな限界があることを認めなければならない。ドメインの設計を分離し損ねると、状況によっては実に悲惨なことになりかねない。アプリケーションが複雑で、モデル駆動設計に取り組むつもりなら、歯を食いしばり、必要な専門家をそろえた上で、利口なUIを避けるべきである。</p>
<p>Eric Evans. エリック・エヴァンスのドメイン駆動設計 (Japanese Edition) (pp.76-77). Kindle 版.</p>
</blockquote>
<p>オブジェクト指向はそれぞれのオブジェクトが責務を果たせば、すべてのタスクが正しく完了するという考え方です。センサーオブジェクトが何か信号を得たら、それをオブザーバーオブジェクトが検知して、異常かどうか判定するストラテジーオブジェクトが状態を・・・というように、責務ごとに分担します。DDDはこれを推しています。しっかりしたモデルができれば、新しい機能を追加しようとした場合に、オブジェクトが勝手にやってくれる（ようにすでにプログラミングされている）ので、少ないコードで重複を減らせる、みたいな考えなんじゃないかと思います。</p>
<p>ですが、業務はまずみんなフローで考えます。オブジェクトにしてしまうと、そのフローは複数のメソッドに分かれてしまいます。ステートによって条件分岐が変わるとすると、そのステートが変わるイベントも探して、1本の業務フローがようやく見つけられる、ということになります。</p>
<p>現在の世の中も、ウェブフロントエンドの関数型を取り入れたUIフレームワークが流行ったりして、オブジェクト指向でモデリングというのとは別の流れを作っています。もちろん、オブジェクト指向は有用なことには変わりはないのですが、どちらかというと、配列クラスとかリクエストクラスとか、便利な部品を作るところがオブジェクト指向です。それらを活用してアプリケーションの流れを作る、変化が大きい部分に関数型や手続型を組み合わせる、という流れが一般的になってきているように思います。</p>
<p>エンプラ開発でも、フレームワーク的なレイヤーや共通部品はオブジェクト指向で作っても、SQLを使ってDBの読み書きをして、それをもとに別のクエリーを発行するとか、DBが中心でオブジェクト指向でモデルってあんまり作らないですよね。オブジェクトを作って元気にN+1してもいいんですけど。</p>
<p>Verseは他の言語などをしっかり研究している、とプレゼンの最初の説明にもありましたが、まさに今の世の中が目指していて既存の言語の上に作られたフローをゼロベースから最適な形で実現した言語と言えます。</p>
<h2 id="まとめ">まとめ</h2><p>Unreal Engineは、新しいビジョンを作り出し、それを実現するための機能を載せてきます。１２月の発表では、このVerseはOSSであり、Unityなどの別のゲームエンジンでも使えるオープンな標準にしていこう、としています。とはいえ、おそらく業務システムに使えるようになるかどうかというと、そういう未来はすぐには来ないかもしれません。ですが、Verseが解決しようとしている問題とか、それに対するアプローチは、ゲーム業界ではない人にも刺激があるんじゃないでしょうか？ 少なくとも、僕はかなり刺激を受けました。今までの言語とかフレームワークでちょっといまいちだな？ と思っていた部分も鮮やかに解決されていたりして、別の言語の開発でも参考にしたくなりますよね？（トランザクションは難しいですが）。今後もちょくちょく追いかけてみようと思います。</p>
<img src="/images/2023/20230324a/スクリーンショット_2023-03-23_19.52.29.png" alt="スクリーンショット_2023-03-23_19.52.29.png" width="1200" height="626" loading="lazy">

<ul>
<li>参考: Haskellのイベントで発表された言語の紹介</li>
</ul>
<iframe width="560" height="315" src="https://www.youtube.com/embed/832JF1o7Ck8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <summary type="html">Unreal Engineで有名なEpic Gamesが、現在開催中のGDC（Game Developer Conference）でVerseの詳細を解説しており、その動画が公開されています。関数型言語、オブジェクト指向、命令型のエッセンスを集めて作られた言語となっています。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="UnrealEngine" scheme="https://future-architect.github.io/tags/UnrealEngine/"/>
    <category term="ゲーム制作" scheme="https://future-architect.github.io/tags/%E3%82%B2%E3%83%BC%E3%83%A0%E5%88%B6%E4%BD%9C/"/>
  </entry>
  <entry>
    <title>バーチャルデスクトップ環境の現状と、VRの個人的な感想</title>
    <link href="https://future-architect.github.io/articles/20221031b/"/>
    <id>https://future-architect.github.io/articles/20221031b/</id>
    <published>2022-10-30T15:00:01.000Z</published>
    <updated>2022-10-30T15:00:01.000Z</updated>
    <author><name>井上圭</name></author>
    <content type="html"><![CDATA[<p>こんにちは。CSIGの井上です。</p>
<p>秋のブログ週間2022 の1本目です。</p>
<p>私はしばらく前からVRに興味があり、Oculus Go（2018&#x2F;05-2020&#x2F;12）から使っています。MetaのHMDは、最近Oculus Quest Proが発売され、来年2023年後半にはOculs Quest3が発売される可能性が高いという、VRヘッドセットとしては定番の製品です。最近はそこそこVRを利用したサービスや製品が増えましたが、まだ一般的という領域までは広がっていません。ヘッドセットという日常で使わないものが必要な点で、普及しないのでしょう。</p>
<p>モノが普及するには、「人間の欲望を刺激するか業務で使うか」だと思うので、今回は一般の業務利用で使えそうな、バーチャルデスクトップ環境についてお話しをすることで普及の一助になればと思い、書いてみました。</p>
<ul>
<li>本稿の注意事項</li>
<li>バーチャルデスクトップ環境とは？</li>
<li>Immersedの場合</li>
<li>VRの個人的な感想</li>
<li>今後のVRの展望</li>
</ul>
<h2 id="本稿の注意事項">本稿の注意事項</h2><p>本稿は、これを書いている井上個人の見解であり、Futureグループとしての見解ではありません。<br>私個人の見解を共有することで、この分野の興味を持っていただいたり、議論のヒントになればと思い、公開します。</p>
<ul>
<li>プログラム言語など違い、発展途上で周辺環境が変わりやすい分野と考えます。その為、気が付けば常識が変わっている、という事は十分あり得ます。</li>
<li>体験しない事には議論ができない分野でもあるため、まずは興味を持つ&#x2F;体験することが重要と考えます。</li>
<li>VR関連に関する読み物、という感覚でご覧ください。</li>
</ul>
<p>あと、この記事を書くことで、会社でバーチャルデスクトップ使えるようにならないかな…、という下心もあります（後述のセキュリティ問題を気にしないといけないので、難しいかも）。</p>
<p>追加説明が必要そうな単語は、「（※）」を付けており、本稿最後の章に補足説明を記載しています。</p>
<h2 id="バーチャルデスクトップ環境とは？">バーチャルデスクトップ環境とは？</h2><img fetchpriority="high" src="/images/2022/20221031b/image.png" alt="image.png" width="720" height="720">
(meta Horizon Workrooms)

<p>PC作業をVR上で行うための環境、と言えます。VR空間にディスプレイを配置し、そこでいつも通りPC作業をする感じです。</p>
<p>バーチャルデスクトップの利点としては以下が挙げられます。</p>
<ul>
<li>物理的なモニタが不要になる</li>
<li>作業環境を自由に変更できる</li>
<li>ヘッドセットで視界が奪われる為、集中力が高まる</li>
</ul>
<p>物理的なモニタが不要になる点ですが、PCとヘッドセットをリンクすることで、VR上に仮想モニタを含むデスクトップ環境を表示します。アプリケーションによりますが、複数モニタを仮想的に配置でき、外付け物理ディスプレイを持っていないノートPCでも 3画面作業 ができたりします（但し、一般的には解像度がFHD程度が限界。ヘッドセット側の解像度や処理負荷に依存する為）。屋外でFHDを3-4画面を使った作業が、ヘッドセットのみで実現できます。</p>
<p>作業環境の自由な変更については、例えば「喫茶店」「森の中」「ビーチ」「映画館」「宇宙」などの周辺風景を設定できます（但し、アプリケーションによる）。同時に、環境音も実装されていることが多いので、「喫茶店でBGMを聞きながら」や、「森の別荘で鳥のさえずりを聞きながら」で作業できたりします。出社して仕事をしているが気分転換に喫茶店で少し作業する、のような感覚で作業環境を変えられます。</p>
<p>そして集中力が高まる件ですが、リアルの視界がほぼ奪われ、VRとして作成された必要な情報のみが目に入ってくるので、集中力が途切れづらいという利点があります。自宅のごちゃごちゃした部屋でリモートワークをするのと、（見た目だけは）山小屋で暖炉の音を聞きながら仕事をするのでは、雑念の入り方が違いますよね。</p>
<p>ワーケーションで使えれば、ショルダーハッキング（※）の心配をしなくて済むので、便利なものだと思います。</p>
<p>そんな利点のあるバーチャルデスクトップ環境ですが、例えばOculus Quest2で使えるアプリケーションだと以下があります。</p>
<ul>
<li>Immersed (https://www.immersed.com)</li>
<li>VertualDesktop (https://www.vrdesktop.net/)</li>
<li>BigScreen (https://www.bigscreenvr.com/)</li>
<li>Meta Holizon Horkrooms (https://www.meta.com/jp/work/workrooms/)</li>
<li>etc..</li>
</ul>
<p>この中で仕事やプログラミング等の作業で使うなら、Immersedが使いやすかったので、これを例に紹介します。その他のアプリケーションも数年前から格段に進化しているのですが、例えば「みんなで集まって映画を見る」のように、作業用途には合わないものもあります。</p>
<p>Immersedをとり上げますが、特定の製品をとり上げるというより、「プログラミングの話をするときにGo言語を例に話す」のような説明のための手段や実装例として取り上げています。他の製品でも同様のことはおそらくできるはずです。</p>
<h2 id="Immersedの場合">Immersedの場合</h2><p>Immersedで便利な機能は、以下のようなものがあります。</p>
<img src="/images/2022/20221031b/image_2.png" alt="image.png" width="432" height="432" loading="lazy">

<ul>
<li>仮想モニタ機能<ul>
<li>実機にモニタが無くても、仮想的にモニタを追加できます。</li>
<li>他のアプリケーションだと、実機に接続されているもののみ、1枚だけのみ、というものが多く、ビデオカードなしに複数枚モニタを追加できるものは現時点ではImmersedのみのようです。</li>
<li>但し、モニタ数が多くなると負荷が高くなる、FHD(1920×1080)に抑えられてしまう、という制限はあります。リアルで4Kモニタを付けていても、FHDになります。</li>
<li>解像度は処理負荷に直結し、処理負荷増大はフレームレート落ちを招き、それにより実用に耐えなくなるので、仕方がないと思われます。</li>
</ul>
</li>
<li>仮想カメラ機能<ul>
<li>VR上でバーチャルなWebカメラを利用できます。画像3枚目は、zoomに参加している例です。</li>
<li>これにより、Webオンラインミーティングにバーチャルデスクトップ環境で参加した際に、アバターを表示できます。<ul>
<li>VR上で会議をすれば全員アバターでコミュニケーションを取れますが、相手がヘッドセット等を持っていない場合は、ZoomやGoogle meetやMicrosoft Teamsのようなものを使う事になると思います。その際に違和感なく（？）参加者画面を表示できます。</li>
</ul>
</li>
</ul>
</li>
<li>部分的パススルー機能<ul>
<li>VR上でデスクトップを操作する際、普通は物理キーボードやマウスを見ることができません。</li>
<li>今までは「特定製品であれば自動認識して、VR上に表示できる」という手法が探られていましたが、現在は「VR上でキーボードがある部分だけパススルー（※）で現実を見せる」という方法で物理キーボード等を見ることができるようになりました。画像1,3枚目下側の黒い長方形の部分が、パススルー表示されている部分です。スクリーンショットではパススルー内容は記録されないようです。<ul>
<li>自作分割キーボードは、カメラで認識してそのオブジェクトをVR上に表示する、のは至難の業です。それであれば、キーボードがある部分だけパススルー出来る機能の方が簡単に問題を解決できますね。</li>
</ul>
</li>
<li>慣れていれば「ブラインドタッチや勘で探り当てる」や「ヘッドセットの鼻付近の隙間から手元を見る」などで対処できますが、パススルーで見えたほうが分かりやすいですね。</li>
</ul>
</li>
</ul>
<p>これらの機能を組み合わせ、VR上のカフェでBGMを聞きながら3枚モニタでこの記事を書いていたりします。</p>
<h3 id="使い勝手">使い勝手</h3><p>「4Kモニタを使わないと見ることができないような多量なデータを処理する作業」には向いていませんが、「通常の作業」には支障が無いと思います。WordやExcelやWebブラウズ、メール確認などはそれほど大きい解像度は無くても大丈夫だと思います。</p>
<ul>
<li>モニタを自由に複数枚配置できるので、首や目に優しい気がします。<ul>
<li>解像度はFHDですが、奥行き&#x2F;上下&#x2F;傾き&#x2F;湾曲 を制御できます。</li>
</ul>
</li>
<li>集中力が高まる、かもしれません。<ul>
<li>私の自宅のリモートワーク作業部屋はデバイスで溢れているので、ヘッドセットでそれらを見ないで済むことで集中できています。部屋がきれいな人は…知りません。</li>
<li>競走馬もそうですが、視界の制限が集中を促すと考えます。<ul>
<li>私は土日にプライベートの作業をすることが多いのですが、”09:00に始めて、気がついたら17:00だった”という事も多々あります。それくらい集中出来ました。</li>
</ul>
</li>
</ul>
</li>
<li>気分転換がしやすい。<ul>
<li>いつもはカフェで作業しますが、時々、洞窟や山小屋に変えることで、バーチャルワーケーション気分を味わえます。必要なら、Richo THETA（360度カメラ）で撮った画像なども背景にできます。</li>
<li>これを緊急作業等の泊まり込み残業に応用すると、バーチャル帰宅もできるはずです。最近はVR睡眠（※）という話もありますが、本稿の話題ではないので割愛します。</li>
</ul>
</li>
</ul>
<h2 id="VRの個人的な感想">VRの個人的な感想</h2><p>バーチャルデスクトップが流行するかは、バーチャルデスクトップだけの話では無く、それを構成する要素である「VR」自体の普及に依存すると考えられます。<br>この章では、バーチャルデスクトップにとどまらず、VR自体について考えてみたいと思います。<br>尚、あくまで筆者の個人的な感想&#x2F;考えとなります。</p>
<p>バーチャルデスクトップ、ひいてはVRが普及しない原因を考えてみると、以下のような原因がありそうです。</p>
<ul>
<li>VR利用自体が、非日常の活動<ul>
<li>HMDを付けるという行為が、例えばスマホを使う程度の心理的障壁にならないと、VRが流行ることは無いような気がしています。</li>
<li>HMDを付ける手間と、それにより得られる利便性が、今は均衡が取れていないため使われていないと思われます。</li>
</ul>
</li>
<li>VR酔いが存在する<ul>
<li>FPSゲームで酔うように、VR利用でも酔う事があります。これは、視覚による情報と三半規管による情報が乖離していることで発生すると考えられます。「乗り物酔い」や「3D（ゲーム）酔い」等と同じです。</li>
<li>バーチャルデスクトップ利用であれば、この部分は大幅に影響が無いと考えられます。<ul>
<li>VR酔いをする場合は、画面は大幅に動いている（&#x3D;加速度等が発生すると脳は認識している）のに実際は一切動いていない為、視覚と三半規管の認識にずれが生じるからと考えられます。</li>
<li>バーチャルデスクトップの場合、椅子に座って利用する為に下半身が固定されており、可動域は三半規管の認知範囲に収まっています。その為、認知差はほぼなく、比較問題として酔いづらいと考えられます。</li>
<li>但し、処理能力不足等でフレームレートが低い場合、酔いは発生します。私は酔いました。フレームレートが低く画面が断続的に描画されることで、描画間の加速度等の認知で問題が発生すると思われます。故に、バーチャルデスクトップにおいては、適切な解像度や仮想モニタ数でフレームレートが落ちない程度にする必要があります。</li>
</ul>
</li>
</ul>
</li>
<li>社会が対応していない<ul>
<li>例えば、今働いている会社の情報システム部に「明日からバーチャルデスクトップで作業したいので、通信許可をしてください」といっても、許可されることはほぼほぼ無いのではないかと思います。特に情報漏洩対策等でネットワークの制限等を行っている組織では、限りなく不可と思われます。</li>
<li>これはそもそも仕方のない事で、どのような通信が行われるのか、それによる会社資産への影響はどの程度か、セキュリティ的なリスクは何があるのか、などが通常は知らないし考えたことも無いからですね。</li>
<li>その為、通信要件等を把握する、利用に際したリスクを洗い出す、等の明確化が必要です。そしてこれらを検討すること自体がコストなので、会社として「使ったらよい事がある」（コストを下げられる、作業効率が上がる、等）ことを認識させる必要がありそうです。故に、会社と関係ない場面で使い有用性を広める、という活動で「そういうものがあるんだ」という認識を広めることが重要かもしれません。そしてこの記事がそれだったりします。</li>
<li>その点、必要と認識された業務範囲や業界では、普通に利用されています。<ul>
<li>例えば、研修分野などは積極的に活用されていると思われます。溶接であったり、自動車保険の被害査定研修であったり、医療での手術研修などもあります。実際に物理で実施するよりも安全かつ安価に実施できるという利点があるため、利用されています。</li>
<li>これはあくまで「研修」という範囲であるため、セキュリティ的に侵害されても会社資産情報が漏洩することは無い、などの分離がされているためとも思われます。その点、バーチャルデスクトップは社員端末の代替えとすれば、難しいことも確かです。</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="VRとセキュリティ">VRとセキュリティ</h3><p>前述の通り、VRでもセキュリティ観点で物を考える必要がありそうです。VRでのセキュリティは、一般的なコンピュータシステムのセキュリティと、VR特有のセキュリティの両面から対応する必要があると思われます。</p>
<ul>
<li>フローとしてのセキュリティ<ul>
<li>VRで何かを実現する際の、実現したいことに対するスキームやフロー自体のセキュリティ対策が必要です。</li>
</ul>
</li>
<li>実装としてのセキュリティ<ul>
<li>上記フローを実装した際の、セキュリティ対策が必要です。</li>
<li>例えば…<ul>
<li>利用する環境自体のセキュリティ<ul>
<li>UnityやUnrealEngineなどの利用技術のセキュリティ対策が必要です。利用アプリケーションのバージョン管理やセキュリティ更新などが含まれます。</li>
<li>VRプラットフォームとしてのClusterやVRChatなどのサービスのセキュリティレベルも検討する必要があります。サービス提供側の設計に依存します。<ul>
<li>認証認可、保持する情報、侵害リスク、等の検討が必要かもしれません。例えば、aws自体はセキュリティ機能は持っているが、ユーザが設定し忘れた&#x2F;設定ミスした、のような状態が無いようにする必要があります。</li>
</ul>
</li>
</ul>
</li>
<li>環境上での実装のセキュリティ対策が必要です。<ul>
<li>利用技術やプラットフォーム上で、自らが構築したもののセキュリティ対策は、自分自身で実施する必要があります。<ul>
<li>Webシステムで言えば、自作のWebアプリが該当します。前述の環境自体は、ミドルウェアやOS層に該当します。</li>
<li>例えば、侵入不可に設定し忘れた領域、他者からVR上で入力した情報が見えてしまう設計、VR上での資産に対するセキュリティ、等が考えられます。これらはおそらく自動検査は難しいと思われ、ペネトレーションテストのようなデバッグ作業が必要になると思われます。</li>
</ul>
</li>
</ul>
</li>
<li>通信経路におけるセキュリティ<ul>
<li>どこからどこへどのような内容が送受信されるのか、暗号化は適切なレベルなのか、等の通信のセキュリティ対策も必要です。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>利用者自身へのセキュリティ<ul>
<li>利用者の物理的な安全保護対策が必要です。<ul>
<li>視界がヘッドセットにより奪われる為、周囲への物理的な安全確保が必要となります。<ul>
<li>利用環境の適切な設計、利用者外人員での監視、等で保護する必要があります。</li>
<li>自宅リモートワークなら自宅の安全性に依存、会社オフィスであればオフィス内での安全性に依存しています。宅外リモートワークやワーケーション時に注意が必要です。</li>
<li>保護に関しては、怪我等もありますが、悪意を持って接触される可能性も考慮が必要です。</li>
</ul>
</li>
</ul>
</li>
<li>利用者への心理的な保護対策が必要です。<ul>
<li>意図をもって、利用者の認知を歪ませる&#x2F;誤認させる状況への対処が必要と思われます。HMDで表示するVRや、利用者への環境に対する働きかけなどが想定されます。</li>
<li>これらはおそらく心理学などの分野と強調する必要もあるかもしれません。</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="今後のVRの展望">今後のVRの展望</h2><p>VRの文脈でメタバースが語られることも多いですが、メタバース自体は「体験を得るための”手段”」までは規含まれていないと考えます。メタバースに参加する際、iPad等で2Dとして参加する（表現上は、3Dを2Dで描画している）というのは割と普通かと思いますし、VRでフルトラッキング（※）で参加する人もいます。参加コストとしては2D描画となる、PC&#x2F;タブレット&#x2F;スマホでの参加が大多数と思われます。故に、メタバースが一般化&#x2F;進化しても、VRが同時に一般化するとは限らないです。同じメタバース内でも、2D&#x2F;VRでは得られる体験が異なるため、メタバースとVRは切り離して考えてもいいかもしれません。</p>
<p>一部とはいえVRが浸透してきたのは、機材の低価格化&#x2F;軽量化もあると思われます。今まではハイエンドPC＋外部トラッキング装置＋いろんなケーブルで数十万だったのが、Oculus Questにより5万円台で「HMD単体で使える」ようなりました。また、Googleカードボード（スマホを使った簡易VR）もありました。今後は、求められる機能的&#x2F;性能的には5万円台より下がることは無いような気がするので、普及するには「利用したいと思えるコンテンツが増える」「使った方が有利である状況が増える」事が増える必要があります。ハードウェア的にはフェイストラッキングやアイトラッキングも活用されていくようです。</p>
<p>会社の通常業務でVRが使えると、普及するかもしれません。複数のモニタを使う人達は、バーチャルデスクトップ環境を使う事で「物理モニタ」という資産が不要になりますし、モニタ設置スペースも不要になります。また、作業環境を変えられるので、VRリモートワークも可能です（そして、残業時のVR帰宅も…）。社員を物理的な場所から解放する、という点では良いと思うのですが…</p>
<p>現状では「日常使い」が一般的に難しいので、日常生活に普及していくのは難しいと思われます。しかしながら特定分野では着実に実績を伸ばしているため、用途が見つかれば突然一部に普及する、という可能性はありそうです。VRはあくまで手段であり、その手段が有効である状況が発生すれば普及しそうです。日常が便利になるか&#x2F;楽しくなるか、という点で興味があるので、引き続きVRやメタバースに注力していこうと思います。</p>
<h2 id="用語とか">用語とか</h2><ul>
<li>ショルダーハッキング：<ul>
<li>画面やキーボードを肩越しにのぞき込んで情報を搾取する方法。VRであれば、ヘッドセット内に表示されるので画面ののぞき込みは防げる。キー入力はVR上に表示されるソフトキーボードを利用することで、のぞき見はされない。</li>
<li>ヘッドセットを利用して作業する場合、物理的に不審なことをされない場所を選ぶことも重要。ヘッドセットで視界を完全に塞がれるので、何かをされないような環境（管理者のいるコワーキングスペース等）に身を置く必要がある。</li>
</ul>
</li>
<li>パススルー：<ul>
<li>ヘッドセット外部の映像を、VR上に表示すること。</li>
<li>Oculus Questの場合は、低解像度&#x2F;モノクロの外部カメラがヘッドセットについており、その映像をVR上に透過表示している。</li>
<li>Immersedの場合、キーボードがある範囲のみをパススルーで表示する、任意の一部分だけパススルーする、全体をパススルーする（低解像度&#x2F;白黒の周辺風景にモニタを浮かばせる）を複数選択できる。</li>
<li>私の場合、キーボード～トラックボールの並びをパススルー表示、ハンドトラッカーをノートPCのタッチパッド上に置いているので部分的にパススルー、という利用をしている。</li>
</ul>
</li>
<li>VR睡眠：<ul>
<li>HMDを装着したまま、VR空間で寝ることを指す。</li>
<li>睡眠だけというより、他者との睡眠迄の空間共有を楽しむことが多いようだ。泊りの旅行、パジャマパーティー、等に類する行動に近い。VRChatで行われることが多いようだ。</li>
<li>研究結果として、VRは不眠症の症状を改善する、というものもあるようだ。但し、HMD自体が睡眠に最適化されていない為、慣れないとストレスになる。<ul>
<li>Quest2などは外部カメラにより6DoFを実現しているため、”寝室で電気を消す”状況だとトラッキングができなくなる。HMDの遮光性を利用して、明かりをつけたまま寝ることになる。</li>
</ul>
</li>
</ul>
</li>
<li>フルトラッキング：<ul>
<li>一般的にHMDを付けてVRを利用する際は上半身だけのトラッキングを利用しているが、下半身を含めた体全体の動きをトラッキングすることを、フルトラッキングという。</li>
<li>Quest2の場合は、手先のトラッキング（ハンドコントローラ、若しくは外部カメラによる手の認識）とHMD自体の6DoF（The six degrees of Freedom:forward&#x2F;back,up&#x2F;down,left&#x2F;right,pitch,yaw,rollの6自由度）で認識している。その為、例えば肘は手の動きと胴体から推定されているし、下半身は移動と上下動で推定されている。</li>
<li>下肢などに複数のセンサーを設置する&#x2F;外部からカメラなどで読み込む事で、全身の動きをトラッキングする（フルトラッキング）。</li>
<li>ただ、VR自体の一般用途は会議であったり会話によるコミュニケーションであるため、下半身のトラッキングが必須となる場合は限定されると思われる。現時点では、フルトラッキングの方が表現力が上がるというものであり、無くてもコミュニケーション上は問題ないと思われる。</li>
</ul>
</li>
</ul>
]]></content>
    <summary type="html">私はしばらく前からVRに興味があり、Oculus Go（2018/05-2020/12）から使っています。MetaのHMDは、最近Oculus Quest Proが発売され、来年2023年後半にはOculs Quest3が発売される可能性が高いという、VRヘッドセットとしては定番の製品です。最近はそこそこVRを利用したサービスや製品が増えましたが、まだ一般的という領域までは広がっていません。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="リモートワーク" scheme="https://future-architect.github.io/tags/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF/"/>
  </entry>
  <entry>
    <title>Quest2のハンドトラッキングでVRテルミンシミュレータを作ってみた</title>
    <link href="https://future-architect.github.io/articles/20220823a/"/>
    <id>https://future-architect.github.io/articles/20220823a/</id>
    <published>2022-08-22T15:00:00.000Z</published>
    <updated>2022-08-22T15:00:00.000Z</updated>
    <author><name>藤井亮佑</name></author>
    <content type="html"><![CDATA[<h2 id="はじめに">はじめに</h2><p>こんにちは。TIG DXユニット所属、金欠コンサルタントの藤井です。<br>最近、長らく買おう買おうと思っていたMeta Quest 2をとうとう買いました。</p>
<p>夏の自由研究ブログ連載2022 2日目のこの記事では、このMeta Quest 2向けに作ってみた、VRテルミンシミュレータというものを題材に記事を書きます。<br>作ったものはこちらです。readmeの動画は音量注意かもしれません。</p>
<p>https://github.com/shomuMatch/thereminSimulator</p>
<p>自分で作成したリソースと、ビルド後のapk、サンプル動画のみ配置してあります。</p>
<p>apkは自由に使っていただいて構わないので、うまく演奏出来たら教えてください。<br>ところでGitHub、readmeに動画置けるようになっていたんですね。</p>
<h2 id="前提知識">前提知識</h2><h3 id="Meta-Quest-2とハンドトラッキング">Meta Quest 2とハンドトラッキング</h3><p>皆さんご存知の通り、Meta Quest 2（以下、Quest2と略記）はMeta（旧Facebook）社が開発・販売しているVRヘッドセットです。</p>
<p>Meta社の社名変更前はOculus Quest 2という名前で販売されており、こちらの名前の方がなじみ深い方も居られるかもしれません。</p>
<p>詳細なスペック等は公式情報<sup id="fnref:1">1</sup>を参照頂くとして、このQuest2には前面に4つのカメラが搭載されています。この4つのカメラの画像を元に位置・回転のいわゆる6DoFの情報を特定できるのですが、このカメラは他の目的にも利用できます。</p>
<p>その1つが今回用いる<strong>ハンドトラッキング</strong>。カメラの画像から手を検出し、手の各部位の位置を特定、入力情報として用いるための機能です。</p>
<h3 id="テルミン">テルミン</h3><p>テルミンというのは、レフ・テルミンという人が1920年にロシアで発明した楽器の名前なのですが、楽器の中でも電子楽器と呼ばれるジャンルに分類される楽器です。</p>
<p>電子ピアノや、キーボード等が電子楽器の例ですが、電子回路によって音の信号を作り出す物を総称して電子楽器と呼びます。テルミンはこの電子楽器の中でも世界最古の電子楽器であり、その特徴は何といってもテルミンそのものに触れることなく演奏できるという、一見不思議な楽器です。</p>
<p>もちろん演奏と言うからには、音量や音程等をコントロールする必要があるのですが、演奏者はこのコントロールを楽器に触れずに行うことができます。テルミンからは2本のアンテナが伸びており、このアンテナと演奏者の手の距離に応じて音量・音程が変動します。</p>
<p>高校時代に何かの折でテルミンを知り、一度演奏してみたいと思っていたのですが、その夢が叶う時が来たようです。</p>
<h4 id="概要原理">概要原理</h4><p>では、どうやって触れずに演奏するのか、一言で言うと、<strong>演奏者自身が楽器の一部となる</strong>ように設計されています。</p>
<p>最初から演奏者が楽器に含まれているので、改めて楽器に触れずとも演奏が可能であるという、どうやったらそんな発想に至れるのかという仕組みでテルミンは動いています。<br>とても簡単に構成図を書くとこんな感じです。</p>
<img fetchpriority="high" src="/images/2022/20220823a/image.png" alt="image.png" width="1052" height="687">

<p>この仕組みをシミュレーションしたいので、数式に落とし込む必要があるのですが、少し話が膨らんでしまうため、より詳細な原理については後回しにします。</p>
<p>詳細原理の項に記載しておくので、先に読みたいという方はそちらからお読みください。</p>
<h2 id="作ってみる">作ってみる</h2><p>それではテルミンシミュレータを作っていきます。<br>開発環境は以下です。</p>
<ul>
<li>IDE: Unity 2021.3.7f1(LTS)</li>
<li>入れたモジュール<ul>
<li>Android Build Support<ul>
<li>OpenJDK</li>
<li>Android SDK &amp; NDK Tools</li>
</ul>
</li>
</ul>
</li>
<li>テンプレート: VR<sup id="fnref:2">2</sup></li>
<li>入れたパッケージ<ul>
<li>Oculus Integration</li>
</ul>
</li>
</ul>
<p>また、Quest Link（Quest2をPC用のVRヘッドセットとして使える機能）を使うと、都度ビルドせずともQuest2実機を用いてテストプレイができるのですが…</p>
<img src="/images/2022/20220823a/image_2.png" alt="" width="629" height="47" loading="lazy">

<p>ダメでした。記事を書きながらPCを注文したので、また今度こちらも含めて環境構築記事を書きます。</p>
<h3 id="初期設定">初期設定</h3><p>まずはメニューの<code>Assets &gt; Create &gt; Scene</code>からSceneを作成しましょう。<br>今回はScene間の遷移はしない想定のため、ThereminSimulatorと言う名前のSceneを1つ作成しました。</p>
<p>続いて、ハンドトラッキングができるよう、Projectの<code>Assets &gt; Oculus &gt; OculusProjectConfig</code>を選択し、GeneralのHand Tracking Supportを<code>Hands Only</code>に設定します。</p>
<img src="/images/2022/20220823a/image_3.png" alt="" width="880" height="476" loading="lazy">

<p>Oculusストアでアプリを公開したい場合は、<code>Controllers and Hands</code>に設定する必要があるようです。<br>Hand Tracking Versionはデフォルトでも良いですが、V2に設定しておきます。</p>
<p>次に、メインプレイヤーになる<code>OVRCameraRig</code>と、ハンドトラッキング結果を表示するための<code>OVRHandPrefab</code>を以下の様に配置します。</p>
<p>この際、デフォルトで配置されている<code>Main Camera</code>は削除しましょう。</p>
<img src="/images/2022/20220823a/image_4.png" alt="" width="232" height="236" loading="lazy">

<p>右手用に<code>RightHandAnchor</code>の子として配置した<code>OVRHandPrefab</code>のInspectorを見ると、以下の3か所に手の左右を選択する部分があるため、全て<code>Hand Right</code>に変更します。</p>
<ul>
<li>OVR Handの<code>Hand Type</code></li>
<li>OVR Skeletonの<code>Skeleton Type</code></li>
<li>OVR Meshの<code>Mesh Type</code></li>
</ul>
<img src="/images/2022/20220823a/image_5.png" alt="" width="738" height="767" loading="lazy">

<p>デフォルト値が<code>Hand Left</code>であるため、左手用の<code>OVRHandPrefab</code>は変更不要です。</p>
<p>ここまでで、ハンドトラッキングの初期設定は完了です。<br>ビルドして動かしてみるとこの通り、フレミングの左手の法則も、右ネジの法則もばっちり表現できます。</p>
<img src="/images/2022/20220823a/image_6.png" alt="" width="720" height="354" loading="lazy">

<p>想像以上にトラッキングの精度が高くて驚きましたが、手を握るなどするとトラッキングできなくなるため、使いどころには注意が必要かもしれません。<br>（急に自分の手が消えたので、結構焦りました）</p>
<p>あとはテルミンや床を置いたり、位置やサイズの調整をしましょう。こんな感じになりました。</p>
<img src="/images/2022/20220823a/image_7.png" alt="" width="1027" height="587" loading="lazy">

<p>Quest2で見るとこんな感じです（最初テルミンのサイズを間違えてとんでもないサイズのテルミンに潰されかけました）</p>
<img src="/images/2022/20220823a/image_8.png" alt="" width="771" height="586" loading="lazy">
ちなみにテルミンの3Dモデルは自作です。本体とアンテナを当社のカラーで作っています。

<h3 id="実装する">実装する</h3><h4 id="実装の流れ">実装の流れ</h4><p>さて、テルミンを実装していくにあたり、以下が必要になります。</p>
<ol>
<li>トラッキングした手の各部位の位置情報の取得</li>
<li>↑により決定される発振回路の発振周波数と音程・音量の計算</li>
<li>↑により決定された音の出力</li>
</ol>
<p>では、上から順にやっていきましょう。</p>
<h4 id="トラッキングした手の各部位の位置情報の取得">トラッキングした手の各部位の位置情報の取得</h4><p>まず、手の各部位の位置情報ですが、<code>OVRHandPrefab</code>にアタッチされている<code>OVRSkeleton</code>クラスの<code>Bones</code>に格納されています。</p>
<p>手の各部位にボーンが割り当てられており、そのTransformを取得することが出来ます。こちらの記事にボーンと部位の対応図が載せられているので、ご参考ください。</p>
<p>手のひらのボーンは無いため、小指と親指は0番目、それ以外の指は1番目のボーン位置の中心を手のひらの位置として扱うことにしましょう。指の位置は各指の3番目のボーン位置とします。</p>
<p>以下のメソッドに位置を取得したい手のOVRSkeletonを渡せば、各部位のpositionの配列が返されます。</p>
<figure class="highlight c#"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="keyword">private</span> Vector3[] <span class="title">getHandPositions</span>(<span class="params">OVRSkeleton skeleton</span>)</span></span><br><span class="line">{</span><br><span class="line">    <span class="keyword">if</span> (!(_leftHand.IsTracked &amp;&amp; _rightHand.IsTracked))</span><br><span class="line">    {</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> Vector3[] { };</span><br><span class="line">    }</span><br><span class="line">    Vector3 palmPosition = (</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>)OVRSkeleton.BoneId.Hand_Thumb0].Transform.position +</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>)OVRSkeleton.BoneId.Hand_Index1].Transform.position +</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>)OVRSkeleton.BoneId.Hand_Middle1].Transform.position +</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>)OVRSkeleton.BoneId.Hand_Ring1].Transform.position +</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>)OVRSkeleton.BoneId.Hand_Pinky0].Transform.position</span><br><span class="line">        ) / <span class="number">5</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> Vector3[]{</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>) OVRSkeleton.BoneId.Hand_Thumb3].Transform.position,</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>) OVRSkeleton.BoneId.Hand_Index3].Transform.position,</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>) OVRSkeleton.BoneId.Hand_Middle3].Transform.position,</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>) OVRSkeleton.BoneId.Hand_Ring3].Transform.position,</span><br><span class="line">        skeleton.Bones[(<span class="built_in">int</span>) OVRSkeleton.BoneId.Hand_Pinky3].Transform.position,</span><br><span class="line">        palmPosition</span><br><span class="line">        };</span><br><span class="line">}</span><br></pre></td></tr></table></figure>

<p>手がトラッキングされていない場合は、空の配列を返却するようにしておきました。</p>
<h4 id="発振回路の発振周波数と音程・音量の計算">発振回路の発振周波数と音程・音量の計算</h4><p>次に、テルミンから出力される音の音程・音量を計算します。<br>簡単のため、以下の制約を設けます。</p>
<ul>
<li>音程コントロールは右手、音量コントロールは左手で行い、反対側の手は考慮しない。</li>
<li>音程コントロールはX-Z平面（水平面）内での距離、音量コントロールはY軸（鉛直）方向の距離のみを考慮する。<br>併せて、計算に用いる定数を定義しておきましょう。<br>ここのパラメータにより、テルミンの特性が決まります。</li>
</ul>
<figure class="highlight c#"><table><tr><td class="code"><pre><span class="line"><span class="keyword">private</span> <span class="keyword">const</span> <span class="built_in">float</span> PITCH_INDUCTANCE = <span class="number">10.0e-6</span>f; <span class="comment">//音程コントロール側に使用するコイルのインダクタンス</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">const</span> <span class="built_in">float</span> PITCH_CAPACITANCE = <span class="number">1.0e-9</span>f; <span class="comment">//音程コントロール側に使用するコンデンサの静電容量</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">const</span> <span class="built_in">float</span> VOLUME_INDUCTANCE = <span class="number">1.0e-4</span>f; <span class="comment">//音量コントロール側に使用するコイルのインダクタンス</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">const</span> <span class="built_in">float</span> VOLUME_CAPACITANCE = <span class="number">2.0e-11</span>f; <span class="comment">//音量コントロール側に使用するコンデンサの静電容量</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">const</span> <span class="built_in">float</span> VOLUME_RESISTANCE = <span class="number">1.0e1</span>f; <span class="comment">//音量コントロール側に使用する抵抗器の抵抗</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">const</span> <span class="built_in">float</span> PERMITTIVITY = <span class="number">8.854e-12</span>f; <span class="comment">//真空の誘電率（真空中で演奏することにします）</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">readonly</span> <span class="built_in">float</span>[] HAND_AREAS = { <span class="comment">//手の各部位の面積</span></span><br><span class="line">    <span class="number">11.0e-4</span>f,</span><br><span class="line">    <span class="number">15.0e-4</span>f,</span><br><span class="line">    <span class="number">17.0e-4</span>f,</span><br><span class="line">    <span class="number">15.0e-4</span>f,</span><br><span class="line">    <span class="number">13.0e-4</span>f,</span><br><span class="line">    <span class="number">80.0e-4</span>f</span><br><span class="line">};</span><br></pre></td></tr></table></figure>

<p>音程・音量どちらにしても発振回路の発振周波数を用いるため、まずは発振周波数の計算に用いるメソッドを定義します。<br>数式が共通なので、バンドパスフィルターの共振周波数もこのメソッドで計算します。</p>
<figure class="highlight c#"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="keyword">private</span> <span class="built_in">float</span> <span class="title">getOscillatingFrequency</span>(<span class="params"><span class="built_in">float</span> inductance, <span class="built_in">float</span> capacitance</span>)</span></span><br><span class="line">{</span><br><span class="line">    <span class="keyword">return</span> <span class="number">1</span> / (<span class="number">2</span> * Mathf.PI * Mathf.Sqrt(inductance * capacitance));</span><br><span class="line">}</span><br></pre></td></tr></table></figure>

<p>あとは上記仮定を元に、数式に基づいて音量・音程を求めるだけです。</p>
<figure class="highlight c#"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="keyword">private</span> <span class="built_in">float</span> <span class="title">getPitch</span>()</span></span><br><span class="line">{</span><br><span class="line">    Vector3[] handPositions = getHandPositions(_rightSkeleton);</span><br><span class="line">    Vector3 antennaPosition = _pitchAntenna.position;</span><br><span class="line">    <span class="built_in">float</span> capacitance = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="built_in">int</span> i = <span class="number">0</span>; i &lt; handPositions.Length; i++)</span><br><span class="line">    {</span><br><span class="line">        handPositions[i].y = antennaPosition.y;</span><br><span class="line">        <span class="built_in">float</span> dist = Vector3.Distance(handPositions[i], antennaPosition);</span><br><span class="line">        capacitance += HAND_AREAS[i] / dist;</span><br><span class="line">    }</span><br><span class="line">    capacitance *= PERMITTIVITY;</span><br><span class="line">    capacitance += PITCH_CAPACITANCE;</span><br><span class="line">    <span class="built_in">float</span> fix_frequency = getOscillatingFrequency(PITCH_INDUCTANCE, PITCH_CAPACITANCE);</span><br><span class="line">    <span class="keyword">return</span> Mathf.Abs(fix_frequency - getOscillatingFrequency(PITCH_INDUCTANCE, capacitance));</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">private</span> <span class="built_in">float</span> <span class="title">getVolume</span>()</span></span><br><span class="line">{</span><br><span class="line">    Vector3[] handPositions = getHandPositions(_leftSkeleton);</span><br><span class="line">    Vector3 antennaPosition = _volumeAntenna.position;</span><br><span class="line">    <span class="built_in">float</span> capacitance = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="built_in">int</span> i = <span class="number">0</span>; i &lt; handPositions.Length; i++)</span><br><span class="line">    {</span><br><span class="line">        <span class="built_in">float</span> dist = Mathf.Abs(handPositions[i].y - antennaPosition.y);</span><br><span class="line">        capacitance += HAND_AREAS[i] / dist;</span><br><span class="line">    }</span><br><span class="line">    capacitance *= PERMITTIVITY;</span><br><span class="line">    capacitance += VOLUME_CAPACITANCE;</span><br><span class="line">    <span class="built_in">float</span> gainFrequency = getOscillatingFrequency(VOLUME_INDUCTANCE, capacitance);</span><br><span class="line">    <span class="built_in">float</span> gain =</span><br><span class="line">        <span class="number">1</span> /</span><br><span class="line">            Mathf.Sqrt(</span><br><span class="line">                <span class="number">1</span> +</span><br><span class="line">                Mathf.Pow(</span><br><span class="line">                    <span class="number">1</span> / (<span class="number">2</span> * Mathf.PI * gainFrequency * VOLUME_RESISTANCE * VOLUME_CAPACITANCE) -</span><br><span class="line">                    <span class="number">2</span> * Mathf.PI * gainFrequency * VOLUME_INDUCTANCE / VOLUME_RESISTANCE,</span><br><span class="line">                    <span class="number">2</span></span><br><span class="line">                )</span><br><span class="line">            )</span><br><span class="line">    ;</span><br><span class="line">    <span class="keyword">return</span> gain;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>

<p>なお、音量コントロール側も音程コントロール側も、手の位置で決まる静電容量に、固定の静電容量を加えています。<br>手をかざしていない間に変な音が出ないように固定するためです。</p>
<p>あとはこれらを<code>Update()</code>から呼び出して、1フレームごとに周波数と音量を計算しましょう。<br>アンプを通した気持ちになって、ボリュームは3倍した上で一定幅内（0.1から1）で収まるようにしています。<br>なお、周波数とボリュームはメンバー変数としてあらかじめ宣言しておきます。</p>
<figure class="highlight c#"><table><tr><td class="code"><pre><span class="line"><span class="keyword">private</span> <span class="built_in">float</span> frequency;</span><br><span class="line"><span class="keyword">private</span> <span class="built_in">float</span> gain;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">Update</span>()</span></span><br><span class="line">{</span><br><span class="line">    frequency = getPitch();</span><br><span class="line">    <span class="built_in">string</span> scale = getScale(frequency);</span><br><span class="line">    gain = Mathf.Min(getVolume() * <span class="number">3</span>, <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">if</span> (gain &lt; <span class="number">0.1f</span>)</span><br><span class="line">    {</span><br><span class="line">        gain = <span class="number">0</span>;</span><br><span class="line">    }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>

<h4 id="音の出力">音の出力</h4><p>それでは実際に音を鳴らしていきましょう。</p>
<p>まずはテルミンのオブジェクトに<code>Audio Source</code>のコンポーネントを付与し、音を鳴らせるようにしておきます。すると、音を鳴らす前に（AudioClipをセットしていなくても）<code>OnAudioFilterRead()</code>が呼び出されるので、ここで直接音の情報を書き込んでしまいます。本来はフィルターをかけたりすることが目的のメソッドですが、音情報を書き込むこともできます。</p>
<p>前段で音程・音量の情報をメンバー変数に記録しているため、あとは正弦波の音情報を書き込むのみです。</p>
<p>サンプリング周波数はデバイスに依存するため、<code>Start()</code>内で取得しておきましょう。サンプリング周期ごとに位相と振幅を計算し、書き込んでいます。ステレオ音源にする意味は無いので、両チャンネルに同じ値を書き込んでいます。</p>
<figure class="highlight c#"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">Start</span>()</span></span><br><span class="line">{</span><br><span class="line">    sampling_frequency = AudioSettings.outputSampleRate;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">OnAudioFilterRead</span>(<span class="params"><span class="built_in">float</span>[] data, <span class="built_in">int</span> channels</span>)</span></span><br><span class="line">{</span><br><span class="line">    increment = frequency * <span class="number">2</span> * Mathf.PI / sampling_frequency;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; data.Length; i = i + channels)</span><br><span class="line">    {</span><br><span class="line">        phase = phase + increment;</span><br><span class="line">        data[i] = (gain * Mathf.Sin(phase));</span><br><span class="line">        <span class="keyword">if</span> (channels == <span class="number">2</span>) data[i + <span class="number">1</span>] = data[i];</span><br><span class="line">        <span class="keyword">if</span> (phase &gt; <span class="number">2</span> * Mathf.PI) phase = <span class="number">0</span>;</span><br><span class="line">    }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>

<p>これで音が鳴るようになりました。</p>
<h2 id="演奏してみる">演奏してみる</h2><p>ではビルドして、演奏してみます。</p>
<p>Quest2とPCを接続し、<code>Build Settings</code>からPlatformをAndroidにし、作業していたSceneが追加されていることを確認してBuild And Runします。</p>
<img src="/images/2022/20220823a/image_9.png" alt="image.png" width="640" height="601" loading="lazy">

<p>しばらく待つと、Quest2側で起動しているので、試しに演奏してみました。↓に動画を配置しているのでご覧ください。<br>※音量注意かもしれません。</p>
<p>https://github.com/shomuMatch/thereminSimulator</p>
<p>想像の80倍ぐらい難しくて、ロクに演奏できませんでした。きらきら星を演奏しているつもりです。</p>
<p>周波数が連続的に変化していくので、半端な音が出がちなのと、どれぐらい動かせばどの音階になるのかが全くつかめず…低音域だと大きく手を動かさないといけないのに、高音域だと少し動かしただけで一気に周波数が変わるため、脳が混乱し続けていました。</p>
<p>ちなみに実際のテルミンを演奏したことは無いので、実物もこれぐらい難しいのかはよくわかりません。</p>
<p>ちなみに、後ろに今の音の周波数と音階、ボリュームも出るようにしておきました。<br>それを見ながらならもう少しマシに演奏出来る気もするのですが、動画としてどうなんだという気がしたのでやめておきました。<br>（Quest2の録画機能だと、プレイヤーの視点がそのまま録画対象になるため）</p>
<h2 id="おわりに">おわりに</h2><p>テルミン、とても難しい。</p>
<p>というのはさておき、Quest2のハンドトラッキング、とても簡単かつ高精度に手の動きを入力できて、非常に可能性を感じました。</p>
<p>今回は一度演奏してみたかったテルミンを作ってみましたが、なんだかもっといろんなことができそうです。</p>
<p>VRにおける最も大切なものは、没入感であると個人的に思っています。</p>
<p>自身の体をそのまま入力装置として扱えるハンドトラッキングは、今後のVRの発展に不可欠なのでは、と思った自由研究でした。</p>
<p>夏の自由研究ブログ連載2022 明日もお楽しみに！</p>
<h2 id="補足">補足</h2><h3 id="詳細原理">詳細原理</h3><p>さて、後回しにしたテルミンの詳細原理とその数式化について記載します。</p>
<p>テルミンに限らず、電子回路にはコイル・コンデンサ・抵抗の3つの素子が良く使われます。</p>
<p>この内、コンデンサというのは少し特殊なつくりをしていて、2つの導体（電気を通す物体）で絶縁体（電気を通しにくい物体）を挟み込むような形をしています。導体は電気を通すが、絶縁体は電気を通しにくいので、コンデンサに電圧をかけると導体の絶縁体付近に電気がたまるという仕組みです。導体の例としては、鉄や、人体などが導体です。絶縁体はゴムや、空気などです。</p>
<p>勘の良い方は気づかれたかもしれませんが、例えば鉄板から少し離れて手のひらをかざすと、これだけでコンデンサができます（絶縁体は間の空気）また、コンデンサに使われる導体を、極板と呼びます。</p>
<p>この鉄（アンテナ）・空気・人体で構成されたコンデンサを電子回路に取り込んだ楽器がテルミンなのです。</p>
<h4 id="2つの発振回路で音程コントロール">2つの発振回路で音程コントロール</h4><p>さて、テルミンには上記の3つの素子を用いた、発振回路と呼ばれるものが音程コントロールのために2つ組み込まれています。発振回路と言うのは、発振周波数と呼ばれる周波数の正弦波の電気信号を作り出す電子回路のことです。</p>
<p>発振回路の種類にもよりますが、例えばハートレー発振回路と呼ばれるものだと、発振周波数はコイルの特性値であるインダクタンス（L）とコンデンサの特性値である静電容量（C）を用いて以下の数式で求められます。</p>
<p><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -2.308ex;" xmlns="http://www.w3.org/2000/svg" width="12.868ex" height="5.344ex" role="img" focusable="false" viewBox="0 -1342 5687.6 2362"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g><g data-mml-node="mo" transform="translate(827.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mfrac" transform="translate(1883.6,0)"><g data-mml-node="mn" transform="translate(1652,676)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mrow" transform="translate(220,-929)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="1D70B" d="M132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11Z"></path></g><g data-mml-node="msqrt" transform="translate(1070,0)"><g transform="translate(853,0)"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g><g data-mml-node="mi" transform="translate(681,0)"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g></g><g data-mml-node="mo" transform="translate(0,109)"><path data-c="221A" d="M95 178Q89 178 81 186T72 200T103 230T169 280T207 309Q209 311 212 311H213Q219 311 227 294T281 177Q300 134 312 108L397 -77Q398 -77 501 136T707 565T814 786Q820 800 834 800Q841 800 846 794T853 782V776L620 293L385 -193Q381 -200 366 -200Q357 -200 354 -197Q352 -195 256 15L160 225L144 214Q129 202 113 190T95 178Z"></path></g><rect width="1441" height="60" x="853" y="849"></rect></g></g><rect width="3564" height="60" x="120" y="220"></rect></g></g></g></svg></mjx-container></p>
<p>一方の発振回路には演奏者を取り込まず、固定の周波数で発振する（電気信号を作る）ようにしておき、もう一方の発振回路には演奏者をコンデンサの片方の極板として取り込みます。</p>
<p>すると、演奏者の操作によりコンデンサの静電容量が変動し、片方の発振回路の発振周波数が変動します。この2つの発振回路の発振周波数の差を電気信号として出力、音に変換する（これはスピーカーの役割）ことで、音楽を演奏できます。</p>
<p>ここまでをまとめると、最終的にテルミンから出る音の周波数（≒音程）は以下となります。</p>
<p><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -2.76ex;" xmlns="http://www.w3.org/2000/svg" width="25.711ex" height="6.652ex" role="img" focusable="false" viewBox="0 -1720 11364.2 2940"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g><g data-mml-node="mo" transform="translate(550,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(939,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(1300,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(1966.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mrow" transform="translate(3022.6,0)"><g data-mml-node="mo"><svg width="278" height="2940" y="-1220" x="27.5" viewBox="0 -364.2 278 2940"><path data-c="2223" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" transform="scale(1,4.414)"></path></svg></g><g data-mml-node="msub" transform="translate(333,0)"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g><g data-mml-node="mn" transform="translate(523,-150) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g></g><g data-mml-node="mo" transform="translate(1481.8,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path></g><g data-mml-node="mfrac" transform="translate(2482,0)"><g data-mml-node="mn" transform="translate(2388.3,676)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mrow" transform="translate(220,-937.5)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="1D70B" d="M132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11Z"></path></g><g data-mml-node="msqrt" transform="translate(1070,0)"><g transform="translate(1020,0)"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g><g data-mml-node="mi" transform="translate(681,0)"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mrow" transform="translate(1607.7,0)"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(389,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(750,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g></g><g data-mml-node="mo" transform="translate(0,67.5)"><path data-c="221A" d="M263 249Q264 249 315 130T417 -108T470 -228L725 302Q981 837 982 839Q989 850 1001 850Q1008 850 1013 844T1020 832V826L741 243Q645 43 540 -176Q479 -303 469 -324T453 -348Q449 -350 436 -350L424 -349L315 -96Q206 156 205 156L171 130Q138 104 137 104L111 130L263 249Z"></path></g><rect width="2746.7" height="60" x="1020" y="857.5"></rect></g></g><rect width="5036.7" height="60" x="120" y="220"></rect></g><g data-mml-node="mo" transform="translate(7758.7,0)"><svg width="278" height="2940" y="-1220" x="27.5" viewBox="0 -364.2 278 2940"><path data-c="2223" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" transform="scale(1,4.414)"></path></svg></g></g><g data-mml-node="mtext" transform="translate(11114.2,0)"><path data-c="A0" d=""></path></g></g></g></svg></mjx-container><br><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -0.464ex;" xmlns="http://www.w3.org/2000/svg" width="29.435ex" height="2.161ex" role="img" focusable="false" viewBox="0 -750 13010.1 955"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g><g data-mml-node="mn" transform="translate(523,-150) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g></g><g data-mml-node="mo" transform="translate(1204.3,0)"><path data-c="3A" d="M78 370Q78 394 95 412T138 430Q162 430 180 414T199 371Q199 346 182 328T139 310T96 327T78 370ZM78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z"></path></g><g data-mml-node="mi" transform="translate(1760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">固</text></g><g data-mml-node="mi" transform="translate(2760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">定</text></g><g data-mml-node="mi" transform="translate(3760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">発</text></g><g data-mml-node="mi" transform="translate(4760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">振</text></g><g data-mml-node="mi" transform="translate(5760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">器</text></g><g data-mml-node="mi" transform="translate(6760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">の</text></g><g data-mml-node="mi" transform="translate(7760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">発</text></g><g data-mml-node="mi" transform="translate(8760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">振</text></g><g data-mml-node="mi" transform="translate(9760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">周</text></g><g data-mml-node="mi" transform="translate(10760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">波</text></g><g data-mml-node="mi" transform="translate(11760.1,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">数</text></g><g data-mml-node="mtext" transform="translate(12760.1,0)"><path data-c="A0" d=""></path></g></g></g></svg></mjx-container><br><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -0.452ex;" xmlns="http://www.w3.org/2000/svg" width="53.766ex" height="2.149ex" role="img" focusable="false" viewBox="0 -750 23764.6 950"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g><g data-mml-node="mo" transform="translate(958.8,0)"><path data-c="3A" d="M78 370Q78 394 95 412T138 430Q162 430 180 414T199 371Q199 346 182 328T139 310T96 327T78 370ZM78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z"></path></g><g data-mml-node="mi" transform="translate(1514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">演</text></g><g data-mml-node="mi" transform="translate(2514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">奏</text></g><g data-mml-node="mi" transform="translate(3514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">者</text></g><g data-mml-node="mi" transform="translate(4514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">を</text></g><g data-mml-node="mi" transform="translate(5514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">含</text></g><g data-mml-node="mi" transform="translate(6514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">む</text></g><g data-mml-node="mi" transform="translate(7514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">発</text></g><g data-mml-node="mi" transform="translate(8514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">振</text></g><g data-mml-node="mi" transform="translate(9514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">回</text></g><g data-mml-node="mi" transform="translate(10514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">路</text></g><g data-mml-node="mi" transform="translate(11514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">の</text></g><g data-mml-node="mi" transform="translate(12514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">コ</text></g><g data-mml-node="mi" transform="translate(13514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">イ</text></g><g data-mml-node="mi" transform="translate(14514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">ル</text></g><g data-mml-node="mi" transform="translate(15514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">の</text></g><g data-mml-node="mi" transform="translate(16514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">イ</text></g><g data-mml-node="mi" transform="translate(17514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">ン</text></g><g data-mml-node="mi" transform="translate(18514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">ダ</text></g><g data-mml-node="mi" transform="translate(19514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">ク</text></g><g data-mml-node="mi" transform="translate(20514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">タ</text></g><g data-mml-node="mi" transform="translate(21514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">ン</text></g><g data-mml-node="mi" transform="translate(22514.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">ス</text></g><g data-mml-node="mspace" transform="translate(23514.6,0)"></g><g data-mml-node="mtext" transform="translate(23514.6,0)"><path data-c="A0" d=""></path></g></g></g></svg></mjx-container><br><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="54.071ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 23899.2 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mrow" transform="translate(926.7,0)"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(389,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(750,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g><g data-mml-node="mo" transform="translate(2343.4,0)"><path data-c="3A" d="M78 370Q78 394 95 412T138 430Q162 430 180 414T199 371Q199 346 182 328T139 310T96 327T78 370ZM78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z"></path></g><g data-mml-node="mi" transform="translate(2899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">演</text></g><g data-mml-node="mi" transform="translate(3899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">奏</text></g><g data-mml-node="mi" transform="translate(4899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">者</text></g><g data-mml-node="mi" transform="translate(5899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">を</text></g><g data-mml-node="mi" transform="translate(6899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">含</text></g><g data-mml-node="mi" transform="translate(7899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">む</text></g><g data-mml-node="mi" transform="translate(8899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">発</text></g><g data-mml-node="mi" transform="translate(9899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">振</text></g><g data-mml-node="mi" transform="translate(10899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">回</text></g><g data-mml-node="mi" transform="translate(11899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">路</text></g><g data-mml-node="mi" transform="translate(12899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">の</text></g><g data-mml-node="mi" transform="translate(13899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">コ</text></g><g data-mml-node="mi" transform="translate(14899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">ン</text></g><g data-mml-node="mi" transform="translate(15899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">デ</text></g><g data-mml-node="mi" transform="translate(16899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">ン</text></g><g data-mml-node="mi" transform="translate(17899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">サ</text></g><g data-mml-node="mi" transform="translate(18899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">の</text></g><g data-mml-node="mi" transform="translate(19899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">静</text></g><g data-mml-node="mi" transform="translate(20899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">電</text></g><g data-mml-node="mi" transform="translate(21899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">容</text></g><g data-mml-node="mi" transform="translate(22899.2,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">量</text></g></g></g></svg></mjx-container></p>
<p>静電容量は演奏者の挙動（これはさらに時間に依存）に依存することを明記するため、時間を変数として記載しています。</p>
<h4 id="もう1つの発振回路と共振回路で音量コントロール">もう1つの発振回路と共振回路で音量コントロール</h4><p>テルミンにはもう1つ、演奏者をコンデンサとして取り込んだ発振回路が含まれており、こちらは音量をコントロールするためのものです。<br>また、音量コントロール用の回路には発振回路に加え、共振回路（バンドパスフィルタ）と呼ばれる、特定の周波数帯の電気信号を通す回路が組み込まれています。<br>共振回路に周波数<mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.464ex;" xmlns="http://www.w3.org/2000/svg" width="1.244ex" height="2.059ex" role="img" focusable="false" viewBox="0 -705 550 910"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g></g></g></svg></mjx-container>の電気信号を流すと、以下の式に従って、その信号は減衰します。</p>
<p><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -5.475ex;" xmlns="http://www.w3.org/2000/svg" width="46.364ex" height="8.776ex" role="img" focusable="false" viewBox="0 -1459 20492.9 3879"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D43A" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q492 659 471 656T418 643T357 615T294 567T236 496T189 394T158 260Q156 242 156 221Q156 173 170 136T206 79T256 45T308 28T353 24Q407 24 452 47T514 106Q517 114 529 161T541 214Q541 222 528 224T468 227H431Q425 233 425 235T427 254Q431 267 437 273H454Q494 271 594 271Q634 271 659 271T695 272T707 272Q721 272 721 263Q721 261 719 249Q714 230 709 228Q706 227 694 227Q674 227 653 224Q646 221 643 215T629 164Q620 131 614 108Q589 6 586 3Q584 1 581 1Q571 1 553 21T530 52Q530 53 528 52T522 47Q448 -22 322 -22Q201 -22 126 55T50 252Z"></path></g><g data-mml-node="mo" transform="translate(786,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(1175,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(1536,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(2202.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mfrac" transform="translate(3258.6,0)"><g data-mml-node="mrow" transform="translate(220,709.5)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z"></path></g><g data-mml-node="msub" transform="translate(278,0)"><g data-mml-node="mi"><path data-c="1D449" d="M52 648Q52 670 65 683H76Q118 680 181 680Q299 680 320 683H330Q336 677 336 674T334 656Q329 641 325 637H304Q282 635 274 635Q245 630 242 620Q242 618 271 369T301 118L374 235Q447 352 520 471T595 594Q599 601 599 609Q599 633 555 637Q537 637 537 648Q537 649 539 661Q542 675 545 679T558 683Q560 683 570 683T604 682T668 681Q737 681 755 683H762Q769 676 769 672Q769 655 760 640Q757 637 743 637Q730 636 719 635T698 630T682 623T670 615T660 608T652 599T645 592L452 282Q272 -9 266 -16Q263 -18 259 -21L241 -22H234Q216 -22 216 -15Q213 -9 177 305Q139 623 138 626Q133 637 76 637H59Q52 642 52 648Z"></path></g><g data-mml-node="TeXAtom" transform="translate(616,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D45C" d="M201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120Z"></path></g><g data-mml-node="mi" transform="translate(485,0)"><path data-c="1D462" d="M21 287Q21 295 30 318T55 370T99 420T158 442Q204 442 227 417T250 358Q250 340 216 246T182 105Q182 62 196 45T238 27T291 44T328 78L339 95Q341 99 377 247Q407 367 413 387T427 416Q444 431 463 431Q480 431 488 421T496 402L420 84Q419 79 419 68Q419 43 426 35T447 26Q469 29 482 57T512 145Q514 153 532 153Q551 153 551 144Q550 139 549 130T540 98T523 55T498 17T462 -8Q454 -10 438 -10Q372 -10 347 46Q345 45 336 36T318 21T296 6T267 -6T233 -11Q189 -11 155 7Q103 38 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mi" transform="translate(1057,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g></g></g><g data-mml-node="mo" transform="translate(1946.7,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z"></path></g></g><g data-mml-node="mrow" transform="translate(387.2,-709.5)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z"></path></g><g data-mml-node="msub" transform="translate(278,0)"><g data-mml-node="mi"><path data-c="1D449" d="M52 648Q52 670 65 683H76Q118 680 181 680Q299 680 320 683H330Q336 677 336 674T334 656Q329 641 325 637H304Q282 635 274 635Q245 630 242 620Q242 618 271 369T301 118L374 235Q447 352 520 471T595 594Q599 601 599 609Q599 633 555 637Q537 637 537 648Q537 649 539 661Q542 675 545 679T558 683Q560 683 570 683T604 682T668 681Q737 681 755 683H762Q769 676 769 672Q769 655 760 640Q757 637 743 637Q730 636 719 635T698 630T682 623T670 615T660 608T652 599T645 592L452 282Q272 -9 266 -16Q263 -18 259 -21L241 -22H234Q216 -22 216 -15Q213 -9 177 305Q139 623 138 626Q133 637 76 637H59Q52 642 52 648Z"></path></g><g data-mml-node="TeXAtom" transform="translate(616,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mi" transform="translate(345,0)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g></g></g><g data-mml-node="mo" transform="translate(1612.2,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z"></path></g></g><rect width="2424.7" height="60" x="120" y="220"></rect></g><g data-mml-node="mo" transform="translate(6201,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mfrac" transform="translate(7256.8,0)"><g data-mml-node="mn" transform="translate(6368.1,676)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="msqrt" transform="translate(220,-1636.5)"><g transform="translate(1020,0)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z"></path></g><g data-mml-node="msup" transform="translate(1722.4,0)"><g data-mml-node="mrow"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="28" d="M180 96T180 250T205 541T266 770T353 944T444 1069T527 1150H555Q561 1144 561 1141Q561 1137 545 1120T504 1072T447 995T386 878T330 721T288 513T272 251Q272 133 280 56Q293 -87 326 -209T399 -405T475 -531T536 -609T561 -640Q561 -643 555 -649H527Q483 -612 443 -568T353 -443T266 -270T205 -41Z"></path></g><g data-mml-node="mfrac" transform="translate(597,0)"><g data-mml-node="mn" transform="translate(1555.7,394) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mrow" transform="translate(220,-370.3) scale(0.707)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="1D70B" d="M132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11Z"></path></g><g data-mml-node="mi" transform="translate(1070,0)"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g><g data-mml-node="mo" transform="translate(1620,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(2009,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(2370,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mi" transform="translate(2759,0)"><path data-c="1D445" d="M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z"></path></g><g data-mml-node="mi" transform="translate(3518,0)"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g></g><rect width="3225" height="60" x="120" y="220"></rect></g><g data-mml-node="mo" transform="translate(4284.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path></g><g data-mml-node="mn" transform="translate(5284.4,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g><g data-mml-node="mi" transform="translate(5784.4,0)"><path data-c="1D70B" d="M132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11Z"></path></g><g data-mml-node="mi" transform="translate(6354.4,0)"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g><g data-mml-node="mo" transform="translate(6904.4,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(7293.4,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(7654.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mfrac" transform="translate(8043.4,0)"><g data-mml-node="mi" transform="translate(247.6,394) scale(0.707)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g><g data-mml-node="mi" transform="translate(220,-345) scale(0.707)"><path data-c="1D445" d="M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z"></path></g><rect width="736.7" height="60" x="120" y="220"></rect></g><g data-mml-node="mo" transform="translate(9020.1,0) translate(0 -0.5)"><path data-c="29" d="M35 1138Q35 1150 51 1150H56H69Q113 1113 153 1069T243 944T330 771T391 541T416 250T391 -40T330 -270T243 -443T152 -568T69 -649H56Q43 -649 39 -647T35 -637Q65 -607 110 -548Q283 -316 316 56Q324 133 324 251Q324 368 316 445Q278 877 48 1123Q36 1137 35 1138Z"></path></g></g><g data-mml-node="mn" transform="translate(9650.1,876.6) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g></g></g><g data-mml-node="mo" transform="translate(0,166.5)"><path data-c="221A" d="M424 -948Q422 -947 313 -434T202 80L170 31Q165 24 157 10Q137 -21 137 -21Q131 -16 124 -8L111 5L264 248L473 -720Q473 -717 727 359T983 1440Q989 1450 1001 1450Q1007 1450 1013 1445T1020 1433Q1020 1425 742 244T460 -941Q458 -950 439 -950H436Q424 -950 424 -948Z"></path></g><rect width="11776.1" height="60" x="1020" y="1556.5"></rect></g><rect width="12996.1" height="60" x="120" y="220"></rect></g></g></g></svg></mjx-container></p>
<p>上記より、入力の周波数が以下の<mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.464ex;" xmlns="http://www.w3.org/2000/svg" width="2.096ex" height="2.059ex" role="img" focusable="false" viewBox="0 -705 926.6 910"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g><g data-mml-node="mn" transform="translate(523,-150) scale(0.707)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path></g></g></g></g></svg></mjx-container>（共振周波数）であるとき、出力は最大となります。</p>
<p><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -2.308ex;" xmlns="http://www.w3.org/2000/svg" width="13.72ex" height="5.344ex" role="img" focusable="false" viewBox="0 -1342 6064.1 2362"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g><g data-mml-node="mn" transform="translate(523,-150) scale(0.707)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path></g></g><g data-mml-node="mo" transform="translate(1204.3,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mfrac" transform="translate(2260.1,0)"><g data-mml-node="mn" transform="translate(1652,676)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mrow" transform="translate(220,-929)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="1D70B" d="M132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11Z"></path></g><g data-mml-node="msqrt" transform="translate(1070,0)"><g transform="translate(853,0)"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g><g data-mml-node="mi" transform="translate(681,0)"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g></g><g data-mml-node="mo" transform="translate(0,109)"><path data-c="221A" d="M95 178Q89 178 81 186T72 200T103 230T169 280T207 309Q209 311 212 311H213Q219 311 227 294T281 177Q300 134 312 108L397 -77Q398 -77 501 136T707 565T814 786Q820 800 834 800Q841 800 846 794T853 782V776L620 293L385 -193Q381 -200 366 -200Q357 -200 354 -197Q352 -195 256 15L160 225L144 214Q129 202 113 190T95 178Z"></path></g><rect width="1441" height="60" x="853" y="849"></rect></g></g><rect width="3564" height="60" x="120" y="220"></rect></g></g></g></svg></mjx-container></p>
<p>つまり、演奏者の操作により、発振回路の発振周波数が共振回路の共振周波数に近づけば出力は大きく、遠ざかれば小さくなります。<br>この出力を、最終的な音量として用いることで、テルミン自体の音量を操作します。</p>
<h4 id="演奏者による静電容量の変化">演奏者による静電容量の変化</h4><p>さて、ここまでで、演奏者による静電容量<mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="4.296ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 1899 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mo" transform="translate(760,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(1149,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(1510,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g></g></svg></mjx-container>の変化に応じて音量・音程が操作できることを見てきました。<br>では、<mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="4.296ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 1899 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mo" transform="translate(760,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(1149,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(1510,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g></g></svg></mjx-container>はどのように変化するのでしょう。</p>
<p>これを厳密に求めることは実質的に不可能であるため、演奏者を含む発振回路のコンデンサは、以下の図のような構成であるとモデル化してみましょう。</p>
<img src="/images/2022/20220823a/image_10.png" alt="" width="863" height="652" loading="lazy">

<p>要するに、演奏者の手のひらから先だけを演奏者側の極板として扱い、テルミンのアンテナは演奏者に合わせて複数の極板に分割されているとします。</p>
<p>こうしてできた6つのコンデンサが並列に接続されることで、発振回路のコンデンサが構成されていると考えましょう。</p>
<p>さて、誘電率（絶縁体の特性）<mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.05ex;" xmlns="http://www.w3.org/2000/svg" width="1.054ex" height="1.072ex" role="img" focusable="false" viewBox="0 -452 466 474"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D700" d="M190 -22Q124 -22 76 11T27 107Q27 174 97 232L107 239L99 248Q76 273 76 304Q76 364 144 408T290 452H302Q360 452 405 421Q428 405 428 392Q428 381 417 369T391 356Q382 356 371 365T338 383T283 392Q217 392 167 368T116 308Q116 289 133 272Q142 263 145 262T157 264Q188 278 238 278H243Q308 278 308 247Q308 206 223 206Q177 206 142 219L132 212Q68 169 68 112Q68 39 201 39Q253 39 286 49T328 72T345 94T362 105Q376 103 376 88Q376 79 365 62T334 26T275 -8T190 -22Z"></path></g></g></g></svg></mjx-container> の絶縁体を距離<mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.023ex;" xmlns="http://www.w3.org/2000/svg" width="1.176ex" height="1.593ex" role="img" focusable="false" viewBox="0 -694 520 704"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z"></path></g></g></g></svg></mjx-container>離れた面積 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.05ex;" xmlns="http://www.w3.org/2000/svg" width="1.459ex" height="1.645ex" role="img" focusable="false" viewBox="0 -705 645 727"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D446" d="M308 24Q367 24 416 76T466 197Q466 260 414 284Q308 311 278 321T236 341Q176 383 176 462Q176 523 208 573T273 648Q302 673 343 688T407 704H418H425Q521 704 564 640Q565 640 577 653T603 682T623 704Q624 704 627 704T632 705Q645 705 645 698T617 577T585 459T569 456Q549 456 549 465Q549 471 550 475Q550 478 551 494T553 520Q553 554 544 579T526 616T501 641Q465 662 419 662Q362 662 313 616T263 510Q263 480 278 458T319 427Q323 425 389 408T456 390Q490 379 522 342T554 242Q554 216 546 186Q541 164 528 137T492 78T426 18T332 -20Q320 -22 298 -22Q199 -22 144 33L134 44L106 13Q83 -14 78 -18T65 -22Q52 -22 52 -14Q52 -11 110 221Q112 227 130 227H143Q149 221 149 216Q149 214 148 207T144 186T142 153Q144 114 160 87T203 47T255 29T308 24Z"></path></g></g></g></svg></mjx-container> の2枚の極板で挟んだ場合、静電容量は以下となります。</p>
<p><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -1.575ex;" xmlns="http://www.w3.org/2000/svg" width="8.246ex" height="4.699ex" role="img" focusable="false" viewBox="0 -1381 3644.6 2077"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mo" transform="translate(1037.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mi" transform="translate(2093.6,0)"><path data-c="1D700" d="M190 -22Q124 -22 76 11T27 107Q27 174 97 232L107 239L99 248Q76 273 76 304Q76 364 144 408T290 452H302Q360 452 405 421Q428 405 428 392Q428 381 417 369T391 356Q382 356 371 365T338 383T283 392Q217 392 167 368T116 308Q116 289 133 272Q142 263 145 262T157 264Q188 278 238 278H243Q308 278 308 247Q308 206 223 206Q177 206 142 219L132 212Q68 169 68 112Q68 39 201 39Q253 39 286 49T328 72T345 94T362 105Q376 103 376 88Q376 79 365 62T334 26T275 -8T190 -22Z"></path></g><g data-mml-node="mfrac" transform="translate(2559.6,0)"><g data-mml-node="mi" transform="translate(220,676)"><path data-c="1D446" d="M308 24Q367 24 416 76T466 197Q466 260 414 284Q308 311 278 321T236 341Q176 383 176 462Q176 523 208 573T273 648Q302 673 343 688T407 704H418H425Q521 704 564 640Q565 640 577 653T603 682T623 704Q624 704 627 704T632 705Q645 705 645 698T617 577T585 459T569 456Q549 456 549 465Q549 471 550 475Q550 478 551 494T553 520Q553 554 544 579T526 616T501 641Q465 662 419 662Q362 662 313 616T263 510Q263 480 278 458T319 427Q323 425 389 408T456 390Q490 379 522 342T554 242Q554 216 546 186Q541 164 528 137T492 78T426 18T332 -20Q320 -22 298 -22Q199 -22 144 33L134 44L106 13Q83 -14 78 -18T65 -22Q52 -22 52 -14Q52 -11 110 221Q112 227 130 227H143Q149 221 149 216Q149 214 148 207T144 186T142 153Q144 114 160 87T203 47T255 29T308 24Z"></path></g><g data-mml-node="mi" transform="translate(282.5,-686)"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z"></path></g><rect width="845" height="60" x="120" y="220"></rect></g></g></g></svg></mjx-container></p>
<p>また、コンデンサを複数個並列につないだ場合、トータルの静電容量は以下となります。</p>
<p><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -2.819ex;" xmlns="http://www.w3.org/2000/svg" width="10.738ex" height="6.354ex" role="img" focusable="false" viewBox="0 -1562.5 4746.2 2808.5"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mo" transform="translate(1037.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="munderover" transform="translate(2093.6,0)"><g data-mml-node="mo"><path data-c="2211" d="M60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948Z"></path></g><g data-mml-node="TeXAtom" transform="translate(148.2,-1087.9) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(345,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mn" transform="translate(1123,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g></g><g data-mml-node="mi" transform="translate(509.9,1150) scale(0.707)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g></g><g data-mml-node="msub" transform="translate(3704.2,0)"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mi" transform="translate(748,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g></g></g></g></svg></mjx-container></p>
<p>以上より、今回考えるモデルにおいて、<mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="4.296ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 1899 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mo" transform="translate(760,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(1149,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(1510,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g></g></svg></mjx-container>は以下となります。</p>
<p><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -2.819ex;" xmlns="http://www.w3.org/2000/svg" width="29.473ex" height="6.712ex" role="img" focusable="false" viewBox="0 -1720.9 13027 2966.8"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mo" transform="translate(760,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(1149,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(1510,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(2176.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="munderover" transform="translate(3232.6,0)"><g data-mml-node="mo"><path data-c="2211" d="M60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948Z"></path></g><g data-mml-node="TeXAtom" transform="translate(148.2,-1087.9) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(345,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mn" transform="translate(1123,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g></g><g data-mml-node="mn" transform="translate(545.2,1150) scale(0.707)"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z"></path></g></g><g data-mml-node="msub" transform="translate(4843.2,0)"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mi" transform="translate(748,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g></g><g data-mml-node="mo" transform="translate(5885.2,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(6274.2,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(6635.2,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(7302,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mi" transform="translate(8357.7,0)"><path data-c="1D700" d="M190 -22Q124 -22 76 11T27 107Q27 174 97 232L107 239L99 248Q76 273 76 304Q76 364 144 408T290 452H302Q360 452 405 421Q428 405 428 392Q428 381 417 369T391 356Q382 356 371 365T338 383T283 392Q217 392 167 368T116 308Q116 289 133 272Q142 263 145 262T157 264Q188 278 238 278H243Q308 278 308 247Q308 206 223 206Q177 206 142 219L132 212Q68 169 68 112Q68 39 201 39Q253 39 286 49T328 72T345 94T362 105Q376 103 376 88Q376 79 365 62T334 26T275 -8T190 -22Z"></path></g><g data-mml-node="munderover" transform="translate(8990.4,0)"><g data-mml-node="mo"><path data-c="2211" d="M60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948Z"></path></g><g data-mml-node="TeXAtom" transform="translate(148.2,-1087.9) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(345,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mn" transform="translate(1123,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g></g><g data-mml-node="mn" transform="translate(545.2,1150) scale(0.707)"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z"></path></g></g><g data-mml-node="mfrac" transform="translate(10601.1,0)"><g data-mml-node="msub" transform="translate(743,676)"><g data-mml-node="mi"><path data-c="1D446" d="M308 24Q367 24 416 76T466 197Q466 260 414 284Q308 311 278 321T236 341Q176 383 176 462Q176 523 208 573T273 648Q302 673 343 688T407 704H418H425Q521 704 564 640Q565 640 577 653T603 682T623 704Q624 704 627 704T632 705Q645 705 645 698T617 577T585 459T569 456Q549 456 549 465Q549 471 550 475Q550 478 551 494T553 520Q553 554 544 579T526 616T501 641Q465 662 419 662Q362 662 313 616T263 510Q263 480 278 458T319 427Q323 425 389 408T456 390Q490 379 522 342T554 242Q554 216 546 186Q541 164 528 137T492 78T426 18T332 -20Q320 -22 298 -22Q199 -22 144 33L134 44L106 13Q83 -14 78 -18T65 -22Q52 -22 52 -14Q52 -11 110 221Q112 227 130 227H143Q149 221 149 216Q149 214 148 207T144 186T142 153Q144 114 160 87T203 47T255 29T308 24Z"></path></g><g data-mml-node="mi" transform="translate(646,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g></g><g data-mml-node="mrow" transform="translate(220,-710)"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z"></path></g><g data-mml-node="mi" transform="translate(553,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g></g><g data-mml-node="mo" transform="translate(847,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(1236,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(1597,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g><rect width="2186" height="60" x="120" y="220"></rect></g></g></g></svg></mjx-container></p>
<p>演奏者が指や手のひらの位置をテルミン側の極板に近づけたり離したりすることで、静電容量が変化することが分かります。<br><mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.357ex;" xmlns="http://www.w3.org/2000/svg" width="2.127ex" height="1.952ex" role="img" focusable="false" viewBox="0 -705 940 862.8"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D446" d="M308 24Q367 24 416 76T466 197Q466 260 414 284Q308 311 278 321T236 341Q176 383 176 462Q176 523 208 573T273 648Q302 673 343 688T407 704H418H425Q521 704 564 640Q565 640 577 653T603 682T623 704Q624 704 627 704T632 705Q645 705 645 698T617 577T585 459T569 456Q549 456 549 465Q549 471 550 475Q550 478 551 494T553 520Q553 554 544 579T526 616T501 641Q465 662 419 662Q362 662 313 616T263 510Q263 480 278 458T319 427Q323 425 389 408T456 390Q490 379 522 342T554 242Q554 216 546 186Q541 164 528 137T492 78T426 18T332 -20Q320 -22 298 -22Q199 -22 144 33L134 44L106 13Q83 -14 78 -18T65 -22Q52 -22 52 -14Q52 -11 110 221Q112 227 130 227H143Q149 221 149 216Q149 214 148 207T144 186T142 153Q144 114 160 87T203 47T255 29T308 24Z"></path></g><g data-mml-node="mi" transform="translate(646,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g></g></g></g></svg></mjx-container>もテルミン側の極板と指や手のひらの角度に応じて変化させればもうちょっと正確になりますが、ここでは割愛します。</p>
<h4 id="テルミンから出る音">テルミンから出る音</h4><p>以上より、テルミンから出る音の波形<mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="4.036ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 1784 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D446" d="M308 24Q367 24 416 76T466 197Q466 260 414 284Q308 311 278 321T236 341Q176 383 176 462Q176 523 208 573T273 648Q302 673 343 688T407 704H418H425Q521 704 564 640Q565 640 577 653T603 682T623 704Q624 704 627 704T632 705Q645 705 645 698T617 577T585 459T569 456Q549 456 549 465Q549 471 550 475Q550 478 551 494T553 520Q553 554 544 579T526 616T501 641Q465 662 419 662Q362 662 313 616T263 510Q263 480 278 458T319 427Q323 425 389 408T456 390Q490 379 522 342T554 242Q554 216 546 186Q541 164 528 137T492 78T426 18T332 -20Q320 -22 298 -22Q199 -22 144 33L134 44L106 13Q83 -14 78 -18T65 -22Q52 -22 52 -14Q52 -11 110 221Q112 227 130 227H143Q149 221 149 216Q149 214 148 207T144 186T142 153Q144 114 160 87T203 47T255 29T308 24Z"></path></g><g data-mml-node="mo" transform="translate(645,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(1034,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(1395,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g></g></svg></mjx-container>は以下の数式で表されます。</p>
<p><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="23.979ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 10598.6 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D446" d="M308 24Q367 24 416 76T466 197Q466 260 414 284Q308 311 278 321T236 341Q176 383 176 462Q176 523 208 573T273 648Q302 673 343 688T407 704H418H425Q521 704 564 640Q565 640 577 653T603 682T623 704Q624 704 627 704T632 705Q645 705 645 698T617 577T585 459T569 456Q549 456 549 465Q549 471 550 475Q550 478 551 494T553 520Q553 554 544 579T526 616T501 641Q465 662 419 662Q362 662 313 616T263 510Q263 480 278 458T319 427Q323 425 389 408T456 390Q490 379 522 342T554 242Q554 216 546 186Q541 164 528 137T492 78T426 18T332 -20Q320 -22 298 -22Q199 -22 144 33L134 44L106 13Q83 -14 78 -18T65 -22Q52 -22 52 -14Q52 -11 110 221Q112 227 130 227H143Q149 221 149 216Q149 214 148 207T144 186T142 153Q144 114 160 87T203 47T255 29T308 24Z"></path></g><g data-mml-node="mo" transform="translate(645,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(1034,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(1395,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(2061.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mi" transform="translate(3117.6,0)"><path data-c="1D434" d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z"></path></g><g data-mml-node="mi" transform="translate(3867.6,0)"><path data-c="1D43A" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q492 659 471 656T418 643T357 615T294 567T236 496T189 394T158 260Q156 242 156 221Q156 173 170 136T206 79T256 45T308 28T353 24Q407 24 452 47T514 106Q517 114 529 161T541 214Q541 222 528 224T468 227H431Q425 233 425 235T427 254Q431 267 437 273H454Q494 271 594 271Q634 271 659 271T695 272T707 272Q721 272 721 263Q721 261 719 249Q714 230 709 228Q706 227 694 227Q674 227 653 224Q646 221 643 215T629 164Q620 131 614 108Q589 6 586 3Q584 1 581 1Q571 1 553 21T530 52Q530 53 528 52T522 47Q448 -22 322 -22Q201 -22 126 55T50 252Z"></path></g><g data-mml-node="mo" transform="translate(4653.6,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(5042.6,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(5403.6,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mi" transform="translate(5959.2,0)"><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z"></path><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(394,0)"></path><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(672,0)"></path></g><g data-mml-node="mo" transform="translate(7187.2,0)"><path data-c="2061" d=""></path></g><g data-mml-node="mrow" transform="translate(7353.9,0)"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(389,0)"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z"></path></g><g data-mml-node="mrow" transform="translate(1105.7,0)"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(389,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(750,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g><g data-mml-node="mi" transform="translate(2244.7,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z"></path></g><g data-mml-node="mo" transform="translate(2605.7,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g><g data-mml-node="mtext" transform="translate(10348.6,0)"><path data-c="A0" d=""></path></g></g></g></svg></mjx-container><br><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -0.452ex;" xmlns="http://www.w3.org/2000/svg" width="28.47ex" height="2.149ex" role="img" focusable="false" viewBox="0 -750 12583.6 950"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D434" d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z"></path></g><g data-mml-node="mo" transform="translate(1027.8,0)"><path data-c="3A" d="M78 370Q78 394 95 412T138 430Q162 430 180 414T199 371Q199 346 182 328T139 310T96 327T78 370ZM78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z"></path></g><g data-mml-node="mi" transform="translate(1583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">音</text></g><g data-mml-node="mi" transform="translate(2583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">量</text></g><g data-mml-node="mi" transform="translate(3583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">の</text></g><g data-mml-node="mi" transform="translate(4583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">基</text></g><g data-mml-node="mi" transform="translate(5583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">準</text></g><g data-mml-node="mi" transform="translate(6583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">と</text></g><g data-mml-node="mi" transform="translate(7583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">な</text></g><g data-mml-node="mi" transform="translate(8583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">る</text></g><g data-mml-node="mi" transform="translate(9583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">固</text></g><g data-mml-node="mi" transform="translate(10583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">定</text></g><g data-mml-node="mi" transform="translate(11583.6,0)"><text data-variant="normal" transform="scale(1,-1)" font-size="884px" font-family="serif">値</text></g></g></g></svg></mjx-container></p>
<p>上記のように仮定・導出した各数式をシミュレータでは使っていました。<br>先にこちらの項を読まれた方は、作ってみるまでお戻りください。</p>
<p>補足も含めて、本記事は以上です。</p>
<div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="vertical-align: top; padding-right: 10px;">1.</span><span style="vertical-align: top;">Meta Quest 2技術仕様 https://aws.amazon.com/jp/rds/pricing/https://store.facebook.com/jp/quest/products/quest-2/</span> ↩</li><li id="fn:2"><span style="vertical-align: top; padding-right: 10px;">2.</span><span style="vertical-align: top;">Unity VR project template https://docs.unity3d.com/ja/2021.3/Manual/xr-template-vr.html</span> ↩</li></ol></div></div>]]></content>
    <summary type="html">長らく買おう買おうと思っていたMeta Quest 2をとうとう買いました。Meta Quest 2向けに作ってみた、VRテルミンシミュレータというものを題材に記事を書きます。作ったものはこちらです。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="MetaQuest" scheme="https://future-architect.github.io/tags/MetaQuest/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
    <category term="音楽" scheme="https://future-architect.github.io/tags/%E9%9F%B3%E6%A5%BD/"/>
  </entry>
  <entry>
    <title>ブラサカ活動報告～ストーンフリープロジェクト編～</title>
    <link href="https://future-architect.github.io/articles/20210419a/"/>
    <id>https://future-architect.github.io/articles/20210419a/</id>
    <published>2021-04-18T15:00:00.000Z</published>
    <updated>2021-04-18T15:00:00.000Z</updated>
    <author><name>中井大貴</name></author>
    <content type="html"><![CDATA[<h2 id="はじめに">はじめに</h2><p>こんにちは。ブラサカチームの中井です。</p>
<p>スポーツ団体の事業をITで支援する取り組みにてブラインドサッカーチームでVRを駆使したフィットネスアプリを制作しました。活動・成果を報告します。</p>
<h2 id="フューチャーのスポーツ団体の事業をITで支援する取り組みとは？">フューチャーのスポーツ団体の事業をITで支援する取り組みとは？</h2><p>「スポーツの振興を目指しテクノロジーとアイデアでFuture Group発の価値を作る」という目的のもと、若手メンバーが中心となり主に以下４つの非営利有志活動をしています。</p>
<blockquote>
<ol>
<li>ブラインドサッカーVR体験</li>
<li>晴海選手村地区開発</li>
<li>キッズ企画（アイデアソン・ハッカソン）</li>
<li>ラグビー観戦</li>
</ol>
</blockquote>
<p>私たちブラインドサッカーチームは、（1）のブラインドサッカーVR体験を行っています。</p>
<p>主な活動として…</p>
<blockquote>
<ul>
<li>ブラインドサッカーを疑似体験できるアプリの開発・提供</li>
<li>ブラインドサッカーの認知度を上げるためのIT施策の検討・立案</li>
<li>小学校に向けたスポ育事業</li>
</ul>
</blockquote>
<p>をしています。</p>
<p>スポーツ団体の事業をITで支援する取り組みの過去の活動を以下記事で紹介しています。興味のある方はぜひご覧ください。</p>
<ul>
<li>Oculus Questで作る入院中の子どもたちに向けたパラスポーツ体験 | フューチャー技術ブログ</li>
</ul>
<p>また、昨年は小学生向けのスポーツ教育の推進も行い、品川区立日野学園にて実施したブラインドサッカーの体験授業が、文部科学省「青少年の体験活動推進企業表彰」奨励賞を受賞しました！</p>
<ul>
<li>フューチャーのＣＳＲ事業 フューチャー イノベーション フォーラム（ＦＩＦ） 文部科学省 「青少年の体験活動推進企業表彰」 ２年連続受賞</li>
</ul>
<p>このように日々活動領域を広げながら活動をしています。</p>
<h2 id="ストーンフリープロジェクトの発足">ストーンフリープロジェクトの発足</h2><p>2020年までは上述の通り盛んに活動していました。しかし、新型コロナウィルスの影響で今まで通り活動ができない状況。コロナ渦で何かできることはないか、VRを活かして状況を少しでも変えることができないか、チーム内で議論を重ねました。</p>
<p>「以前よりもジムに行きづらくなった」「リモートワークにより通勤が無くなり、運動不足となっている」という意見が多数でたことから、 <strong>VR×フィットネス</strong> というテーマでアプリを制作することにしました。</p>
<br>

<p>題して、『<strong>ストーンフリープロジェクト</strong>』。</p>
<br>

<p>このプロジェクトの行く末はどうなるのか、果たしてチームメンバーの運動不足は解消されるのでしょうか…。</p>
<p>（※ストーンフリーは『ジョジョの奇妙な冒険』第6部に出てくるスタンド名が由来となっています。第6部の刑務所から脱獄するストーリーから、コロナの困難な状況から脱出することを祈り、命名しました）。</p>
<h2 id="VR×フィットネス">VR×フィットネス</h2><p>ブラサカチームの渡辺です。VRフィットネスの現状と、私たちのチームの『ストーンフリープロジェクト』での取り組みを紹介します。</p>
<h2 id="VRフィットネスの現状">VRフィットネスの現状</h2><p>近年一般に普及したVRシステムが有する、ヘッドマウントディスプレイ：HMD（頭部）やコントローラー・トラッカー（手）の位置・姿勢計測を利用して、リズムゲームやスポーツなど体全体を動かすタイトルが多数リリースされています。その運動量の大きさから、VRゲームはしばしばフィットネス効果が注目され、さらにVRとゲームの親和性から、遊びながら体を動かせるという有効性を生み出しています。</p>
<p>Oculus Questでは、各タイトル毎に消費カロリーなどが可視化されるOculus Move <sup id="fnref:1">1</sup>がリリースされ、プラットフォームの開発も進んでいます。一方、主にトレーニングジムでの利用を意識して、本格的なフィットネスマシンと組み合わせたVRシステムも開発されています <sup id="fnref:2">2</sup>。</p>
<p>ICAROSでは、4つん這いでマシンに乗り、体感トレーニングをしながら鳥のように空を飛ぶ体験ができます。またVRボートトレーニングでは、ローイング（ボート漕ぎ運動）マシンを用いて、様々な環境でのボート漕ぎが体験できます。</p>
<p>これらのフィットネス器具を用いたシステムは、フィットネス効率向上だけでなく、ICAROSの乗り物（モーションプラットフォーム）による移動感覚提示や、ローイングマシンによるハプティック（力触覚）フィードバックといった、VR体験としての臨場感向上というメリットがあります。</p>
<p>しかし、大型マシンであるが故に設置面積が大きく、一般的に高価なため、家庭で楽しむハードルは高いと言わざるを得ません。また、ジムで使用されるフィットネスマシンは、特定のフィットネス用途に特化されており、これ1つで様々な種類の運動ができないという点で、汎用性の無さがデメリットであると考えられます。</p>
<img fetchpriority="high" src="/images/2021/20210419a/img2.jpg" alt="ICAROSやVRボートトレーニングをしている人" width="977" height="315">
 ICAROS　　　　　　　　　　　　　　　VRボートトレーニング

<h2 id="VRTuber">VRTuber</h2><p>そこで私たちのチームは、</p>
<blockquote>
<ul>
<li>遊びながら、フィットネス効果を生み出す</li>
<li>家庭でも、気軽に運動を楽しめる</li>
<li>フィットネス器具により、効率的でまた汎用的な運動を可能とする</li>
<li>フィットネス器具によるハプティックフィードバックなどを生かし、VRフィットネスゲームとしての体験をより楽しいものとする</li>
</ul>
</blockquote>
<p>…というポイントを満たすVR×フィットネスとして、 <strong>VRTuber（VR×Tube）</strong> を開発しました。</p>
<img src="/images/2021/20210419a/img3.jpg" alt="VR機器とフィットネスをしている人" width="1075" height="291" loading="lazy">

<p>チューブを用いたトレーニング方法は多岐にわたり、かつ安価で収納も容易です。今回はVRTuberの第一弾として、ローイングをトリガーにしたシューティングゲームを開発しました。</p>
<p>使用した機材はOculus Quest <sup id="fnref:3">3</sup>、手首に装着できるリストバンド付きチューブ <sup id="fnref:4">4</sup>です。チューブを装着しながらOculus Touch（コントローラー）を持てるようにすることで、Oculus Touchの位置計測を利用して、ユーザが行うローイングを検出します。</p>
<p>HMDに表示する映像はUnityで作成しました。弾を打つ方向はOculus Touchのスティックで変更可能で、ローイングにより放った弾によりボクセルアニマルを倒す事ができます。ユーザのHPや、ボクセルアニマルの出現頻度・速度といったパラメータは変更可能です。</p>
<img src="/images/2021/20210419a/VRTuber2.gif" alt="ゲーム動作画像" width="400" height="200" loading="lazy">

<p>このゲームを体験した主観的感想としては、ゲームとしてはそれなりに楽しめましたが、ローイングで弾を打つことについては、コントローラーのボタン同様ある種の約束事（例：×ボタンを押すと銃を打つ）の存在は拭えませんでした。</p>
<p>この点からも、チューブによるハプティックフィードバックを、Virtual Worldからの自然なフィードバックとして利用できているとは言い難いです。</p>
<p>今回はチューブトレーニングによる動きをトリガーにして、まずゲームを作ってみようということで作成しましたが、正しいコンテンツ選択と作りこみをすることで、チューブによるハプティックフィードバックも十分に生かし、よりリアルな体験が可能と考えています。</p>
<h2 id="おわりに">おわりに</h2><p>このようにブラサカチームでは、2020年を過ぎた現在も活動しています。</p>
<p>少しでも私たちの活動を面白いと思っていただけた方は、お問い合わせ かTwitterにて、ぜひご連絡ください。</p>
<p>お待ちしています！！</p>
<div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="vertical-align: top; padding-right: 10px;">1.</span><span style="vertical-align: top;">Oculus Move: Oculus Move: VR Fitness Tracking | Oculus - Youtube</span> ↩</li><li id="fn:2"><span style="vertical-align: top; padding-right: 10px;">2.</span><span style="vertical-align: top;">funandbody: http://www.funandbody.com/</span> ↩</li><li id="fn:3"><span style="vertical-align: top; padding-right: 10px;">3.</span><span style="vertical-align: top;">Oculus Quest2: https://www.oculus.com/quest-2/</span> ↩</li><li id="fn:4"><span style="vertical-align: top; padding-right: 10px;">4.</span><span style="vertical-align: top;">チューブ: https://www.amazon.co.jp/-/en/Training-Fitness-Exercise-Dieting-Strength/dp/B01EYFSNLE</span> ↩</li></ol></div></div>]]></content>
    <summary type="html">ブラサカチームの中井です。Tokyo2020のブラインドサッカーチームでVRを駆使したフィットネスアプリを制作したので、その活動・成果を報告をさせていただきます。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
    <category term="ブラインドサッカー" scheme="https://future-architect.github.io/tags/%E3%83%96%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%89%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC/"/>
  </entry>
  <entry>
    <title>自分の分身(3Dアバター)と自作ワールドを作ってみた</title>
    <link href="https://future-architect.github.io/articles/20210108/"/>
    <id>https://future-architect.github.io/articles/20210108/</id>
    <published>2021-01-07T15:00:00.000Z</published>
    <updated>2021-01-07T15:00:00.000Z</updated>
    <author><name>阿保渚</name></author>
    <content type="html"><![CDATA[<h2 id="はじめに">はじめに</h2><p>はじめまして！ Unity初心者の阿保ですଘ(੭ˊ꒳ˋ)੭</p>
<p>このご時世でフューチャーも完全リモートワークとなり、便利になったことや不便になったことがあります。</p>
<p><strong>【便利になったこと】</strong></p>
<ul>
<li>仕事の合間にカンファレンスや勉強会に参加し放題</li>
<li>出勤に使用してた体力を自分の好きなことをやる体力として使える</li>
<li>仕事を終えた瞬間から自分の時間として使える</li>
</ul>
<p><strong>【不便になったこと】</strong></p>
<ul>
<li>家にいるのに気合を入れて顔を作って会議に参加するのがめんどくさい</li>
<li>顔が見えない会議の場合に感情が読み取れず、相手が怒っているように感じる</li>
<li>外に出歩けないから何かを体験するということができない</li>
</ul>
<p>不便になったことを改善するために3Dアバターや仮想空間技術を使いこなして<br>もっと便利な世の中にすることを企みこの度、VRの勉強をはじめました。<br>まずは顔がいい分身とみんなが穏やかな気持ちになれる仮想世界を作ってみました٩(ˊᗜˋ*)و。</p>
<h2 id="何を作ったか">何を作ったか</h2><ul>
<li>自分の分身(３Dアバター)</li>
<li>分身を動かす仮想世界</li>
</ul>
<p>実際に作った自分の分身と仮想世界がこちら↓↓<br><img fetchpriority="high" src="/images/2021/20210108/2020-12-31_18h51_23.png" width="563" height="464"></p>
<h2 id="環境">環境</h2><ul>
<li>Windows 10</li>
<li>VRoidStudio-v0.11.2</li>
<li>Unity Hub 2.4.0</li>
<li>Unity 2019.4.9f1</li>
</ul>
<h2 id="自分の分身を作成">自分の分身を作成</h2><p>まずはVRoidStudioを使って自分のオリジナル3Dアバターを作成します。</p>
<p>VRoidStudioは無料で提供されている3Dモデル作成アプリです。</p>
<p>基本となるモデルがあり、</p>
<ul>
<li>顔</li>
<li>髪型</li>
<li>体型</li>
<li>洋服</li>
</ul>
<p>が編集でき自分のオリジナルのアバターが作成できます。</p>
<p>VRoidStudioの環境構築や3Dアバターの作成はこちら↓を参考にしました。<br>https://degifeel.com/vroid-studio-how-to/</p>
<p>作った分身はこちらです↓<br><img src="/images/2021/20210108/2020-12-31_16h33_36.png" width="1200" height="669" loading="lazy"></p>
<h2 id="仮想世界の作成">仮想世界の作成</h2><p>ここからはUnityで神になる本を参考に仮想世界を作っていきます。</p>
<ul>
<li>UnityHubから新規3Dプロジェクトを作成</li>
<li>右上のLayoutドロップダウンから2by3を選択</li>
<li>まずは大地を作成<ul>
<li>Game&gt;3D Object &gt; Terrainの順番に選択<img src="/images/2021/20210108/image.png" width="1200" height="722" loading="lazy"></li>
<li>HierarchyPositionタブに表示されている「Terrain」をクリック</li>
<li>Inspectorタブに表示されている「Position」をX:-500 Y:0 Z:-500に変更し大地が世界の中心にくるようにする<img src="/images/2021/20210108/2020-12-29_16h05_09.png" width="1200" height="473" loading="lazy"></li>
<li>Ctl + 9でAsset Storeを表示</li>
<li>「Standard Assets」をインポート<ul>
<li>Allボタンで全てにチェックをつけてImportボタンを押下</li>
</ul>
</li>
<li>HierarchyPositionタブに表示されているTerrainを押下</li>
<li>Inspectorタブに表示されているTerrainの筆のアイコンを押下</li>
<li>Edit Terrain Layers…&gt;Create Layerの順に選択<img src="/images/2021/20210108/2020-12-29_16h30_01.png" width="1200" height="577" loading="lazy"></li>
<li>検索窓に先ほどImportしたStandard Assetsの地面素材である「GrassRockyAlbedo」を入力し画像を押下する</li>
<li>Textureの枠に画像が設定されていることを確認してダブルクリックすると地面が「GrassRockyAlbedo」に染まる</li>
<li>Inspectorタブに表示されているTerrainの木のアイコンを押下</li>
<li>「Edit Trees…」&gt;「Add Tree」を選択</li>
<li>Tree Prefabに「Broadleaf_Desktop」という樹木を選択</li>
<li>クリックを長押しすることで地面に木を生やすことができる<img src="/images/2021/20210108/2020-12-29_23h19_22.png" width="1200" height="605" loading="lazy"></li>
<li>Inspectorタブに表示されているTerrainの草花のアイコンを押下</li>
<li>「Edit Details…」&gt;「Add Grass Texture」を選択</li>
<li>Detail Textureに「Grass」と入力しでてきた好きな草を選択しAddボタンを押下</li>
<li>木と同じくクリック長押しで草を生やせる</li>
<li>上記要領で3Dワールドを作りこんでいく<img src="/images/2021/20210108/2020-12-29_23h46_07.png" width="1200" height="710" loading="lazy"></li>
</ul>
</li>
</ul>
<h2 id="3Dワールドに自分の分身を誕生させる">3Dワールドに自分の分身を誕生させる</h2><ul>
<li>VRoidStudioで作った分身をUnityで動かせるようにするためのパッケージを導入します。<ul>
<li>UniVRMをgithubから最新バージョンを選んでUniVRM-X.XX.X_XXXX.unitypackageをDownload<img src="/images/2021/20210108/2020-12-31_10h00_28.png" width="1200" height="1082" loading="lazy"></li>
<li>DownloadしたパッケージをUnityのProjectウィンドウにDragu&amp;Dropする<img src="/images/2021/20210108/2020-12-31_11h03_42.png" width="1200" height="722" loading="lazy"></li>
<li>Import Unity Packageのダイアログが開くので下の「ALL」&gt;「Import」の順に押下しPackageをImportする</li>
</ul>
</li>
<li>自分の分身をUnityへImport<ul>
<li>VRoidStudioで作成した自分のvrmファイルをUnityのProjectウィンドウのAssetに配下にDragu&amp;Drop</li>
</ul>
</li>
<li>分身を操作できるようにセットアップ<ul>
<li>ここからは分身の操作が見えやすいようにUnity右上のLayoutを「Default」へ変更</li>
<li>SceneにAsset配下の自分の分身(Prefab Asset)ファイルをDrag&amp;Dropで投下<img src="/images/2021/20210108/2020-12-31_12h08_16.png" width="1200" height="678" loading="lazy"></li>
<li>自分の分身ファイルを選択した際に表示される右側のInspectorタブのAnimatorのControllerに「ThirdPersonAnimatorController」をセットする</li>
<li>「Capsule Collider」の値を変化させて分身の大きさを調整する<ul>
<li>CenterをX:0 Y:0.8 Z:0に設定</li>
<li>Heightを1.81に設定<img src="/images/2021/20210108/2020-12-31_15h35_19.png" width="546" height="806" loading="lazy"></li>
</ul>
</li>
<li>「Third Person Character」の「Ground Check Distance」値を0.3に変化する<ul>
<li>歩く速さなど動作が変化するので自分の好みの値に調整してください<img src="/images/2021/20210108/2020-12-31_14h54_43.png" width="554" height="499" loading="lazy"></li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="分身を動かしてみる">分身を動かしてみる</h2><ul>
<li>動かした際に分身をカメラが追ってくれるように設定<ul>
<li>「Hierarchy」&gt;「Main Camera」を分身フォルダ配下へDrag&amp;Drop<img src="/images/2021/20210108/2020-12-31_15h06_30.png" width="430" height="688" loading="lazy"></li>
<li>分身フォルダ配下に移動していることを確認</li>
<li>Main Cameraの「Inspector」のMain Cameraのチェックを外す<img src="/images/2021/20210108/2020-12-31_15h09_58.png" width="1200" height="514" loading="lazy"></li>
<li>Projectの検索窓に「MultipurposeCameraRig」と入力</li>
<li>表示された「MultipurposeCameraRig」を「Hierarchy」へDrag&amp;Dropする</li>
<li>「MultipurposeCameraRig」を選択し、右のInspectorに「MultipurposeCameraRig」を表示させる</li>
<li>「Auto Cam(Script)」のTargetに分身フォルダをDrag&amp;Dropする<img src="/images/2021/20210108/2020-12-31_15h40_30.png" width="1200" height="679" loading="lazy"></li>
<li>上部のPlayボタン(▷)を押下して分身を動かす<ul>
<li>w:前進 S:後進 A：右移動 D：左移動 Space：ジャンプ</li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">自分の分身(3Dアバター)を自作ワールド<br>で動かした動画をYouTubeに上げましたଘ(੭ˊ꒳​ˋ)੭<br>木と草と空しかないですが汗https://t.co/3ipaXtujef @YouTubeより #Unity #unity3d #VRoid</p>&mdash; DevAbo (@DevAbo1) January 5, 2021</blockquote> 

<p>ちょっと空もいじってみました。</p>
<p>驚きのジャンプ力ですがいい感じに動いてます(๑òωó๑)</p>
<p>本日はここまでですが、動物や家など配置させて仮想空間を作りこんだり、他の人をこのワールドに召喚し、VoiceChat機能を追加することで家から出ずに顔も作らず、心穏やかにコミュニケーションがとれそうです。</p>
]]></content>
    <summary type="html">Unity初心者の阿保です。このご時世でフューチャーも完全リモートワークとなり、便利になったことや不便になったことがあります。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="3D" scheme="https://future-architect.github.io/tags/3D/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
    <category term="リモートワーク" scheme="https://future-architect.github.io/tags/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF/"/>
  </entry>
  <entry>
    <title>Oculus Questで作る入院中の子どもたちに向けたパラスポーツ体験</title>
    <link href="https://future-architect.github.io/articles/20190925/"/>
    <id>https://future-architect.github.io/articles/20190925/</id>
    <published>2019-09-25T01:49:43.000Z</published>
    <updated>2019-09-25T01:49:43.000Z</updated>
    <author><name>西村祐美</name></author>
    <content type="html"><![CDATA[<h2 id="はじめに">はじめに</h2><p>こんにちは、フューチャーアーキテクト入社3年目の西村です。</p>
<p>いよいよ2020年に開催される東京オリンピック・パラリンピックまで1年を切りましたね。<br>フューチャーでは2018年から <strong>スポーツ団体の事業をITで支援するプロジェクト</strong> に取り組んでいます。<br><img fetchpriority="high" class="img-middle-size" src="/images/2019/20190925/photo_20190925_01.png" width="512" height="292"></p>
<blockquote>
<p>同社グループではプロスポーツにおけるITコンサルティングで複数の実績があり、強みとしているテクノロジー分野での技術力や経験を生かして、スポーツの魅力をより広く伝え、競技のファンを増やすための活動を行っていく。</p>
</blockquote>
<p>一例としてブラインドサッカーの支援などを行っています。</p>
<img class="img-middle-size" src="/images/2019/20190925/4.png" width="322" height="178" loading="lazy">

<blockquote>
<p>競技をVR（バーチャル・リアリティー）体験できるイベントを行いました。ブラインドサッカーの選手は視覚が無いため、ボールの転がる音や、味方からの指示、相手選手の声を頼りにプレーしています。こうしたブラインドサッカーの世界を一般人でも気軽に理解できるよう、音を頼りにプレーするシミュレーション形式の体験アプリを開発しました」</p>
</blockquote>
<p>このプロジェクトの中で私が関わっている取り組みとして、<strong>Oculus Questを使った入院中の子どもたちに向けてパラスポーツのアプリ</strong> を作ってるので、今回ご紹介します。</p>
<h2 id="入院中の子どもたちに、スポーツの楽しさを伝えたい">入院中の子どもたちに、スポーツの楽しさを伝えたい</h2><p>上記の記事にある通り、元パラアイスホッケー日本代表の上原大祐さんと一緒に、入院中の子どもたちに向けたパラスポーツ体験プロジェクトを進めています。</p>
<blockquote>
<p>何かしらの事情で歩けなくなった子供たちや、入院中の子供たちに、ITを使ってパラスポーツを体験してもらうことができないかと考えています。スポーツの楽しさを感じてもらい、実際にパラスポーツを志してもらうことだったり、それをモチベーションにリハビリを頑張ってもらったり。</p>
</blockquote>
<p>スポーツを通して、何かしらの事情で歩けなくなった子どもたちや入院中の子どもたちを応援したい、という思いで上原さんは活動されています。<br>そして、我々もその思いに共感し、今回一緒にプロジェクトを推進することになりました。</p>
<p>入院している子どもたちの状況は様々で、入院中の多くの時間をベッドの上で過ごしています。<br>スポーツを通して応援しようとしても、実際に全身を使った運動をするのは難しい子どもたちばかりです。</p>
<p>そのため、ITで<strong>『ベッドの上できるスポーツ』</strong>を提供し、ITを使ってスポーツの楽しさを子どもたちに体験してもらいたいと考えています。</p>
<h2 id="『ベッドの上でできるスポーツ』をITで">『ベッドの上でできるスポーツ』をITで</h2><p>そのため、ITで<strong>『ベッドの上でできるスポーツ』</strong>を提供し、ITを使ってスポーツの楽しさを子どもたちに体験してもらいたいと考えています。</p>
<p>具体的に、どんな『ベッドの上でできるスポーツ』をITで提供しようとしているかというと、上原さんが昔選手としてご活躍されていたパラアイスホッケーを体験するVRアプリを作ろうとしています。</p>
<p>パラアイスホッケー（別名アイススレッジホッケー）は、下半身に障害を持つ人がアイスホッケーを行えるよう改良された障がい者スポーツで、スレッジと呼ばれるソリに乗り、両手にスティックを持って氷の上で競技します。</p>
<img class="img-small-size" src="/images/2019/20190925/5.png" width="500" height="510" loading="lazy">

<p>このアイススレッジホッケーを『ベッドの上でできるスポーツ』にするためにはどうしたら良いか考えました。</p>
<p>ちょうどデバイス検討中にOculus Questが発売される情報があり、またOculus Questは<br><strong>・スタンドアローンでベッド上でもお手軽に利用可能</strong><br><strong>・両手コントローラーで、スティックを再現するのに最適</strong><br>だったため、Oculus Questをデバイスとして採用しました。</p>
<h2 id="アイススレッジホッケー体験VR開発プロジェクト始動！">アイススレッジホッケー体験VR開発プロジェクト始動！</h2><p>アイススレッジホッケーについて、まさに選手として活躍されていた上原さんから実体験を聞きたい！ ということで、<br>7月にVRアプリの試作品を持って、上原さんとミーティングしました。</p>
<img class="img-middle-size" src="/images/2019/20190925/photo_20190925_02.jpeg" width="512" height="288" loading="lazy">

<p>実際に体験してもらった感想をもらったり</p>
<img class="img-middle-size" src="/images/2019/20190925/photo_20190925_03.jpeg" width="512" height="288" loading="lazy">

<p>改めてITを使ってスポーツの楽しさを伝えたい、というお互いの熱い思いを共有しました！</p>
<p>まだまだ試作段階ですが、実際に何作ったか、どんなコード書いたかは、次回実装編にてご紹介します！</p>
<h2 id="さいごに">さいごに</h2><p>スポーツの楽しさを感じてもらい、実際にパラスポーツを志してもらうことだったり、それをモチベーションにリハビリを頑張ってもらったり。<br>ITの力で今まで体験できなかったことがベッドの上でもできるようになると、きっと子どもたちの未来に新たな可能性が広がっていくことに繋がると信じています。</p>
<p>今後は、プロトタイプを持って特別支援学校や病院を巡り、子どもたちに実際に体験をしてもらい、フィードバックをもらう予定です。</p>
<p>VRアプリが完成したら、またご紹介させていただきたいと思います。</p>
<blockquote>
<ul>
<li><strong>治療のモチベーションが無いので、目標が欲しい</strong></li>
<li><strong>歩いたことが無いので、歩く体験をしてみたい</strong></li>
<li><strong>ベッドから動けなくても、上原さんの行っている活動に参加してみたい</strong></li>
</ul>
</blockquote>
<p>といった子どもたちの思いを叶えるべく、VRを有効活用できるアイデアを<strong>大大大募集</strong>しています！</p>
<p>こんな活動に関心があったら、お問い合わせ かTwitterに連絡ください。</p>
<p>最後まで読んでいただき、ありがとうございました。</p>
]]></content>
    <summary type="html">フューチャーでは昨年からスポーツ団体の事業をITで支援するプロジェクトに取り組んでいます。一例としてブラインドサッカーの支援などを行っています。このプロジェクトの中で私が関わっている取り組みとして、Oculus Questを使った入院中の子どもたちに向けてパラスポーツのアプリを作ってるので、今回ご紹介します。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
    <category term="スポーツ" scheme="https://future-architect.github.io/tags/%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84/"/>
    <category term="ブラインドサッカー" scheme="https://future-architect.github.io/tags/%E3%83%96%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%89%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC/"/>
    <category term="子ども" scheme="https://future-architect.github.io/tags/%E5%AD%90%E3%81%A9%E3%82%82/"/>
  </entry>
  <entry>
    <title>「スマートグラスを使った革新的なビジネスを考えるアイデアソン」の実施報告</title>
    <link href="https://future-architect.github.io/articles/20190527/"/>
    <id>https://future-architect.github.io/articles/20190527/</id>
    <published>2019-05-27T00:00:00.000Z</published>
    <updated>2019-05-27T00:00:00.000Z</updated>
    <author><name>佐藤輝正</name></author>
    <content type="html"><![CDATA[<p>こんにちは、フューチャーのSAIG（Strategic AI Group）所属の佐藤です。</p>
<p>フューチャー主催でアイデアソンを開催し、運営としてとても勉強になりました。<br>この場をお借りして、当日の様子をお伝えします。</p>
<h2 id="概要">概要</h2><img fetchpriority="high" src="/images/2019/20190527/top.png" width="660" height="266">

<p>Ahmet Misirligul&#x2F;shutterstock.com</p>
<p>2019年3月21日に大崎Think Park Tower 9Fにて、『スマートグラスを使った革新的なビジネスを考えるアイデアソン』と題してアイデアソンを開催しました。</p>
<p>スマートグラスで未来の生活を実現する革新的なビジネスのアイデアを考えたい、そんな熱い気持ちを持った17名の方々にお集まりいただきました。また、スマートグラスを提供している各社が集い、最新のスマートグラスの体験会も開催しました。</p>
<p>お忙しい中アイデアソンにご参加いただいた皆さま、体験会にご協力いただいた各企業様、本当にありがとうございました!</p>
<h3 id="実施内容">実施内容</h3><p>下記スケジュールで実施しました。</p>
<div class="scroll"><table>
<thead>
<tr>
<th align="right">No.</th>
<th align="left">時間</th>
<th align="left">内容</th>
</tr>
</thead>
<tbody><tr>
<td align="right">1</td>
<td align="left">10:30-11:15</td>
<td align="left">各社のスマートグラス体験会・個人でアイデア検討</td>
</tr>
<tr>
<td align="right">2</td>
<td align="left">11:45-12:30</td>
<td align="left">個人のアイデア発表</td>
</tr>
<tr>
<td align="right">3</td>
<td align="left">12:30-12:45</td>
<td align="left">チーム分け</td>
</tr>
<tr>
<td align="right">4</td>
<td align="left">13:30-16:30</td>
<td align="left">アイデアのブラッシュアップ</td>
</tr>
<tr>
<td align="right">5</td>
<td align="left">16:30-17:30</td>
<td align="left">アイデア発表・投票</td>
</tr>
<tr>
<td align="right">6</td>
<td align="left">17:30-19:00</td>
<td align="left">表彰式・懇親会</td>
</tr>
</tbody></table></div>
<h2 id="スマートグラス体験会">スマートグラス体験会</h2><p>アイデアソンを始める前に、各社が販売している最新のスマートグラスの体験会を実施しました。体験会では、協賛企業5社の製品と弊社が所持しているHololensを体験していただきました。</p>
<p>簡単に紹介します。(各製品名をクリックするとHPに飛べます)</p>
<h3 id="JMACS株式会社様">JMACS株式会社様</h3><img src="/images/2019/20190527/1.jpg" width="800" height="534" loading="lazy">

<ul>
<li>HMT-1Z1<ul>
<li>現場作業向け防爆スマートグラス</li>
<li>可燃性ガスが発生する場所や粉塵が存在する場所など、爆発の危険性がある場所で使用可能な国内初のスマートグラス</li>
</ul>
</li>
</ul>
<h3 id="santec株式会社様">santec株式会社様</h3><img src="/images/2019/20190527/2.jpg" width="800" height="534" loading="lazy">

<ul>
<li>M300</li>
<li>AceReal(防塵防滴)<ul>
<li>現場作業向けスマートグラス</li>
<li>スマートグラスで現場映像を本部に送り、本部からの指示画像を目の前のモニタに投影</li>
<li>音声指示を取得することで、より適切な現場対応を実施</li>
</ul>
</li>
</ul>
<h3 id="レノボジャパン株式会社様">レノボジャパン株式会社様</h3><img src="/images/2019/20190527/3.jpg" width="800" height="1196" loading="lazy">

<ul>
<li>Mirage Solo<ul>
<li>世界初のスタンドアローン型でかつDaydream対応、WorldSense搭載のVRヘッドセット</li>
<li>体験会では、避難訓練を疑似体験</li>
</ul>
</li>
</ul>
<h3 id="セイコーエプソン株式会社様">セイコーエプソン株式会社様</h3><img src="/images/2019/20190527/4.jpg" width="1146" height="859" loading="lazy">

<ul>
<li>MOVERIO BT-300<ul>
<li>紙に書いてある絵が立体的に浮かび上がるARグラス</li>
<li>絵に塗った色を投影</li>
</ul>
</li>
<li>MOVERIO BT-300<ul>
<li>いつでもどこでもパーソナルシアターが楽しめるARグラス</li>
<li>リモコン内蔵のAndroid端末の映像を、目の前に大きく投影</li>
</ul>
</li>
</ul>
<h3 id="QDレーザ株式会社様">QDレーザ株式会社様</h3><img src="/images/2019/20190527/5.jpg" width="1000" height="668" loading="lazy">

<ul>
<li>RETISSA Display<ul>
<li>眼球に直接レーザーを照射するARグラス</li>
<li>視力が低い人でも映像が鮮明に見える医療向け機器</li>
</ul>
</li>
</ul>
<h3 id="フューチャー所持機器">フューチャー所持機器</h3><img src="/images/2019/20190527/6.jpg" width="1119" height="1305" loading="lazy">

<ul>
<li>HoloLens<ul>
<li>Microsoft製のARグラス</li>
<li>アイデアソンではFuture社員(澤田)が開発したアプリ『Potato Head』(人の顔をじゃがいもに変換するアプリ)を体験</li>
</ul>
</li>
</ul>
<h2 id="チーム分け・発表準備">チーム分け・発表準備</h2><p>チーム分けと発表準備は、以下の流れで実施しました。</p>
<ol>
<li>1人1アイデア宿題として事前に準備した内容を個人発表</li>
<li>各発表を聞いて良いと思ったアイデアに投票</li>
<li>投票の結果、上位チームの中で「もっと深堀したい!」と思ったアイデアを選び、アイデアごとにチームを組む<ul>
<li>上位に入れなかったアイデアでも、「どうしても自分のアイデアで戦いたい!」と思う人は『情熱枠』として自分のアイデアで参加も可能</li>
</ul>
</li>
<li>制限時間内にアイデアの深堀とプレゼン用スライドを作成し、発表会を実施</li>
</ol>
<img src="/images/2019/20190527/7.jpg" width="1000" height="668" loading="lazy">
<img src="/images/2019/20190527/8.jpg" width="1000" height="668" loading="lazy">
<img src="/images/2019/20190527/9.jpg" width="1000" height="668" loading="lazy">

<p>各チーム時間をフルに使って、アイデアのプラッシュアップと発表資料の作成に取り組んでいました。</p>
<h2 id="アイデア発表">アイデア発表</h2><p>各チーム5分の持ち時間で、以下の順番で発表会を実施しました。</p>
<div class="scroll"><table>
<thead>
<tr>
<th align="right">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
<th align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; チーム名 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
<th align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; タイトル &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
<th align="left">発表内容</th>
</tr>
</thead>
<tbody><tr>
<td align="right">1</td>
<td align="left">SGGG</td>
<td align="left">Smart GyoGyo Glass</td>
<td align="left">漁業へのARの活用。魚群の場所、魚の種類や大きさ(食べごろかどうか)、漁獲可能な量などの情報を表示する。</td>
</tr>
<tr>
<td align="right">2</td>
<td align="left">Team Trust</td>
<td align="left">ARマッチングアプリ</td>
<td align="left">婚活へのARの活用。婚活パーティーなどで、参加者の特徴や趣味が合う参加者などを表示する。分析結果をマッチングビジネスの企業に提供することで、収入も得られる。</td>
</tr>
<tr>
<td align="right">3</td>
<td align="left">TRIATE</td>
<td align="left">WANT ONLY</td>
<td align="left">見たいものだけをARで投影する。例えば、怒っている人を猫やVTuberに変換する。労働をその人が好きな娯楽に変えることもできる。</td>
</tr>
<tr>
<td align="right">4</td>
<td align="left">COACH</td>
<td align="left">What the food looks Like</td>
<td align="left">ARでレストランのメニューを投影。レストランで作られている料理を注文前に表示することで、顧客が期待する大きさや見た目のイメージと実際に提供される料理との乖離を回避する。</td>
</tr>
<tr>
<td align="right">5</td>
<td align="left">キモチ開発</td>
<td align="left">キモチみえるめがね</td>
<td align="left">ARを用いた感情分析・表示による育児支援。子供の感情を表示して育児に役立てる。また、子供の片付けのガイダンス(片付け場所の指示)など、子供の教育にも活用できる。</td>
</tr>
<tr>
<td align="right">6</td>
<td align="left">ハッピーターン</td>
<td align="left">ショパナビ</td>
<td align="left">ARによる買い物支援。家の冷蔵庫など、IoT家電とスマートグラスを連携。買い物が必要な食材等をスマートグラスに表示し、販売されている店舗に誘導する。店舗内でも、当該食材がどこにあるかを表示、誘導する。</td>
</tr>
<tr>
<td align="right">7</td>
<td align="left">ふくじんチーム</td>
<td align="left">アラート・グラス</td>
<td align="left">周囲の危険を表示。例えば、背後から車が来る場合に警告を表示するなどといった機能を提供する。表示だけでなく、音声による警告も発することで、視覚障害者にも対応する。</td>
</tr>
<tr>
<td align="right">8</td>
<td align="left">コーヒー</td>
<td align="left">スタイリングアプリ</td>
<td align="left">女性のスタイリング支援。事前にカメラで体型を撮影し、サイズ等を登録しておくことで、朝、忙しい女性のスタイリングをARで実施する。女性の好みを記録しておくことで、その後のアパレル企業のマーケティングにも活用できる。</td>
</tr>
</tbody></table></div>
<p>各チームとてもユニークで革新的なアイデアの発表でした。</p>
<h2 id="結果発表・表彰式">結果発表・表彰式</h2><p>各チームの発表が終わり、参加者・参加企業・運営メンバーによる投票で順位を決めました。<br>見事、最優秀賞を獲得したアイデアは…</p>
<p><strong>キモチ開発</strong>の<strong>『キモチみえるめがね』!!!</strong></p>
<p>おめでとうございます!</p>
<iframe src="https://www.slideshare.net/slideshow/embed_code/key/JaUJoHOP1qwGuJ"
width="427" height="356" frameborder="0" marginwidth="0"
marginheight="0" scrolling="no" style="border:1px solid #CCC;
border-width:1px; margin-bottom:5px; max-width: 100%;"
allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> 〇〇〇〇〇〇めがね </strong> from
<strong>達彦 徳久</strong> </div>

<p>発表内容は、子育て支援をするためのARグラス。<br>アイデアの背景として、核家族化する日本社会で、育児の大変さも増している現状があります。</p>
<p>ARグラスをかけた親は、まだ話すことのできない子供の感情を読み取り、子供とのコミュニケーションをより密に図ることができるというアイデアでした。</p>
<p>さらに、こどもが大きくなってからはARグラスを装着することで、片付けのガイダンス(片付け場所の指示)が表示され、教育にも活用できるというアイデアも盛り込まれていました。</p>
<p>人は生後間6ヶ月ほどの間は顔認識を頼りにしていること、両手で片付けをすべきであることから、「スマートグラスでなければならない」ことを強く伝えていた点も印象的でした。</p>
<p>キモチ開発チームの2名は、チーム分けをした時点ではそれぞれ情熱枠で1人チームでしたが、ブラッシュアップ中にそれぞれのアイデアを活かして1チームになったとのことです。</p>
<p>それぞれのアイデアを活かしつつ協力して勝ち取った最優秀賞でした。</p>
<img src="/images/2019/20190527/10.jpg" width="1000" height="668" loading="lazy">

<p>キモチ開発のお二人には、2019年05月21日発売予定の『Oculus Quest』が贈呈されます。</p>
<h2 id="まとめ">まとめ</h2><p>今回のアイデアソンのタイトルの通り、<strong>革新的なビジネス</strong>のアイデアがたくさん出たアイデアソンでした。アイデア次第で、ジャンルに囚われることなく様々な場面に活用できるのが、スマートグラスの強みであり面白いところだと感じました。</p>
<p>私は運営としての参加でしたが、次回はアイデアを考える側として参加してみたいと思いました!</p>
<img src="/images/2019/20190527/11.jpg" width="1000" height="668" loading="lazy">
]]></content>
    <summary type="html">スマートグラスで未来の生活を実現する革新的なビジネスのアイデアを考えたい、そんな熱い気持ちを持った17名の方々にお集まりいただきました!</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="HoloLens" scheme="https://future-architect.github.io/tags/HoloLens/"/>
    <category term="アイデアソン" scheme="https://future-architect.github.io/tags/%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2%E3%82%BD%E3%83%B3/"/>
  </entry>
  <entry>
    <title>最新テクノロジーでスポーツアイデアソンをやって中高生に教わった大事なこと</title>
    <link href="https://future-architect.github.io/articles/20171113/"/>
    <id>https://future-architect.github.io/articles/20171113/</id>
    <published>2017-11-13T04:08:13.000Z</published>
    <updated>2017-11-13T04:08:13.000Z</updated>
    <author><name>姜恵林</name></author>
    <content type="html"><![CDATA[<h2 id="はじめに">はじめに</h2><p>こんにちは、フューチャーアーキテクト入社2年目の姜です。</p>
<p>2017年8月2日（水）に、有志で集まった社内オリンピック事業企画チーム「Future Tokyo2020」のメンバーを中心に、中学生・高校生向けの「<strong>スポーツアイデアソン</strong>」を開催しました。</p>
<h2 id="「スポーツアイデアソン」とは？">「スポーツアイデアソン」とは？</h2><p>「スポーツアイデアソン」とは、東京オリンピック・パラリンピック大会など、数年後東京で行われる大規模なスポーツイベントを、VRやMRなどの最新技術を使って課題解決するアイデアを生み出すイベントです。<br>スポーツアイデアソンの報告はこちら</p>
<img fetchpriority="high" src="/images/2017/20171113/photo_20171113_01.jpg" width="570" height="395">
<img src="/images/2017/20171113/photo_20171113_02.jpg" width="570" height="395" loading="lazy">

<p>当日来てくれた中高生には、より良いアイデアを生み出してもらうために、**MRなど最新の”XRテクノロジー”**を実際に体験してもらいました。<br><img src="/images/2017/20171113/photo_20171113_03.jpg" width="570" height="395" loading="lazy"></p>
<p>また、教育向けビジュアルプログラミング言語「<strong>Blockly</strong>」でVRプログラミングにも挑戦してもらいました（なんてチャレンジング！）。<br><img src="/images/2017/20171113/photo_20171113_04.jpg" width="570" height="395" loading="lazy"></p>
<p>最新テクノロジーに見て、触って、そこから生まれたアイデアはどれも魅力的なアイデアばかりでした。<br>ここでは私が企画を担当し、技術的にもチャレンジングな内容だった<strong>「VRプログラミング体験」</strong>の様子を、ご紹介致します。</p>
<h2 id="会場">会場</h2><p>イベントは先日オープンしたばかりの、フューチャーアーキテクトの新オフィスで開催致しました！<br><img src="/images/2017/20171113/photo_20171113_05.jpeg" width="492" height="369" loading="lazy"><br><img src="/images/2017/20171113/photo_20171113_06.jpeg" width="492" height="369" loading="lazy"></p>
<h2 id="イベント開始">イベント開始</h2><p>ついにイベントがスタート！<br>会場を見てみると集まってくれた中高生はざっと20人程度。<br>IT経験者は5名ほど、後は全員IT初心者。男女比もちょうどよいバランスで集まってくれました。</p>
<p>イベントのタイムテーブルです。<br><img src="/images/2017/20171113/photo_20171113_10.jpg" width="1600" height="900" loading="lazy"></p>
<p>1日にしては濃厚なスケジュール。みんなついてこれるでしょうか？</p>
<h2 id="さっそくVRプログラミング体験スタート！">さっそくVRプログラミング体験スタート！</h2><p>簡単なアイスブレークとXRテクノロジーの紹介をし、さっそくVRプログラミング体験です。今回、体験の教材として採用したのは <strong>CoSpaces</strong> というアプリケーションです。</p>
<img src="/images/2017/20171113/asset_20171113_01.png" class="img-small-size" width="366" height="123" loading="lazy">

<p>Cosapces公式ページはこちらから</p>
<p>CoSpacesとは、ドイツのミュンヘンとロシアのサンクトペテルブルグを拠点とするスタートアップ、Delightex社が開発したアプリケーションで、開発者がプログラミングやデザインのスキルを持っていなくてもVR環境を構築出来るアプリケーションです。</p>
<img src="/images/2017/20171113/asset_20171113_02.png" width="1000" height="505" loading="lazy">

<p>動物やテキストボックスをステージ上にアレンジ出来たり、新しいオブジェクトをよりシンプルにカスタマイズ、統合出来る環境を提供しています。<br>なにより、CoSpacesはプログラミングを直接書かなくても、命令文やコマンド名のパズルを組み合わせる <strong>Blockly</strong> という開発言語で、プログラムを作ることができます。</p>
<img src="/images/2017/20171113/asset_20171113_03.png" width="688" height="429" loading="lazy">
[Blockly公式ページはこちらから](https://developers.google.com/blockly/)

<p>作成したプログラムはVRアプリケーションとして、iPadなどで実行できます。<br>プログラミングが初体験の中高生でも、<strong>パズルで遊ぶような感覚でVRプログラミングができるスグレモノ</strong>です。</p>
<p>今回は中高生にCoSpacesを使って <strong>スゴい迷路</strong> を作ってもらいながら、合間にHoloLensでMR体験をしてもらいました。</p>
<blockquote>
<p><strong>知らない方の為に補足:</strong><br>HoloLensとは、Microsoftが提供するワイヤレスで頭につけるタイプのホログラフィックコンピューティングです。自分がその場にいながらバーチャルな空間と融合した世界が体験できます。</p>
</blockquote>
<p>次々とHoloLensを体験した子どもたちが順番を待っている子たちに興奮しながら感想を言ったり、積極的に社員に質問しながらCoSpacesで迷路を構築したりして、会場は一気に盛り上がりました！</p>
<h2 id="スゴい迷路の発表">スゴい迷路の発表!</h2><p>最終的に出来上がった中高生たちの「スゴい迷路」がこちらです。</p>
<img src="/images/2017/20171113/photo_20171113_07.png" width="1000" height="624" loading="lazy">

<p>私の感想は「ちゃんと迷路に個性が出ている・・・！！」という驚きです。<br>最初のデフォルトの迷路に比べて、短時間でこれだけ様子が変わったことに中高生の底力を感じました。<br>ほとんどの中高生がプログラミング自体が初めてだったのにも関わらず、しっかりとオリジナリティのある迷路を作り上げていたのです。</p>
<p>最後に、中高生のみんなでどれが一番「スゴい」か投票した結果、選ばれた迷路がこちら！<br><img src="/images/2017/20171113/photo_20171113_08.jpg" width="1280" height="853" loading="lazy"></p>
<p>なにが「スゴい」かというと、迷路の壁を<strong>半透明</strong>にして、迷路をする人が戸惑うような仕掛けを加えたところです。<strong>ちなみに壁を透明にできることは、講義では教えていません。</strong> 中高生が自分たちで実際にCoSpacesを触って、試して、見つけて、生み出した工夫です。短時間でプログラミングの概念が身につくCoSpacesと、中高生たちの発想の柔軟さがぶつかって「スゴい迷路」が誕生しました。</p>
<p>私はこういうIT技術と人のアイデアが具体的な形になる瞬間が大好きです。</p>
<p>その後のアイデアソンでも、中高生たちの柔軟な発想力が光るアイデアが沢山生まれ、無事イベントは終了しました!<br><img src="/images/2017/20171113/photo_20171113_09.jpg" width="971" height="424" loading="lazy"></p>
<h2 id="さいごに">さいごに</h2><p>私自身、CoSpacesを触ったのが今回が初めてというハラハラドキドキ状態でしたが、なんとか中高生のフォローができてほっとしました。</p>
<p>中高生と接して感じたのは、 <strong>新しい技術に好奇心と興味をもって取り組めば、IT経験の有無は関係なくモノを作り出すことはできる</strong> ということです。<br>そして <strong>何より「楽しむ」こと！ これがモノを作る上で一番の原動力であること</strong> を中高生に教わりました。</p>
<p>今後もFuture Tokyo2020は、スポーツを舞台にして子供とテクノロジーを繋ぐイベント・企画をどんどん進めていきます！ またみなさんにレポートできる機会があると思いますので、乞うご期待下さい！</p>
<p>最後まで読んでいただいた方、本当にありがとうございました。</p>
]]></content>
    <summary type="html">最新テクノロジーでスポーツアイデアソンをやって中高生に教わった大事なこと スポーツアイデアソン2017～ティーンが最新テクノロジーと出会ったら～</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="アイデアソン" scheme="https://future-architect.github.io/tags/%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2%E3%82%BD%E3%83%B3/"/>
    <category term="スポーツ" scheme="https://future-architect.github.io/tags/%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84/"/>
    <category term="デザイン思考" scheme="https://future-architect.github.io/tags/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E6%80%9D%E8%80%83/"/>
    <category term="プログラミング教育" scheme="https://future-architect.github.io/tags/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E6%95%99%E8%82%B2/"/>
    <category term="子ども" scheme="https://future-architect.github.io/tags/%E5%AD%90%E3%81%A9%E3%82%82/"/>
  </entry>
  <entry>
    <title>Unity未経験者がHoloLensアプリの開発をしてみた</title>
    <link href="https://future-architect.github.io/articles/20170421/"/>
    <id>https://future-architect.github.io/articles/20170421/</id>
    <published>2017-04-21T03:00:00.000Z</published>
    <updated>2017-04-21T03:00:00.000Z</updated>
    <author><name>澤田周吾</name></author>
    <content type="html"><![CDATA[<p>Unity, C# の未経験者がHoloLensのアプリを開発しました。<br>まだまだHoloLensについての開発情報が少ないと思いますので、アプリを作っていく流れをまとめます。<br>なにか少しでもお役に立てれば嬉しいです！</p>
<p>HoloLensに関する過去記事はこちらをどうぞ。</p>
<ul>
<li>会社に届いたHoloLensを使ってみた</li>
<li>HoloLensの空間共有サービスを使ってみよう</li>
</ul>
<h2 id="はじめに">はじめに</h2><p>はじめまして。名古屋大学の澤田周吾です。就職活動中にフューチャーアーキテクト株式会社さんと出会い、 インターンとしてHoloLens アプリの開発を担当させていただきました。</p>
<p>キッカケはある懇親会の時。私がいきなり「来週からホロレンズ開発のインターンさせてください！」という要望をぶつけたのですが、あっさり「いいよ」と一言。インターンの日程もサクサク決まりHoloLensアプリの開発が始まりました。無茶振りにも華麗に応えてくれるフューチャーさん、好きです。</p>
<h2 id="何を作ったか">何を作ったか</h2><p>人の前で発表する時って、やっぱり緊張しますよね。<br><img fetchpriority="high" src="/images/2017/20170418/photo_20170418_00.png" width="836" height="697"></p>
<p>真面目な人の顔って、圧迫感がありますから。</p>
<img src="/images/2017/20170418/photo_20170418_01.png" width="1000" height="481" loading="lazy">

<p>このような人達の前で発表するのは相当緊張すると思います。<br>しかし、この人達が全てジャガイモだったらどうでしょうか。</p>
<img src="/images/2017/20170418/photo_20170418_02.png" width="1000" height="481" loading="lazy">
発表しやすくなった！
みなさん、そう感じると思います。ジャガイモって、ほっこりしますよね。
ということで、人類芋化計画を実現させていきます。

<p>つまり <strong>人の顔をジャガイモに置き換える</strong> アプリ、名づけて <strong>Potato Heads</strong> です。</p>
<p>実現に向けての技術的な見通しは..。</p>
<ol>
<li>HoloLensのカメラから、顔認証技術を使って顔の部分の位置座標を検出</li>
<li>そこに画像の大きさを合わせて出力する<br>という2段構えで実現できると考えました。</li>
</ol>
<p>実際に作った Potato Heads の動画はこちら↓↓↓</p>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">私が作ったHoloLensアプリの Potato Heads !<br>人の顔をジャガイモにします！ pic.twitter.com/nu5SOPSrME</p>&mdash; sSgo (@ssogoss) 2017年4月13日</blockquote>


<h2 id="使用したもの">使用したもの</h2><ul>
<li>HoloLens</li>
<li>Unity 5.5</li>
<li>C#</li>
<li>HoloToolkit-Unity</li>
<li>OpenCV For Unity</li>
<li>HoloLensWithOpenCVForUnityExample.unitypackage</li>
<li>PCスペック<ul>
<li>Windows10 Home <sup id="fnref:1">1</sup></li>
<li>メモリ4GB <sup id="fnref:2">2</sup></li>
</ul>
</li>
</ul>
<h2 id="開発環境構築">開発環境構築</h2><p>UnityとVisual Studioのインストールについてはこちらを参考にさせていただきました。<br>HoloLens UnityとVisual Studioのインストール | ナレコムazureレシピ</p>
<h3 id="Unityのプロジェクトを作成">Unityのプロジェクトを作成</h3><ol>
<li>Unityを起動</li>
<li>右上のNEWボタンを押します</li>
<li>Project Name 記入、任意の保存先選択、3Dを選択</li>
<li>Create projectボタンを押します</li>
</ol>
<p>これで新しいプロジェクトが作成されます。</p>
<p>Unityのレイアウトについては右上のLayoutドロップダウンから2by3を選択すると以下のように配置されます。</p>
<img src="/images/2017/20170418/photo_20170418_03.png" width="720" height="386" loading="lazy">
(引用：http://qiita.com/2dgames_jp/items/11bb76167fb44bb5af5f)

<h3 id="HoloToolkit-Unityのダウンロード">HoloToolkit-Unityのダウンロード</h3><p>アプリ開発を効率よくしてくれる HoloToolkit は、Unity用に HoloToolkit-Unity が存在するので、Unityで開発する場合はそちらを利用します。<br>GitHub:HoloToolkit-Unity<br>↑ここからZIPファイルをダウンロードして、任意の場所に展開しておきます。</p>
<h3 id="初期設定">初期設定</h3><ol>
<li>先ほどダウンロードして展開しておいたHoloToolkit-Unityフォルダを開き、<br><code>任意の場所\HoloToolkit-Unity-master\Assets</code> 内の <code>HoloToolkitフォルダ</code> と<br> <code>HoloToolkit.meta</code> をProjectビューのAssetsにドラッグ&amp;ドロップします。<br>インポートが始まるのでしばし待ちます。<br>ここまでうまくいっていればメインメニューに「 HoloToolkit 」が追加されているはずです。<br>ここからHoloLensアプリに必要な初期設定を簡単に行うことができます。</li>
<li>まずはプロジェクトの初期設定<ol>
<li><code>メインメニューのHoloToolkit &gt; Configure &gt; ApplyHoloLensProjextSettings</code> をクリック<img src="/images/2017/20170418/photo_20170418_04.png" width="1519" height="520" loading="lazy"></li>
<li>以下のようなポップアウトが開くので全てにチェックを入れてApplyボタンを押します。<img src="/images/2017/20170418/photo_20170418_05.png" width="829" height="683" loading="lazy"></li>
<li>Reload now? と聞かれるのでYesをクリックします。</li>
<li>いったんUnityが閉じ、開き直されます。<br>これでプロジェクトの初期設定は完了です。</li>
</ol>
</li>
<li>次にメインカメラの初期設定をします。<ol>
<li><code>メインメニューのHoloToolkit &gt; Configure &gt; ApplyHoloLensSceneSettings</code> をクリック<img src="/images/2017/20170418/photo_20170418_06.png" width="1454" height="451" loading="lazy"></li>
</ol>
</li>
</ol>
<p>2.先ほどと同じようにポップアウトが開くので全てにチェックを入れてApplyボタンを押します。<br><img src="/images/2017/20170418/photo_20170418_07.png" width="830" height="632" loading="lazy"></p>
<p>HoloLensでは黒は透過を意味するので、背景は黒に設定する必要があり、そのような設定がここで行われています。</p>
<p>ここまでで、初期設定は終了です。<br>アプリを作る際、ここまでの作業は毎回行うことになると思います。</p>
<h3 id="余談">余談</h3><p>HoloLensにおいて <strong>現実世界のモノを消す技術</strong>（＝DR: DIMINISHED REALITY）は難しいです。<br>カメラ映像の世界では何年も前からDRが実現できている <sup id="fnref:3">3</sup>ので不思議に思った方も多いと思います。</p>
<p>HoloLensは現実世界の物は透過して、プラスしたいモノをレンズに光をプラスすることによって、上乗せて表示させるような原理になっています。そのため、何か消したいとしても光の上乗せしかできず、それゆえどうしてもリアリティの差が出てしまいます。現実世界の物とプラスした光の物の区別ができないレベルまでリアリティをもたすことができれば可能になると思いますが、まだまだ技術の進歩を待つ必要がありそうです。</p>
<h2 id="アプリ開発">アプリ開発</h2><p>ここからHoloLensアプリケーション開発の流れを説明します。</p>
<h3 id="簡単なオブジェクトの作成">簡単なオブジェクトの作成</h3><p>簡単な物なら、<code>Hierarchyビュー右クリック &gt; 3D Object &gt; Cube</code> から立方体を作成します。<br>Inspectorビューの設定を以下のようにすると視認性が高く表示できます。</p>
<ul>
<li>Position : 0, 0, 1</li>
<li>Rotation : 45, 45, 45</li>
<li>Scale : 0.1, 0.1, 0.1<img src="/images/2017/20170418/photo_20170418_08.png" width="1000" height="561" loading="lazy"></li>
</ul>
<p>作業を残したい場合は <code>メインメニュー File &gt; Save Scenes</code> から作成したSceneに任意の名前を入力して保存できます。</p>
<h3 id="Potato-Headsのつくり方">Potato Headsのつくり方</h3><p>Potato Headsの設定をここから記載します。<br>とりあえず簡単なものを動かしてみたい方は、上記の簡単なオブジェクトを作成したら、この小段落は飛ばしてビルドに移ってください。</p>
<ol>
<li>導入するアセットを下記からダウンロード<ul>
<li>顔認証を使うために OpenCV を導入します。また、OpenCV を HoloLens で動くようにするためのアセットが HoloLensWithOpenCVForUnityExample.unitypackage です<ul>
<li>OpenCV For Unity　(私は2.1.5を購入)</li>
<li>HoloLensWithOpenCVForUnityExample.unitypackage</li>
</ul>
</li>
</ul>
</li>
<li>先ほどHoloToolkit-Unityをインポートした時と同様に、インポート<ol>
<li><code>OpenCVforUnity/Assets</code> 内の OpenCVForUnity, OpenCVForUnity.meta をプロジェックトの Assets にドラッグ&amp;ドロップ</li>
<li><code>HoloLensWithOpenCVForUnityExample/Assets</code> 内のすべて4ファイルをプロジェクトのAssets にドラッグ&amp;ドロップ</li>
<li><code>Assets/OpenCVForUnity/StreamingAssets</code> を Assets 直下に出します</li>
<li><code>Assets/OpenCVForUnity/OpenCVForUnityUWP_Beta3</code> 圧縮ファイルを展開</li>
<li><code>Assets/OpenCVForUnity/OpenCVForUnityUWP_Beta3/OpenCVForUnityUWP_Beta3</code> を実行</li>
<li>OpenCV を HoloLens で使用するために必要なファイルがインポートされるので、Allを選択し、Importボタンをクリック</li>
</ol>
</li>
</ol>
<p>ここまでできていれば以下の画像のようなAssets構造になっているはずです。<br><img src="/images/2017/20170418/photo_20170418_09.png" width="821" height="490" loading="lazy"></p>
<p>この状態で <code>HoloLensWithOpenCVForUnityExample/Scenes</code>内のサンプルはHoloLens上でも動きます。</p>
<p>ここで私は <code>Scene/HoloLensAnonymousFaceExample</code> を使用します。<br>人の顔を検知して画像をかぶせるサンプルです。</p>
<p>好きな画像にしたい場合は、以下の1～2手順で変更できます。</p>
<ol>
<li><code>Assets/HoloLensAnonymousFaceExample/Resources</code> に画像を保存</li>
<li><code>Assets/HoloLensAnonymousFaceExample/Scripts/Overlay/AnonymousRectQuad</code> のInspectorビューの一番下の AnonymousRectQuadMaterial の左下の下三角を押すと詳細がでるので、そこで画像のSelectから好きな画像を選択（下画像を参照）<img src="/images/2017/20170418/photo_20170418_10.png" width="1227" height="944" loading="lazy"></li>
</ol>
<h2 id="ビルド">ビルド</h2><ol>
<li><code>メインメニュー &gt; Build Settings</code> をクリック</li>
<li>以下の設定の確認します<ul>
<li>SDK : Universal 10</li>
<li>UWP Build Type : D3D</li>
</ul>
</li>
<li>Unity C# Projects にチェックをつけます</li>
<li>Add Open Scenesボタンから先ほどビルドしたいSceneを追加します</li>
<li>Build ボタンをクリック<img src="/images/2017/20170418/photo_20170418_11.png" width="946" height="925" loading="lazy"></li>
<li>ビルド先が聞かれるので、開かれるフォルダの中にAppフォルダを作って、そこをビルド先にするといいです</li>
<li>ビルドが完了したら、フォルダが自動で開かれるので、先ほどのビルド先フォルダ内の <code>[プロジェクト名].sln</code> をVisual Studioで開きます</li>
<li>Visual Studioで開いたら、上にあるドロップダウンを Release, x86, Device に設定します<img src="/images/2017/20170418/photo_20170418_12.png" width="892" height="127" loading="lazy"></li>
<li>HoloLensをPCに接続し、電源をつけておきます</li>
<li><code>メインメニュー デバッグ &gt; デバッグなしで開始</code> をクリック</li>
</ol>
<p>1～10の作業をすれば、HoloLens用にアプリがビルド・デプロイされます。<br>うまく完了すれば、HoloLensに転送したアプリが自動で起動して、開発したアプリを見ることができるはずです。</p>
<p>以上で、一連のHoloLensアプリの開発は完了です。</p>
<h2 id="デバッグについて">デバッグについて</h2><p>私はWindows10 Home で開発していて、Emulatorが使えない環境だったので、HoloLensで起動しているアプリのログをとることができませんでした。<br>そのため「3D Text」をつくり、それを変更することでログとしての役割を持たせデバッグしていました。</p>
<figure class="highlight c"><figcaption><span>TextChange.cs</span></figcaption><table><tr><td class="code"><pre><span class="line">using System.Collections;</span><br><span class="line">using System.Collections.Generic;</span><br><span class="line">using UnityEngine;</span><br><span class="line"></span><br><span class="line">namespace DlibFaceLandmarkDetectorExample &#123;</span><br><span class="line">    public <span class="class"><span class="keyword">class</span> <span class="title">TextChange</span> :</span> MonoBehaviour &#123;</span><br><span class="line">        <span class="built_in">string</span> text = <span class="string">&quot;&quot;</span>;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// Use this for initialization</span></span><br><span class="line">        <span class="type">void</span> <span class="title function_">Start</span><span class="params">()</span> &#123;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// Update is called once per frame</span></span><br><span class="line">        <span class="type">void</span> <span class="title function_">Update</span><span class="params">()</span> &#123;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        public <span class="type">void</span> <span class="title function_">Change</span><span class="params">(<span class="built_in">string</span> newtext)</span></span><br><span class="line">        &#123;</span><br><span class="line">            text = text + newtext;</span><br><span class="line">            GetComponent&lt;TextMesh&gt;().text = text;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>上のメソッドを用意しておいて、デバッグしたいコードの中でこのメソッドに飛ばすという形です。<br>クラスの中でパスを定義↓しまして..。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">TextChange textChange;</span><br><span class="line">GameObject refObj;</span><br><span class="line">refObj = GameObject.Find(<span class="string">&quot;3DText名&quot;</span>);</span><br></pre></td></tr></table></figure>

<p>メソッドに飛ばします↓</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">textChange = refObj.GetComponent&lt;TextChange&gt;();</span><br><span class="line">textChange.Change(<span class="string">&quot;test\n&quot;</span>);</span><br></pre></td></tr></table></figure>

<p>この手法を用いてデバッグを行いました。</p>
<h2 id="インターン成果発表会">インターン成果発表会</h2><p>インターン当初はもっと高度なことをやろうと計画立てていましたが、開発期間4日間という短い期間だったため、途中で方向転換し、期間内で物をつくりあげることを大切にしました。</p>
<img src="/images/2017/20170418/photo_20170418_13.png" width="640" height="480" loading="lazy">

<p>最後の発表会はHoloLensをつけて、オーディエンスをイモにしてリラックスしながら進めました。笑</p>
<img src="/images/2017/20170418/photo_20170418_14.png" width="640" height="480" loading="lazy">

<p>発表会の後には体験もしてもらい、なぜかイモになる側が盛り上がりました。</p>
<img src="/images/2017/20170418/photo_20170418_15.png" width="640" height="480" loading="lazy">

<p>HoloLensごしから撮影すると上記のような感じです。<br>無理やり撮影しているので色がおかしいですが、人間が見るとキレイにジャガイモに見えます。<br>ちなみに、距離が離れたメガネの人は顔認識が行いにくいようです。</p>
<h2 id="まとめ">まとめ</h2><p>Unity上では動くけれどHoloLensに転送するとうまく動かないといったものもあり、大変なところもありました。<br>具体的には、入力画像をマトリックスで処理していく際、その処理のメソッドに飛ばすところで止まってしまうことがありました。</p>
<p>HoloLensのアプリを開発するにあたって、使用する技術の分野は未経験でしたがアプリとして形にできました。<br>フューチャーさんの技術的アドバイスがあったからこそだと感じています。</p>
<p>Potato Heads はストア申請をしていて、近日中にWindowsストアに公開されると思います！<br>→公開されました！ (2017&#x2F;04&#x2F;14時点)<br>　Potato Heads - Microsoft Store</p>
<div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none; padding-left: 0;"><li id="fn:1"><span style="vertical-align: top; padding-right: 10px;">1.</span><span style="vertical-align: top;">エディションHomeは HoloLens のアプリ開発ではイバラの道。PC上でシミュレーションできるemulatorが入らないからです</span> ↩</li><li id="fn:2"><span style="vertical-align: top; padding-right: 10px;">2.</span><span style="vertical-align: top;">Windowsの推奨は8GBですが、4GBでも開発できました</span> ↩</li><li id="fn:3"><span style="vertical-align: top; padding-right: 10px;">3.</span><span style="vertical-align: top;">(参考) http://developer.cybozu.co.jp/akky/2010/10/ar-diminished/</span> ↩</li></ol></div></div>]]></content>
    <summary type="html">HoloLensアプリを作っていく流れをまとめます</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="HoloLens" scheme="https://future-architect.github.io/tags/HoloLens/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
    <category term="インターン" scheme="https://future-architect.github.io/tags/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%B3/"/>
  </entry>
  <entry>
    <title>HoloLensの空間共有サービスを使ってみよう</title>
    <link href="https://future-architect.github.io/articles/20170405/"/>
    <id>https://future-architect.github.io/articles/20170405/</id>
    <published>2017-04-05T03:00:00.000Z</published>
    <updated>2017-04-05T03:00:00.000Z</updated>
    <author><name>清田侑</name></author>
    <content type="html"><![CDATA[<h2 id="はじめに">はじめに</h2><p>こんにちは。HoloLens記事第二弾です。</p>
<ul>
<li>前回の記事はこちらをご参照ください。</li>
</ul>
<p>今回は、HoloLensでこれから多く使われるであろう<Font color="red"><strong>空間共有サービス（以下シェアリングサービス）</strong></Font>の特性と実装方法の触りについて紹介します。</p>
<h2 id="HoloLensの空間共有サービスとは">HoloLensの空間共有サービスとは</h2><p>HoloLensの醍醐味は、現実世界と仮想世界が融合することです。つまりHoloLensゴーグルをかけると、スマホを通さずとも視野の中に様々な情報や仮想的なオブジェクトを出現させることができます。</p>
<p>ARとして流行ったポケモンGOを例にすると、スマホの画面上で現実の背景の上にポケモンの画像が合成されて表示されていましたよね？ HoloLensを身につけると、散歩中にふと公園を見ると「ピカチュウが花壇から出てきた！」という風景を自然に見ることができます。また、HoloLensは<strong>現実世界のオブジェクトをスキャンしてマッピング</strong>を行っているので、「ピカチュウが滑り台を滑る」といったことが比較的容易に実現できちゃいます。</p>
<p>でも悲しいかな、HoloLensをそのまま装着しても、みんな別々、パラレルワールドのマサラタウンにいるのです。ある人はそこにピカチュウがいるというけれど、私には見えない、そんな状態です。それでは盛り上がりもかけますし、結局は自分にしか見えない仮想的なものなんだという儚い気持ちになってしまいますよね。</p>
<p>そこで登場HoloLensの**<font color="red">シェアリングサービス</font><strong>です。</strong>これを使うと、あるHoloLensで見ているものが、他のHoloLensでも同様に見ることができ、空間の共有が行えます。**「ベンチの上でピカチュウがバク転した！ かわゆす」というのを皆で一緒に見ることが可能となります。</p>
<h2 id="閑話（仮想現実と現実に対する哲学的考察をちょっと）">閑話（仮想現実と現実に対する哲学的考察をちょっと）</h2><p>みんながそこにピカチュウがいると言う。これはもはやピカチュウが現実となったと言えるのではないでしょうか。</p>
<p><strong>「この世は人間に記録（観測）されるまでは存在しない」</strong>とどこかの偉い方が言いましたが、逆に認識されればそれは現実の世界になるのです。HoloLensを通さないと見えないから現実の世界なわけないじゃんというあなた、あなたは視覚を司る「目」という器官を通して世界を認識しています。この世界も目が無いと、見えなくなるから現実な世界なわけないと言っているのと同じかなと思います。</p>
<p><strong>昆虫は紫外線を見ることができるため、人間とは全く別の世界が広がっていますが、HoleLensが映し出す世界も似たようなものではないでしょうか。</strong>また、実際触れるじゃないかと思ったあなた、触れるという現象も触覚も持って感知しているにすぎず、本当の意味でそこに物体があるかどうかなんてだれにもわからないのではないかなと思います。</p>
<h2 id="シェアリングサービスの仕組み">シェアリングサービスの仕組み</h2><p>哲学の話は置いて、本題に戻りましょう。<br>シェアリングを行うためには、<strong>お互いの空間情報を中継するためのサーバー（PC）が必要</strong>です。</p>
<p>アプリケーションの構成によりますが、本記事ではMicrosoftがHoloLensの開発ノウハウを公開しているHolographicAcademyにてシェアリングサービスを紹介しているHolograms240の仕組みを説明します。</p>
<p>まず試したいという方は、Holograms240の公式サイトに実行方法が記載されています。<br>もしくは日本語で実施方法を記載してくださっている方がいるのでここを見ると良いと思います。</p>
<p>Holograms240では**HoloToolKit-Unity<strong>というUnity上でHoloLensの機能を使用するためのツール群を利用しています。このHoloToolKit-Unityにはシェアリングサービスが含まれています。開発者はこれを使用して、複数HoloLens間でのシェアリングを行うことができます。またHoloToolKit-Unityの中には、</strong>サーバーで起動するためのシェアリングサービスの実行ファイルが準備されている**ので、シェアリングを行うためにはこれをPC上で実行して利用できます。</p>
<p><strong>Holograms240は以下のような仕組みで動いています（下図）。</strong><br>まずはアプリ起動時にアンカー情報と呼ばれる、現実世界のマッピングとUnity上での座標を紐づけるための目印を共有します。<br><img fetchpriority="high" src="/images/2017/20170405/photo_20170405_01.jpeg" width="720" height="1040"></p>
<p>次に、アプリ内で共有が必要なデータを逐次送受信して、同じオブジェクトの同期を行っています。<br><img src="/images/2017/20170405/photo_20170405_02.jpeg" width="720" height="1040" loading="lazy"></p>
<p><strong>実空間とのマッピングがされているのはアンカーだけです。</strong></p>
<p>実空間をスキャンした情報とアンカーとのマッピング情報はデータ量が多いです。同期するのに長いと1分以上の時間がかかります！ その後の共有情報はデータ量は少ないですが、<strong>各オブジェクトやアクションごとにデータの型や、送信処理、受信時の動作を実装してあげなくてはいけません。</strong>さすがに楽々と視野すべてを一括で同期して、というのはできないのですね…。今後もっと便利なライブラリができることを期待します。</p>
<h2 id="HoloToolKit-Unityの仕組みを少しだけ紹介">HoloToolKit-Unityの仕組みを少しだけ紹介</h2><p>次にHoloToolKit-Unity内で何が行われているのか、かいつまんで紹介します。</p>
<h3 id="ImportExportAnchorManager">ImportExportAnchorManager</h3><p>Holograms240ではこれを、HologramCollection（HoloLensで扱うオブジェクトの大親）につけてますね。このスクリプトは1機目ではアンカー（Unity上のオブジェクト）を物理的に固定（現実世界にマッピング）して、そのアンカー情報を共有サーバーにエクスポートしています。また2機目以降は、1機目のアンカー情報をインポートして、自身の現実世界のマッピング情報上にアンカーを設置します。これによって<strong>Unityの世界では1機目と2機目の座標軸がアンカーを中心として一致</strong>します。</p>
<h3 id="CustomMessages">CustomMessages</h3><p>デバイス間で共有するデータの形式の定義と、送受信時の処理が記載されていますこれはアプリの仕様ごとに、がっつり個別実装する必要があります。<br>以下の流れで見ていきます。</p>
<ol>
<li>送受信用のデータ形式</li>
<li>送信処理について</li>
<li>受信処理について</li>
</ol>
<h4 id="1-送受信用のデータ形式">1. 送受信用のデータ形式</h4><p>TestMessageIDは<strong>デバイス間で共有（送受信）するデータを定義しています。</strong><br>オブジェクトやアクションの種類ごとに定義しています。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">public <span class="class"><span class="keyword">enum</span> <span class="title">TestMessageID</span> :</span> byte</span><br><span class="line">&#123;</span><br><span class="line">    HeadTransform = MessageID.UserMessageIDStart,</span><br><span class="line">    UserAvatar,</span><br><span class="line">    UserHit,</span><br><span class="line">    ShootProjectile,</span><br><span class="line">    StageTransform,</span><br><span class="line">    ResetStage,</span><br><span class="line">    ExplodeTarget,</span><br><span class="line">    Max</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<h4 id="2-送信処理について">2. 送信処理について</h4><p><strong>Sendメソッドは送信処理を実装しています。</strong><br>例えばSendShootProjectleはユーザーがゲーム内で発射するオブジェクトの送信処理です。<br>起点となるpositionと打ち出される方向directionをアンカーからの相対位置に変換して送信しています。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">public <span class="type">void</span> <span class="title function_">SendShootProjectile</span><span class="params">(Vector3 position, Vector3 direction)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="comment">// If we are connected to a session, broadcast our head info</span></span><br><span class="line">    <span class="keyword">if</span> (this.serverConnection != null &amp;&amp; this.serverConnection.IsConnected())</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="comment">// Create an outgoing network message to contain all the info we want to send</span></span><br><span class="line">        NetworkOutMessage msg = CreateMessage((byte)TestMessageID.ShootProjectile);</span><br><span class="line"></span><br><span class="line">        AppendVector3(msg, position + (direction * <span class="number">0.016f</span>));</span><br><span class="line">        AppendVector3(msg, direction);</span><br><span class="line"></span><br><span class="line">        <span class="comment">// Send the message as a broadcast, which will cause the server to forward it to all other users in the session.</span></span><br><span class="line">        this.serverConnection.Broadcast(</span><br><span class="line">            msg,</span><br><span class="line">            MessagePriority.Immediate,</span><br><span class="line">            MessageReliability.Reliable,</span><br><span class="line">            MessageChannel.Avatar);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<h4 id="3-受信処理について">3. 受信処理について</h4><p><strong>受信時の処理はMessageHandlersを使って登録しています。</strong><br>例えば上記で送信している発射物の受信時の処理はProjectileLauncher.csに記載されています。下記のコードで受信時イベントを登録しています。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">CustomMessages.Instance.MessageHandlers[CustomMessages.TestMessageID.ShootProjectile] = this.ProcessRemoteProjectile;</span><br></pre></td></tr></table></figure>

<p>そして、実際の受信処理は下記のProcessRemoteProjectileです。受信した発射物のアンカーからの位置情報（Position）と方向（Direction）から同じ位置にオブジェクトを生成しています。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">void</span> <span class="title function_">ProcessRemoteProjectile</span><span class="params">(NetworkInMessage msg)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="comment">// Parse the message</span></span><br><span class="line">    <span class="type">long</span> userID = msg.ReadInt64();</span><br><span class="line">    Vector3 remoteProjectilePosition = CustomMessages.Instance.ReadVector3(msg);</span><br><span class="line"></span><br><span class="line">    Vector3 remoteProjectileDirection = CustomMessages.Instance.ReadVector3(msg);</span><br><span class="line"></span><br><span class="line">    Transform anchor = ImportExportAnchorManager.Instance.gameObject.transform;</span><br><span class="line">    ShootProjectile(anchor.TransformPoint(remoteProjectilePosition), anchor.TransformDirection(remoteProjectileDirection), userID);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>このように、<strong>現実世界上の位置情報として同期されるのはアンカーだけで、その他のオブジェクトを同期したい場合は、個別に定義して処理を記載する必要</strong>があります。</p>
<h2 id="まとめ">まとめ</h2><ul>
<li>シェアリングサービスはHoloToolKit-Unityを使うことで実装できる</li>
<li>実空間に固定されているのはアンカーだけであり、アンカーの同期には時間がかかる</li>
<li>その他のアプリ内情報は個別に連携データの形式と送受信処理を実装する必要がある</li>
</ul>
<h2 id="おまけ～最新（2017-04-03時点）特ダネ情報～">おまけ～最新（2017&#x2F;04&#x2F;03時点）特ダネ情報～</h2><ul>
<li>英語弱者（筆者も）待望！Holographic Academyを日本語訳してくださっている神サイト</li>
<li>SharingサービスのサーバーIPをアプリ起動時に設定できるようにするプラグイン</li>
<li>Hololens meetup vol2で発表されたHoloToolKitよりイケている共有サービス</li>
</ul>
]]></content>
    <summary type="html">HoloLens記事第二弾として、HoloLensでこれから多く使われるであろう空間共有サービスの特性と実装方法について紹介します。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="HoloLens" scheme="https://future-architect.github.io/tags/HoloLens/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
  </entry>
  <entry>
    <title>会社に届いたHoloLensを使ってみた</title>
    <link href="https://future-architect.github.io/articles/20170210/"/>
    <id>https://future-architect.github.io/articles/20170210/</id>
    <published>2017-02-10T04:00:00.000Z</published>
    <updated>2017-02-10T04:00:00.000Z</updated>
    <author><name>山本力世</name></author>
    <content type="html"><![CDATA[<h2 id="HoloLensとは…？">HoloLensとは…？</h2><p>HoloLensとはざっくり言いますと、</p>
<img fetchpriority="high" src="/images/2017/20170210/photo_20170210_01.png" class="img-small-size" width="800" height="740">

<p>このイラストのようなことができる機械になります。</p>
<p>もう少し詳しく説明しますと…</p>
<ul>
<li>現実の空間にCGなどで作られたグラフィックを投影できる、**MR(複合現実: 拡張現実「AR」と仮想現実「VR」を融合させたような概念)**を実現するためのMicrosoft製のデバイスです</li>
<li>見た目はOculusのようなゴーグル型ですが、VRとは異なり現実世界にグラフィックを重ね合わせる必要があることから <strong>透過型のディスプレイ</strong> になっており、また <strong>各種センサやCPUやGPUが組み込まれたWindows 10が動作するPC</strong> でもあります</li>
<li>開発者向けのドキュメントやSDKが公開されているため、自由にHoloLensを利用したMRアプリケーションを作成できます</li>
<li>ゲームだけではなく、上記イラストのような遠隔医療といった幅広い応用先が期待されることから注目を集めています</li>
</ul>
<h2 id="届きました">届きました</h2><p>2017年1月18日から、日本国内でも販売が開始されたため、弊社にも早速２台届きました。</p>
<img src="/images/2017/20170210/photo_20170210_02.jpeg" width="1256" height="804" loading="lazy">

<p>薄くてちっちゃいマニュアルは、日英両言語対応、本体には技適マークも付いており、日本に対応した製品だと実感できました。</p>
<p>しかし、中身は日本語向けに特別な対応がされたわけでもなく音声認識も基本英語なので、正しい英語の発音が出来ないとなかなかセットアップが進まないことになります。<br>また、Windows StoreにおいてあるHoloLens向けのアプリも今の所は英語ベースのものが多いので、リスニングも出来ないとゲームなども十分楽しむことはできません。</p>
<p>Microsoftのサイトには、</p>
<blockquote>
<p>「HoloLens Developer Edition および Commercial Suite は、消費者契約法第 2 条において消費者にあたらない開発者向けのみの販売となっています。商品とその関連サービスおよびサポートは英語のみでのご提供となっています」</p>
</blockquote>
<p>とありますので、まあ、仕方がないとは思いますが。</p>
<p>文頭のイラストの感じを真似するには、HoloLensでHoloHeartをすると良いと思います。<br>このHoloHeartは3Dの心臓を拡大縮小回転させて眺めたりするものなのですが、「beat」と発音すると心臓が動き出して少々気持ちが悪いアプリです。</p>
<img src="/images/2017/20170210/photo_20170210_03.jpeg" width="923" height="622" loading="lazy">

<h2 id="丸一日付けっぱなしにしてみた">丸一日付けっぱなしにしてみた</h2><p>何事も体験しなければ始まらないだろうということで、業務をしながらですがオフィスにて丸一日付けっぱなしにしてみました。</p>
<h3 id="気がついたこと">気がついたこと</h3><ul>
<li>VRと異なり全く酔わない<ul>
<li>現実の風景が見えるというMRの特性だからなのか、酔いは皆無です。オフィスにはVRよりもMRが相性がよいかもしれません</li>
</ul>
</li>
<li>HoloLensの専用収納ケースにしまい込むのが面倒<ul>
<li>専用収納ケースにしまうにはベルトを絞った状態にし直す必要があり面倒です。100均で売ってる発泡スチロールのマネキンの頭部みたいなものに置いておきたいと思っています</li>
</ul>
</li>
<li>寝ながらの利用が難しい<ul>
<li>寝たまま複数のウィンドウを開いて操作できると楽そうで良いなと思っていたのですが、後頭部に出っ張った部分があるので、それが枕などにぶつかり、頭を自由に動かせません</li>
<li>頭を動かせないということは、HoloLensではマウスを動かせないことと同義なので辛いです</li>
</ul>
</li>
<li>Windows10以外での開発が難しそう<ul>
<li>UnityはWindows版以外が存在しますが、HoloLens用の拡張部分はWindows版以外だと見つけられませんでした</li>
<li>私はMBP上のVirtualBoxに入れていたWindows10に、Unity最新版を入れてビルドを行いました<ul>
<li>Visual Studioでビルドせずに、UnityからHoloLensでプレビューする方法は、何故か今回実行できませんでした（connectボタンが押せず）</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="よく聞かれたこと">よく聞かれたこと</h3><ul>
<li>ずっと装着していたけど辛くなかった？<ul>
<li>頭の上を通る補助バンドを着けた場合は、HoloLensを装着しぱなっしでも耐えられますが、補助バンドがない場合は厳しいです。ただし、周りの人が違和感に耐えられなくなるので、装着者の周囲の慣れが必要です</li>
</ul>
</li>
<li>肝心の着け心地は？<ul>
<li>補助バンドの有無で大きく変わります。補助バンドありだと装着感は良いですが、無い場合は重さが辛いです</li>
</ul>
</li>
<li>ポインタ操作（視線の先に点として表示されるマウスカーソルのようなもの）って慣れるの？<ul>
<li>頭を動かす必要ある点はやや面倒ですが、数時間で慣れてきました。本当は視線のみで動くと嬉しかったのですが、現状のHoloLensの限られた視野を考えるとちょうどよいトレードオフかと思います</li>
</ul>
</li>
</ul>
<h2 id="次回予告">次回予告</h2><ul>
<li>2つのHoloLensで同じ空間を共有するアプリケーションの仕組みと、その作り方を共有します</li>
<li>応用例のアイデア出しや実装を試していきたいことはもちろんとして、社内外にHoloLens(MR)体験をもっと布教していきたいと考えています</li>
<li>AR&#x2F;VR&#x2F;MRの研究開発は担当者を置いて重点的に進めていく予定です。お楽しみに！</li>
</ul>
<img src="/images/2017/20170210/photo_20170210_04.jpeg" width="1000" height="750" loading="lazy">

<p>※2つのHoloLensを使って同じ空間の同じグラフィックを共有している図です。</p>
]]></content>
    <summary type="html">会社にHoloLens届いたので早速触ってみました。</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="HoloLens" scheme="https://future-architect.github.io/tags/HoloLens/"/>
  </entry>
  <entry>
    <title>Space Apps Challenge 2016への投票方法</title>
    <link href="https://future-architect.github.io/articles/20160512/"/>
    <id>https://future-architect.github.io/articles/20160512/</id>
    <published>2016-05-12T00:05:59.000Z</published>
    <updated>2016-05-12T00:05:59.000Z</updated>
    <author><name>admin</name></author>
    <content type="html"><![CDATA[<h2 id="Space-Apps-Challengeとは">Space Apps Challengeとは</h2><p>Space Apps Challenge は宇宙関係のオープンデータの活用を目指し、NASA（アメリカ航空宇宙局）の呼びかけにより始まったハッカソンで、2012年から毎年1回4月に開催されています。<br>2016年は世界135の都市で同時開催し、日本国内では会津、つくば、東京、相模原、福井、宇部、熊本（平成28年熊本震災の影響のため、熊本会場は中止となりました）で開催します。</p>
<h2 id="People’s-Choice">People’s Choice</h2><p>各都市の上位2作品が、後日開催される国際コンペティションに参戦し、世界中から選出された作品とその成果を競います！</p>
<p>また、People’s Choice とは一般人による投票の意味で、各都市につき1作品が選ばれます。<br>Space Apps Challenge では、25チームに絞られた後に一般投票が行われるようです。<br><img fetchpriority="high" src="/images/2016/20160512/photo_20160512_01.png" class="img-middle-size" width="1719" height="792"></p>
<p>2016年つくば会場のPeople’s ChoiceはThe ZEN(ザ禅)が選ばれました！<br>ぜひ以下の記事を確認下さい！<br>ハッカソン道中記#3～社会人2年目のリケジョがハッカソンに出てみました～</p>
<h2 id="投票方法">投票方法</h2><p>投票サイトにアクセスします。</p>
<p><strong>【投票サイト】</strong><br><strong>https://2016.spaceappschallenge.org/</strong></p>
<p><strong>※2016年は、5月10日～5月16日の一週間です！</strong></p>
<h3 id="ユーザ登録">ユーザ登録</h3><img src="/images/2016/20160512/photo_20160512_02.png" class="img-middle-size" width="1500" height="903" loading="lazy">
<img src="/images/2016/20160512/photo_20160512_03.png" class="img-middle-size" width="1500" height="884" loading="lazy">
<img src="/images/2016/20160512/photo_20160512_04.png" class="img-middle-size" width="1504" height="792" loading="lazy">

<h3 id="Space-AppsからEメールが来ていないか確認します">Space AppsからEメールが来ていないか確認します</h3><img src="/images/2016/20160512/photo_20160512_05.png" class="img-middle-size" width="1400" height="918" loading="lazy">

<h3 id="ログイン">ログイン</h3><img src="/images/2016/20160512/photo_20160512_06.png" class="img-middle-size" width="1225" height="1110" loading="lazy">

<p>先ほど登録したユーザ名、パスワードを入力します<br><img src="/images/2016/20160512/photo_20160512_07.png" class="img-middle-size" width="1509" height="681" loading="lazy"></p>
<h3 id="投票する作品を選択">投票する作品を選択</h3><p>Awardページから投票したいプロダクトを選びます。<br><img src="/images/2016/20160512/photo_20160512_08.png" class="img-middle-size" width="1502" height="952" loading="lazy"></p>
<p>よろしければ、ぜひとも『The ZEN』(ザ禅)に投票下さい。笑<br><img src="/images/2016/20160512/photo_20160512_09.png" class="img-middle-size" width="1488" height="1059" loading="lazy"></p>
<h3 id="投票">投票</h3><img src="/images/2016/20160512/photo_20160512_10.png" class="img-middle-size" width="1494" height="898" loading="lazy">

<h2 id="おしまい">おしまい</h2><p>投票作業は以上です。<br>期間中は毎日投票できるので、お気に入りの作品を応援しましょう！</p>
<p>結果が楽しみですね！</p>
<img src="/images/2016/20160512/photo_20160512_11.png" width="1507" height="786" loading="lazy">
]]></content>
    <summary type="html">Space Apps Challenge 2016 のPeople's Choiceの投票方法をまとめました</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="ハッカソン" scheme="https://future-architect.github.io/tags/%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3/"/>
    <category term="宇宙" scheme="https://future-architect.github.io/tags/%E5%AE%87%E5%AE%99/"/>
  </entry>
  <entry>
    <title>ハッカソン道中記#3～社会人2年目のリケジョがハッカソンに出てみました～</title>
    <link href="https://future-architect.github.io/articles/20160511/"/>
    <id>https://future-architect.github.io/articles/20160511/</id>
    <published>2016-05-11T06:07:34.000Z</published>
    <updated>2016-05-11T06:07:34.000Z</updated>
    <author><name>川久保由紀</name></author>
    <content type="html"><![CDATA[<img fetchpriority="high" src="/images/2016/20160511/photo_20160511_01.png" class="img-middle-size" width="610" height="610">

<p>投票はこちら（※2016&#x2F;05&#x2F;16迄です！）。<br>https://2016.spaceappschallenge.org/challenges/mars/space-recreation/projects/the-zen</p>
<p>※Space Apps Challenge 2016への投票方法はこちら</p>
<h2 id="はじまり">はじまり</h2><p>こんにちは、FutureArchitectの川久保です。</p>
<p>IT歴約1年、社会人2年目新人女子のわたしがハッカソンに挑んだ全てをお伝えします！</p>
<p>2016&#x2F;4&#x2F;23(土)から二日間、米NASA主催の“宇宙”をテーマにした世界最大級のハッカソンイベント『Space Apps Challenge』に参加してきました。</p>
<p>プログラミング未経験でIT系企業に飛び込んだわたしにとってハッカソンは一大事。<br>まずは必要な物を考えました！</p>
<p>…そう、食料です！<br>大学で農学部だったわたしは、生産的な活動には食事が何より重要だと理解しています！<br>ハッカソンを戦い抜くには大量の食料が必要なはず。<br>そう考えて即行動した結果、深夜にキャリーバックいっぱいの食料を買い漁る姿を同期に目撃されて怪しまれたとか|д・)</p>
<p>会場は東京会場ではなく、JAXA筑波宇宙センターで開催される筑波会場です！<br>ロケットが印象的な、のどかなこの地が今回の舞台となります。</p>
<img src="/images/2016/20160511/photo_20160511_02.jpg" width="1356" height="905" loading="lazy">
<img src="/images/2016/20160511/photo_20160511_03.jpg" width="1328" height="886" loading="lazy">

<h2 id="会場に着いて">会場に着いて</h2><p>ワイワイしている雰囲気を想像していましたが、筑波会場の参加者は少ないため、思ったよりも静かでした。</p>
<p>そんな中、NASAのステッカーを貰った私は、最近買ったばかりのMacに貼って静かに喜んでいました♡<br><img src="/images/2016/20160511/photo_20160511_04.jpg" width="2000" height="1335" loading="lazy"></p>
<p>NASAのステッカーが格好いい！ SPACE APPSは黒を選択しました（●＾o＾●）。<br><img src="/images/2016/20160511/photo_20160511_05.jpg" width="1632" height="1224" loading="lazy"></p>
<h2 id="ハッカソンスタート">ハッカソンスタート</h2><p>そんなこんなで、ついにハッカソンがスタートしました！<br>まずはチームで記念写真。</p>
<img src="/images/2016/20160511/photo_20160511_06.png" width="905" height="679" loading="lazy">

<p>ロケットのつもりです(・ω&lt;)</p>
<p>写真撮影も終わってみんなで取り掛かりましたハッカソン。</p>
<p>まずはアイデアソンからです。</p>
<img src="/images/2016/20160511/photo_20160511_07.jpg" width="1448" height="967" loading="lazy">
<img src="/images/2016/20160511/photo_20160511_08.png" width="880" height="621" loading="lazy">

<p>せっかくだからFrom JAPAN感を出したいよねーとなり、<br>考えたものが、<br><br><br></p>
<p>忍者？<br><br><br></p>
<p>盆栽？<br><br><br></p>
<p>富士山？<br><br><br></p>
<p>TOYOTA？ ？<br><br><br></p>
<p>いやいやいや<br><br><br></p>
<h3 id="座禅でしょ＼＼-٩-‘ω’-و-／／">座禅でしょ＼＼\ ٩( ‘ω’ )و &#x2F;&#x2F;／／</h3><p><br><br></p>
<p>ということで作ったものがこちら！<br><br></p>
<p>The ZEN（ザ禅）！<br>VR（バーチャル・リアリティ）のアプリケーションです！<br><br></p>
<p>VRと聞くと日常に『無いもの』を生み出すイメージがありますが、The ZENはあえて現実の地球上に『あるもの』を再現し、宇宙飛行士のストレスを取り除くことを目的にしています！</p>
<img src="/images/2016/20160511/photo_20160511_09.png"  class="img-middle-size" width="466" height="310" loading="lazy">

<iframe src="//www.slideshare.net/slideshow/embed_code/key/eMJQn48KTD1NMX" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> 【People&#x27;s Choice賞】20160424_SpaceAppsChallenge Tsukuba発表資料（おおさき天文同好会） </strong> from <strong>おおさき未来同好会</strong> </div>

<p>このアプリ、いろんな空間で座禅が出来るんです。<br>横には可愛い女の子がいて、一緒に座禅してくれるんですよ。<br>可愛いですよね、Unityちゃん(<em>ﾉ∀&#96;</em>)♪</p>
<h2 id="Unityちゃんを座らせる">Unityちゃんを座らせる</h2><p>『The ZEN』はUnityで開発しました！<br>わたしはUnity未経験だったので必死にキャッチアップし、Unityちゃんの操作周りをメインに担当しました！</p>
<p>このUnityちゃん、最初こんな感じなんですよ。<br><img src="/images/2016/20160511/photo_20160511_10.png" width="1202" height="801" loading="lazy"></p>
<p>この状態から…</p>
<p>(っ<em>´∀｀</em> )っじゃーん！！！</p>
<img src="/images/2016/20160511/photo_20160511_11.png" width="1109" height="739" loading="lazy">

<p>座禅をさせました！<br>私が！！！（※Unity初心者）</p>
<p>※がんばっている様子です<br><img src="/images/2016/20160511/photo_20160511_12.jpg" width="1441" height="962" loading="lazy"></p>
<p>blenderという3Dのモデリングアプリケーションも併用して利用しましたが、中々操作に癖があり苦労しました。</p>
<p>初めて上手くいった時は、本当に涙が出ました(´⌒｀。)！ 笑</p>
<h2 id="結果発表">結果発表</h2><p>厳正なる審査の結果…・・・・・<br>・・・・・・・・・・・・・・・・・<br>・・・・・・・・・・・・・・・・・<br>・・・・・・・・・・・・・・・・・<br>・・・・・・・・・・・・・・・・・<br><br></p>
<h3 id="People’s-Choice賞-を獲得╭-・ㅂ・-و-̑̑-ｸﾞｯ-！！！">People’s Choice賞 を獲得╭( ・ㅂ・)و ̑̑ ｸﾞｯ ！！！</h3><br>
※People's Choice賞とは…

<blockquote>
<p>一般人の投票によって受賞が決まる賞です。<br>SpaceAppsChallngeの場合は以下の手続きで進むようです。</p>
<ol>
<li>世界161の会場からそれぞれ1チームを選出（&#x3D;People’s Choice賞）</li>
<li>NASAによって25のセミファイナリストを選出</li>
<li>一般投票によりトップ5のファイナリストを選出</li>
<li>米国のケネディ宇宙センターで最後のプレゼンテーション</li>
</ol>
</blockquote>
<br>

<p>つまり、わたしたちの挑戦はまだまだ終らないです٩( ‘ω’ )و！</p>
<p>To be Continued.</p>
<h2 id="世界大会">世界大会</h2><p>People’s Choice を受賞した私たちが、まず行わなければならないことがあります。<br>NASAの方々から選んでもらうためのPV作成です！</p>
<p>作ったPVがこちら！</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/eQBTyT3ZyjA" frameborder="0" allowfullscreen></iframe>
<br>

<p>この後、NASA（SpaceAppsChallengeの運営チーム）による厳正な審査により25チームに選出されます。<br><br></p>
<p>結果やいかに…！</p>
<h2 id="選考結果">選考結果</h2><p>PV投稿から2週間後、1通のメールが。<br><br></p>
<p>タイトルには<br><strong>Congratulations Team ZEN!!!!</strong><br>の文字が！！</p>
<br>
ｷﾀ━━━━｡ﾟ+❀(≝∀(≝∀≝)∀≝)｡ﾟ+.❀━━━━!!!

<br>
なんと、TOP25に選ばれました！！！

<p><strong>セミファイナル進出です！！！</strong></p>
<br>
※選考フローについて
<img src="/images/2016/20160511/photo_20160511_13.png" width="1287" height="861" loading="lazy">

<h2 id="ファイナリスト選出">ファイナリスト選出</h2><p>セミファイナル進出後は、一般人によるファイナリスト選出がはじまります。(5&#x2F;10-5&#x2F;16の一週間)</p>
<p>現在（2016&#x2F;05&#x2F;11時点）絶賛、投票期間中です！</p>
<p>下記URLからぜひ投票をお願い致します！！<br>期間中は毎日投票が可能です！</p>
<p><strong>【投票サイト】</strong><br><strong>https://2016.spaceappschallenge.org/challenges/mars/space-recreation/projects/the-zen</strong><br><br></p>
<p>※投票にはログインが必要です。<br><strong>Space Apps Challenge 2016への投票方法まとめ</strong><br><br></p>
<p>現在は11位（2016&#x2F;05&#x2F;11時点）、中々厳しいですが宣伝をさらにがんばります！<br><img src="/images/2016/20160511/photo_20160511_14.png" width="1096" height="736" loading="lazy"></p>
<br>
TOP5に残って絶対NASAに行くぞー！！！
みなさん、応援おねがいします٩(๑•̀ω•́๑)۶！
<img src="/images/2016/20160511/photo_20160511_15.png" width="1279" height="679" loading="lazy">
<img src="/images/2016/20160511/photo_20160511_16.png" width="1276" height="680" loading="lazy">
]]></content>
    <summary type="html">IT歴約1年、社会人2年目新人女子のわたしがハッカソンに挑んだ全てをお伝えします！</summary>
    <category term="VR" scheme="https://future-architect.github.io/categories/VR/"/>
    <category term="Unity" scheme="https://future-architect.github.io/tags/Unity/"/>
    <category term="デザイン思考" scheme="https://future-architect.github.io/tags/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E6%80%9D%E8%80%83/"/>
    <category term="ハッカソン" scheme="https://future-architect.github.io/tags/%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3/"/>
  </entry>
</feed>
