zawazawa雑記

SXSW参加報告!〜全体編〜

f:id:zawazawahtn:20190323132955p:plain

テキサス州オースティンで開催されたSXSWに参加してきました!現在mercari R4D XRチームでインターンをさせていただいていて、チームや外部学生と共に行かせていただけたことにとても感謝しています!

TL;DR:

  • 思っていたよりエンタメ色の強いフェスティバルだった
    • ライブ、エンタメテック、映像など中心
    • アカデミックな発表の場というよりはビジネス展開の見込めるプログラムが注目されそう
  • Japan勢が注目されていた
    • TradeShowのJapanブース、経産省のThe New Japan Islands
    • 実際にAwardなどで日本からのプログラムが受賞した

視察概要

会期と参加日程

自分たちは3/10~3/16の7日間参加した。赤枠ので囲われた部分に参加してきた感じ。

f:id:zawazawahtn:20190321114855p:plain:w450


11人チーム

今回、mercari+Boldスカラーシップの学生合わせて11人で一つのAirbnbに宿泊し行動した(他にもmercariの社員の方は来ていたが、分かりやすいようにAirb単位で分けた)。自由行動ベースで行きたいところがあれば行動を共にするという感じで日々回り、オススメの展示や各自の注目する箇所を適宜共有するスタイルを取った。

f:id:zawazawahtn:20190324104522j:plain
集合写真


活動範囲

下の地図で表示されている範囲内で行動していた。北はテキサス大学オースティン校、南はコロラド川を超えてシアターやラーメン屋まで移動した。

f:id:zawazawahtn:20190321120742j:plain:w300

プラチナバッジの特権

  • Interactive, Film, Musicの3つのカンファレンスとフェスに参加可能
  • 全10日間(3/13-22)有効
  • 3部門のキーノート、セッション、ワークショップ、メンターセッション、ピッチ、スクリーニング、ショーケースへの参加
  • FilmとInteractiveのアワード、プレパーティ、クロージングパーティへの参加
  • ホテルの優先予約
  • カンファレンス・フェスティバル会場内のシャトルバス乗車
  • Music(ショーケース)とFilm(映画上映)のエクスプレスパス
  • クロージングイベントのBBQとソフトボール大会への参加
  • Music(ショーケース/ライブ)の優先入場 …など

SXSWにはじめて行くという方まずはこれ! | 未来予報株式会社 | VISIONGRAPH Inc. より引用


SXXPRESS PASS

毎日朝9時から、次の日のセッションやライブ・映画会場への入場を優先的に予約できるパス(3つ/dayまで)がある。予約しても自分は結局一つも使わなかったが...

SXSW展示・ブース

SXSW系のイベントに関しては別の記事を投稿したので、こちらをどうぞ。

https://zawazawahtn.hatenablog.com/entry/2019/03/23/SXSW%E5%8F%82%E5%8A%A0%E5%A0%B1%E5%91%8A%EF%BC%81~%E5%B1%95%E7%A4%BA%E3%83%BB%E3%83%96%E3%83%BC%E3%82%B9%E7%B7%A8~?_ga=2.140720498.1919660937.1553331968-1439627019.1527391541zawazawahtn.hatenablog.com

その他(食・文化・Tips)

ブラントン美術館

SXSWとはさほど関係ないが、テキサス大学オースティン校付近に有名な美術館があるという話だったので行ってみた。チケットは本来$12かかるはずが、SXSWパスを首にかけてるのを見つけてもらい、タダにしてもらった。


食時

SXSW企画でタダになるドリンク、食事が多数あるので適宜利用するべし。 やはり現地はお肉が美味しいのでたらふく食べるべし。 現地料理はとりあえずチーズがふんだんに使われているのでチーズ好きには天国、チーズ苦手な人は少し苦労するかも。 量が多いので覚悟すること。

買い出しはWholeFoods(日本の成城石井的ポジションらしい)で行い、Airbnbでホームパーティをした際にたくさん買い入れた。朝ごはん用にパン・マフィン・フルーツなど買い揃えても良いかも。


南部の人の人柄

アメリカ南部(少なくともテキサスの人)は優しい人が多い。積極的にしゃべりかけてくれるし、会話も丁寧で親身になってくれる。というのも、去年のこの時期にMIT(マサチューセッツ州アメリカ北東部)に行った時には、ドライな人が多く会話もあまり弾まなかった覚えがある。

同じことを感じてる人もいるみたい→ アメリカ人=◯◯が通用しない?地域によって様々なアメリカの人々|ススメ-学生の一歩を応援するメディア-


天候

日本の5月並みの暖かさだと聞いていた割には寒かった。日本から持って行ったジャケットをそのまま使った日もあった。


SIMカード

今回初めて現地対応SIMカードを購入し、使ってみた。結論として、とても便利、また海外行くときは使いたい。LINE電話の遅延も日本にいる時と同じくらいだったし、体感として少しデータのロードに時間がかかるぐらいでほぼストレスはなかった。 SIMロック解除するには数日かかるのであらかじめやっておくことをオススメする。 ちなみに購入したものはこちら→


スクーター

