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…

after C84

コミケ参加した方々、お疲れ様でした。予想外に反響があって、久しぶりにすごく手応えを得られた回になりました。スペースに足を運んでくださった方々、声をかけてくださった方々、ありがとうございました。 ただ、今回マスターデータにソースコード入れ忘れ…

before C84

またしてもギリギリの告知になってしまいましたが、C84 版 atomic はこんな仕上がりになりました。開発中バージョンにつき 100 円、いつも通りソースコードも同梱です。3日目東ホ-44b primitive。 書き残しておきたい開発記録なんかもいくつかあるのですが、…

photo

雷を撮る、という趣味写真屋としての目標が達成できた一枚。雷雲が接近中だけどまだ雨は降ってきていない、という理想の状況に遭遇し、シャッター時間を限界まで長くして暴風の中雷が落ちそうな方向を 1 時間近く延々撮りまくっていました。 最近 α550 中古…

function hooking

ここ数ヶ月でいろんな関数 hook を試したのでメモ。Windows でしか試していませんが、x86/64 であれば他のプラットフォームでも同等のことができるはずです。 関数 hook と dll injection は解析/デバッグツールやら動画キャプチャツールの類を作るための基…

WebController

WebControllerブラウザからゲームを操作するツールをしばらく前に作りました。主にモバイル機器から Wii U コントローラ的にゲームを操作するのを目的としたものです。 上の動画は Nexus7 から REVOLVER360 RE:ACTOR (C83) を遠隔操作しているところ。見ての…

generic function call

サイト本体では既に告知していますが、コミケ受かりました。スペースは 3日目東ホ-44b primitive です。 予定より大きく遅れていますが、前回よりは色々進歩したものを出せる予定です。 最近の状況。 それっぽく動く水車、raymarching による背景、以前 書い…

DynamicPatcher - Runtime C++ Editing

[2013/12/25 追記] この DynamicPatcher をさらに改良し、Visual Studio のアドインとして実装した Alcantarea をリリースしましたDynamicObjLoader を改良し、実用に耐えそうな実行時 C++ コード編集機能を実装しました。 C++ コードを編集してそれをリアル…

WebDebugMenu

ゲーム屋の間ではおなじみのデバッグメニューをブラウザで実装してみました。 WebDebugMenuデバッグメニューとは、変数や関数を事前に登録しておき、後でメニューから値を書き換えたり関数を呼んだりできるようにする代物で、周囲の人間の話を聞くにコンソー…

experimental codes

最近書いた雑多な実験コードのまとめ。 ・GetThisOfCaller() 現在の関数の呼び出し元がメンバ関数であればその this を返すというもの。 スタックフレームをさかのぼり、デバッグ情報を使って該当スコープの変数を巡回して this が見つかればそれを返す、と…

eval() in C++

しばらく前にやったことですが、ネタとして面白い気がするのでサルベージ。DynamicObjLoader を使って C++ で eval() を実装しました。 C++er が夢に見たり見なかったりしたこういうコードが動きます。 #include "DynamicObjLoader.h" class Hoge { public: …

memory leak buster (2)

以前作ったメモリリーク検出器がとても役立っていて、今も機能追加を加えつつ使っています。 最近大きな改良を加えたので再掲。 MemoryLeakBuster実行時にイミディエイトウィンドウから呼ぶデバッグ機能を追加したのが主な変更で、以下のようなことができる…

implementing level editor by HTML

レベルエディタを実装中です。 今は DyncmicObjLoader があるので全部 C++ でレベル (ステージ) を書くのも十分アリなんですが、それとは別に、レベルエディタ的なものを実装してそれをゲームの一要素にしたいと考えています。 exception conflict が、サー…

retrospect 2012

2012 年は例年にはないくらい得たもの、考えさせられたことが多い年でした。 仕事 仕事では主に Agni's Philosophy に携わっていました。ゲーム屋はもっと自分の仕事を自慢した方がいいんじゃね?とこの頃よく思います。 個人間で切磋琢磨している感じが薄い…

atomic C83 preview +

コミケお疲れ様でした。ブースに足を運んでいただいた方々、ありがとうございました。 事前の告知通り、コミケ版に若干手を加えたものを公開します。atomic C83 preview + (コミケ版にはたまに数秒止まったり BGM が途切れたりするなどのバグがありましたが…

C83

告知がとても遅くなりましたが、冬コミ出展します。 スペースは 31日 東 X-14a です。このところ色々ダメダメで、約 1 年前のこの状態からほとんど変わってないものしか出せそうにないです。 とりあえず CUDA 使うのやめて割とポータブルに動作するようにな…

glSpriteFont

OpenGL でスプライトフォントを描画するライブラリをしばらく前に作りました。 (スプライトフォント: 事前に使う文字を 1 枚のテクスチャにしておき、quad に切り出してに描く方法) FTGL はもはや古すぎるし大げさすぎるので、機能は必要最小限で、レガシー…

views from shinjuku

誰得写真群。 最近新宿の街に愛着が沸き始めていて困ります。

dynamic obj loader (2)

いくつかのバグフィックスや機能追加を経て、以前の記事で紹介した ispc による衝突計算モジュールもリロードも可能になりました。ispc も .obj を吐くのでリロード可能なわけです。 あと無駄に .lib にも対応しました (とりあえず static link 版のみ)。 以…

dynamic obj loader

[2013/06/06 追記] DynamicObjLoader の後継として DynamicPatcher が作られました。こちらの方がより強力です。.obj ファイルを実行時にロードして自力でリンクを行い、中にある関数を実行できるようにする、という代物を作ってみました。 https://github.c…

memory leak buster

VisualC++ のデバッグ版 CRT (C 標準ライブラリ) にはメモリリーク検出機能が備わっています。(参考) しかし、これが出してくれる情報は、どのアドレスで何 byte リークしてますよ、というだけでデバッグの助けにはあまりなりません。 これがものすごく不満…

Intel ISPC & SPH on CPU

コミケに参加した方々、お疲れ様でした。 サイトの方では告知し忘れていましたが (…) 今回は落選でした。次回の冬コミは既に申し込み済みで、受かれば参加します。牛歩の歩みですが、来年 5 月までには何らかの形で完成した作品を出すつもりです。 前回の冬…

scribble code

twitter に書いていたネタのサルベージ。 LazyD3DDeviceContext https://github.com/i-saint/LazyD3D11DeviceContext/blob/master/LazyD3D11DeviceContext.h D3D11 はどんな些細な render state の変更も馬鹿正直に逐次ドライバの命令を呼びに行くらしく、例…