素のC++で500行だけで実現するソフトレNDERING

2026/07/23 23:17

素のC++で500行だけで実現するソフトレNDERING

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

要約

Japanese Translation:

このプロジェクトは、グラフィカルなインターフェースなしで、サードパーティ製のグラフィックライブラリを使用せずに簡易的なソフトウェアレンダラを裸の C++ で構築することで、3D グラフィックスの基本ロジックを教えます。三角メッシュモデル(オプションのテクスチャ付き)をロードし、画像を保存するという基本的なタスクにスコープを限定することで、

diablo3_pose.obj
または
floor.obj
のようなモデルを対象とし、学習者はラインと三角形に関する本質的なレンダリングロジックを手動で実装することを強制されます。これにより、複雑なグラフィック API に伴う急峻な学習曲線に対処します。このチュートリアルが直ちに GPU プログラミングを教えないとしても、それは重要な基盤段階となり、学生は高度なハードウェアアプリケーションに取り組む前にコアの効率化原理を理解するのを助けます。始めるには、GitHub リポジトリ(
https://github.com/ssloy/tinyrenderer.git
)をクローンし、構成のために
cmake -Bbuild
を実行し、
cmake --build build -j
でビルドしてプログラムを実行すればよく、これはシーンを
framebuffer.tga
にレンダリングします。このコンパクトな 500 行程度のプロジェクトを完了するには通常、集中的な開発で約 10~20 時間かかりますが、その最小限の依存関係(RGB、RGBA、グレースケールをサポートする単一の画像ハンドリングクラスのみ)により、開発者は非常に少ない行数で機能のあるレンダラを作成でき、高度なレンダリング概念が教育目的と軽量な実用的プロジェクトの双方にとってアクセスしやすくなっています。

Text to translate:

This project teaches the fundamental logic of 3D graphics by building a simplified software renderer in bare C++ that generates

.tga
images without any graphical interface and without third-party graphics libraries. By restricting the scope to basic tasks like loading triangulated mesh models (with optional textures) such as
diablo3_pose.obj
or
floor.obj
, and saving images, the initiative forces learners to manually implement essential rendering logic for lines and triangles—thereby addressing the steep learning curve associated with complex graphics APIs. Although this tutorial does not teach direct GPU programming immediately, it serves as a crucial foundational step, helping students understand core efficiency principles before tackling advanced hardware applications. To get started, users simply need to clone the GitHub repository (
https://github.com/ssloy/tinyrenderer.git
), run
cmake -Bbuild
for configuration, build with
cmake --build build -j
, and execute the program, which renders the scene into
framebuffer.tga
. Although completing this compact 500-line project typically takes about ten to twenty hours of focused development, its minimal dependency—just a single image-handling class supporting RGB, RGBA, and grayscale—empowers developers to create capable renderers using very few lines of code, making advanced rendering concepts accessible for both educational purposes and lightweight practical projects.

本文

C++ による純粋なソフトウェアレンダリング:500 行で実現

本連載では、OpenGLVulkanMetalDirectX の動作原理を、ゼロから簡略化されたクラスを構築することで示します。多くの人が 3D グラフィックス API の「学習の初期段階」で苦戦する現状を変え、受講生が高度なレンダラー開発能力を獲得できるようにした講義シリーズです。

タスクと目標

以下のような画像を生成することを目的とします:

  • 禁止事項: 第三者製のグラフィックス関連ライブラリは一切使用不可
  • 対象: 三角メッシュとテクスチャから構成される 3D モデルを入力とし、レンダリングされた画像を出力するプログラム
  • UI なし: グラフィカルなインターフェースは用意せず、画像ファイルのみを生成

注意: これは現代的な 3D ライブラリの構造を模倣したトレーニング資料であり、GPU アプリケーションの直接実装ではありません。ただし、内部仕組みを理解することは、効率的なライブラリ利用に不可欠です。

出発点:外部依存関係を最小限に

受講生は通常、10〜20 時間を要して開発します。ここでは TGA ファイル処理用の単一クラスのみを提供し、以下の制約の下で実装を行います:

  • 画像形式: TGA(RGB/RGBA/グレースケール対応のシンプル形式)
  • 初期機能: ピクセル色設定のみ可能
  • 描画関数: 線分や三角形を描画する組み込み関数は用意せず、すべて手動実装

