HoudiniによるプロシージャルUnityプロジェクト

この記事はHoudini Advent Calendar 2020 21日目の記事です

f:id:ttata:20201221225914p:plain

はじめに

HoudiniとUnityによる普通のワークフローでは,FBX等のリソースを書き出すたびにUnity上で行う作業が発生しがちです.マテリアルの割当てだったり,Prefabを構成するGameObjectの数が変わった際のPrefabの編集等,一つずつ職人の手によるぬくもりのある手作業が必要になります(UnityのEditor拡張である程度自動化できますが...).Houdiniで大量にデータを書き出せる分,Unityで扱うデータが増えて作業の時間もかかりますし,当然ヒトが手作業で頑張るのでヒューマンエラーの温床にもなります.

このあたりのツール間のギャップをどうにかしたいなと前から思っていたのでゴリっとどうにかしてみました.

(できたてほかほかのため,あらゆる部分がナイーブな実装になってます)

思いついたアプローチ

さしあたって次の選択肢を思いつきました.

  • HoudiniEngineでがんばる
  • HoudiniからUnityProject内のYAMLをゴリゴリ書き換える
  • HoudiniからUnityをどうにか操作する

HoudiniEngineでがんばる

www.sidefx.com

HoudiniEngine For Unity自体はコアのdllをUnityとの橋渡しを行うC#で包むような作りになっています.なので外側の処理を書き換えることで,あるいはイベント周りの設定で生成の度に任意の処理を実行することができそうです.ただどうしてもHoudiniそのものを用いるよりも制約が厳しいので今回は見送りです.あとHoudiniから一歩も外に出たくないので.

HoudiniからUnityProject内のYAMLをゴリゴリ書き換える

Unityの*.prefab*.unity*.meta*.asset等のアセット関係の主要なファイルはYAMLというフォーマットで記述されています. こちらをHoudini経由で書き換えていく方法もありかなと思いました.

github.com

python3で動くunity向けのYAML parserが存在します. 最近のHoudiniのPython3ビルドがそこそこ安定しているので使用できそうです.

また,アセットを新規に追加した後の*.metaの生成もHoudini経由からできます. unityをコマンドライン上で実行する際に,--batchmodeオプションを追加することでヘッドレスで起動できます.また--quitオプションによりスクリプトの実行を指定しない場合に即時に終了させることができます. HoudiniからFBXをUnityのProjectディレクトリに書き出した後に,以下のコマンドでunityを一瞬だけ立ち上げることで*.metaファイルを生成することができます.

$ Unity.exe -quit -batchmode -projectPath <ProjectPath>

このYAMLを扱う方法は,アセットデータという低レイヤを直接操作するため強力ではありますが,GUIDの取り扱いも自前でどうにかしなければいけないため今回は見送りです.

HoudiniからUnityをどうにか操作する

何らかのプロセス間通信によりHoudiniとUnityを操作する作戦です. Socketあたりが手軽で良いかなと思いました.

Socketによる方法ですとUnity上でアセット等を取り扱うことになるので,UnityEngineの機能の強力なサポートが期待できます.

できたもの

Client

f:id:ttata:20201221223556p:plain

unity_send_command ROP Houdini側のSocket Clientです. Unityで実行したい処理を表すコマンドを文字列で指定します.このROPを実行するとUnity上で動いているSocket Serverへメッセージを送信します. なお,送信するコマンドを書き換えることで,様々な処理をUnityで行うメッセージを飛ばすunity_send_command ROPを作成することができます.

Server

Unity側で動くSocket Serverです.UniTaskを使っていい感じに非同期で走らせています.

Houdini側のClientからメッセージを受け取り,メッセージで指定された任意のスクリプトを実行します.

使い方

下準備

  1. 実行したい処理を書いたscriptをUnity上に用意する
  2. Houdiniでunity_sened_command ROPを作成する
  3. unity_sened_command ROPのメッセージを入力するパラメータに,最初に用意したscriptのClassとMethodと引数を表す文字列を指定する

