木瓜

f:id:ttata:20190113171537p:plain

木瓜の鉢植えを買った.インスタで見かけて以来ずっと気になっていて,ふと近くの花屋で探してみたらいい具合の鉢植えがあったので購入してしまった.ちょうど自分の誕生日だったというのもある.樹高は14cmくらいで,花のボリュームとのアンバランスが美しい.あと名前の漢字は「ボケ」って読むらしいですよみなさん.僕は知りませんでした.

ちなみに,買う前にどんな植物なのか調べたが,どうやら屋外環境じゃないと育てるのが難しいことがわかった.室内だと光量,気温,湿度,風通し等に過不足があるらしい.盆栽的な感じっぽい.弊家環境では屋外にモノをおけるスペースが無いので諦めそうだった.

むしゃくしゃしたので最終的にお迎えした.

環境要因についてはエンジニアの端くれなのでテックでボコスカ殴ることにした.これは技術的なハードルなので可及的速やかに問題解決されねばならない.幸い手元には使われていないArduinoRaspberry Piがある.

f:id:ttata:20190113181716j:plain

まずは植物育成用のLEDライト(光合成に必要な波長の赤と青のLEDが内蔵されたピンク色のパリピ仕様)を購入した.最終的には育成を自動化したい.たのしみ.

たにったさんを支える技術

