投稿

3Dディスプレイドングルについて

イメージ
私がここ2、3年作っているのは、3Dディスプレイドングルと呼んでいるものです。 正面から左右45度の角度の範囲で立体に見える3Dディスプレイを角度を45度ずつ変えて5枚組み合わせたら、180度見れるんじゃないか?ということを実現しようとしています。 こちらの動画に着想を得て、かつ大変参考にさせていただいております。 【36視差】裸眼3Dディスプレイを自作してみた【立体映像】 この動画が公開された当初はもちろん、制作中も裸眼立体視ディスプレイは一般的なツールではありませんでした。 これでミクを踊らせたらすごいだろう!との思いで制作していたのですが、発売されてしまいました。 LookingGlass この180度立体に見えるディスプレイでフィギュアのようなキャラクターが生活していた らさぞ面白かろう!と思っているのですが、このような製品もあります。 Gatebox そんなわけで、特別の新規性もないし、完成もまだまだかかりそうなので、公開と相成りました。 物作りの経験に乏しいため、全体設計みたいなものはあまりありません。 むしろ、設計ができないのはプログラミングの経験が足りないからだ、とのアドバイスを受けて、まずはがむしゃらにプログラミングだと思っている側面があります。 このプロダクトは現在のところ以下の段階を考えています。 ■ 3Dディスプレイ ■ 3Dディスプレイ用レンダリング ■ ディスプレイ複数化 ■PC接続方式(未定) ■カメラ(未定) ■コンテンツ それぞれのタグに分けて、エントリを書きたいと思います。 既にある程度形になっているものは1エントリで、現在制作中のものは、成果報告に該当タグを付けていきます。 探り探りですがどうぞよろしく。

近況報告

ご無沙汰しております、ハトです。 1.ディスプレイ作成はやってない 飽きた。そもそも半分以上飽きてた。 でも3年以上かけて調べたことはいい感じに記事にまとまってるから見てくれよな。 2.ARアプリ作ってた キングオブトーキョーってボードゲームがあるんだけど、それのAndroidアプリを作ってた。 トーキョーのモック表示して、モンスターのモック表示して、攻撃モーション取らせたあたりで放り出した。アドホック対戦機能つけたいんだけどNearBy通信を使ったサンプルの魔改造が精いっぱいで涙が出ちゃう。 3.お仕事辛い い つ も ど お り 仕事が苦しいと自分の能力不足が浮き彫りになるので、毎日遅くまで仕事しているのに休日も勉強しなければいけないのではないか???という思考に囚われて死にたくなってくる。 クラウドかっこいいーやりたーいって飛びついたものの、そもそもDocker知らないよね?となり、どころか仮想サーバってやったことある?となり、サーバ構築したことある?となり、ネットワーク知ってる?となった。 あと並行して、APIって知ってる?WEBアプリ作ったことある?Tomcatって知ってる?Gradle使ったことある?Javaわかる?となっている。 なんにもわかりません… Javaの基本的な文法がちょっとわかればJavaでプログラミングはできてしまうので、アーキテクチャ的なことはよく知らなくてもプログラミングで飯を食っていける。「業務知識」なんて目くらましがない分、よほどそこらの大学生のほうが技術力あると思う。 こんな調子なので転職なんてできないのでは、という気がして死にたくなってくる。 こういうときにこの差を埋めるにはどうしたらいいのだろうか 勉強しなければならないのは仕方ないとして、壁が高すぎてどこに手をかけていいのかよくわからない。ロードマップが明らかでないと、成果がすぐ出ないような勉強が辛すぎる。 と、いうようなこと。 今まで一緒に仕事してきた人たちよりは意欲あるつもりだけど、あまり意識高いのもつかれちゃうので、業界との付き合い方を模索したい。ゲームもしたいし、ダラダラしていたい気持ちに嘘はつけないので。

20191110:成果報告

