1993 のグラフィックを作るかのように

2026/06/09 19:46

1993 のグラフィックを作るかのように

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

サマリー:
Catlantean 3D は、1 年間の余暇に 걸쳐情熱的に開発されたプロジェクトであり、2027 年初頭における公式な Steam リリースを目指しています。古代エジプトのサイバーパンクパロディである Catlantis を舞台とし、厳格な技術的制約の下でレトロな魅力と現代の革新性を融合させています。

視覚的には、プリレンダリングされた Blender モデルと手描きの Aseprite スプライトを組み合わせ、ハイトマップ、ノイズ、汚れを用いた手続き生成テクスチャ(procedurally generated textures)や、Voronoi 分解および物理シミュレーションを利用した複雑な手続き的なデスマニペーション(complex procedural death animations)を実装しています。DDA アルゴリズムを使用したカスタム実装のレイカッストリングエンジン上で動作し、320x240 の解像度と 256 カラーによりスクエアピクセルを確保しています。主要な技術的達成事項としては、浮動小数点精度と組み合わせた決定論的なレンダリングロジックが挙げられます。エンジンは、Olabk(※原文「Oklab」の誤記と考えられるため)距離を利用した革新的なパレット管理システムを搭載し、色認識の正確さを保証するとともに、 colormap ルックアップテーブルを使用した動的照明アルゴリズムを採用し、ループ処理なしで O(1) パフォーマンスを実現しています。

本プロジェクトには、高度な照明機能やフラグペイントイングを支援するカスタム Python ベースのマップエディタ(wxPython/pybind)が含まれています。最終製品は設定不要であることがありながら、5 ドルから 8 ドルの価格帯で提供され、コンパイル済みバイナリアーカイブとして配布されます。コミュニティ精神に倣い、開発者は GitHub 上で全体のコードベースを開源化することを計画しており、レイカッストリングエンジンや手続き的なコンテンツ生成を調査する愛好家に貴重な洞察を提供します。

本文

Catlantean 3D:90 年代技術と現代手法を融合した FPS オープンソース開発の記録

Catlantean 3D は、1 年以上かけて開発された私のサイドプロジェクトです。来年には Steam で公開することを計画しています。このゲームは、90 年代初頭に一般的だった技術を駆使しつつも、現代のコンパイラやプラットフォーム抽象化レイヤを活用するという「贅沢」を許容しています。

目標と制限条件

私が設定した厳格な制限条件は以下の通りです:

  • 全自制: ゲーム全体のアセット(グラフィック、音源など)を全て自前で制作する。
  • 手作業による表現: レンダリング、ミックスされた全ての音源、マップ編集をすべて手書きで行う。
  • レトロな解像度と色数: 画解像度は 320x240、色数は 256 色 に制限。
  • 計算の制約: ゲームロジックは固定小数点を使用(決定論的振る舞いの確保)、レンダリングのみ浮動小数点使用。
  • プラットフォーム抽象化の制限: フレームバッファ、入出力、オーディオ処理など、極めて限定的な機能に留める。
  • 品質重視: 技術デモではなく、完成度が高く遊び甲斐のある polished なゲームを目指す。
  • AI 禁止: AI 由来の素材は使用しない。

注意: ここに表示されているすべてのコンテンツは WIP(開発途中)であり、内容が大きく変更される可能性があります。

パレットレンダリング

VGA グラフィックスの特性と応用

VGA モード 13h は、PC ゲーム黄金時代を定義した

320x200
の 256 色グラフィックでした。線形フレームバッファ上に単一のバイトでパレットインデックスを表し、シェイダーなどの複雑な要素は不要というシンプルさが最大の魅力でした。

  • 1 ピクセル = 1 バイト: この制約こそが、Doom や Duke Nukem に見られるような「シャープさ」と「明確さ」を生み出しました。
  • 320x240 の採用: 私は VGA モード X(
    320x240
    )を目指し、非正方形ピクセル化を避けるためです。

パレットの設計

使用されたパレットは 768 バイトで、以下の用途に割り当てられました:

  • 透明用: 鮮やかなピンク(1 色)。
  • 基本色: 純白・純黒(各 1 色)。
  • 演出色:
    • 大量の血表現のため、赤色系を重視。
    • テクスチャ作成のための RGB キーやカラーコードドアに合わせた緑・青・レッドグラデーション。
    • ゲーム舞台「Catlantis(古エジプト風)」に相応しい黄色・茶色(砂漠)。
    • サイバーネティックな敵に対応するためのグレー系と、暗部を暖色系で表現するベージュ。