この記事は苫小牧高専アドベントカレンダー2018 24日目の記事ですがクリスマスが終わった今も書いています🎉🎉🎉(デジャヴ感

これは言い訳ですが現在師走ランナーとして最後尾独走中です.たくさん応援してね.

前の日の記事ははっし~さん人生二度目のお気持ち表明(ヘッドハンティング編) | はしらぼ。でした.一度きりしかない人生,悔いの無いように生きていきたいですね.

次の日の記事はドールおじさんきついっす - 朴将軍録でした.やはり年末は忙しいですよね.追記が楽しみです.

きっかけ

ない子さん(@T_naiko)と#本当にひどい飲み会をやっているときに@mktakuyaから苫小牧高専AC2018の招集がかかりました.

自己紹介

今年はちゃんと自己紹介しようと思います.こういうのは苦手なのでそういえばあまり書いたことが無いはず.刮目せよ.

苫小牧高専機械工学科の卒業生のたにったさんです.マレーグマもやっています.在学当時は美術同好会三代目会長でした.有り金とスケジュールを溶かして共犯者の皆さんと一緒にインタラクティブに光るデカいキリンを作ったのは今となってはとても良い思い出ですね.

卒業後は謎の空白時代を経た後,立ち上げフェーズの3DCG系のデザインをやっていく系の某スタートアップに飛び乗り,エンジニア兼テクニカルアーティストとしてのびのびと働いています.エンジニアとしての主な業務内容はVRコンテンツ等のゼロベースでの新規開発,テクニカルアーティストとしてはツール開発によるアセットパイプラインの構築や開発環境の整備等で,無駄な工数を爆縮するなどしてチームの生産性を加速する裏方的なことをしています.このへんの話は今度別で記事書きます.

Twitterアカウントは日常用途の@ttata_tritと進捗用の@trit_techneの2つです.なかよくしてね.

さて,突然ですが今回はやっていきのための生産性を高めるTips集みたいな感じでどろどろと怪文書を書いていこうと思います.みんな好きですよね生産性.

プロダクティビティのための開発環境

最低限の衣食住が確保できたら最優先でおちんぎんをつぎ込みましょう. これは自明ですが自分の仕事との相性が良い構成にすると早めに投資を回収しやすい傾向があります(自明).

PC

とりあえずMac Book Pro 15 inch (late2016)をしばらく使っていたのですが,3Dやるには力不足感が否めず,またVR系のコンテンツの開発がしたかったので,VRヘッドセットの購入のタイミングでWinマシンを新しく組みました.GTX1080Tiが乗っています.このへんも別に記事を書きたいです.

Blender

最近勢いがあるフリーのDCCツールですね.CGWORLDでも特集が組まれることが多いような気がする今日このごろです.弊社としてはBlenderを組み込んだ開発フローを構築したいらしく,業務で使う機会も段々増えてきました.僕としてはとても嬉しいです.

サブスクリプションしてるやつとか

Adobe CCにクリエイティブ税を払っています.最近値上げが決まったらしいですね.ひもじい. ちなみに最近AllegorithmicにもSubstance税を納め始めました. あとちょっとやりたいことがあるので,もう少ししたらMarverous Designerも導入する予定です. 仕事でつかうならいつかそのうち投資金額を回収できるよね.

タスク,ネタ管理

作りたいものの管理とかです.

ちゃんと歳をとっていると,適当に思いついたアイデアに実装する価値が無いことがわかるようになってしまう.歳をとるほど,賢くなった自分の手を動かすために,普段の思いつきに頼るのではなく,自分から動的に,素材としての情報をストックする,価値のあるアイデアを練る作業が必要になってくる,みたいなのはよく思います.ポエムです.

Trello

f:id:ttata:20181228205808p:plain

未だにTrello使ってます.昔はTODOリストとして使っていたのですが,今はネタ帳(いつかやりたいこととか)と化しています.

Todoist

これも使ってます.TODOリストとしてTrelloに変わりに使っています.

todev

github.com

Trelloに開発で使いやすい手触りのタスク間の依存関係システムを導入したような感じのタスク管理アプリです.Electron+vue.jsで自分で書きました.既知のやらなきゃいけないことに手をつけると芋づる式に未知のやらなきゃいけないことが発生するような作業に向いているんじゃないかなと思います.

twitterに草を生やすやつ

https://pbs.twimg.com/profile_images/1078470629228068866/yfoAObpe_400x400.jpg

たにったさんのTwitterアカウントの名前とアイコンはGitHubのContribution具合を適当なタイミングで反映する仕組みになってます.アイコンはその日のContributionsに応じた草の色が適応され,アカウント名のレベル表記は一年間のContribution数になります.この仕組みを作ったのは相当前なんですが,確かGitHubのプロフィールページをスクレイピングして得られた進捗情報をTwitter APIで反映する,みたいなツールを書いた記憶があります.この仕組みにより,普段どのくらいサボっているのかすぐにバレるので進捗に緊張感が生まれます.やったね.

f:id:ttata:20181228203354p:plain

デカい木の板をソーホースの上に乗せた,お手軽テーブルを使ってます.天板はえごま油(乾性油)でひたすら磨き続けました.残ったえごま油は冷奴にかけていただいてます.ていうかえごま油の美味しい食べ方知っている人いたら教えてください.ググってもえごま油をメシに取り入れるインセンティブが健康面の話しかなくて困ってます.

椅子

謎の空白時代からずっとバランスボールを愛用しています.筋肉で姿勢が正しくなるので逆に疲れないのと体の不調も出にくくなるあたりが気に入っています.というかバランスボールが無いと一日中開発できる自信が無い.

プロダクティビティのための運動

資本は体.体力が無いと良いものが作れないので一週間に10kmくらい走ってます.(平均すると0.06km/h)バランスボールと同様に腰痛対策も兼ねてます.ちなみに雪が積もってる期間は滑って転ぶと痛いのでおやすみです.

プロダクティビティのためのメシ

作り置き

cookien.com

大量にタッパーを購入して作り置きをしましょう. うまく作り置きサイクルを回せると少ない調理時間で美味いごはんが継続的に食べられます. タッパーにはラップを敷くと洗浄にかかる時間が抑えられるのでプロダクティビティが向上します.

土鍋ごはん

f:id:ttata:20170125224143j:plain

あんまり生産性関係無いですがウマいごはんが食べられるのでバイブスが上がります.

炊飯器より美味しいごはんが炊飯器よりも早く作れます.

普段のレシピを書いておきます.

  1. 米を研いで水に1時間ほどつける
  2. 土鍋に米を入れる.水はお好みで(大体米が浸かるくらい)
  3. 蓋をして火力最大で沸騰するまで加熱する.ここから蒸らし終わるまで絶対に蓋を開けてはいけない.稀に沸騰に気が付かない場合があるので10分ほどタイマーで測っておくと安心.
  4. 沸騰したらとろ火で10分加熱する
  5. Option: おこげを増やすため,中火で15〜30秒ほど加熱する
  6. 火を消して10分蒸らす
  7. 蓋を開けてごはんをかます
  8. できあがり🍚

プロダクティビティのためのお仕事

チームの生産性の向上のため社内にGitHubesa.ioとSlackを導入しました.また,それによりどこでも情報にアクセスでき,作業量も可視化されたため,現在弊社ではリモートワークも可能になりました.これで通勤等で消える無駄なリソースをやっていきに回せるようになりました.やったね.計画通り.

ちなみにリモートワークは実現まで1年近くかかってます.長かった....このあたりの話も後で別の記事を書こうと思っています.

所感

来年はもうちょっと加速します.応援よろしくお願いします.

Global Game Jam Sapporo 2018に参加してきた #ggjsap #ggj

今年もGGJ札幌会場に参加してガッとゲーム作ってきました.

Global Game Jam Sapporo

全体の流れはtogetterがいい感じにまとまっていてオススメです(記事書いてて思ったけどサムネがひどい).

togetter.com

今回はUnityでゲームを開発するチームに参加し,グラフィック周りを担当しました.

成果物

f:id:ttata:20180129230639p:plain

『はーとふるラブレター』

Hatoful Love-letter | Global Game Jam®

ここから遊べます

ハトのモデリングに全力を注ぎました.他のモデリングは適当にシュッとやりました.

こっちは未使用リソースです

そういえば他にもゲームクリア時のアニメーションをUnityのTimelineを使って作りました.初めて触る機能だったんですが,チームメンバーのかまたさん(@kamayuki_fs)にオススメして頂いた以下の記事のおかげで,なんとかそれっぽいものが出来上がりました.

www.shibuya24.info

ゲームのアップロード後,本会での制作したゲームの発表が終わってから懇親会までの間に時間があったので,難易度を微妙に変えたバージョンを作成して懇親会会場で公開してました.クリアできたのは5,6人だったと思います.ちなみに僕はクリアできてません.

感想

GGJに参加するのは3回目なんですが,今年はエンジョイ勢としてたくさんツイッターをしながらゲームを作りました.楽しかったです.みなさんお疲れ様でした!

樽前FMについて

この記事は苫小牧高専アドベントカレンダー2017 24日目の記事ですが25日に書いています.メリークリスマス🎉🎉🎉

はじめに

tarumaefm.com

樽前FM,ご存知でしょうか.苫小牧高専関係者の方をゲストに呼び,適当に世間話をするpodcastです.MCは後輩の@mktakuyaがやってます. 今年の1月あたりに最初のエピソードが公開,そしてつい先日22日に新しいエピソードが投稿され,現時点で全10話ほど公開されています.その中で僕は初回のEP01とEP08でゲストとして出演させていただきました.今回の記事ではそんな樽前FMについて,ゲスト目線でちょっとだけお話してみようと思います.

きっかけ

自分は何年か前から@mktakuyaと,あまり真面目に作業しないさぎょいぷ(しかもskypeですらない)を定期的にしています.技術的な話からエモい話まで眠くなるまでざっくばらんに世間話をしているんですが,そこでほぼ毎回,お互い普段聴いてるrebuild.fmというエンジニア向けのpodcastの感想の話をしてるんですよね.で,確か大体1年くらい前にその話の流れで,podcastやってみないか,みたいな話になり,オッ,マジか,と最初は思ったんですけど,なんか最終的にまあやってみてもいいかなと.そして,僕も@mktakuyaもお互いそういった技術系から雑談系まで横断的に扱うpodcastの雰囲気を共有できてたので,今後の樽前FMの方向性をなんとなく形作る意味合いも兼ねて,第一回の収録の方で出演する運びとなりました.確かこんな感じの経緯だったと思います.ちなみにタイトルの"樽前"こと樽前山は,苫小牧高専付近にある,現在も定期的に地震や水蒸気噴火等のピクつきが観測される,やっていきに満ち溢れた活火山です.テスト期間になると皆が噴火を祈ります.山岳信仰ですね🙏

実際に喋ってみて思ったこと

 収録を聴いてくれる人を意識して喋るのが面白かったです.この樽前FMはエンジニアというよりもどちらかというと(苫小牧)高専関係者向けのお話をするpodcastっぽいので(そうだよね?)話題の選定や,妙ちくりんなテクニカルタームの使用に配慮した方がいいかなー?とか考えながら話をしてます.こんなふうに,その場にいない人を想定して世間話をすることは普段なかなか無いので,頭の変なところが回る感じがありました.

最後に

みなさんお手柔らかに聴いてみてください.また,苫小牧高専関係者(在校生,卒業生等)で,こういう雰囲気のやっていきで自分も面白い世間話を一緒にしてみたい,という方は@mktakuyaまで連絡していただけると色々と楽しいんじゃないかと思います:)

