ユーザ用ツール

サイト用ツール


2026:02:21

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

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