Non-Photorealistic Renderingを読み終わった。
読むの遅いからいつになったら終わるんだろうと思ったのに結構さくさく読んじゃったね。
あんまり詳しい実装とかは書いてないから半分流し読みなんだが。
とりあえずNPR辺りの概要はわかったので論文でも読んでいくか。うちのプリンター印刷遅いんだよなぁ。
しかしそろそろ本気でゲームの方に組み込むこと考えなきゃならんな。
素材を作るにもどうレンダリングされるのか、そもそもどうレンダリングしたいのかわからんと無理だよ。
とりあえずキャラが小さい2Dゲームだと輪郭線が大分効きそうというぐらいしか想像できてないからな。
輪郭線はとりあえず裏面を線で描くという簡単な方法でいいかもしれん。
]]>monotoneはコマンドラインが使い易いからGUIはいらん。そう思っていた時期が俺にもありました。
たくさんaddしたいファイルがあるけどaddしたくないファイルも結構あるよーとか、一部のファイルだけはコミットしたくないよーとか、そういうときに面倒だった。
そんなわけでTortoiseみたいなGUIが欲しくなったので作ることにした。
GUIだとguitoneなんかもあるんだが、うちの環境ではいまだかつて正しく動いたことが無い。どんな環境ならちゃんと動くんだろう。
とりあえず必要なのはadd、drop、commit、logのGUIだろう。
さくっと作ってみたが悪くは無い。まだまだ何も考えずに使うには問題あるが、ちゃんと作りこめば最低限公開もできそうだな。
]]>ステージエディタを直したよ。
しかしステージ作っててやはりパズル要素が足りなすぎるのを実感。
ブロックを壊して進むゲームを想像してたけど、それってパズル向けじゃないね。
壊す一方だもんな。
そんなんで考えてたが、ブロックを壊すとアイテムとして持てて、別な場所にまた配置できるというのを思い付いた。
かるーく実装してみたらいい感じだったのでこれメインでいくことに。
いままでもアイテムはあったんだが、まじめに使ってたのは鍵くらい。鍵は対応するドアの前で使うと消えて通れるようになるというもの。
で、アイテムは同時に5個まで持てるけど、取得した順番にしか使えないという制限で鍵をとる順番とかで悩みどころになるかなーと考えてはいた。
それを生かす方向で持ち運べるブロックおアイテム扱いにしてみたんだが、ちゃんと生きてくれそうだ。
同時に持てる個数5個は適当に決めたもので、多い感じだったので3個にしておいた。
取得した順番にしか使えないというのが結構いい感じで、鍵はドアの前でしか使えないから間違って鍵取った瞬間に詰み、とか簡単に作れて楽しい。
ブロック壊しアクションパズルのつもりで作ってたけど、アイテムアクションパズルになりそうだ。たぶんこの方が俺の作りたいものだろう。
あと似た方向でアクションゲーム作っていくとメトロイドなんかの練り歩きになる気がした。いつか作りたいね、練り歩き。
そういやゲームの動画をあげたいんだけど、そういうのってようつべとかじゃないとダメなんだろうか。
そもそもキャプチャーした動画が何故か再生できないって問題があるから、編集しづらいのよね。HDRECSだからMacで再生できないフォーマットだし。
Vista買ってきたんで早いところ入れちまおう。
]]>日記を適当に書き溜めたらどうでもいい日記ばかりになったので省略。
]]>インテルのG45とかがもうすぐ出るけど、グラフィックドライバは最初はOpenGL1.5対応で2.0対応はちょっとあとになりそうなんだと。
おのれインテ…え、あとから2.0対応?
もうずっと1.5止まりだと思ってたあのインテルが2.0対応だと…?
ありえない、なにかの間違いではな(ry
どうせ使えないんですよね。ちゃんと動かないんですよね。
ところでG45って何者ですか?
グラボ買うのは比較的簡単だけど、マザボ買うのはきびしいお。
Chrome 440のボードはまだ買えないんでしょうか。
]]>Windowsマシンのmtnが古かったから新しくしようと思ったら0.40が出てた。
しかしWindows用のバイナリはまだなかったので結局0.39入れたけど。
2008年4月11日(金) 22:50:44 UTC
0.40をリリースしました。
変更点
- vimでのマージが改良され、vimdiff実行前に競合しない部分
についてはdiff3で自動的にマージするようになりました。
- パスを探索する深さを指定する--depthオプションに渡す
値が変更されました。
--depth=0は指定したディレクトリそのものを表し、その
子ディレクトリを指さないようになりました。
--depth=1では指定したディレクトリとそのすぐ下の
子ディレクトリを指します。
以前は--depth=0に子ディレクトリも含まれ、--depth=1には
孫ディレクトリも含まれるので、--depthで完全に子を除外
することができませんでした。--depthを使っている場合、
単に渡す値を1増やすだけで以前と同じ動作になります。
- ssh:とfile:のsync経路はWin32ネイティブでは動作しない
ことがドキュメントに明記されました。
バグ修正
- `commit'で_MTN/optionsのkeydirが使われるようにしました。
- 親ディレクトリの名前変更があったときの名前競合におい
ても、適切なエラーメッセージが出るようになりました。
この場合、エラーメッセージに両方のディレクトリ名と競
合するファイル名が表示されます。
新機能
- ワークスペースの親リビジョンを取得するのに使用できる
'p:'セレクタが追加されました。これは
"mtn au select p:`mtn au get_base_workspace_revision`"
と同じです。
- push、pull、syncが下のように引数ひとつで起動できるよ
うになりました。
mtn://hostname?include_pattenr/-exclude_pattern
または
mtn://hostname?include=include_pattern/exclude=exclude_pattern
内部的な変更
- Botanを1.7.4に更新しました。
- 内部使用のapp_stateオブジェクトのしようを減らし、
上手くカプセル化して使うようになりました。
データベースのインターフェースも将来的に内容の
ロックを減らし易いように改良しました。
- revision_certsにインデックスがふたつあったのを
ひとつにまとめました。
- データベースのスキーマを変更し、ほとんどの場所で
16進エンコードでなくバイナリでSHA1のハッシュを
格納するようにしました。
これによりデータベースのサイズがちょっぴり減ったり
動作がちょっぴり速くなったりします。
データベースを直接扱っているようなひとはカラムの
表示やハッシュ(含むID)の格納にsqliteの関数hex()と
quate()、16進リテラル表現であるx'DEADBEEF'なんかを
使うと良いでしょう。
- メモリ中での処理でもほとんどの場所でバイナリのSHA1
ハッシュを使うようになり、変換を避けメモリを節約
するようになりました。
データベースの変更がひさしぶりにあったので
mtn db migrate
を忘れずに。忘れても操作しようとしたときに文句いわれるだけだと思うけど。
ssh:とfile:はWin32ではうごかんのかー。いまのところ使ってないからいいけど、ちょっとまじめに使うなら欲しいような。
セレクタはまだまだ賢くなっていい気がするよ。例えば複数選択された中から最新のに絞りこむ奴とか欲しい。
あんまりでかいものに使ってなかったから気にならなかったがやはりGUIが欲しいヘタレだと気付いた今日このごろ。
そんなに凝ったものでなくていいんだが、addするファイルをリストで選べたりcommitするファイルをリストで選べたり、その程度。
guitoneはまともに動いたためしが無いんだがどんな環境で動くんだろあれ。
Tortoiseみたいなのがいいんだが、あそこまで至れり尽くせりでなくていいし、Macでもつかうから適当に作ろうか。
wxLua使えばフックだけで実はいけるんじゃないかと思ったがmtnのフックでは外部ライブラリの読み込みが許可されていないらしいので無理だった。けち。
仕事でも個人的に使ってるんで*1、なんとかしたいなぁ。暇が無いんだが、週末ぐらいでなんとかさっくりできんかな。
*1 家で使うよりファイル数多いし
ステージエディタがそこそこ使い易くなったので軽くステージを作ってたけど、俺の賢さが足りない。
やはりゲーム作りはレベルデザインが肝ですよね。
ちょっと難しいステージにしようと思って作ってると、最後には結構いやなステージになってたりする。これは気を付けないとルートがひとつしかないがちがちなステージを作るようになっちゃうな。
しかし気を抜くと一瞬でクリアできるようになってたりして難しい。
とりあえず適当に作ったら意図せず絶妙な配置になったステージと、ものすごく悩んで適当なところで妥協したステージができて詰んだ。
いまのところ要素が少なくてこれ以上は無理。というところでいろいろとアイディアをいただいたのでそれを実装していこう。
やはりアクション要素は欲しいだろうということで、動く足場とか敵とか。
敵はやっぱり欲しいよな。アクションパズルといえば無限湧きの敵ですよ。しかしモデル作るのが大変なのが困り者。
動く足場は衝突判定および応答が何なので難しい。キャラクターの接地判定がもう少しうまくいけばそれほどでもないのかなぁ。
他にもいろいろアイディアもらったけど、結構面倒なのはステージエディタの対応。いまはブロックの種類毎にプロパティシートとか持ったりはしてないんだけど、そのままではどんどん余計なコントロールが増えてしまう。やはり種類毎に別のプロパティシートを表示するようにするしかあるまい。
モデリング難しいお…。
]]>今週はいじる暇が無かったのでNPRで遊ぶの進展は無し。
本をまじめに読んでるんだけどやっぱり面白いな。 今までちゃんと調べてなかったのが悔やまれる。
日本人ならPhotorealisticよりNon-Photorealisticの方が好きなひとも多いだろうになんでマイナーかなぁとか思ってましたが、論文の日本人率意外に高いですね。
俺の見聞が狭いだけでした。
いまはGooch&GoochのNon-photorealistic Renderingを読んでるんだけど、他にまとめ本とかまとめサイトがあるとうれしいんだがな。きっとまとめサイトはあると思うんだけど。
ちょっと古いながらも基本的な事がまとまってていい本なんだが併せて新しめのものも調べておきたいよね。
論文とかたどっていくのがいいんだろうけど、大体本読んでるのが電車の中だ。 京ぽん2とN810で論文めぐるのは辛いぜ。
]]>やはりNPRは楽しかったのでカテゴリに昇格。
でもあんまりすすんでないよ。
とりあえず輪郭検出。NPRの本を読んでイメージスペースで処理できる簡単そうな奴があったのでそれを実装。

深度と法線を描画してそれぞれのエッジ検出してやって合体!という簡単なもの。結構ちゃんと出た。太くするのはぼかして閾値とっただけ。
ただ暗くするのも何なので、陰の色をクールカラーとして別な色を設定してあげた。まあこれは基本っぽい。
陰影はなぜか3値にしてくれとリクエストがあったので3値化。なぜに3値?
あとはスクリーントーンっぽいテクスチャをちゃんと作ったので適用してみた。いまいち。モアレが出たのは仕方ない。

他にイメージベースで描画した色をHSLに変換して明度成分抜けないかなぁと考えたが、もちろんそんなに上手くいくわけもなく。明度成分をあとから抜くくらいならアルベドマップ描画しておけってな。
でもHSLで色相をいじるのはいろいろやってみると面白いかも。陰の部分はメイド、じゃなくて明度下げる代わりに寒色側に振ってみるとか。逆に暖色側に振るのもありか。
まあクールカラーと同じ考えなんだけどさ。もうちょっと動的に。
で、ティーポットとかBlenderのサルをレンダリングして喜んでたけど、どうもいまいち。
最終的にゲームに組み込むのが目的なんだが、ゲームに使うような細かいテクスチャと併せてレンダリングしたときにどうなるのかいまいち想像がつかない。いや、テクスチャを併せて描かなきゃ役に立たんという想像はなんとなくついているのですが。
あとキャラクターなんかが動いたときにどうなるのかがわからんね。止め絵ではそれなりに見えないこともないんだが、動いたら逆におかしく見えるんじゃないかとガクブル。
いや、スクリーントーン風なんかは非常におかしいだろう事は想像ついてるんですが。現状で止め絵でも、網点しか使ってないからなんかアメコミとかイラストっぽいしね。
いずれにせよQuartzComposerではモデル表示は不自由だし、モーション適用も難しそうなのでゲームに組み込むなりRikoでいじるなりしないとな。
QuartzComposerのカスタムパッチを作るのもそれはそれで興味深いんだが、残念ながらそこまではやってられん。
]]>すっかりOpenGLの描画を忘れている俺。 glDrawArraysのオフセットにバイト単位の値渡してどうするんだと。
変なミスにはめられながらも、なんとかPrimitive周りをC++に全部移行させた。
本当はglBegin/glEnd風の描画ができるSimplePrimitiveを統合してバッファオブジェクトを渡しての描画なんてできないようにしようかと思ったが、統合が大変なのと、それはそれで困るのでやめ。
でも近いうちにインターフェースの整理はしたいね。
お、露骨にfps上がってやんの。そんなに複雑な事やってなかったんだが、やっぱりRubyではきつい部分か…。汎用性はいらないから高速で処理したいところだもんね。
あと重いのはCgのuniform変数設定辺りだが、結構大変。60fps出てるからいいじゃんといわれたので良いことにした。
いや、良くは無いんだが、もっと重くなってからでもいいかと。どうせやることは決まってるんだし。
他にやることは…うーん、描画をいろいろやって遊ぶのもいいが、それ以外にもやることあるだろうと。
やはりゲーム自体の仕様をなんとかせんとなぁ。流体とか言ってみたものの、それで面白くなると思えないところがやばすぎる。
ちゃんとゲームの面白さを考えないとな。
とりあえずいまの段階でもアイテムとか特殊ブロックを増やして、まじめにステージ作ったらそこそこは面白いかも知れん。
そこを検証するためにも使いづらいステージエディタをなんとか整備するか。え、先送りしただけ?いやいや…いや、まあそのとおりです。
関係ない話だが、MacのOpenGL Profilerで現在バインドされてるバッファオブジェクトを表示する項目が無いのはなんでなんだぜ?とても不便。
]]>夜7時なんかから仕様大変更の打ち合わせ始めんじゃねーよばーか。
と愚痴のひとつも言いたくなるわな。
全然ぬるいってことはわかってますよええ。でも下を見たらきりがない。
というかですね、帰るの遅くなったらアニメが見れないじゃないですか。日に日にたまっちゃうじゃないですか。あんまりためると消化に休日一日使うんだよ!
]]>よろしい、ではNPRだ。
RenderMonkeyのNPRサンプルを参考にQuartzComposerで書いてみたスケッチ風シェーディング。

陰が濃いところを濃いテクスチャをサンプルしてるだけ。 テクスチャ自体はRenderMonkeyの奴のパクり。コードは自分で書いたけどほぼパクり。
最初見たときはいい感じに見えたんだが、見れば見る程テクスチャ貼っただけに見えるわ。実際そうなんだけど。
スケッチ風ならこれでもいいんかな。
スクリーントーン風にしようと思ったんだが、テクスチャがうまく作れなかった。うまくは作れなかったんだがとりあえずで作ってみたのを適用したら変な感じに。
丸が伸びるからおかしいんですねそうですね。丸がたくさん並んで気持ち悪いし。
そんなわけでスクリーンスペースでやってみた。

おお、2Dっぽい。輪郭線が欲しくなるねこれ。
ポストエフェクトにしちゃったので、後ろに書いた2D絵も対象に。
普通の色付き画像と混ぜてみた。うーん、普通にシェーディングもされてるから変かも。

あとおまけでGPU Gems2にのってた風のラフスケッチ風輪郭線。輪郭検出が適当すぎるのが問題だが。

あれ、これ色のほうもゆがませてるんだっけ?
でもNPR面白いな。簡単なわりにイメージ変わるし。もっといろいろ遊んでみよう。
]]>モデルを直してて、テクスチャを描き直そうとしたんだけど。
Macでいいテクスチャ編集用のソフトが無い。
PhotoshopElementsは2.0しか持って無いがPPCのアプリだし、そうでなくともめちゃくちゃ重い。あとアップデート周りで変な動作をする。 もうすぐUniversalになった6.0が出るみたいだけど、写真編集に特化されてるっぽいのであんまり期待できない。
FireworksはCS3で多少まともな速度になったが、お絵書きはできるようなものじゃ無い。ちょっとペイントできるドローソフトとして使う分にはいいんだけど。
PainterEssentialsは3が起動しなくなっちゃった。 4を買ってもいいが、体験版いじったところフルスクリーンのみのアプリになっちゃってた。それは許容できるとしてもtgaもpngも直接読み書きできないのはちょっと、いや、とても不便だ。
Pixelmaterというのもあってよさげだが、体験版をいじったらお絵書きツール周りが貧弱で使えなかった。というかやけに派手なUIのわりにはかゆいところに手が届いておらず見かけ倒しかよ。
GimpベースのSeashoreはまだ機能が不十分。今後も期待できるか怪しいな。
Gimpはタブレットの消しゴムを認識してくれなかった。なんでじゃろ。
ArtRageが2になってレイヤーなんかも使えるようになってた。お絵書き用なのでPainterEssentialsと似ているがpngの読み書きができる感じ。
安いので2980円のダウンロード版を買おうとしたが名前とか住所を入力するのが面倒で1000円高いパッケージ版を買うことにした。だって俺の嫌いなベクターを使ってるっていうんだもの。
しかし、テクスチャの編集できるアプリってほとんど無いよな。特にMac用。
みんなPhotoshop買ってるんだろうか。高いのに。
あんまり凝ってなくてもいいからお絵書きができて、RGBAのチャンネル毎の編集ができて、pngとかtgaとかddsとかexrの読み書きができて、浮動小数点テクスチャの編集ができて、欲をいえば3Dとかキューブマップテクスチャの編集ができるアプリがあれば、2万くらいでなら余裕で買うんだけどなぁ。
つかそこまでは贅沢いわなくてもRGBAのチャンネル毎の編集とtga、png読み書きができる安価なアプリが全く無いのはなんで?需要が無いって?ここにあるよ!
話はちょっと変わるけど、テクスチャつながりでプロシージャルにテクスチャが作れるMaPZoneが非常に良い。これが無料だなんて信じられん。自分でパターンを作るのが難しくていまだにノードつなぐくらいしかできんけど。
Mac版は無いがこれのためにWindows使うのは苦にならないから困らない。
あれ、Chocoflopがテクスチャ編集に大分いい感じだな。exrの読み書きはできるし浮動小数点テクスチャ使えるや。
ArtRage2買っちゃったけど、こっちは純粋なお絵描き用でいいか。
]]>ゲームの動作が重いのでプロファイルをとってみた。
DTraceとかruby-profとか使ってみたけどどうも描画が重いらしい。
いろんな方法でプロファイルとったのは、描画が重いという事実から目を逸すためなんですが。しかし、どれでやってもゲーム処理と描画でかかってる時間が一桁違うとさすがにごまかせない。
それもCの関数呼んでるところで重いならはいはいGPU待ちとか、これ以上はかなり頑張らないと無理とか言えるんだが、そんな重い描画してるわけもなくCの関数は一瞬で返ってくるわけだ。
つまりRubyレベルでのセットアップがめっちゃ重い。
実際そんなに重そうな処理をしてるわけじゃないんだが、さすがに回数が多いと厳しい。柔軟性はあんまりいらんけど速度が必要なループって全くRubyに向いてないもんね…。
最低限Cで書いてあとはRubyで書こうとしてきたけど、もうちょっとC側に振らないとダメらしい。描画なんて単純ループなんでそりゃRubyを使う必要は無いんだけど、Cで書くのがめんどいんだよな。
意外とゲームの処理側は軽そうなんでまだ大丈夫かな。 ベクトル演算とかやりまくってて、無駄にオブジェクト作っては捨ててたので不安だったんだが思った程ではなさそうで安心。 そのうちGC対策は必要になるかもしれんけどな。
]]>MacのrubyだとDTraceが使えると聞いたので。
しかしdtraceはD言語と呼ぶスクリプトで対象プロセスの外からいろいろできるだけで、別にプロファイラというわけでは無い。 プロファイルとるのに便利な関数はいっぱい用意されてるけどね。
D言語と呼ばれるそれは、一般的にいうD言語とは全く関係なさげな不思議言語だ。
それを駆使してプロファイラ作るのってめんどいね…。 適当に書いたらcopyinstr使いまくったからかめっちゃ重かったよ。
]]>