完全なソースコードは GitHub に公開されています。自らの手を動かして概念を理解することが推奨されます。

コード例:初期のフレームバッファ生成

以下にmain.cppの抜粋を示します。64×64 の画像を生成し、3 点に白いピクセルを設定しています(※TGA は BGRA 形式です)。

#include "tgaimage.h"

constexpr TGAColor white   = {255, 255, 255, 255}; // 注意:BGRA の順序
constexpr TGAColor green   = {  0, 255,   0, 255};
constexpr TGAColor red     = {  0,   0, 255, 255};
constexpr TGAColor blue    = {255, 128,  64, 255};
constexpr TGAColor yellow  = {  0, 200, 255, 255};

int main(int argc, char** argv) {
    constexpr int width  = 64;
    constexpr int height = 64;
    TGAImage framebuffer(width, height, TGAImage::RGB);

    // 三角形の頂点座標
    int ax = 7, ay = 3;
    int bx = 12, by = 37;
    int cx = 62, cy = 53;

    // 頂点に白色を設定
    framebuffer.set(ax, ay, white);
    framebuffer.set(bx, by, white);
    framebuffer.set(cx, cy, white);

    // TGA ファイルとして保存
    framebuffer.write_tga_file("framebuffer.tga");
    
    return 0;
}

コンパイルと実行

以下のコマンドを使用して、プロジェクトをセットアップし実行します。

git clone https://github.com/ssloy/tinyrenderer.git && cd tinyrenderer && \
cmake -Bbuild && cmake --build build -j && \
./build/tinyrenderer obj/diablo3_pose/diablo3_pose.obj obj/floor.obj
  • 出力:
    framebuffer.tga
    として保存されたレンダリング済み画像

同じ日のほかのニュース

一覧に戻る →

2026/07/23 23:24

筆記は脳にとっても有益です

## Japanese Translation: 筆記は、抽象的なアイデアを複雑な身体的動きと統合させることで、タイピングよりも脳をより深く関わらせます。著者は、*Baroque Cycle* のために大量のページを書くなど、25 年間の日常的な筆記の経験に基づいてこの主張を支持しています。「書き手痙攣」という一般的な恐怖とは対照的に、著者は数十年の実践を通じてこれを一度も経験したことがありませんが、文字が illegible になるや大文字を忘れるなどの初期の苦労は新しい書き手によくあると認められています。筆記機構では適度な摩擦(「歯車」)に依存しており、草書はこの摩擦を活用することで、個々の文字を書くことよりも疲れにくくしています。「インク災害」という一般的な恐怖は、 Fountain Pen との固有の欠陥ではなく、不適切な材料や条件(例えば大気圧の変化など)から生じた神話であることが多く、適切な紙とペンとの組み合わせにより左利きであっても滲みを防ぐことができます。教育者は AI の懸念により学生を長手筆記試験に戻すようになり、学習者が高価な機器への投資をする前に、綿成分の紙や Pilot G-2 ペンのような利用可能な選択肢を試験することが重要となっています。タイピングや AI だけに依存するだけでは、運動技能を統合する身体的評価に備えられない可能性があります。

2026/07/24 4:26

Show HN: Echo – オープンウェイトモデルで費用を 1/3 に抑えつつファブルレベルの成果を実現

