投稿

7月, 2019の投稿を表示しています

社会人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...

3Dディスプレイ用レンダリング(Unity編)

イメージ
最終的に目指しているプロダクト「3Dディスプレイドングル」についてはこちら。   3Dディスプレイドングルについて   3Dディスプレイ用レンダリング(基本編) で、3Dディスプレイ用の画像がどんなものかを説明し、 3Dディスプレイキャリブレーションツール制作 で実際に画像を合成するプログラムを作ってみました。  今回は、静止画だけでなく初音ミクを踊らせるためにUnityで実装していきます。 ●まずはそのまま移植  まずは順当に、キャリブレーションツールのロジックをそのまま移植しました。 マゼンタとイエローの画像だった部分は、12個のRenderTextureに変更しました。 12個のカメラのレンダリング結果を受ける寸法です。 しかし、まぁ遅い。すごく遅い。6FPS?くらい。 テレビが30FPS、映画が24FPSなので、映画の1/4です。 しかもダンスモーションは30FPSで作られているので、通常の1/5くらいのスピードで踊ります。カクカクです。  その後、PITCHを掛け算するのではなく足し算にしたりとか、計算結果を配列に保持して使いまわしたりとか計算量を減らす工夫を施して施して、11FPS。限界です。通常の1/3のスピードで踊るミクさんです。  休みが挟まったりしましたが、これだけで大体1年です。ファイルの最終更新日は2017/7/15まで来ました。この時点でカクツキはするものの、一応初音ミクを踊らせることには成功しました。動画、撮っておいたらよかったんですけどね。 ●ComputeShaderを用いた性能改善  次に30FPSを目指した性能改善です。 ここで私はComputeShaderに乗り出しました。 CPU処理に見切りをつけ、GPU処理を目指したわけです。  両者の違いはざっくり言って、複雑な計算をこなせる代わりに同時に行えるタスク量は少ないCPU処理、簡単な計算しかできない代わりに同時に大量のタスクを行えるGPU処理、くらいの理解で大丈夫です。  今回は1200*3*1920に毎フレームアクセスし続けるので、GPU処理の方が早くなると踏みました。 12個のRenderTextureでカメラのレンダリング結果を受けるのはそのままですが、開始直後にサブピクセル位置の計算をCPU処理...

3Dディスプレイキャリブレーションツール制作

イメージ
最終的に目指しているプロダクト「3Dディスプレイドングル」についてはこちら。   3Dディスプレイドングルについて   3Dディスプレイ用レンダリング(基本編) で、3Dディスプレイ用の画像がどんなものかを説明しました。  それを踏まえて今回はキャリブレーションツールを作っていきます。 キャリブレーションツールというとかっこいいですが、要は 3Dディスプレイの仕組み(発展編) で言っていた現物合わせツールです。 実際に 3Dディスプレイ制作 で制作した3Dディスプレイ用に作ったものの説明をします。 ●キャリブレーションツール  キャリブレーションツールは大体、PITCHの初期値が表示されていて、ボタンがあって、ポチポチと上げたり下げたりできて、そのPITCHに合わせて画像が合成されていくようなイメージです。今回はとりあえずC#で作ることにしました。  大体の流れはこうです。 最初に、入力されたディスプレイのインチ数と、横解像度、縦解像度からおよそのPITCHを計算して、画面に表示します。 このPITCHを元にマゼンタの画像とイエローの画像を6枚ずつ、合計12枚(つまり表示可能枚数分)用意します。 この際の1枚当たりの解像度は横が1200/2=600、縦が1920/6=320です。 あとはこの12枚を合成して1枚にするわけですが、どう配置するか考えていた時のものが残っていました。 気が狂ってる 今も時々見返したりしています。なんだこれは。 この図の通りに画像を合成するフローチャートが以下の通り。 恥を忍んで作ったフローチャート フローチャートの作り方がよくわかってないので、このブログを通して練習していきたいです。 閑話休題。  これ以降はPITCHが変更されるたびに画像を合成して画面に表示するようにしています。 このツールで微調整したPITCHは画面のテキストボックスに表示されているので、コピーしてテキストに貼り付けて保管しています。  ちなみに微調整した結果はおよそ6.163でした。計算では約6.120だったので、発光部と距離がある分、広がっていることがわかりますね。    このエントリを書くために、その時作ったツールのソースコードを久しぶりに眺めているのですが(最終更新日が2...

3Dディスプレイ用レンダリング(基本編)