クリエイティブコーディングフレームワークarmosに追加された機能まとめ2017年版

この記事はD言語 Advent Calendar 2017 19日目の記事です.

今年2017年にクリエイティブコーディングフレームワークarmosに追加された機能等を紹介していきます🎉

Mac OS Support

自分がmac book proを使い始めたのでサポートしました. 論理ピクセルと物理ピクセルのサイズが異なるretinaディスプレイへの対応として,interface WindowにframeBufferSize()を追加しました.これは既存のWindow.size()がウィンドウサイズを論理ピクセルで返すのに対し,こちらはウィンドウの物理ピクセルで返します.

頂点座標からの頂点法線情報の生成

armos.graphics.Meshクラスのメンバ関数calcNormal()でスムージングされた頂点法線情報を生成できます.生成された法線情報はMeshのメンバnormalsに保存されます.

シンプルな2Dのグラフィックを表示するexample.

単純な2DのMeshのアニメーションを行うexamples/primitives2dを追加しました.armosに触れる際,一番最初に見ていただくと雰囲気がなんとなく掴めるかと思います.

フォント読み込み機能の実装

https://pbs.twimg.com/media/C8jCzc8VwAAlvFQ.png

Fontクラスでフォントを扱えます.内部でfreetypeを使用しており,フォントのデータをラスタライズしてテクスチャとして描画することができます.