たくさんの人が話題にしていた乗り捨てられる電動スクーターだが、非常に便利で楽しいけどひやっとする場面もあった。日に2回ほど転倒を目撃したことがあり、うち1回はスマホが側溝に転がり落ちていき悲惨だった(アメリカの側溝は結構大きくて、大人でも下半身がすっぽり入ってしまうくらい。物落としたら大変。ITを想像すればOK)。だいたいワンライドに$1.5~3くらいかかるのだが、何も考えずに乗り回してたらそこそこな額になるので適宜歩くのがよろしいかと。

おわりに

主にVR/AR/MRを扱ってるブースや話題を中心に見てきたが、SXSW全体的にみて多くはなかった。でもコンテンツの完成度自体はどれも平均的に高く、体験しがいのあるものが多かった。ただxRテクノロジーのみに注目してSXSWに参加するとがっかりすることになるかもしれないので、幅広く興味分野を広げておいが方が良いと思う。

SXSW参加報告!〜展示・ブース編〜

f:id:zawazawahtn:20190323132955p:plain

この記事ではSXSW関連の展示・ブースを紹介していきます。

TradeShow

  • Japanブース

J-startupも入ってる日本ブースが周りと比べて盛況だった模様。特に電通ブースがひときわ目を引いていて、4つの展示どれも独特で新しい概念を見た気がした。特に寿司のやつとハンコのやつがおもしろくて、自分の顔が掘られたマイハンコを持ち帰らせてもらった。

Todai to Texasプログラムでは同年代の人がSession登壇や展示をしていて、焦りというか刺激を受けた。自分も頑張らなくては...

Time Machineは体験できずじまい…日本でも展示の予定がないそう。後日Awardも取っていたということも聞き、余計と悔しい。やらかした感がある。

Virtual Cinema

VRの動画作品を中心に約20作品が展示されていた。体験するためには開場1時間前から並んでおくのが吉。開場されたら作品ごとに列が形成されるスタイルで全部を回ろうとするのは、個人的に結構厳しいなと思った。中には事前に予約して整理券的なシステムを取ってるものもあったみたいなので、係員に聞いてみるのが良い。

Film

昔のフィルムが発掘されたとかで作成された実写ドキュメンタリー。ZAQH Theaterという少し外れたところまでシャトルバスで行き、道中ラーメンを食べた。うまかった。

Music

  • 6th Street

土日の渋谷くらいの人混みで、通りが4ブロックぐらいに渡って封鎖される。どこもかしこもバンドミュージックが流れみんな騒いでる。入った店でお酒を注文したら$10以上じゃないとカード使えないよと言われ、唯一現金を要求された場面。

Gaming Expo

子供も多く、オタクめいた人が多くなった印象。MAREというゲームに一目惚れして、2019Autumnに買おうと決めた。一人の体験時間が長く、クリアするのに10~20分かかるもので、回転率が悪かった。自分が行った時は前に誰も並んでなかったので運が良かった。

企業ブース

匂いのVRを体験した。テトリスエフェクトのブロックが消える時に瞬間的に匂いが排出される。オンとオフの切り替えがしっかりしてて、残り香があるみたいなことはなかった。 入口のロボットについて、どうやら互いにしかわからない言語で会話してるらしく、人間には理解できないらしい。という背景を聞いて見てみると、なるほどたしかに何かしら交信してる宇宙人のようにも見えてきた。 AI作曲について、音楽のメロディ部分を生成してたのだが、設定する音価によって生成されるメロディもだいぶ様変わりしておもしろかった。ただjpopをinputにして学習してるため日本人にはウケるがフランス人なんかには受けないみたいな話を聞いて、なるほどと思った。 影のやつは、おもしろかったが1人でもっとゆっくり吟味したかった。

8kシアター

中の展示が面白かった。 dellがいかにしてPCをリサイクルし、新しい製品に還元しているかみたいな話をVRゲームチックにしているコンテンツがあり、あまり面白くはなかったが会社の事業活動をこのような VRコンテンツにすることで印象に残せると感じた。

Alienwareブースに入れ替えになってから遊びに行った時は、自分がゲーマーだったらすごい楽しそうだなと感じた。

  • The New Japan Island

落合さん監督というだけあって空間演出とかが凝ってた。ピッチを行う人が真ん中のこたつにすわって話すのが新しい。

FlatStock

良かった!!Tシャツとシールを買っちゃった。やはりブースを出している人の人種がどうも違ってみえるというか、いかつめな人が多かった。(墨入れてる率が半端なく高い)

Session

結論:あまり面白くなかった。

全部で4つほどセッションを見たが、どれもパネルディスカッション形式で各人の思いを述べているだけのものが多かった。元来自分は人の話をずっと聞いているのが辛いのでせめてスライドとかは用意して動かして見せて欲しかった。

その中でも割と参考になる会話がいくつかあったので超抜粋して記述すると、

  • 面白い没入コンテンツをつくるには、どのようにそのコンテンツが消費されるかを想像するのが大事。hmdなのかタブレットか、操作はマウスなのかコントローラなのか、見てる人がどんな人なのかを想像する。
  • どうして今のvr体験は屋内にとどまっていると思う?
    • いろんな素晴らしい体験が部屋の中でできちゃうから。
    • 屋外で行うには何かしらの理由がいる。部屋の中でできるのが手軽。
  • ディズニーがどのように没入体験をユーザーに提供しているかはとても参考になる。