今回はレンダリング結果の軽量化を図ります。 ここで書いたか忘れましたが、3DディスプレイドングルではWindowsで実行したUnityで12枚の画像を合成した結果(レンダリング結果)をUDP通信でraspberrypiに送信する想定でいます。 この送る際に、画像をPNG形式の圧縮を掛けています。 レンダリング結果の確認のために圧縮したものをファイル出力したりするのですが、これが実に5MBあるのです。 秒間30枚(30fps)送ることになるので、秒間150MBを送らなければなりません。 しかし、raspberrypiの有線LANの通信速度はどうにも秒間39MB程度の様子。 https://raspida.com/new-pi-3b-plus?amp=1 全然足りません。 そこで、秒間150MBをなんとか1/5程度にする方法を検討します。 アプローチは以下の2つ。 ①30fpsの動画としての軽量化 ②秒間30枚送る画像1枚1枚の軽量化 ①を検討します。 世の中ニコニコ生放送、Youtubelive、instaliveとリアルタイムに動画をストリーミングする技術は沢山あります。 この既存技術の適用によって軽量化は実現できるはずです。 しかし、調べてみたものの門外漢の私にはやはりなかなか難しい内容。 これはどっしりと腰を据えて取り組まねばなりません。 その中で断片的に私が理解できた範囲では、どうやらキーフレームという1枚の画像をフルサイズ送るタイミングと、そのキーフレームからどれだけ変化したかという差分情報だけを送るタイミングに分けることで軽量化しているようです。 これだけを実装するなら泥臭くコーディングしてもなんとかなりそうですが、世の中APIというものが普及していますから、すんなりと実装できる手段が転がっているかもしれません。これは引き続き調査をしていくことにします。 手段はどうであれ上記の理解から1つわかるのは、画像フルサイズは送らなければならないということです。当たり前といえば当たり前ですが。 この画像フルサイズが5MBあるのですから、どう考えてもフレームレートは低下してしまいます。画像は軽いに越したことはないのです。 そこで②の検討です。 画像を軽くするにあたって以下の3つの観点で検討する必要があります。 ①PNGでいいのか ②画像を変えることなく軽量化する方法 ...

20190810:成果報告

 今日は引き続きUnityから画面のレンダリング結果をUDPで送信し、pythonで受信する部分の作成。 対象バージョン:TCPClientTest8 本日の成果:UDP送受信の動作を確認 次回の予定:受信したバイトストリームについて、判定ロジックの実装  UDP送信ロジックに差し掛かるとUnityがフリーズする事象が発生。 発生すると強制終了するしかなくなってしまうため、進みが悪かった。 開発環境が変わったことが影響か。 結局原因わからず。 誤ってサブスレッド側にUnityオブジェクトの操作ロジックを入れてしまったかと考えたのだが、ここでマルチスレッドの難しさを痛感した。 デバッグでブレークポイントが動作しない。  調査中に、UDP送信ロジックで送信バイト数のカウントアップが抜けていることを発見。無限ループって怖くね? 前回の成果を踏まえて、UDP受信側での形式チェックを全て排し、一括で受信するようにしたところ、受信できることは確認。 送ったものをきちんと受信できているといいのだが。 受信の後に、形式チェックを行うものとする。 やり方はあとで考える。 ーーーーーーーーーー以下雑感ーーーーーーーーーー 集中力がチンパンジー以下なので環境を変えようと思って近所のカフェに行ってみた。 客が少ない。大丈夫か。 3時間いたが、客は私を含めて4人程度だった。 客が私一人とか余裕であったのでちょっと居た堪れない気持ちになった。 パソコン広げて居座ったりして迷惑じゃないかな。  お外でプログラミングなんて、なぁんて意識が高いんざましょ、とか思ったのだが wi-fiなしでプログラミングってやっぱり不可能だよね。 スマホのテザリング。通信料が頭をよぎる。モバイルルーター買おうかな。  カフェに居座ってなにも頼まないわけに行かないので、アイスコーヒーを頼んだのだが1杯500円弱。悩みどころ。お昼も食べたので、3時間滞在で1500円程度だった。 コワーキングスペースとか行ったら、コーヒー飲み放題、wi-fi使い放題で1日3000円とかになりそう。悩みどころ。休日に1日家を空けたら嫁が不機嫌になるけど。 それにしてもあぁいうwi-fiって接続して平気なのか。セキュリティ的に。 施した方がいい対策とかプリーズ。  会社のパソコ...

自己啓発本に己を殺される

私は生まれてこの方、自己啓発本が役に立ったことがない それが高じてそもそも読みもしない 読んでいる人間が鼻につくまである 意識高い高いだ 私は意識低い低いなので 自己啓発本を読むと、私の人間性は尽く否定され、路傍の石以下の存在と成り果てる ここより比喩を用い...

20190804:成果報告

対象バージョン:TCPClientTest8  今日はUnityから画面のレンダリング結果をUDPで送信し、pythonで受信する部分を作成。 python側、バインドするIPアドレスにgethostbynameでローカルホスト名から取得したIPアドレスを使っていたが、UDPを受信できていなかった。 127.0.0.1を直接指定したところ、受信処理が走るようになった。 今後、ホストを切り離した際に影響が出る可能性があるため、要注意。 また、レンダリング結果をsendしている部分で、 「SocketException: データグラム ソケットで送信されたメッセージが、内部のメッセージのバッファーまたはほかのネットワークの制限を超えています。または、データグラムの受信に使われるバッファーがデータグラムより小さく設定されています。」というエラーメッセージが出力される。 バッファサイズごとに分割して送信するよう変更したが、改善せず。 受信側で、まずは先頭8バイトを受信してPNG形式のデータか判定、などとしているのが問題か。 毎フレームでの受信であるため、受信と判定を別スレッドに分けて並列処理する必要があるかも。