このパレットは試行錯誤を経て決定されたものであり、意図的な色選択が重要です。

カラーマップによるライティング手法

パレットレンダラーでは「距離に基づく減衰(フォグラディエント)」を実現するために、事前計算されたカラーマップを使用しています。シェイダーでの浮動小数点計算ではなく、パレットインデックスそのもので表現します。

  1. シャード化: パレットをシャード(色階)ごとに並べ、各色に対して暗いトーン(シャード)を用意。
  2. Oklab 距離判定: ユークリッド距離ではなく、人間の知覚に近い
    Olab
    色彩空間での距離を使って「最も近い色」を検出。これにより寒すぎるグレー避免出现させ、適度な暖かさを維持。
  3. オ(1) 時間計算:
    • 壁・床・スプライトごとにカラーマップ行インデックスを 1 回のみ計算。
    • リスト隠蔽(クイックカリング)を組み合わせて、高速にレンダリング可能。
// シャードインデックス(0)は元の色です。
float darkening_factor = (32 - shade_index) / 32.0f;
target_darker_color.r = current_color.r * darkening_factor;
target_darker_color.g = current_color.g * darkening_factor;
target_darker_color.b = current_color.b * darkening_factor;

アセットの作成

Catlantean 3D のアセットは主に 3 つのカテゴリに分かれています:

  1. プリレンダー: Blender で 3D モデルをレンダリング。
  2. 手書き: Affinity Photo / Aseprite で意図的に作画。
  3. 手続き生成: Python スクリプトでパラメータを変えて自動生成。

プリレンダーされたスプライト

複雑なアニメーション(敵の歩行・射撃など)は、Blender でモデルを制作・リギングし、Python スクリプトで一括レンダリングしています。

  • ** workflow**: Blender の Python API を活用して、8 方向 x アニメーション数フレームを自動生成。
  • 高解像度からの処理: リサイズフィルタによるぼやけを防ぐため、Blender コンポジット機能でコントラスト・明瞭度を調整し、最後に Python スクリプトでパレット量子化(Olab 距離に基づく色付け)を行う。
  • 効率性: 生成されたスプライトは
    .gitignore
    に含まれず、必要に応じて再コンパイル可能です(RTX 3070 で約 15 モデルを処理するのに約 10 秒)。

手書きスプライトとテクスチャ

Blender の自動レンダリングでは表現しきれない「魂」や「雰囲気」は、すべて手作業で描くことで実現しています。

  • HUD と UI: ステータスバー、遷移画面、フォントなどは完全手描き。Affinity Photo を用いて 3D リリーフ・ノイズ・発光などを層ごとに構築し、Aseprite でピクセルパーフェクトな境界を加工。
  • スケールの統一: ゲーム世界の
    1 ユニット = 64 ピクセル
    を基準にスプライトを作成し、不自然な解像度混合を防止。
  • 拾得物のリファイン: 既存の素材も手動でコントラスト調整や色補正を行い、よりクリアに見せる。

手続き的に生成されたテクスチャとギブ(Gibs)

繰り返し発生するパターン(廃材・汚れ・摩耗など)は、手書きが退屈かつ非効率であるため、Python スクリプトで生成しています。

テクスチャ生成パイプライン

入力パラメータを調整するだけで、無限に異なるテクスチャが作成されます:

  • 高計マップ: ノーマルマップとして使用(ライティング・影のベイク済み)。
  • ノイズマップ: 変動表現。
  • グリディマップ: 汚れと摩耗表現。
  • 基本色・ブライッテマップ: 基調となる 2 色とその明るさ調整用。

ギブ(Gibs)生成アルゴリズム

敵へのダメージ(爆発・散弾等)で出現する血まみれの断片は、以下のステップでシミュレーションされます:

  1. Voronoi 分解: スプライトの各領域にランダムな重心を設定し、飛び散る個体を定義。
  2. Wound Bleeding(傷からの流血): チャンク境界から内側へ BFS 検索を行い、傷口の深さを計算。深さに応じて「血の色」または「元の色」をブレンド。
  3. Physics(物理演算): 重心・拡散・重力・ドラッグなどをパラメータ化し、簡易な衝突判定なしで飛散動作をシミュレーション。
{
  "seed": 295312884,
  "frames": 20,
  "chunks": 48,
  "explode": 3,
  "gravity": 1.4,
  "drag": 0.22,
  "spread": 1.15,
  "spin": 9,
  "woundDepth": 2
}