exitApp()の追加

Applicationのinterfaceに追加しました.Applicationの内部でこのメンバ関数を呼ぶことでApplicationを終了させることができます.

リアルタイムの音声入力

音声入力デバイスを扱うクラスarmos.audio.Recorderを実装しました. 実際の使い方はexamples/audiocaptureを参考にしてください.

Colorクラスの仕様変更

従来のColorのRGBAの値はそれぞれ256段階の整数型でしたが,OpenGLとの相性を考え,0から1までのfloat型に変更されました.

generate commandによるテンプレートファイル/フォルダの自動生成機能

armosを使った開発を加速させるCLIツールを追加しました. 以下詳細

glslify support

glslifyを用いてshaderのglslのモジュール化,importができるようになりました. 以下詳細

マルチウィンドウ対応

複数のウィンドウを扱うことができるようになりました.OpenGLのcontextはデフォルトではウィンドウ間で共有されていませんが,アプリケーションの初期化時,Windowを生成する際にコンストラクタへ引数としてcontextを与えることで同じcontextを扱うことができるようになります.

auto config = new armos.app.WindowConfig();
auto window1 = new armos.app.GLFWWindow(config);
auto window2 = new armos.app.GLFWWindow(config);
auto window3 = new armos.app.GLFWWindow(config, window2.context); //share context.