実行

  1. Unityでサーバーを立ち上げる
  2. Houdini側でunity_sened_command ROPを実行

動作確認も兼ねて試しにFBXの書き出し操作とPrefabの作成を行うROP Networkを作ってみました.

以下のような構成になっています. f:id:ttata:20201221203641p:plain

filmboxfbx_geo

通常のfilmboxfbx ROPはObject Nodeしか指定できないので,そこをSOPのパスを指定できるよう拡張したものです.(今回の話とはあんまり関係無いです) 今回はいつものpigheadを書き出します.

f:id:ttata:20201221205352p:plain

unity_asset_database_refresh

Unity上でAssetDatabase.Refresh()を実行するメッセージを飛ばすunity_send_message ROPです. AssetDatabase.RefreshはUnity上でのアセットの情報の更新を行います. これを実行することで,上流でUnityのプロジェクト内に書き出されたFBXを読み込み,*.metaファイルを生成,Unityのアセットとして扱えるようになります. ちなみに上記のunityをbatchmodeで一瞬だけ立ち上げる方法に比べて処理時間が圧倒的に短いです.それはそう.

cf. AssetDatabase-Refresh - Unity スクリプトリファレンス

unity_create_prefab_from_fbx

Unity上で,指定したパスのFBXからPrefabを作成する処理を実行するメッセージを飛ばすunity_send_message ROPです. ROPのパラメータにはUnityプロジェクト内のFBXを示すパスを設定します. なおUnity側の処理についてはこちらのスクリプトをお借りしてます.

unity_exit

Unity上で動いているServerを終了するunity_send_message ROPです. メッセージのパラメータには"exit"を指定しています.

実行してみる

実際に書き出し処理を行ってみます.Unity上でServerが実行されていることを確認し,Houdiniで一連のROPを実行します.

f:id:ttata:20201221205854p:plain

無事にFBXが書き出され,Prefabも一緒に生成されました.やったー.

実装

ところどころピックアップして解説します

Client

unity_send_command rop Houdini側のSocket Clientです.ごくごく普通にpythonのsocketを使って実装しています.

なおこのClientから飛ばすペイロードは,Unityで動かしたい処理を表す次のフォーマットの文字列になっています.

<TypeName>.<MethodName>:<Args>

また,Serverを終了したい場合はexitを飛ばします.

Server

Unity側で動くSocket Serverです.適当に書きましたが今の所うまく動いているのでセーフです.

[MenuItem("Tools/StartServerTask")]
static public async UniTaskVoid StartServerTask(){
    System.Net.Sockets.TcpListener listener;
    System.Net.Sockets.TcpClient client;
    var ipStr = "127.0.0.1";
    System.Net.IPAddress ip = System.Net.IPAddress.Parse(ipStr);
    var port = int.Parse("28820");
    listener = new System.Net.Sockets.TcpListener(ip, port);
    listener.Start();

    await UniTask.Run(async() =>
    {
        do
        {
            // Clientと接続
            client = listener.AcceptTcpClient();
            var ep = (System.Net.IPEndPoint)client.Client.RemoteEndPoint;
            Debug.Log(string.Format("Connect Client: ip: {0} port: {1})", ep.Address, ep.Port));

            System.Net.Sockets.NetworkStream ns = client.GetStream();

            ns.ReadTimeout = 10000;
            ns.WriteTimeout = 10000;
            System.Text.Encoding enc = System.Text.Encoding.UTF8;

            // Messageの受け取り
            var message = ReceiveMessage(ns, enc);
            Debug.Log(message);
            if (message == "exit") break;

            // Threadを一時的に切り替えてMessageが示す処理を実行
            await UniTask.Yield();
            var result = EvaluateMessage(message);
            await UniTask.SwitchToTaskPool();

            // 事後処理
            ns.Close();
            client.Close();
        } while (true);
    });
    listener.Stop();
}