プリレンダーされたパーティクルシステム

粒子エフェクト(光線・リングなど)も同様にシミュレーションして事前生成しています:

  • 構成要素: コア、スパイク、衝撃波のリング、ノイズ。
  • エネルギー合成: 累積エネルギーをパレットインデックス算術で直接マッピングし、ホワイトアウト効果を実現。
  • モード別: ワンショット(爆発)とループ(持続光線)対応。

マップ編集

マップ編集ツールとしては Tiled を採用しましたが、レベルライトペイントやセルプロパティの機能が不足していたため、自作エディタを開発しました。

  • 独自エディタの特徴:
    • レベルライトペイント・セルフラグ・全エンティティプロパティに対応。
    • プラットフォーム抽象化レイヤ(ファイル IO, 固定小数点クラス)を pybind で利用し、C++ エンジンと完全互換。
  • wxPython の採用: tkinter よりもウィジェット操作感が良く、ネイティブな見た目を実現。UI ロジックとマップデータを書き離して保守性が高い設計。
  • Plug & Play: 開発者がプレイヤーと同じエディタを使用可能であり、ツールバーアイコンも含めてそのまま配布します。
# pybind を通じた C++ エンジン内部への Python バインド例
# ゲームデータアーカイブの読み込みや固定小数点クラスの利用など
from pybast import load_archive, fixed_point_entity
archive = load_archive("game.dat")
entity = fixed_point_entity(...)

結論

Catlantean 3D は、2027 年第 1 四半期頃の公開を予定しています。現在はレベル設計と新規アセットの追加開発中です。

  • 価格: $5 - $8(廉価帯)。
  • ソースコード: GitHub でオープンソース公開予定。
  • コンテンツポリシー: ゲーム購入者はグラフィック・サウンドなどのデータアーカイブを取得可能。主人公には正当な報酬を、制作者にも同様に。

インディーゲーム開発において透明性の高いプロセスは、限られたリソースで信頼を築く重要な要素です。小さいコミュニティでも、真摯に取り組んでいるプロジェクトに応援したいという思いがあります。

「誰かが本当に何を作りながら心配しているのか」を理解し合うことは、最も正直な交流ではないでしょうか。

あなたの創作活動も、ぜひ見せ方を続けてください! この記事に共感した場合は、ソーシャルメディアでフォローしてください。

同じ日のほかのニュース

一覧に戻る →

2026/06/10 1:58

クロード・フェブル 5

## 日本語訳: 以下の改善されたバージョンでは、欠落していた安全性の詳細、具体的な価格設定構造、データ保持ポリシー、および可用性のタイムラインを補いながら、明瞭性を維持しています: ## まとめ: Anthropic は、一般使用に安全であり、ソフトウェア工学、可視化解析、長期コンテキスト処理、科学的研究、およびメモリータスクにおいて従来のすべてのバージョンを超えた「Mythos クラス」のモデルである **Claude Fable 5** を導入しました。同モデルは直ちに API とサブスクリプションプラン(Pro から Enterprise まで)で利用でき、6 月 22 日まで利用可能です(6 月 23 日からは使用クレジットに移行)。価格は入力トークンあたり **10 ドル**、出力トークンあたり **50 ドル** で設定されており、Claude Mythos Preview など以前のプレミアムモデルよりも大幅に安価です。 Fable 5 は転換的な性能向上を提供し、以前は何ヶ月もかかった工学タスクを数日へと圧縮するとともに、薬剤設計を約 10 倍加速させます。安全性と有用性のバランスを取りつつ、Fable 5 におけるセンシティブなトピックに関するクエリについては、**Claude Opus 4.8** にフォールバックを行う設定となっており、これは保守的なチューニングによりセッションの **約 5% よりも少ない割合** で発生します。さらに、特定の分類器は生物学/化学分野での危険な研究の向上や悪意のあるハッキング試行をブロックします。また、Anthropic は Mythos クラスモデルに対して新しい **30 日間のデータ保持ポリシー** を実施し、このトラフィックを新モデルの訓練や安全性以外の目的で使用することを禁止しています。 一般向けの Fable 5 バージョンは依然として非常に安全ですが、未検閲バージョンである **Claude Mythos 5** は、15 カ国以上で選択されたサイバーセキュリティおよびインフラストラクチャパートナー(将来的には約 150 の新しい組織へ拡大)を独占的に対象とする **Project Glasswing** を通じて利用可能です。この戦略的動きは、責任ある使用基準を損なうことなく科学的発見を加速し、重要インフラのセキュリティを強化することを目的としています。プログラムには、将来、特定の生命科学研究者のために生物学/化学の safeguards を解除する計画も含まれています。