イメージ
最終的に目指しているプロダクト「3Dディスプレイドングル」についてはこちら。  3Dディスプレイドングルについて 以下の動画を参考に制作していますので、まずはご覧ください。 【36視差】裸眼3Dディスプレイを自作してみた【立体映像】 ●3Dディスプレイ用レンダリングとは  3Dディスプレイで表示すれば、なんでも3Dに見えるわけではありません。 ちゃんと、3Dディスプレイで表示したときに3Dに見える画像を作らなければなりません。 画像を作ることをレンダリングと言います。 動画中では発狂画像ジェネレータと言われていた部分です。 実はここが一番重要です。 正直、ディスプレイとレンチキュラーレンズを組み合わせるのは、夏休みの工作レベルでできます。いや言い過ぎました。できないです。 でも本当に難しいのは、できたディスプレイで表示する画像を生成する部分です。 私はこんにゃく屋でもなければトランザムも使えないため、これを作るのに休み休み2年は掛かっています。 また動画とは違い、いずれミクさんに踊ってもらいたいと思っているため、Unityを使ったリアルタイムレンダリングで実現しようとしています。最低30FPSは出てもらわないと困ります。性能問題。深刻です。 ●3Dに見える画像の作り方 そもそも3Dディスプレイ用の画像はどういうものなのか。 動画ではなんだかぼやけた画像というぐらいしかわかりませんでした。 3Dディスプレイの仕組み(基本編) の例で作成した、6×6ピクセルのディスプレイに台形のレンチキュラーレンズを貼った3Dディスプレイで、以下の3枚を表示しようとしたらどうなるでしょうか。 左から見たら青 正面からみたら白 右から見たら赤 まずはレンチキュラーレンズを重ねた図で考えます。 左は青なのでBだけ。真ん中は白なのでRGB全部。右は赤なのでRだけ。  もちろん、一つのライトは点けるか消すかしかできないので、大体7割くらい点いているライトは点け、そうでないものは消します。 その結果出来上がるのがこの画像です。 意味わかりますか?私はあんまりわかりません。 これを、36枚の画像でやるわけです。確かに発狂します。 もうこれを作るプログラムは作っ...

3Dディスプレイ制作

イメージ
最終的に目指しているプロダクト「3Dディスプレイドングル」についてはこちら。   3Dディスプレイドングルについて 3Dディスプレイの仕組み(基本編) で、レンチキュラーレンズを使った3Dディスプレイの基本、 3Dディスプレイの仕組み(発展編) で視点数を増やすテクニックと実際に作る時の注意点を説明していきました。  ここからはそれらを踏まえて実際に作っていきます。 ●液晶ディスプレイ 今回使うのはこちら。 Raspberry Pi用 7インチ IGZO LCDパネル 接続モジュールキット Maker Fair Tokyoで出展しているときにフレームもセットで特別価格で販売していたので思い切って購入したものですが、今見たら販売が終了していました。 …販売終了してるじゃん。 あと4枚必要なのだが…。 こういった類の液晶ディスプレイモジュールは最近増えてきているので…まぁ…良い、でしょう…。  対角7インチ、1200×1920ピクセル、322ppiの短辺方向にRGBが配置されている縦型ディスプレイです。 この縦型というのが大事です。 なにせ、最終的に変型五角柱みたいな形にしたいので、ディスプレイは縦でないと困ります。そして、発展編で説明した通り、レンチキュラーレンズで視点数を増やすためにはRGB配置を利用する必要があります。 なので、このディスプレイを選びました。 が、販売終了しているので、次作る時は選び直しですね…。 計算も、やり直しですね…。 ●レンチキュラーレンズ 次にレンチキュラーレンズを選びます。 ここで購入しました。 ホログラムと3D画像をつくろう どうせ画面に接着しないので接着層なし。 色々なLPIを試したかったので、お試し5枚セットで60、75、100、160、200を買った気がします。覚えてません。 A2で届くので大変邪魔です。 私は会社のロッカーに放り込めず、無関係な営業さんのデスクに立てかけてありましたが、会社の移転に伴って上司の家に移動しました。まったく傍若無人な若者です。 さて、今回は160LPIのレンチキュラーを使用します。 選び方ですが、単純に言うとLPIが大きければ視点数が少なく、画質が良くなります。 逆にLPIが...

3Dディスプレイの仕組み(発展編)

