2009-05-01から1ヶ月間の記事一覧

1ポリゴンスプライトのメリットとデメリット

素晴らしいパフォーマンスを見せてくれた直角三角形1ポリゴンのスプライト描画だが、単純に採用できるものではない。 それについて考えてみる。 メリットは頂点データが減ることによる負荷低減だが、デメリットはXo式 実験室さまでも指摘されている、テクス…

CreateVertexBuffer

とりあえず、あちこちのサイトやヘルプを参考にしながら、1ポリゴンごとにCreateVertexBufferして頂点バッファを作るようにしてみたら8fpsぐらいになってしまった。 ずっと前に試したことあったが、改めてやってみてもやっぱり遅い。 同じテクスチャが続く限…

ためしてみた

ZSortDisable状態で、1ポリゴンスプライトで全てを同じテクスチャとして、CreateVertexBufferして同じ頂点バッファに押し込んでDrawPrimitiveで一気に描画する。 とりあえず現時点で最もパフォーマンスが出るパターンであるはずなのだが、結果は13300個とイ…

フレームワークを作るのが楽しい

なんだかDXRubyのことを取り上げて頂いたようで。 で、今回の話題はそこの一文より。 蛇足だけど、Rubyゲーム界の問題は、みんな(俺を含め)フレームワークを作るのに忙しくて、ゲーム本体を作る人が足らないことだと 思います。フレームワーク作るのが楽しす…

スレッド

DXRubyの描画部分だけ別スレッドにしてみた。 実際には、スプライト構造体の編集→描画処理という感じだから、描画処理中に構造体が編集されてしまってはまずい。 スクリプトのメソッドを座標更新と描画に分けて、描画処理をしている間に座標更新ができるよう…

ZSortDisableテスト実装

Zソートをしないで、Window.draw系メソッドの中でDrawPrimitiveUPを直接実行する機能を追加してみた。 その状態でZソートをするようにしたらオブジェクト数は9500、しないようにしたら9700だった。 スクリプトは昨日の記録の記事と同じものだ。 スプライト構…

なんだこれは(゜▽゜;)

とんでもないことになった。 とりあえず画像をアップ。 一応環境を書いておくと、WindowsXP SP2、Pentium4 2.4GHz、GeForce7300GT、メモリ1GB、Ruby1.9.1+DXRuby1.0.3ベースの改造版+DXRubyExtention0.0.5。 「Xo式 実験室」さまに面白そうなアイデアがあっ…

記録

まあ、今回はスクリプト側をいじっての記録だから反則だが。 Ruby1.9.1+DXRuby1.0.3+DXRubyExtension0.0.5にて。 同じことをするのに極限まで処理を削ったらどこまで速くなるのか、ということで試してみた。 ここまでやっても10000到達できないのが悲しい。 …

DXRuby1.0.3リリース

ようやく1.0.3リリース。 追加したメソッドは、Window.create、Window.update、Window.sync、Window.minfilter=、Window.magfilter=、Window.setViewport、Window.drawSub、Image.slice、Image#copyRect、Image#draw、Image#drawFont、Image#boxFill、Image#…

RubyInline

Rubyのコードの中にCを埋め込むRubyInline。 なんだか面白そうな代物である。 基本的にはコンパイラを動かしてコンパイルして呼び出すわけなんだろうけど、コンパイル結果をキャッシュしてくれるから2回目以降は更に速くなる。 もし。 可能性として。 このキ…

Zソートしない高速化

Window.draw系でzを全部指定しなければ、ソートは1スキャンで終了するのでほとんど時間はかからない。 なので、zを指定する必要がなければすべて省略すれば速い。 明示的にzソートを省くオプションがあれば、もっと速くできる方法があるのではないか、と思っ…

えっちなのはいけないと思います!

何が起こったのか自分でもよくわからないが今おこったことをありのまま話すと、まほろまてぃっくを全巻読破した。 大変面白かった。 傑作だと思う。 なんとなく竹宮惠子の「地球へ・・・」を思い出した。 古いんですけど。

Ruby191の速さ

Ruby1.9.1はRubyVMの採用で動作が速くなった。 が、たとえばM17Nのせいで文字列処理やevalは遅くなっている。 じゃあ、具体的に何が速くなったのだろうか。 ということで色々と試してみたところ、特にループと計算が速いよーな気が。 計算が速いというのは要…

ちょっと変わった和英辞典

斉藤和英大辞典。 古臭い日本語の英訳がいろいろ調べれる、ふるーい和英辞典だそうだ。 原典は昭和3年らしく。たしかに古い。CD-NEW斎藤和英大辞典作者: 斎藤秀三郎,日外アソシエーツ辞書編集部出版社/メーカー: 日外アソシエーツ発売日: 1999/09メディア: …

DXRuby1.0.3ブランチ

予定の機能の実装が終わったので、ブランチとやらを作ってみた。 きちんとしたプロジェクトの真似をしているだけで実際よくわかっていない。 基本的に、機能を拡張しても実行速度は遅くならないように気をつけているつもりだ。 特にWindow.draw系は性能を大…

