Writing Blender Plugin in C++

ここしばらく DCC ツール上のモデルをリアルタイムに Unity に同期する、MeshSync というツールを開発しています。その Blender 対応にとても苦労したので情報を残しておこうと思います。 なお、Blender の世界ではプラグインは "add-on" と呼ぶことが多いよ…

publications (2016 - 2017)

最近の活動記録とか。CEDEC 2017 で、TokyoDemoFest チームとして講演しました。intro でよく用いられる Distance Function & Raymarching (Sphere Tracing とも呼ばれる) をがんばってゲーム制作でも使えるようにしてみようという内容です。 Distance Funct…

alembic for realtime rendering

ここ数ヶ月仕事で Alembic を扱ってきたので、Alembic に関してここまで得られた知見を書き残しておこうと思います。 想定しているシチュエーションは主に、Alembic のライブラリを用いて alembic ファイル (.abc) を読み込み、そのデータを D3D11 などのグ…

object space raymarching

夏コミ版 exception reboot で用いた、オブジェクトスペースでレイマーチする手法について解説してみます。(ここで言うレイマーチは厳密には sphere tracing のことですが、面倒なのでレイマーチで統一します) アイデア自体は特に新しくも難しくもなく、シー…

before C88

C88 で頒布する exception reboot 開発途中版の PV です。R23b でお待ちしております。 今回も体験版です…。前回同様 100 円でソースコード (Unity プロジェクト一式) 同梱です。カワノさんによる新曲も追加されています。 残念ながらゲーム内容は冬コミ版と…

playing with Unity 5's deferred shading pipeline

Unity4 の時に書いた自作 deferred shading 用の機能を Unity5 用に再実装しています。その経過の記録です。成果物はこちら https://github.com/i-saint/Unity5Effects Screen Space Boolean ステンシルや ZTest Greater の組み合わせでスクリーンスペースで…

recent works

最近作ったもの紹介。全て Unity から使う前提で作ってはいますが、BatchRenderer 以外は Unity 依存度は低く、一応他のプログラムから使うこともできるはずです。また、全て MIT ライセンスか CC BY ライセンスなので、ソースレベルで切り貼りして使うのも…

introdunction to SIMD programming

Unite 2015 Tokyo の講演で詳細を話せなかったのが心残りだったので、大量のオブジェクトの更新処理についてこの場で書いてみます。主に C++ で、簡単なパーティクルエンジンを作り、それを SIMD を用いて高速化する手順を解説します。 話を簡単にするため、…

Unite 2015 Tokyo