その他

  • UNESCO Media Arts

メディアアートの作品6つくらいの展示。自分が行った時はうち1作品がwipで見れなかった。葉っぱのやつ、AR絵画、顔のやつがおもろくて、自分が作品作るときにも参考にしようと思った。

サークルでやってきた曲まとめ

大学のバンドサークルに所属して5年目となり、演奏してきたアーティスト・曲の年代もジャンルも幅広くなってきたところで、今までなにを弾いてきたのかなと気になったのでまとめました。 なお当方はキーボーディストでバンド自体は大学から始めました。もともとクラシックピアノを習ってて大学で初めてシンセに触れたという感じです。

2014

うちのサークルは11月に2年から1年に役職を引き継ぐのですが、自分はそこで代表に選んでいただきサークルのことを文字通り色々管理運営することになりました。ちなみに部長はまた別にいます。

サークル入って当初はコードが読めない・耳コピできない・シンセわからないの状態でしたが、なんとか頑張りました。

アーティスト 補足
東京事変 キラーチューン
今夜はから騒ぎ
Burlesque Express
But I'm a Good Girl
Candyman(Christina Aguilera)
Bound to you
Something's Got A Hold On Me
Welcome to Burlesque
Show me how you Burlesque
東京スカパラダイスオーケストラ Left with the dog
美しく燃える森
サファイヤの星
DOWN BEAT STOMP
Call From Rio
砂の丘
今井美樹 PRIDE
LAST JUNCTION
シンデレラ・エクスプレス
青春のリグレット
私はあなたの空になりたい
No.1
椎名林檎 罪と罰
すべりだい
依存症
ありあまる富
Mariah Carey All I want for Chirstmas is you
Now That I Know
I'll be there
Emotions
→Pia-no-jaC← 台風
一青窈Feat.SOIL&"PIMP"SESSIONS 他人の関係
YUKI cosmic box
レフレール Club IKSPIARI
矢島美容室 ニホンノミカタ
ウルフルズ ガッツだぜ Voで参加
きゃりーぱみゅぱみゅ ハタチ
郷ひろみ 2億4千万の瞳
光GENJI 100%勇気 Voとして参加
Deep Purple Burn Voとして参加

2015

1年のころに比べてライブでる回数も出てきて難しい曲も弾けるようになってきました。合宿でやる曲がだいぶ攻めてていい感じの時期。(捕捉:うちのサークルでは合宿は1バンド1曲の単発ネタをやっていくスタイルでした。また1バンド20~30分くらいの長枠でやるライブもいくつかありました。)

アーティスト 補足
東京事変 透明人間
本能
椎名林檎 警告
本能
Every Little Thing 風待ち心もよう
fragile
スイミー
キラメキアワー
Grip!
MISIA Can't take my eyes of you
つつみ込むように
君に嘘はつけない
Stay in my heart
We are the music
KIT
鈴木雅之 最初のyaiyai
め組のひと
渋谷で五時
違う、そうじゃない
夢で逢えたら
ランナウェイ
松任谷由実 リフレインが叫んでる
ルージュの伝言
DOWNTOWN BOY
中央フリーウェイ
卒業写真
大塚愛 ラーメン
heart
猫に風船
バイバイ
大好きだよ
Earth, Wind & Fire In the stone
September
Boogie Wonderland
Fantasy
That's the way of the World
Can't Hide Love
My Promise
After The Love Is Gone
ABBA Dancing Queen
Mamma Mia
Gimme! Gimme! Gimme!
Honey Honey
Money Money Money
SOS
JUJU My Life
You'd be so nice to come home to
If
やさしさで溢れるように
Superfly スキップビート
タマシイレボリューション
輝く月のように
Roll over the Rainbow
Free Planet
マニフェスト
東京スカパラダイスオーケストラ Pride of Lions
SMAP SHAKE
リーガルハイ リーガルハイ ドラマのメインテーマ
The Flare the HIATUS
Superfly Bi-Li-Li Emotion
Jill Scott Hate on me
Fat Prop Close My Eyes
有形ランペイジ 世界五分前仮説
におP 余所事
Bruno Mars Super Bowl Halftime Show
つじあやの 風になる
つじあやの&BEATCRUSADERS ありえないくらい奇跡
BUGY CRAXONE 人と光
Incognito Don't You Worry 'Bout A Thing
Aladdin A whole new world
Ricky Martin Livin' La Vida Loca
坂本真綾 やさしさに包まれたなら
MOUNTAIN mocha KILIMANJARO Just A Rambling Man
松谷卓 Inscrutable Battle 劇的ビフォーアフターのアレ
福耳 星のかけらを探しに行こう
雪乃 Rantiki サークルの先輩が作曲した曲
オリジナルラブ 月の裏で会いましょう
Yellow Studs さえずり
八神純子 みずいろの雨
Marcus Miller Power
さかいゆう feat.秦基博 ピエロチック
??? All Night Long
DIMENSION Se.Le.Ne
竹内まりや 元気を出して
鮭P あんしんしておやすみ
レキシ 武士ワンダーランド
SMAP 青いイナズマ Vo, ダンサーとして参加

2016