社会人6年目一般SEの不安

 私はこの1ヵ月間仕事を休んでいました。有休ではありますが。 理由は、会社への不満、仕事への不安です。 休む前には上司に色々と、「ここがダメ」「あれがダメ」「だから心配」などと不満と不安を打ち明け、休ませてくれとお願いをして休みに入りました。  1ヵ月、あっという間でした。 これまで辛い仕事が続いて精神的に参ってネガティブになっているだけかな、などと思い、仕事のことは考えずに1ヵ月を過ごしました。  今日、会社に出社し、担当営業と話す中で、原因はこれかなと思うものが見えてきたので、ここに置いていきたいと思います。  私は入社するとき、プログラミングに自信がなく、世の中の大学生の方がプログラミングはできる、でもこれからは私もバリバリプログラミングして、なんでも作れちゃうプログラマーになるんだ!と思っていました。 今も、なんでも作れる人になりたいと思っています。 しかし、入社してみるとプログラマーとSEは全然違う仕事だと言われましたし、気づかされもしました。  入社してこれまで、私はバリバリにプログラミングをこなすプレイングマネージャーとか呼ばれていた人の下で、とあるカードシステムを担当しているチームに在籍していました。そのマネージャーは、スケジュール管理とかタスク管理とかのいわゆるマネジメントだけでなく、自ら全体設計をし、ハードウェアを面倒し、ネットワークを構築したりする人でした。  そこでは、お客様から要望のあった機能を追加したり、サーバ機器をごっそり入れ替えたり、他システムを別言語で作り直したり、色々な案件がありました。 しかし、私はそこで、マネージャが難しい作業に入った際にお客様からの横やりで中断されないように間に入ったり、マネージャがプログラミングで詰まれば聞き役をし、とにかく知ったような顔をしたりばかりして過ごしていたので、実態が伴わず、自分ではできないが他人からはできそうに見られるという状態になってしまいました。  こんなはずではありませんでした。私は知ったような顔で知ったような口を叩く、プログラミングもできない先輩を軽蔑すらしていました。ところが、実際にできあがったのはそれに毛が生えたような6年目です。 その先輩より、プログラミングができる自信はあります。なんならこれまで一緒に仕事をしてきた人...

ディスプレイ5枚以上の接続を可能にする方法案

イメージ
最終的に目指しているプロダクト「3Dディスプレイドングル」についてはこちら。   3Dディスプレイドングルについて ●ディスプレイを5枚繋ぐのは難しい 3Dディスプレイドングルは「3Dディスプレイを5枚組み合わせて180度立体的に見えるようにしたら楽しそう」というコンセプトではあるのですが、実際、液晶ディスプレイが5枚も接続できる環境なんてそうそうないのです。 昨今CPUにGPU機能が内蔵されることでデュアルディスプレイ、つまりディスプレイ2枚までは普通にできるようになりました。 が、5枚。もっと言えば、コンソール用のディスプレイも欲しい。つまり6枚。 6画面マルチディスプレーの巨大デスクトップを構築する技 トレーダーかな? こんな環境を一般家庭に要求するのは酷です。というか無理。 可能な限り、ケーブル1本をパソコンに接続したら機器セットアップは完了、を目指します。 かつ、今回は自前でディスプレイが選定できなければなりませんので、そこも重要です。  以下の案はすべて軽く調べた程度であり、検討の余地を残しております。 ●案1:USBディスプレイ   USB3.0からHDMI出力するという商品 があります。 USBハブでUSB3.0の出力を5個にして全てにこの商品を接続すれば5画面行ける? よく見てみたら、ディスプレイ数はグラフィックカード依存と書いてある。ダメか。  しかしです、USB3.0って転送速度は5.0Gbpsなんですね。 秒間5Gb=を転送できる。  今回使うディスプレイは1200*1920なので、画像サイズはおおよそ6.6MBくらいになるかなと思います。(実際に作ったPNG画像は4.43MBなのだが、なぜ) 最低30FPSなので、1秒間に30枚。それが5枚です。  6.6M * 30 * 5 = 988.8M 秒間1GBの転送速度があれば十分表示内容は伝送できる。  あとはこれを受けてディスプレイに表示する側を作れるかどうかです。 USBの仕様として、直接PC同士が通信するようなことには対応していないようなので、あくまでもUSB機器として認識されるようにしなければならないようです。 こういった機器を作るとなれば思いつくのはやはりラズベリーパイです。 Raspberry P...