内容へ移動
machia's diary
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
2026:02:21
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
2/21日記 ===== プログラム ===== * レイトレーサーを実装してみた。 * https://x.com/__machia__/status/2025073094340346166?s=20 * Copilotに依頼したら出力してくれたので、これをベースに処理するクラスを作成してみた。 * 自分が実装したことあるのはシェーダベースのレイマーチングによるものなので、それもなかなか偏ってるので、まずレイトレとはどうやって実装するものぞというのを調べてみたもの。 * 現在作っているのが2Dのラスタライザなので、あくまでラスタライザ上で描画する対象としてレイトレーシングを動かす。 * 実装としてはアプリケーション側から描画命令を呼び出す。 * レイトレーサー内の更新はゲームスレッドで動かして、レイトレーシングを描画命令で起動することにした。 * 更新と描画は別スレッドでの動作してるせいか、割とさくさく動いてビビる。 ---- * やってることは当然ながらレイマーチングと似ている。 * 画面のピクセルごとに「どの地点から光が飛んでいて、どう反射しているの」をシミュレートしている。 * カメラの仰角とかの絡みがいまいちわかってない気がする。 ---- * ここ1週間でテンションが上がりすぎてソースコード書き散らしてた。 * 結果、内部がなかなかやべえ変数名だったりコメントがなかったりしてた。 * ということで少し整理した。tempやa等あまりに変数が適当すぎるのはダメだと思った。 * あとは、ちょっと構成的にマズい部分が散見されたので、修正することにした。 ---- * 画像の読み込み処理、殴り書きで書いてたところあったけど、最初の実装だとリニアにしか読み込めない。 * 画像を大量に使う場合どうしても差し替えが必要になるんだけど、まず差し替えを想定してない構成だった。 * よって、差し替えにも対応できるように各グラフィック枠で読み込みおよび描画が可能かをチェックするようにした。 * 解像度が小さいのもあって確保するグラフィック枠を限定的にしたのがまずかったか。 ---- * 使いやすさを意識してモノリシックに作ろうとして構成を変更してみたけど、メモリ違反が発生する。 * 勿論内部で排他制御をかける必要があるんだけど、最終的には外部ライブラリ上に書き出すわけで、マルチスレッドができるかどうかはライブラリ側やOS標準APIの実装に依存してしまう。 * となると、そもそもフレームワーク内部でマルチスレッドで動かす仕組みが必要ないのでは?という話になり、モノリシック化は諦め。 * 代わりにライブラリ側に比較的自由に組み込みが可能なのがメリットということにしておこう。 * いざとなったらラスタライザ側だけでも取り外して動かせるという扱いにしておく。 * アプリケーションフレームワークとラスタライザのセットだけど、ラスタライザだけでも問題なく動かせるよ、という感じ。 ---- * 殴り書きなせいで処理自体が重複していた部分や無駄に比較している処理があったので、少し修正済み。 * 結果、負荷かけた描画がFPS80前後だったのが、FPS115-120くらい出るようになった。 ---- * これよさそう * https://github.com/sejja/2D-Software-Rasterizer *
2026/02/21.txt
· 最終更新: 2026/02/21 17:38 by
machiaworx
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