ようやく耳コピが正確になり始め、シンセの音作りも気を配れるようになってきました。上原ひろみに手を出し始めた時期。

アーティスト 補足
小谷美紗子 mad
YOU
Rum&Ginger
照れるような光
fangs
Who
Mountain mocha kilimanjaro Just A Rambling Man
タイム イズ デッド
Power of Soul
Tell me a bedtime story
オリジナルラブ SCANDAL
接吻
Maxwell Pretty Wings
Bad Habits
Cold
Ascention
Fistful of tears
Cymbals RALLY
E.G.G
My Brave Face
午前8時の脱走計画
Highway star, Speed star
Suchmos Fallin
STAY TUNE
YMM
Armstrong
All right
Miree
The New Mastersounds 102%
Treasure
Give Me A Minute
Can't hold me down
レキシ LOVE弁慶
キャッチミー岡っ引き
SHIKIBU
最後の将軍
狩りから稲作へ
きらきら武士
John Scofield Hottentot
Little Walter rides agina
コブクロ 君という名の翼
ここにしか咲かない花
小泉今日子 学園天国
松原みき 真夜中のドア
荻野目洋子 六本木純情派
岩崎宏美 シンデレラ・ハネムー
石川ひとみ まちぶせ
泰葉 フライデイチャイナタウン
back number わたがし
上原ひろみ Time Difference
Hanna montana One in a million
Eric Clapton Bad Love
奥華子
中西保志 最後の雨
Dave McMurray bob your head
福山雅治 vs.2013~知覚と快楽の螺旋~ ガリレオのアレ
ピクミン あいのうた 鍵盤ハーモニカで参加
supercell うたかた花火
Monday満ちる Sands of Time
JUJU Infatuation
椎名林檎 長く短い祭
國田大輔 feat.上原ひろみ Hemenway st.
Clean Bandit Tears
Nightcore Undead
スガシカオ×YUI 夜空ノムコウ
Dave Koz & Friends Got to Get You into My Life
川口千里 Onyx
KinKi Kids カナシミブルー
Aimer RE:I AM 歌い手のEVO+さんのバージョン
さかいゆう Life is
グッドラックヘイワ Chinese Skater
レキシ feat.オシャレキシ salt & stone
??? flavour
??? I like it
Incognito Morning Sun
Jazztronik Love Tribe
東京事変 修羅場
モーニング娘。 恋愛レボリューション21
ARASHI
星野源
CHAGE and ASKA YAH YAH YAH
大橋トリオ feat.秦基博 モンスター
ASKA はじまりはいつも雨

2017

長枠の東京事変に一番力入れていた年でした。

アーティスト 補足
前田サラ Only One Boss
Brighter Day
I Give My Heart
Victory
Simple Song
Caravan Palace Rock It For Me
Suzy
La Caravane
Jolie Coquine
Lone Digger
NakamuraEmi I
All My Time
女子
オネガイ
ボブディラン
東京事変 喧嘩上等
金魚の箱
恐るべき大人達
入水願い
落日
ブラックアウト 無理やりCD版を弾きました
シーズンサヨナラ
東京60WATTS DRINKIN’ MUSIC
昇天
朝焼けハイウェイ
外は寒いから
THANK YOU FOR THE MUSIC
たまにはこんなラブ・ソング
Tower of Power Soul With a Capital ’S’
I Like Your Style
Souled Out
Only So Much Oil In the Ground
What Is Hip?
大塚愛 ロケットスニーカー
さくらん
PE'Z Boomerang Boogie
Let it Go
Bye Bye Yesterday
Woo-ha!!
Akatsuki
中島美嘉 LIFE
一色
オリオン
CHAGE and ASKA PRIDE
Frost* Hyperventilate
オリジナルラブ 夜をぶっとばせ〜LET'S SPEND THE NIGHT TOGETHER〜
Special Others Beautiful world
mihimaru GT 気分上々↑↑
TWICE TT 初めて打ち込み作った曲
John Scofield Endless Summer
Oz Noy twice in a while
FORQ Starchy
Allen Hinds Now Really
山崎達郎 Sparkle
ジャンクフジヤマ 束縛
角松敏生 Melody for you
オリジナルラブ 朝日のあたる道
??? As
Tristan MoonTune
Incognito 1975
Hairspray You Can't Stop the Beat
Hairspray I know where I've been
LA LA LAND Start a Fire
DreamGirls DreamGirls
Rent Seasons of Love
Beauty and the Beast Beauty and the Beast
UNCHAIN Love never felt so good
絢香 恋い焦がれてみた夢
椎名林檎&トータス松本 目抜き通り
Bruno Mars Finesse
カルメラ 乾杯ブギウギ
AKB48 フライングゲット
ザ・ハイロウズ 日曜日よりの使者
モーニング娘。 ハッピーサマーウェディング
ゴールデンボンバー 女々しくて

2018

M1になってからは研究が面白くなってきてサークルにはあまり出演しなくなったものの、4月と3月つまり年度始まりと年度終わりのライブには出ることができて安心しつつ、だんだん衰えゆく指の動きに焦りつつ、着々と老害として成長していく年でした。