以下のループでClientからのメッセージを処理します.

  1. Clientと接続します
  2. 受け取ったペイロードの文字列<TypeName>.<MethodName>:<Args>をパースし,実行したい処理とその引数に分解します
  3. EvaluateMessage(string message)でばらした情報を元にリフレクションで実行します.ここの処理については,Unity APIはMain Thread以外からは呼び出せないため前後でThreadを切り替えています.
  4. Client側から受け取った文字列が"exit"であればサーバーが終了します.
  5. 最初に戻ります

なおリフレクションについては以下のような形で文字列からクラス名,メソッド名,引数を指定して実行しています.

Type.GetType(typeName).GetMethod(methodName).Invoke(null, new object[] { argsRawStr });

cf. C#リフレクションTIPS 55連発 - Qiita

まとめ

Unityでの作業がつらかったので,UnityとHoudiniをSocketで接続し,HoudiniのROPからUnityの任意の処理を実行するしくみを作りました. ちょっと乱暴なタイトル伏線回収ですが,処理を走らせるたびにHoudiniからUnityのアセットを全部消して,再度Houdiniから生成処理を行えば,事実上,プロシージャルUnityプロジェクトの生成,みたいなこともできるなーと思います.

今後は以下のようなことができればいいなと考えてます.

  • Unity側での主要な操作を行うscriptの整備
  • Houdiniで,Unity側からの処理の返り値等の情報を受取るしくみの実装
  • Socketまわりの例外処理
  • TOPによるUnityを絡めたパイプライン構築

普段使いで便利なHoudiniのSideFX LabのOperatorピックアップ

この記事はHoudini Advent Calendar 2019 13日目の記事です.

昨日の記事はK240さんの『HDKでアニメーションをSOPに取り込む』でした.このアプローチでボーンアニメーションで動くポリゴンと干渉するようなエフェクトを柔軟に生成したりもできそうです...!

はじめに

HoudiniにはIndie以上のグレードのライセンスで利用できる,Operatorの追加パッケージ,SideFX Lab(旧GameDevTooks)が存在します.

SideFX Labs | SideFX

今回の記事では,その中でも実際に使っていて便利だなあと思ったOperatorを紹介していこうと思います.主にゲームのAssetの制作等のリアルタイム用途で使いやすかったSOPを中心に,どう応用できるか軽い具体例も挟みつつ解説していきます.

SOP

Labs Align and Distribute

f:id:ttata:20191212024259p:plain 接続されているPrimitive(Piece)ごとに重ならないよう並べてくれるSOPです.並べる順番や並べる方向,間隔を設定できます.複数パーツで構成されるモデルを,Substance Painter等でペイントしやすいような配置で書き出す用途に使えます.(TexToolsのExplodeのような感じ)

Labs Axis Align