## Japanese Translation: 本記事では、OpenRouter、Fireworks、JusCode、Pellmell.ai、TracerML(Echo)、SakanaAI Fugu、Magnitude.dev などの現代の AI ルーティングシステムが、Fable といったプレミアムまたは専用ソリューションと比較して著しく低いコストで高品質な大規模言語モデル(LLM)の出力を可能にすることを論じています。ベンチマークデータによれば、ルーターは HumanEval+、SWE-bench Verified、BigCodeBench を含む 7 つのベンチマークファミリーにおいてトップクラスモデルと同等のパフォーマンスを発揮しており、従来手法のおよそ 1/3 の価格で達成されています。生成に基づいたアプローチ(例:Fusion)のように多数の返信を生成して合成する過程で高いレイテンシーとコストを招く一方で、ルーティングアーキテクチャは速度を維持しつつ結果を改善します。Dogpile.com、AskJeeves、Alta Vista、Lycos、DeepSeek R2、GitHub Copilot(GHCP)、OpenAI の「auto」モードといった製品も、異なる戦略を示しています。OpenAI の「auto」モードは単純なクエリに対するインフラコスト削減のためモデルサイズを選択し、Pellmell はルーターを通じて最適の返信を即時にストリーミングするとともに、必要に応じて絵文字反応を使って合成を行います。エコシステムは歴史的な検索エンジンから GPT-5/4o/o1、Qwen 3.7 Max、Anthropic モデル、GPT Sol、そしてさまざまなオープンウェイトの中国モデルを使用する現代ツールまでをカバーしています。重要な技術的な区別として、現在の LLM の専門家混合物(MoE)におけるルーティング決定はトークン単位で行われるのに対し、タスク固有またはアンサンブルルーティングとはアーキテクチャ的に異なります。プライバシーポリシーは更新され、Echo が顧客のプロンプト、ファイル、チャット、出力をモデルの学習やファインチューニングに使用しないことが明確に記載されています。また、Echo は今後は無料での初期クレジットを提供し、サインアップ時にクレジットカードの登録が不要となっています。専門家は、月 200 ドルといった優遇されたサブスクリプションプランが一時的な損失誘発策であり、エンタープライズは最終的にトークンあたり標準的な API 価格に直面する可能性があると警告しています。「1/3 のコストで Fable 相当の結果」といった主張に対する懐疑については、ルーターが高品質モデル(Fable など)を必要に応じてのみ使用することで費用を節約するためであることを明確化することで対処します。これらの進展は、業界がよりアクセス可能なインフラストラクチャーへと移行するにつれて、企業が品質、速度、価格を慎重にバランスさせることを迫っています。

2026/07/24 6:05

Namecheap が単に依頼されたからといって、私のアカウントを未確認の第三者に引き渡した

## Japanese Translation: CVC Capital パートナーズによる 2025 年 9 月の買収およびそれ以降の経営陣の変更を経て、Namecheap は深刻なユーザー信頼危機に直面しており、その要因は重大なセキュリティ上の見落としと運用上の不安定さにある。具体的な不満事項には、正当な理由なく WHOIS データが準拠しているにもかかわらずアカウントがロックされること、Link などのサードパーティ系決済プロセッサーへの強制的な移行(これらは侵襲的な SMS 認証を要求する)が含まれる。さらに、攻撃者に対しソーシャルエンジニアリングを用いて完全なドメイン制御権を付与したという致命的なサポートインシデントが発生しており、これは無料で利用可能なプライバシーツールが提供できたはずの保護を回避するという事案である。これらの問題は、私募資金出資(プライベートエクイティ)による所有下でのコスト削減が本質的なセキュリティ慣行を犠牲にすることで生じる「enshittification」の傾向を象徴している。その結果、ユーザーは Cloudflare、Porkbun、Gandi といった低価格かつより安全な代替手段へ急激に移りつつあり、これは従来の高マージン型のドメインレジスターからの市場シフトではなく、堅牢なセキュリティを優先するレジスターへの転換を示している。 ## Text to translate: Following its September 2025 acquisition by CVC Capital Partners and subsequent leadership changes, Namecheap is facing a critical crisis of user trust due to severe security lapses and operational instability. Specific grievances include accounts being locked without valid reason despite compliant WHOIS data, forced migration to third-party payment processors like Link that demand invasive SMS verification, and catastrophic support incidents where agents granted attackers full domain control through social engineering—bypassing protections that free privacy tools could have provided. These issues exemplify the "enshittification" trend where cost-cutting under private equity ownership sacrifices essential security practices. Consequently, users are rapidly migrating to cheaper, more secure alternatives like Cloudflare, Porkbun, and Gandi, signaling a market shift away from traditional high-markup registrars toward those prioritizing robust security.

素のC++で500行だけで実現するソフトレNDERING | そっか~ニュース