アーティスト 補足
Funk Revelation Funky One
安藤裕子 ぼくらが旅に出る理由
真心ブラザーズ ENDLESS SUMMER NUDE
竹内まりあ 幸せのものさし
BoA メリクリ
山下達郎 Love Space
TomBad In Funk We Trust
Fonky Men
Jungalize it
2 Soul
I Feel Like
東京60WATTS 月夜にムーンウォーク
目白通り
WATTS GOing on!
DRINKIN’ MUSIC 2回目
たまにはこんなラブ・ソング 2回目

2019年3月現在の情報です。

集計すると、全301曲!!数えてないやつとかもどうせあると思うので、正しい数字ではないですが、割とキリのいい数字になりました。思い返すと多いな!!

サークルにはあと1年所属することにはなると思うけど、とりあえず集計しちゃいました。随時更新していくつもりです。

これだけ多くの曲やってきたので、それなりに音楽に対して一家言持ちのつもりでいるので、サークル以外の場でも音楽好きな人と交流したいとも思ってます。

卒業するまでの目標として、初音ミクとライブすることを掲げておきます。

f:id:zawazawahtn:20190303221506j:plain:w200
雰囲気が一番良く出てて気に入ってる写真

修士1年のふりかえり

唐突ですが、自分も修士1年のふりかえりをしようと思います!(完全にこれ

xsmiledur8x7.hatenablog.com

に感化されました) M1としてそれなりに(けっこう)頑張った1年で割と今後の人生を左右した1年だったと感じています。こいつM1の頃一体何やってたんだと気になる人や今後M1になる人に読んでもらえればと思います。

月毎のふりかえり

4月

大学院生になり、学部から研究室や専攻を変えたこともあって新しい分野のインプットを始めた時期。HCIとはなんぞ、VRとはなんぞみたいなところから入った。確かこの頃にゆうのLv3からVR入門の手ほどきを受けた記憶がある。あと初めてHMDを被ったのもこの時期で、研究室の先輩が研究のために開発してるものを体験させてもらった(研究用の殺伐としたVR空間だったからよくある「おおおおっ!!!」みたいにはならなかった)。

5月

この頃に現在もアルバイトをしてる自動運転×XRの会社(現在の社名:シナスタジア)で働き始める。サマーインターンの募集が出初めて色々物色し始める。研究テーマを探し始める。確か最初は機械学習で何かしら生成するやつだった気がする。

6月

twitterアカウントを学部の時使ってたもの(ブルーアイコン)から現在のもの(オレンジアイコン)に変える(ちなみに昔のアカウントは暇な女子大生からフォローされてたりする)。制作展というメディアアート作品を作る授業関連でいろんな展示を見に行ったり、エンジニアスキルをつけるために競プロの問題を解いたり、初めてUnity触ってARの実装をしてみたり、xRTechTokyoにも参加したりしてた。研究テーマはまだ見つからない。

7月

制作展で自分の作品を初めて展示した。Unity初めて1ヶ月のもので今思えば全然だったけど、頑張って作品を作り上げる経験ができた。

はじめてのさくひんてんじ - zawazawa雑記

shader芸に触れる。

研究テーマはまだ見つからない。確かこの頃はARLiveとかARPetをテーマにします!って言ってたと思う。

8月

1ヶ月のメルカリサマーインターン!すごい楽しかった。研究室以外の学生とここまで一緒に過ごすのは初めてで色々刺激を受けた時期(自分の研究室は、個人開発かつあまり学会発表の意欲のある人がいないとこなので、けっこう周りのインターン生と研究環境が違ってびっくりした&羨ましかった)。 ↓メ社のプロダクトチームの打ち上げに参加させてもらえた時

9月

1ヶ月のリクルート(ライフスタイル)サマーインターン!これもすごい楽しかった。ここではガリガリとエンジニアをやった。前月との対比が個人的にとても面白くて、メ社(大型ベンチャー/研究開発部署/テーマ持ち込み型)とリ社(大企業/新規事業開発/チームアサイン型)という感じだった。ここで開発したアプリのプッシュ通知を実装していたので、コスメに興味ある人はリリースされたらぜひインストールしてくださいね!

www.recruit-lifestyle.co.jp

あとシナスタジアで開発したVRコンテンツをTGSで出展しました。初めてTGSに行ったのですが、VR/ARゾーンの盛り上がりとかビジネスの現場を目の当たりにできて良い経験でした。

10月

8,9月は2日くらいしか研究室に行ってませんでした。自分の研究室の良いところなのですが、他のところでやろうとすると研究室内で炎上したりその後の先生からの”指導”が変わったりみたいな話も無くはないと思うので、やはりサマーインターンに行きますという旨の相談なり報告はあったほうが良いでしょう。 この月からメルカリR4DXRチームでサマーから転じて長期インターンをさせてもらうことになりました。人もどんどん増えていって賑やかになってきたころ。研究テーマはちょっと決まり始めた。

11月

制作展にて2回目の作品展示をした。各所からの反応がよかったこのVRPianoVisualizer+はチームで作ったもので、作品コンセプトを3人であーだこーだ言いながら作って仕上げた。研究テーマがやっとこさ決まり(周りのM1から見たら遅いが研究室内では1,2番くらいだった)、安心しながらもこれから頑張るぞという気持ちだった。ざっくりいうと「歩きVRの安全性」に関するものなのだが、「歩きVR」という活動を軸に物事を考えてみたらどんどん面白くなっていった。↓なおそれを意識した活動