Geometryをそのバウンディングボックスの大きさにより移動させます.移動方法は各軸ごとにバウンディングボックスの境界や中心を基準に設定できます.わざわざbbox等で計算してtransformしなくて済むので,大変便利な利用頻度の高いSOPです.(今回の記事で一番オススメかもf:id:ttata:20191213135825p:plain 左: 入力Geometry,右: Labs Axis AlignでXZ平面に丁度乗るようY軸方向へ動かしたもの

Labs Caluculate Occlusion

入力したMeshのOcclusionをattributeに書き出します.光の当たらない箇所に植物を配置したり,shader側のtextureのブレンドに用いると便利です. f:id:ttata:20191213140035p:plain

Labs Calcurate Slope

入力したMeshの傾きをattributeに書き出します.HeightField Mask by FeatureのSlope RampのPolygonバージョンです.SOPLabs Caluculate Occlusionと同様な用途で使えます. f:id:ttata:20191213140417p:plain

Labs Dissolve Flat Edges

平らな複数の面に対してDissolveをかけて一つの面にまとめるSOPです.Houdiniのハードサーフェスモデリングでお世話になっています.ちなみにこのSOPを通すとUVの情報が壊れてしまうので,UV展開前に用いるか,あとからAttribute TransferでUVを他のGeometryから渡す必要があります. f:id:ttata:20191213140453p:plain 左: 入力Geometry,右: 面を一つにまとめたもの

Labs Distance From Border

ポリゴンの縁(共有されていないエッジ)からの距離でAttributeに値を書き込みます.Rampやブラー等で調整が可能です.汚し等,地面に配置するPropの縁をAlphaで抜いてなじませたりするのに便利でした. f:id:ttata:20191213140851p:plain

Labs Edge Color

ポリゴンの縁(エッジが共有されていてもOK,NormalではなくEdgeの角度で見てるっぽい)からの距離でAttributeに値を書き込みます.擬似的なSSSのような表現に使えました.Convex/Concave(凹凸)を区別して検出してくれるので,エッジが立った場所の劣化のような表現のmaskにも使えます. f:id:ttata:20191213141056p:plain

Labs Group Curve Corners

カーブのどのpointが内側/外側かをgroup化してくれます.また角度も計測してpointに書き込みます.ハードサーフェスの,シルエットからコーナーにディティールを追加する用途に便利です.

Labs Group Expand

PointやPrimitiveのGroupの範囲をPolygon上で指定した数だけ広げます. f:id:ttata:20191213141326p:plain

Labs Min Max Average

Attributeの最小値,最大値等の計測を行い,Detail Attributeに書き込みます.Attribute Promoteを手軽に使いやすくしたSOPです.

Labs Path Deform

PolygonをPathに従って曲げるSOPです.これを用いると道路や柵等がCurveで簡単に編集できるようになります.また,入力するMeshを,入力するCurveとぴったり同じ長さにしたい場合は,arclen("../path/to/curve_op", 0, 0, 1)等で調整すると便利です.注意点として,長手方向の軸の設定(Base SettingsのAxis)によっては,指定した軸回りに形状が180度回転してしまう場合があるので要調整です. f:id:ttata:20191213141626p:plain 左: 曲げる対象となる入力Mesh(Curveと同じ長さになるよう調整済み),中央: ガイドになる入力Curve,右: Path Deformをかけた出力

Labs Soften Normals

いい感じにやわらかい表示になるようNormalを計算するSOPです.通常のNormal SOPよりも汚いハイライト,陰が出ないので使いやすいです. f:id:ttata:20191213132042p:plain 左が通常のNormal SOP,右がLabs Soften Normals SOP

Labs Quick Material

SOPとしてPrinciple Shader,GameDev PBR,GameDev MatCapのMaterialを扱うことができます.Material NetworkにアクセスせずにSOP Network内でサクっとマテリアルのセットアップができるので便利です.

Labs Remove Inside Faces

内側に存在する閉じた面を削除します.BooleanやVolumeのPolygon化の後に使うと便利です f:id:ttata:20191213141854p:plain 左: 内側にポリゴンを持つMesh,右: Labs Remove Inside Facesの出力

Labs Thicken

Meshに厚みを付けます.表と裏の両面について同時に押し出しを行うことができます.(あと一応裏面のポリゴンリダクション機能付き) 厚みをつける用途ならPolyExtrudeよりも便利かなーと思います. f:id:ttata:20191213142126p:plain

Labs Trace PSD File

PSDファイルの画像をレイヤ毎にGroup分けされたMeshとして読み込むことができます.実際の活用は以下の動画がわかりやすいです. www.youtube.com

注意点として,PSD側のレイヤー名には日本語は使えないようです.また,レイヤー名の-(ハイフン)は,Groupでは_(アンダースコア)に自動で置き換えられるようです.

ROP

Labs CSV Exporter

GeometryのAttributeをCSVとして書き出します. 用途の一例ですが,ゲームエンジン側でCSVをパースしてオブジェクトの配置を行う専用のツールを作成すると,以下のセッションの動画のように,Houdini Engine無しに柔軟にPropの配置を行うフローが構築できたりします. www.youtube.com

Labs Games Baker

Mantraでテクスチャのベイクができます.ベイクできるチャンネルはよくあるPBRのテクスチャタイプについては一通り網羅しています.

f:id:ttata:20191213142754p:plain

個人的に嬉しいのはBase ColorのBakeができる点で(Substanceだと出来ない),このROPで書き出したBaseColorのMapをSubstanceに持っていってテクスチャリングを行っています.このフローだと模様がプロシージャルに生成できるので気持ちよく作業ができますね.

あとアイコンがかわいい.(houdiniのOperatorのアイコンで一番好き) f:id:ttata:20191213142156p:plain

まとめ

SideFXLabには,もうすでに自分で作ってしまった,もっと早く知りたかった,と思うような便利なOperatorが,今回紹介した以外にも複数パッケージされています. 今まで使ってなかった方もぜひ試しに導入してみてはいかがでしょうか.

Operatorとの良い出会いがありますように🙏


明日の記事はtakavfxさんの『HoudiniをPython3でやる!!!』です.post-EOLの来たるべきPython3の時代に備えていきたいですね.

(たのしみ)

42インチ4Kモニタを買った

f:id:ttata:20190523102941p:plain

身の回りの人が声を揃えて「4Kは良いぞ」と言うので前から気になっていたが,ついにとうとうぽちってしまった.決め手はいつも通話しながら作業している@OtObOxが放った「ものを作る人はみんな42インチ4Kモニタを買っているよ」という一言だった.確かに弊社のボスもオフィスで42インチ4Kを使っている.どうやらこの「ものを作る人はみんな~」構文は自分(の財布)に効くっぽい.ちなみに買ったのはこのモニタ.

実際に使い始めて2ヶ月が経ったのでさくっとレビューを書く.

レビュー

pros

  • デカい
  • ノングレア
  • 見た目のデザインがシンプルでかっこいい
  • 画面の明るさが柔軟に変えられる
  • 42インチなので文字が読みやすい.コード書くときに楽
  • USB-Cでmacを繋げられるらしい(未検証)
    • mac book proを給電しながらは使用するのは無理っぽい
    • 標準の付属ケーブルだと微妙に給電はされるが表示はできなかった
  • Windowを内部で分割するレイアウトのUIを使っているアプリケーションは4Kの恩恵を授かりやすい
    • UnityとBlender,Houdiniがヤバイ

cons

  • ディスプレイを斜めから見ると画面の縁が見えづらい.液晶からバックライトまでの距離が大きいのが原因かも.
  • コントラスト下げた時の暗い部分の階調の表現がちょっと弱い気がする.
  • マウスカーソルが失踪する
    • カーソルをちょっと大きくした

感想とか

どうやら4Kで快適に作業するための独特なWindowの使い方があるっぽい.ブラウザやファイラは最大化せずに画面の中央に散らばらせておくやり方が楽.画面分割できないようなアプリケーションは全画面表示ではなくこっちのほうが良いのかも.これをやると首が楽,というか首が楽なのでこのアプローチに収束すると思う.

まあトータルで満足.良い買い物をしたと思う. なんというか今まで使っていたザコいモニタが自分の脳の足枷になっていたことに気がつけた.暴力的ではあるが画素が多いのは開放感があって気持ちが良い.これでまたひとつ魂のステージが上がってしまった.今後も引き続き良いものを作っていくのでよろしくお願いします,という感じ.

今後の話

未だにArchlinux(xmonad)環境で試せてないのでそのうちやりたい.タイル型WMと絶対相性が良いと思う.

木瓜

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回目なんですが,今年はエンジョイ勢としてたくさんツイッターをしながらゲームを作りました.楽しかったです.みなさんお疲れ様でした!