Unity ユーザー向け開発者イベント、Unite 2015 Tokyo で公演しました。上はそのスライドになります。タイトルの通り、基本的にこの blog の過去の検証記事をまとめた内容になっています。Unite に来る人でこういう内容を求めている人はそんなにいない (シェ…

rendering fractals in Unity5

Unity5 になってレンダリング機能の柔軟性が大きく増しました。 新たに追加された CommandBuffer により、Unity のレンダリングパスのほとんど任意のタイミングに任意の描画コマンドを差し込むことができるようになりました。また、deferred shading レンダ…

blue impulse / TokyoDemoFest2015

webplayer: http://primitive-games.jp/Unity/blue_impulse/ source: https://github.com/i-saint/BlueImpulseTokyoDemoFest2015 にて PC demo を発表しました。その映像、バイナリ、ソース一式を公開します。 今回も Unity 製です。会場のマシン (Windows &…

pseudo-instanced drawing in Unity

Unity で大量のオブジェクトを描画するスクリプトを書きました。 https://github.com/i-saint/BatchRenderer 簡単な使用例いつも通り弾幕やらパーティクルやらを描くのを想定した代物ですが、割と簡単に使えてポータブルな作りになっています。Windows で D3…

after C87

C87、スペースに立ち寄ってくださった方々、ありがとうございました。exception reboot 体験版ですが、Visual Studio 2013 ランタイムが入ってないとパーティクルや背景が出ないというミスをやらかしてしまいました…。同現象に見舞われている方はこちらをイ…

C87 / exception reboot

冬コミ参加します。3日目西え25a。 Unity で exception の続編的ゲームを作ろう、という実験も兼ねた挑戦をやっていて、その経過の作品になります。またしても体験版です…。 100 円、いつも通りソースコードも同梱します。また、Direct3D11 が使える GPU が…

render massive amount of cubes in Unity (2)

以前 検証した Unity で大量の cube を描く方法の続きです。あれからまたいくつか検証を重ねてきたのでまとめておこうと思います。まず前提として、今回解説する方法は全て Graphics.DrawProcedual() を使うアプローチです。以前の記事を書いた時点では気づ…

Temporal Screen Space Reflections

Temporal Screen Space Reflection以前諦めた真面目なスクリーンスペース反射の実装に再挑戦して、今回は割といい成果を出せました。 この成果に至る過程が長く苦しくもおもしろかったので書き残しておこうと思います。スクリーンスペース反射はその名の通り…

Unity-Chan "Candy Rock Star"

以前の記事で触れたユニティちゃんライブステージが、ようやくプロジェクトデータが公開されました。是非手元で動かしてみてください。 https://github.com/unity3d-jp/unitychan-crsこれに合わせて、ステージの床のシェーダのメイキングを書きました。 例に…

introduction to mono

mono の API を使って C++ から直接 Unity の C# のオブジェクトを触る、という実験を最近やっていたので、その成果を書き残しておきます。 mono を使うことで pinning や marshalling などの余計な処理を介さず C# と C++ を連携させよう、という趣旨です。…

CEDEC 2014 & C86

CEDEC 2014 で "Live Coding in C++" と題して講演を行いました。以前の予告の通り、この blog に書いてきたことをまとめた内容になっています。上はその発表資料です。予想に反して聴講しに来てくれた方は多く、この領域の情報を求めていた人まだこんなにい…

deferred shading in Unity

Unity は標準で deferred rendering をサポートしていますが、これは light pre-pass とか deferred lighting と呼ばれるもので、deferred shading とはちょっと違います。私が必要としているのは deferred shading の方なので、これを Unity で実装してみま…

render massive amount of cubes in Unity

MassParticle パーティクルエンジンを Unity のプラグインとして再実装しています。 まだまだ発展途上ではあるものの、そこそこの物量と速度と使い勝手を両立できる目処が立ってきたので、いずれ Asset Store で公開しようと考えています。ソースに関しては…

CEDEC 2014 / Status Report

CEDEC 2014 で喋ることになりました。 Live Coding in C++ ここ 1 年くらい趣味でやってた活動をまとめたような内容にする予定で、実行時 C++ 編集ネタとプロセスの状態保存/復元の 2 つが主なトピックになります。タイトルから推測できる通り、色んな黒魔術…

shinjuku in the blizzard

2/8、雪があんまり綺麗だったもんで吹雪の中カメラを手に外を彷徨っていました。場所は主に哲学堂公園周辺。 雪で普段見てる景色が様変わりしたときとか旅先で綺麗な景色を目にした時とかの、まぎれもなく現実なんだけど現実感が感じられない感じがたまらな…

restore process state

プロセスの内部状態を保存して後で復元したい、ということがゲーム開発ではよくあります (いわゆる state save)。チェックポイントから再開みたいな機能の実現の他、あると開発中何かと役に立ちます。定期的に state save しつつ、気になったところがあった…

get function by filename and line number

Alcantarea を実装するにあたって、更新する関数を最小限にするため、Visual Studio のテキストエディタの現在位置の関数を取得してその関数だけを更新する必要がありました。この ファイル名と行番号からその位置の関数を取得する という処理が無駄に奥深か…

Alcantarea

C++ ソースの変更を実行中のプログラムに反映させる Visual Studio アドインをリリースしました。Alcantarea - A Visual Studio Add-In for Runtime C++ Code Editingこれは DynamicPatcher に改良を加えつつ Visual Studio のアドイン化したもので、既存の…

runtime member variable editing

x86 勉強会で、clang のソースコード解析機能で class の構造を得て実行時にデータを表示したり編集したりする、という話を聞いて、以前デバッグ情報を使って似たようなことをやろうとしてたのを思い出してちゃんとやってみました。指定オブジェクトのメンバ…

Cookie Clicker

https://github.com/i-saint/scribble/tree/master/CookieClicker 自分の時間を救うために Cookie Clicker の自動連打&自動 golden cookie クリックツールを作りました。 自動連打は SendInput() しまくるだけですが、golden cookie 探しは結構大変で、Cook…

Runtime C++ Editing

x86/x64 最適化勉強会 6 で、実行時 C++ 編集の実装方法について話しました。上はその時の資料です。 私が知ってるいくつかの実装の解説と、DynamicPatcher の実装について解説しています。 あとは最初にこんなもんが必要になるゲーム屋特有の事情についてざ…

raymarching for games

demoscene の世界では近年 raymarching というレンダリング手法がよく用いられています。ポリゴンモデルは使わず、モデルデータは数式の図形としてシェーダコードの中で表現し、pixel shader で図形との距離を求めて可視化していく、というものです。 demosc…