12月

SIGGRAPH ASIAに行ってきて、同級生がEmerging techでブース出したりポスター出してたりするので焦り始める。研究しなきゃ!ってことでがっつり開発し始めたのがこの時期。その傍、xRTechに制作展のVRPianoを展示させてもらったり、UnityのML-Agentsを触り始めたり、UT-Virtualの忘年会にお邪魔させてもらったりした。

1月

年明けの研究室MTGで年末年始実装した歩きVRシステムを先生に見せたところ、研究会に出してみなよと言ってもらえたので急いで実験&執筆を始めた。研究に専念するためにメ社は一旦お休みをもらっていて、フレキシブルに対応してもらえて理解のある上長の存在がとてもありがたい。いっこうさんありがとうございます。

2月(現在)

月末に向けて発表資料作成に追われたり、引き続きシステムの実装をしたり、私事ではあるがサークル(バンドでキーボード弾いてる)の練習が入ったりして割と忙しめ。

3月

メ社のXRチームとしてSXSWへ参加予定。ガンガン発信して向こうでの出会いと経験を良いものにしたい。

修士2年はこうなりたい

来年度の目標は、適宜就活しながら研究の実装をガンガンやっていき、学会発表やLTなどして実績作ること!発信力つけること!具体的に物事を話せるようになること(この時点ですでに抽象的...残念...)!

UnityのTerrainで生やした花を光らせる方法

問題

TerrainのDetailsでプレファブの花を登録して生やしたわけですが、花マテリアルに設定したEmissionが機能してくれない!!

この文章を見る感じ、ビルトインシェーダ をいじらないといけないっぽいのでやってみる。

answers.unity.com

最終的な見た目

f:id:zawazawahtn:20181222131758p:plain
花びらが青く光ってくれてる

実装方法

Unityアーカイブページからビルトインシェーダ をダウンロード 2018.2.11のビルトインシェーダ zipファイルを展開後、そのままasset に追加。これを書き換えればUnityの元々保持しているスクリプトを上書きできるらしい。

以下のWabingGrassシェーダ をいじると、TerrainにおいてDetailsに登録されている花のshaderを変更することができる。ここにEmissionマップをくっつけたい。

f:id:zawazawahtn:20181222125440p:plain
ヒエラルキーこんな感じになる

EmissionをこのWavingGrass.shaderにつける 具体的には、 o.Emission = _EmissionColor; のようにして_EmissionColorを宣言する。すると以下のような図になる。ただしこれは全体にかかっていて、花びらのみにかかってるものではない。

f:id:zawazawahtn:20181222131514p:plain
花全体が光ってしまっている。花びらのみ光らせたい。

解決方法 花びらのみを光らせたいので、_MainTexのうち青い部分のみを光らせるというコードを追加した。

こちらを参考にしました。 onoty3d.hatenablog.com

WavingGrass.shader

// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)