イメージ
最終的に目指しているプロダクト「3Dディスプレイドングル」についてはこちら。   3Dディスプレイドングルについて この記事ではこちらの動画を元にして解説しています。   【36視差】裸眼3Dディスプレイを自作してみた【立体映像】 3Dディスプレイの仕組み(基本編) では、なぜレンチキュラーレンズで3Dディスプレイが作れるのか、どのくらいの視点数ができるのかの基本を解説しました。 しかし、動画で作っていた36視点は到底及びませんでした。 以下では、視点数を飛躍的に増加させるテクニックと、もう1つ実際に作る時に気にしなければならない焦点について解説していきます。 ●レンチキュラーレンズを斜めにする理由 どうやって36視点にしているか。 動画中で、「レンズのラインが画面に対して斜めになるようにカットするのが視差数を増やすポイントです。」「独自の計算により9.46度の角度を付けました。」と言っていますが、なぜレンチキュラーレンズを斜めにすると視点数が増えるのか。あと9.46度ってなに?  基本編でディスプレイの色を出せる最小面積であるといった1ピクセルですが、これは赤、緑、青(RGB)の3つのライトが組み合わさって1つの色を出しています。 小さいとき、テレビ画面を虫眼鏡で拡大したりしなかったでしょうか。 横6ピクセル、縦6ピクセルの拡大図 1ピクセルはこの3つが組み合わさって正方形になるようになっています。 実はディスプレイごとにこのRGBが横に並んでいたり、縦に並んでいたり違うのですが、普通に使う分には全然意識しませんね。 ここに基本編に出てきた台形のレンチキュラーレンズをそのまま置いてみます。 すると、左から見えるのはこの部分です。 赤だけ。 しかし、レンチキュラーレンズを斜めに置いてみます。 すると、左から見えるのはこうなります。 RGBがきれいに入ります。 RGBの並びが横でも縦でも気にならないように、同じ方向にRGBさえ出力されていればちゃんと色を認識することができます。 これで、同じレンチキュラーレンズ、同じディスプレイでも視点数が増やせるというわけです。 そして、上記の図で使っている角度が大体9.46度です。 横1ピクセル、縦6ピクセルで1つの組になるように斜めに置...

3Dディスプレイの仕組み(基本編)

イメージ
最終的に目指しているプロダクト「3Dディスプレイドングル」についてはこちら。   3Dディスプレイドングルについて  まずはじめに、本ブログで「3Dディスプレイ」と呼んでいるものより厳密に言うと「レンチキュラーレンズを使った裸眼立体視ディスプレイ」のことを指します。  こちらの動画を参考にして作成しましたので、まずはご覧ください。 【36視差】裸眼3Dディスプレイを自作してみた【立体映像】 ●3Dに見える理由  まず、なぜ3Dに見えるのか、です。 人間がなにかを見た時に3Dだ!と感じる理由には複数あると言われていますが、一番簡単なものは 「左目と右目で見え方が違うこと」 「左や右に動いた時に見え方が変わること」 です。  この二つは同じことを言っています。 つまり、「角度によって見え方が変わること」です。 30度右から見たら30度右からの見え方、40度左から見たら40度左からの見え方で見える。 これによって、3Dに見えるわけです。  でも、テレビもディスプレイも、下からのぞき込んでもスカートの中なんて見えないですよね。 テレビもディスプレイも、角度によって見え方を変えることができないからです。 それを可能にしているのがレンチキュラーレンズです。 ●レンチキュラーレンズで絵が変わる理由  動画内で「ディスプレイからの光を特定方向に曲げて~」と言っていますが、これを具体的に。 まず、これがレンチキュラーレンズ。 これを説明のために単純化するとこう。 かまぼこ型から三角柱型に単純化しました。 これの下にディスプレイを置くと、こうなります。 三角の左半分から出た光は左方向に、右半分から出た光は右方向に向かって曲げられます。 上の組み合わせを大量に横に並べると、左から見たら赤く、右から見たら青く見えるディスプレイが出来上がります。 1面増やして台形だとこうなります。 左から見たら赤く、右から見たら青く、正面から見たら緑に見えるディスプレイが出来上がります。 上記の面を増やして増やして、半円になったものがレンチキュラーレンズです。 ●レンチキュラーレンズを使って表示できる絵の枚数  上の図だと面が増えたら見える色が増えたのだから、半円なら無限じゃん!とは...

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

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

私について

はじめまして、ハトといいます。 普段は金融系のSEをしています。SEってなんだろう、悩むことしきり。 思い悩んで、週末プログラマをしたり、しなかったりしています。 作っているものが一向に完成しないので、途中経過発表がしたくて始めました。 立派なプログラマを夢見て社会に出てから5年。 特に立派な技術もつかず、開発経験も乏しく。 お世話になった上司は会社をやめ、お客様には不満たらたら、会社にも不満たらたら。 なりたかった自分との差に悩みながらも、自分でがんばるのも正直しんどい。 でもなにがしかは頑張らなきゃなぁと思って、週末プログラマを始めたものの、完成しない。一向に完成しない。 そうこうしてる間に2年過ぎ、3年過ぎ、飽きてはこっちを摘み、あっちを摘み、あっちが躓き、こっちも躓き。 躓いても、相談する人もいない。 一つも完成させていないので、池袋、秋葉原、新宿なんかのコミュニティ参加にも気が進まず。 なんだか気が塞がってきた、というところで友人からブログ始めてみたら、とアドバイスをもらいました。 私は自分のアイデアに自信があって、技術に自信がなくて「誰かに喋ったら先に作られてしまう!!」なんて誇大妄想していたのですが、2年過ぎ3年過ぎの内にもう作られているので、もう誇大妄想も卒業かなと思いました。 完成しない週末プログラマの奮闘と興味の一端を少しずつ書いていけたらと思います。 頑張ると続かないので、週末の成果発表を中心に。 よろしくお願いします。