armos.app.mainLoop.register(new MainApp, window1)
                  .register(new SubApp,  window2)
                  .register(new SubApp,  window3)
                  .loop; // call loop function after application and window registations.

実際の使い方はexamples/multiplewindowsを参考にしてください.

MIDI input

armos.communication.MidiStreamを用いることでMIDI信号の入力を扱うことができます.

メンバ関数popMessagesを呼ぶことで受け取ったMIDIメッセージを取り出すことができます. 実際の使い方はexamples/midiinputを参考にしてください.

Reactive Extensions

Rxはじめました.@lempiji氏が開発しているdlang実装のRxを利用させて頂いてます.

現在のarmosのイベントシステムは全てRxに置き換わっており,armos.app.currentObservables()で全てのarmosのイベントのobservableが包含されたCoreObservablesへアクセスすることができます.

マウス入力関係のイベントの追加

Rxの導入によるイベントシステムの刷新に際して,mouse dragとmouse scrollのイベントハンドラをサポートしました.対応するシグネチャは以下の通りです.

void mouseDragged(int currentX, int currentY, int button)
void mouseDragged(int firstX, int firstY, int currentX, int currentY, int button)
void mouseDragged(Vector2f currentPosition, int button)
void mouseDragged(Vector2f firstPosition, Vector2f currentPosition, int button)
void mouseDragged(Vector2i currentPosition, int button)
void mouseDragged(Vector2i firstPosition, Vector2i currentPosition, int button)
void mouseScrolled(float xOffset, float yOffset)
void mouseScrolled(Vector2i position)
void mouseScrolled(Vector2f position)
    

EasyCamのサポート

マウス操作で簡単に視点を操作する機能が組み込まれたcameraの実装です.名前のとおりopenFrameworksのEasyCamと似た挙動になってます.実際の使い方はexamples/easycam/を参考にしてください.

今後の予定

OpenGLのContextを一箇所にまとめる大規模改修

現在,Cinderの設計を参考にしてcontextの管理を局所化する設計変更を行っており,それに伴って既存のRendererのリファクタリングも行っています.影響箇所が多いので開発版のdevブランチに取り込まれるのはもう少し先になりそうです.

映像のサポート

現在ffmpegを用いたVideoTextureを実装しています.また,ライセンスの都合からarmos本体とは別リポジトリで,armosの拡張という形でのリリースを検討しています.途中で上の大規模改修が始まったため,こちらの作業は一時的に中断しており,改修が終り次第再開しようと考えています

ベクタデータの取扱

未着手です.ベクタデータが扱えるようになると,フォントのアウトラインを変形させるような表現等,幅広く応用できそうです.

東京Node学園祭2017のアフターパーティーでVJをやってきた #nodefest

はじめに

12/25,12/26に開催された,Node.jsコミュニティのカンファレンス,東京Node学園祭のアフターパーティーでVJをやってきた.今回は運営スタッフのamagi(@amagitakayosi)さんに誘って頂いた.amagiさんとは,彼が開発しているVEDAというAtomでライブコーディングを行うプラグインへのContributeを通して知り合いになった.

下ごしらえ