Shader "Hidden/TerrainEngine/Details/WavingDoublePass" {
Properties {
    _WavingTint ("Fade Color", Color) = (.7,.6,.5, 0)
    _MainTex ("Base (RGB) Alpha (A)", 2D) = "white" {}
    _WaveAndDistance ("Wave and distance", Vector) = (12, 3.6, 1, 1)
    _Cutoff ("Cutoff", float) = 0.5
    _EmissionTex ("Emission Texture", 2D) = "white" {}  //追加
    _EmissionColor("Emission Color", Color) = (0,1.04,1.28,0)   //追加
    _Near("Near", Range(0, 0.5)) = 0.1  //追加
}

SubShader {
    Tags {
        "Queue" = "Geometry+200"
        "IgnoreProjector"="True"
        "RenderType"="Grass"
        "DisableBatching"="True"
    }
    Cull Off
    LOD 200
    ColorMask RGB

CGPROGRAM
#pragma surface surf Lambert vertex:WavingGrassVert addshadow exclude_path:deferred
#include "TerrainEngine.cginc"

sampler2D _MainTex;
fixed _Cutoff;

//追記->
half4 _EmissionColor;
sampler2D _EmissionTex;
fixed _Near;

fixed GetHue(fixed3 rgb) {
    fixed hue = 0;
    fixed minValue = min(rgb.r, min(rgb.g, rgb.b));
    fixed maxValue = max(rgb.r, max(rgb.g, rgb.b));
    fixed delta = maxValue - minValue;
    if (delta != 0) {
        if (maxValue == rgb.r) {
            hue = (rgb.g - rgb.b) / delta;
        }
        else if (maxValue == rgb.g) {
            hue = 2.0 + (rgb.b - rgb.r) / delta;
        }
        else {
            hue = 4.0 + (rgb.r - rgb.g) / delta;
        }

        hue /= 6.0;

        if (hue < 0) {
            hue += 1.0;
        }
    }
    return hue;
}
//<-追記

struct Input {
    float2 uv_MainTex;
    fixed4 color : COLOR;
};

void surf (Input IN, inout SurfaceOutput o) {
    fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * IN.color;
    o.Albedo = c.rgb;
    o.Alpha = c.a;
    clip (o.Alpha - _Cutoff);
    o.Alpha *= IN.color.a;

    //追記->
    fixed4 col = tex2D(_MainTex, IN.uv_MainTex);
    fixed4 e = tex2D(_EmissionTex, IN.uv_MainTex);
    fixed distance = GetHue(col.rgb) - GetHue(_EmissionColor);
    if (distance > 0.5) {
        distance = 1.0 - distance;
    }
    else if (distance < -0.5) {
        distance = 1.0 + distance;
    }
    else {
        distance = abs(distance);
    }

    if (distance < _Near)
    {
        o.Emission = _EmissionColor * e;
    }
    //<-追記
}

ENDCG
}

    SubShader {
        Tags {
            "Queue" = "Geometry+200"
            "IgnoreProjector"="True"
            "RenderType"="Grass"
        }
        Cull Off
        LOD 200
        ColorMask RGB

        Pass {
            Tags { "LightMode" = "Vertex" }
            Material {
                Diffuse (1,1,1,1)
                Ambient (1,1,1,1)
            }
            Lighting On
            ColorMaterial AmbientAndDiffuse
            AlphaTest Greater [_Cutoff]
            SetTexture [_MainTex] { combine texture * primary DOUBLE, texture }
        }

        // Lightmapped
        Pass
        {
            Tags{ "LIGHTMODE" = "VertexLM" "RenderType" = "Opaque" }

            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag
            #pragma target 2.0
            #include "UnityCG.cginc"
            #pragma multi_compile_fog
            #define USING_FOG (defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2))

            float4 _MainTex_ST;

            struct appdata
            {
                float3 pos : POSITION;
                float3 uv1 : TEXCOORD1;
                float3 uv0 : TEXCOORD0;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };

            struct v2f
            {
                float2 uv0 : TEXCOORD0;
                float2 uv1 : TEXCOORD1;
            #if USING_FOG
                fixed fog : TEXCOORD2;
            #endif
                float4 pos : SV_POSITION;

                UNITY_VERTEX_OUTPUT_STEREO
            };

            v2f vert(appdata IN)
            {
                v2f o;
                UNITY_SETUP_INSTANCE_ID(IN);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);

                o.uv0 = IN.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
                o.uv1 = IN.uv0.xy * _MainTex_ST.xy + _MainTex_ST.zw;

            #if USING_FOG
                float3 eyePos = UnityObjectToViewPos(IN.pos);
                float fogCoord = length(eyePos.xyz);
                UNITY_CALC_FOG_FACTOR_RAW(fogCoord);
                o.fog = saturate(unityFogFactor);
            #endif

                o.pos = UnityObjectToClipPos(IN.pos);
                return o;
            }

            sampler2D _MainTex;

            fixed4 frag(v2f IN) : SV_Target
            {
                fixed4 col;
                fixed4 tex = UNITY_SAMPLE_TEX2D(unity_Lightmap, IN.uv0.xy);
                half3 bakedColor = DecodeLightmap(tex);

                tex = tex2D(_MainTex, IN.uv1.xy);
                col.rgb = tex.rgb * bakedColor;
                col.a = 1.0f;

                #if USING_FOG
                col.rgb = lerp(unity_FogColor.rgb, col.rgb, IN.fog);
                #endif

            return col;

            }

        ENDCG
        }
    }

    Fallback Off
}

これでめでたく花部分の色を抽出してその色に光らせることができた!

できなかったこと

その1

C#スクリプトから当該shaderをいじろうとしてもうまくいかなかった。

Material material = new Material(Shader.Find("Hidden/TerrainEngine/Details/WavingDoublePass"));
material.SetTexture("_EmissionTex", emissionMap); 

このように話してる人もいる。 f:id:zawazawahtn:20181222131130p:plain

その2

これはダメだったというかやり方がわからなかったので、どなたか方法を知ってる人がいたら教えてください。

  • WavingGrass.shaderに直接EmissionMapにTextureを指定する
  • .cgincを作成し、EmissionMapとなる2Dtextureをreturnさせる

Unity ML-Agentsを一通り動かすまでのメモ

あくまで個人のメモです。基本的には以下の記事が詳しく書かれています。

qiita.com

Colaboratory – Google

メモ

SHELL切り替え

Anaconda上で学習をしようとすると、zshでは起動しなかったのでbashに変えました。原因は調べてないです。

//起動シェルを確認
$ echo $SHELL
//シェル一覧
$ cat /etc/shells
//起動シェルの変更
$ chsh -s /bin/bash

v0.4とv0.5でディレクトリ構成がガラッと変わる

Pythonディレクトリがなくなり代替としてml-agentsというものができる

build場所

ml-agent直下

学習実行

mlagents-learn config/trainer_config.yaml --env=3DBall --run-id=firstRun --train

※../config/trainer_config.yamlだとfile not foundになった

tensorboardで可視化

/Users/****/projects/Unity-ML-Agents/ml-agents/ml-agents で

tensorboard --logdir=summaries

を叩いてlocalhost:6006にアクセス

詰まったとこ

  • conda install tensorflowとconda install tensorboardをしないといけない
  • localhost6006にアクセスしても"No dashboards are active for the current data set."って言われる。よくわからなかったので未解決。