2026/06/10 6:01

NPM バージョン 12 で導入される予定のbreaking changes

## Japanese Translation: npm v12 開始(推定リリースは 2026 年 7 月)、`npm install` に対してより厳格なセキュリティデフォルトが適用されます。最も重要な変更は、自動スクリプト実行の無効化です(`allowScripts` がデフォルトでオフ)。明示的に承認されないと、preinstall、install、postinstall スクリプト(`node-gyp` を介するネイティブビルドを含む)がブロックされます。準備のためには、これらの変更を警告付きで利用可能な npm v11.16.0+(またはそれ以降)を使用してください:`npm approve-scripts --allow-scripts-pending` を実行し、信頼できるパッケージについては `npm approve-scripts` で明示的に承認し、他は `npm deny-scripts` で拒否します。結果となる許可リストは `package.json` に書き込まれコミットすべきであり、v12 へのアップグレード後は承認されたスクリプトのみが実行されます。 さらに、デフォルトでは `--allow-git`(npm 11.10.0+ で利用可能)は none に解決され、Git ベースの依存関係に対して明示的なフラグが必要となり、`.npmrc` オーバーライドを介した潜在的なコード実行経路を閉じます。同様に、`--allow-remote`(npm 11.15.0+ で利用可能)はリモート URL から依存関係を解決する場合にデフォルトで none に設定されます。`--allow-file` および `--allow-directory` は現在のデフォルトを維持します。保守担当者および CI/CD パイプラインは依存関係を検証し、`package.json` 内の許可リストを更新し、アップグレード前に変更をコミットする必要があります。そうでない場合、手動の例外を設定しない限りビルド失敗となります。詳細は npm ドキュメントの `npm approve-scripts`、`npm deny-scripts`、および `allow-scripts config` をご参照ください。

2026/06/10 4:21

FPGA を用いたKolmogorov-Arnold Networkによる超高速機械学習

## Japanese Translation: 本テキストは、Kolmogorov-Arnold Network(KAN)を Field-Programmable Gate Array(FPGA)上で展開し、超高速機械学習に特化して設計された革命的な新ハードウェアアーキテクチャを導入します。従来の GPU はスケジューリング遅延およびメモリオーバーヘッドによりマイクロ秒以下の応答時間を達成できず苦労しますが、この FPGA ベースのアプローチでは、ニューラルネットワークをリプログラミング可能なデジタルロジックと直接統合するため、アルゴリズムと設計のコデザインを採用しています。固定された重みではなく、B スプライン基底関数によって定義される学習可能なエッジアクティベーションに置き換えることで、伝統的なルックアップテーブルモデルに見られるような指数関数的スケーリングの問題を回避します。この手法は、定点符号化によるデータエンコーディングの簡素化を実現し、トレーニングの安定性を確保します。主な革新点は、「B スプラインの局所性」の利用であり、グリッドセルごとにアクティブとなる基底関数の数が限られているため、ネットワークの次数を増やすことなくグリッドサイズを拡大することでモデルを水平方向にスケール可能になります。得られる枠組みは「KANELÉ」と命名され、従来の実装に対する驚異的な 2,700 倍もの速度向上を達成し、オンデバイスでの動的モデル更新が可能となる真のオンライン学習を実現します。この画期的な成果は、量子コンピューティング制御システムなどリアルタイム意思決定が必要な産業に対し、高効率性と継続的改善を支援する GPU の代替として堅牢な選択肢を提供します。大規模テストにおいて、同システムは関数近似やキュビット読み出しなどのタスクで伝統的な MLP よりも優れたハードウェアスケーリングと収束性を示し、50,000 パラメータまで扱いながらマイクロ秒以下のレイテンシを維持しました。