ML

SourceForge.jpのサービスでメーリングリストを作ってみた。 作ってはみたが、特に何をするってわけでもないから、あるだけになりそうな気配。

SetTextureの負荷

DXRubyは読み込んだ画像ファイルをそのままテクスチャとして保存して、描画するときにSetTextureを使って切り替えている。 3Dゲームなら1つのオブジェクトのたくさんのポリゴンにまとめて1つのテクスチャを適用したりするが、2Dの場合は1ポリゴンにつき1枚の…

ブレンドの実装

ざっとこんな感じ。 左から順に、通常半透明、加算半透明1、加算半透明2、減算合成。 上からα255、α100、α1. 左上が通常の描画で、これに各種ブレンド処理を施した描画がそれ以外となる。 加算半透明1はソースのαを変動させる方式で、2のほうは背景のαを…

LockRectの挙動

Imageオブジェクトをロックして四角や円を描画するときに、今は全範囲をロックしている。 大きな画像に小さい絵を描画しようとすると、全範囲の転送が発生するから、かなり無駄になっているはずだ。 これを少しいじってみる。 640*480の画像に対してランダム…

LockRectきっつー

ロックする範囲の計算を間違えて範囲外に書くとOSごとフリーズする。 もう何度フリーズさせたか・・・ とはいえ、リリース後にフリーズする現象が出ても困るから、Ruby側から指定できることは何でもやっておかないと。 Imageオブジェクトのx=/y=/width=/heig…

Rubyで作るアドバンテージ

ゲームに限らず、気楽な言語であるRubyでプロトタイプを作って、あとで本格的に他の言語で作り直す、というやり方を主張する人が少なからずいる。 ぜんぜん悪いことではなく、間違ってもいないと思うのだが、なぜRubyがプロトタイプのみで終わるのかが不思議…

SVN

SourceForge.jpの提供するSVNリポジトリにいままでテキトーに放り込んでいたのを、普通のtrunk、tags、branchesの構成にしてみた。 んで、せっかくだから機能を追加するたびにtrunkにコミットしまくっている。 いつでも昔のコードが取り出せるのは便利だ。 …

SDLが使うDirectX

なんとなく気になったから、SDLを調べてみた。 1.2のソースを覗いたところ、Windows用の描画はDirectX5のDirectDrawを使うらしい。 なるほど。 現在1.3が開発中で、そっちのほうは2Dでも3Dの機能を使うようなことが書いてあった。 こっちもソースを覗いてみ…

加算半透明の仕組み

どうもネットで調べていると、加算半透明のやり方に2種類あるみたいだ。 2種類ある、ということを説明しているところは無いようだが。 ちなみに2種類っつーのは以下の2つ。 (a)ソースをSRCALPHA、デスティネーションをONEとする。 (b)ソースをONE、デスティ…

z値の可能性

ViewPortでzのことを考えていたので、ついでに。 DXRubyは2D描画だから、zは描画順のソートにのみ使われる。 ポリゴン描画の座標を計算するときにzを使って透視座標変換すれば疑似3Dができるようになる。 4点の座標をそれぞれxyzで表現するようにすれば自由…

テクスチャの合成

DXRubyではなんとなく半透明と加算合成に対応している。 DirectXはテクスチャを描画する際に、描画しようとするテクスチャと、描画先にある絵をどのように合成するかを指定する、レンダーステートが存在する。 簡単に言えば、D3DBLEND_SRCALPHAとすれば指定…

Imageクラスの修正が半分できた

とりあえず、レンダーターゲット化して現在と互換レベルまでできた。 テクスチャのダーティ領域を設定しないと全体の転送をしてしまうから、描画時のロック範囲を狭くしてみたところなぜか異様に遅くなってしまったので、自分でダーティ領域を管理するように…

なんというか、無茶だ

Imageクラスの修正。 規模でかすぎな上に複雑で、能力の限界を超え気味。 とりあえず単純な矩形転送をStretchRectで実装してみたが、やっぱりGetRenderTargetDataが死ぬほど遅い。 これでできればよかったのだが、この対策のためにかかる手間が膨大すぎるか…

Star RubyとDXRubyの似ているところと似てないところ

数あるRuby用ゲームライブラリの中でも、Star RubyとDXRubyはなんだかよく似ている。 英語圏でメジャーなrubygameとかgosuとかまで含めるとまた色々あるのかもしれないが、ちょっと見た限りではシンプルではあってもあんまり似ていなかった。 どこが似ていて…

Imageクラスを再設計する

なんとかImageオブジェクトに対して自由に描画できないものだろうか。 と、ここんとこずーっと考えている。 たとえばImageオブジェクトを全てD3DUSAGE_RENDERTARGETとして、同時にD3DPOOL_DEFAULTとD3DPOOL_SYSTEMMEMを指定したテクスチャを2つ作る。 ビデオ…