学習結果ファイルの取り込み

ターミナルかFinderで学習結果を以下フォルダにコピーします。

学習結果ファイル: ml-agents/models/firstRun-0/3DBall_firstRun-0.bytes 保存先: UnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels/

Google Colabでの実行

ターミナルで以下を実行

pip install jupyter_http_over_ws
jupyter serverextension enable --py jupyter_http_over_ws
jupyter notebook \
  --NotebookApp.allow_origin='https://colab.research.google.com' \
  --port=8888 \
  --NotebookApp.port_retries=0

Google colabで以下を実行

cd /Users/****/projects/Unity-ML-Agents/ml-agents
!/anaconda3/envs/mlagents/bin/mlagents-learn /Users/****/projects/Unity-ML-Agents/ml-agents/config/trainer_config.yaml --env=/Users/****/projects/Unity-ML-Agents/ml-agents/ball3DMove --run-id=onColab --train

自分で問題を設定してみる

3DBallの問題に、前方のゴールを目指して移動しながらボールを保持する、というタスクも追加する。

  • 1試行目
Vector Action Continuous(3)
・0:z回転
・1:x回転
・2:z移動
Reward ステップ毎:+0.1(に変更)
ボール落下:-1.0(エピソード完)
ゴール到達:+1.0(エピソード完)
ステップ毎のアクション z方向への移動を追加
  • 結果

    • 最初の報酬設計だとボールの維持による報酬が大きすぎてゴールへ到達しない。報酬を以下のように変えてみる。
  • 2試行目

Reward ボール落下:-1.0(エピソード完)
ゴール到達:+1.0(エピソード完)
変更方針 ボールの維持による報酬が大きすぎたため、維持しているだけでは報酬を与えないことに
  • 結果

    • ゴールが遠すぎたのか、反対側へ行くものが多くなった。ゴールの距離を半分にしてみる。
  • 3試行目

ゴールまでに進まないといけない距離を半分にしてみる。

  • 結果

    • Goalまで運べるようになった!
  • おまけ 同じ条件でGoogle colab上でも動かしてみる

  • 結果
    • 同じ条件なのに反対側に進むという収束結果に。報酬の平均もマイナス値で、反対方向への探索がうまく行ってないみたい。goal方向に向かうことによる何かしらの小報酬が必要なのかな。やはり強化学習は報酬設計が大事という実感が得られた。

おしまい

ARKit2.0の状態保存と端末同期を使ってARPetを作ってみた

やったこと

ARKit2.0がぼちぼち出てきます出ました。それに伴いより多くの人が簡単に

  • Persistent AR Experience / 状態保存
  • Multiuser AR Experience / 端末同期

を実装し、多くの人に届ける事ができるようになります。これをいち早くキャッチアップし、実装しようと思いました。

どうやったか

ただ実装するだけではつまらないと感じたので、システム全体の流れがわかるようなアプリケーションにしました。また、今回はAR表現の進歩で実現が可能になりそうな「ARPet」を作ってみることにしました。

開発環境

  • macOSX
  • Unity-ARKit-Pluginのarkit2.0_beta branch
  • iOS12
  • Unity2017.4.2
  • Photon Unity Network
  • Xcode10

状態保存

UnityARWorldMapシーンをそのものを使えば基本的に大丈夫です。 このシーンでやってることは、「検出した平面や空間情報を端末に保存するやで。ロードする時は端末に保存されてるファイルを読み込んで保存した時と同じ風景を探すやで」って感じです。

またこの方法ではオブジェクトの保存ができません。参考に↓

f:id:zawazawahtn:20180831181226p:plain

ARWorldmapのSave&Loadにオブジェクトを結びつけたい場合は自分でそのオブジェクトのTransform情報の入ったjsonファイルを作成する必要があるみたいです。他にいい方法があれば教えてください。

端末同期

個人的に鬼門でした。実装を始めた当初は公式でも言及していたSharedSpheresを使用するつもりだったのですが、実装を始めて間も無くこの記事が出てしまいました。

blogs.unity3d.com

そうです、SharedSpheresは今後死んでしまうunetを使用していたのです。

そこで今回はPhoton Unity Networkを使用することにしました。

具体的には、

  • ARWorldMapを作成して受信端末に送信するためにARWorldMapをシリアライズする
byte[] locWorldBytes = localWorldMap.SerializeToByteArray(); 
  • PhotonではRPCでバイト列を送受信できるので(可能な型)受信端末に送信する
photonViewWorld.RPC("ShareWorldMap", PhotonTargets.OthersBuffered, locWorldBytes); 
  • 受信端末で以下のコードが動き、バイト列がデシリアライズされてARWorldMapが復元される
[PunRPC]
void ShareWorldMap(byte[] world_bytes){
    ARWorldMap worldMap = ARWorldMap.SerializeFromByteArray(world_bytes); 
・・・
  • その後受信端末側でAR体験をするためのconfig情報(検出平面や検出平面のexpandをするかどうかなど)を設定したsessionを開始する

おわりに

こちらのアプリはメルカリでサマーインターンをした時に作成したものです。そちらの記事もよかったら読んで下さい。

zawazawahtn.hatenablog.com

© UTJ/UCL