まず,VEDAで映像素材を切り替えるためのサンプラーを外部のアプリケーションとしてarmosを用いて新規に開発した.Ableton liveのセッションビューのような操作体系で,登録したキーを押すことで設定したBPMに同期して映像を切り替えることができる.なお映像の再生速度も同期される.また,タップ入力によるBPMの変更機能付きで,流れている曲に合わせてスペースキーを押すことでいい感じに検出してくれる.入力される音声信号からのリアルタイム検出による自動化もやりたかったが不安要素が多かったのでそのへんは今度やることにした.(昔実装した非リアルタイムBPM検出のアルゴリズムと想定される計算量を比較してみたが,両方で用いられるFFTがΟ(n log n)なので,サンプル数が少ないリアルタイム処理なら速度的に割といけそうな予感がしている)なお,VEDA本体との通信は,Open Sound Control(以下OSC)というプロトコルで行う.VEDAはOSCによる外部からのglslのuniform変数の変更をサポートしているが,映像素材の切り替え機能は今のところ無いので,そのへんの機能をいくつか無理矢理追加する改造を施した.サンプラー側はosc-dというOSCの実装のpackageを用いた.開発の途中でいくつかバグに気がつけたので良かった(修正済み).dogfoodingは最高.

次に,Blender(あと仕上げで少しだけAfterEffects)で普通の4n拍(n∈N)くらいの尺の映像と,2つの映像をミックスするための白黒の映像をいくつか作成した. BlenderはTimeline周りの操作体系も3Dのモデリングと直交性があるので快適にモーションを組むことができる.また,2Dっぽい見た目のモーショングラフィックスを作る際もオブジェクトを三次元的に配置できるので凝ったことができる.

映像素材の制作中は,レンダリング作業の効率化のためlightweightなBlenderレンダリングファームを開発し,計算用のarch linuxのサーバ上で稼働させていた.僕が作業している間,休憩している間に,予め投げておいたキューが逐次処理されていく.ちなみに処理が完了する度にするとtwitterでリプを飛ばしてくれる.

当日

日中は空いた時間に本会場の廊下で,実際の環境を想定して念のためにveda-samplerの全ての操作をmidiコントローラで行えるよう,無限コーヒーを飲みながらバキバキコードを書いていた.楽しかった.

アフターパーティーはfreeeさんのオフィスを借りて行った. 設営からお手伝いさせていただいたが,レイアウト等試行錯誤の末に出来上がったパフォーマンス用のブースが広くて凄みがあり,一体何のイベントのアフターパーティーなんだろう感がにじみ出ていた. freeeさんの社員の方が「会社ってこんなこともできるんだ」的な旨のことを言っていたのを覚えている.

自分のVJ中は記録映像を撮る余裕が無かったので他の方が撮ってくれた様子を以下に引用させて頂きます.(撮影ありがとうございます🙏)

まとめ

  • 実験的な要素を盛り込んだパフォーマンスができて勉強になった.
  • VJ,メディアアート,クリエイティブコーディング系の知り合いが増えた.
  • OSSの活動がきっかけでOSSのイベントに招待して頂いてVJのパフォーマンスをするという素敵な体験ができた.

TipsとしてのVJボツ案供養

本番では使われなかったボツ案です.ご査収ください.

VEDAでsyphonの入力を使いたい

VEDAネイティブでやるのは大変.懇親会でamagiさんと話をしたけどなかなかしんどい(chromiumに手を入れる必要がある).レイテンシを気にしないのであれば,syphoncamTwistを経由してVEDAのcamera入力に渡すという手段がある.

VEDAで透過映像を扱いたい

f:id:ttata:20171129002912p:plain

VEDAが内部で使用しているThree.jsで直接透過映像を扱うのは難しい.そこで,映像のフレームに透過マップをくっつける(この処理はffmpegopenCV等の画像処理ライブラリを使って適当にツールを書いておくと楽).これはgooglechromeの技術デモ『3 Dreams of Black』で用いられていている手法で,以下の動画が参考になる.

このアプローチをnormal mapやdepth map等の複数種類のソースに拡張することで,deferred shadingをVEDA側で行うことができる.ちなみに,基本的にカラー以外の情報は縮小しても粗さに気が付きにくいため,付加されるマップについては1/2サイズのものにしておくと処理の負荷を抑えることができる.