シェーダー (makingsoftware.com) 1 ポイント 投稿者 GN⁺ 2025-11-24 | 1件のコメント | WhatsAppで共有 関連記事 (sim) Sphereのためのシェーダー作成 1 ポイント · 0件のコメント · 2023-12-01 シェーダーのインタラクティブな入門 2 ポイント · 1件のコメント · 2023-10-27 シェーダーの本(未完成) 9 ポイント · 0件のコメント · 2025-02-06 WebGL2 基礎 - 最初から最後まで [韓国語] 35 ポイント · 0件のコメント · 2023-02-28 1件のコメント GN⁺ 2025-11-24 Hacker Newsの意見 記事は興味深かったが、図で OpenGL / WebGL / WebGPU が Vulkan の上に構築されているかのように表現されていた部分は誤りだと思う WebGL と WebGPU は Vulkan を経由せず、直接 D3D と Metal の上で動作する また Vulkan は オープンソースではなく標準 である WebGPU はブラウザ専用でもなく、C++向けの Dawn、Rust向けの WGPU ライブラリとしても提供されており、Windows、macOS、Linux、iOS、Android などで実行できる Vulkan は DirectX よりやや多くのプラットフォームで動作するが、Windows の標準構成には含まれず、macOS や iOS では動作しない Vulkan はオープンソースではなく オープン標準 だという点を補足したい 実装は各ハードウェアベンダーが担当しており、Vulkan 自体は単なるヘッダーファイルにすぎない また MoltenVK や KosmicKrisp のような Vulkan-to-Metal 変換レイヤーを通じて、Apple プラットフォームでも十分に動作する Vulkan は完全にクロスプラットフォームではないが、DirectX よりはるかに広い範囲をサポートしている DirectX は Windows と Xbox、Vulkan は Linux、Android、Windows、Nintendo Switch、Switch 2 などで利用できる WebGPU は各プラットフォームのネイティブ API(DirectX、Vulkan、Metal)の上にある 統合 API であることにも触れるべきだ Khronos API には多数の 拡張機能 があるが、一部は独自仕様なので移植性が低い PlayStation は Vulkan をサポートしておらず、Switch では OpenGL/Vulkan ではなく主に NVN が使われている Vulkan が Windows で動作するというだけでも、DirectX より汎用的だと思う 一部の Linux の VNC 環境で Vulkan が使えないとしても、それは一般的なケースではない ほとんどのユーザーは GPU ドライバ経由で Vulkan のサポートを受けられるからだ このウェブサイトの コースの品質 には驚かされた 本が予約販売の形でも出るなら、プロジェクトを支援したいと思うほどだ 最初の記事から追っているが、記事を読むたびにますます感心している シェーダーを試してみたいなら、次の IDE を勧めたい shadertoy – ブラウザベースで最も手軽かつ人気がある Shadron – 使い勝手が良く個人的には好みだが、ややマイナー SHADERed – UX に慣れるまで時間はかかるが、機能は十分 KodeLife – 名前は聞いたことがあるが、自分ではまだ使っていない Cables(cables.gl) もかなり良い Kirell Benzi の印象的な作品がある Mint のソフトウェアマネージャーで wgshadertoy を見つけた flatpak、AUR、macports、Windows などさまざまなプラットフォームに対応している macOS や iPadOS では Playgrounds で Metal シェーダーを手軽に始められる デモシーンのシェーダー・ライブコーディング大会で使われる Bonzomatic もある プログラミングとは、結局のところ人間が理解したことをコンピューターに理解できる形へ変換する過程だ だが GPU プログラミング はその難易度がはるかに高い 多くの落とし穴、ハードウェアとソフトウェアの不一致、デバッグツールの不足などにより、開発体験は非常に厳しい コミュニティにこの問題を改善しようという意志があまり感じられないのも残念だ OpenGL と DirectX 12 以前のバージョンはハードウェアの詳細を抽象化しようとしたが、結果的に 抽象化がむしろ有害だった フラグメントシェーダーを書くときに最も 直感に反する部分 は、座標を受け取って色を出力するという発想だ ペンで絵を描くのとは違い、シェーダーは各ピクセルの位置を計算して色を決める オブジェクトを動かすのではなく、空間を操作する 形で考える必要がある 頂点シェーダーは三角形の位置を出力するので、より自然に感じられる フラグメントシェーダーを濫用するときだけ非直感的に感じる 実際にはテクスチャサンプリングやライティング計算など、レンダリングパイプラインの最後の段階 を担うものだ PBR や遅延レンダリングでは大半が共通シェーダーを共有し、特殊効果だけをカスタムする これはシェーダー自体の問題ではなく、ラスタ vs ベクターグラフィックス の違いとして捉えるべきだ シェーディングは輪郭線を描くことではなく、物理ベースの材質を表現する過程だ 絵画はシェーディングに近いが、ペンドローイングはそうではない 長方形を描くためにフラグメントシェーダーを使うのは誤ったアプローチだ シェーダーは長方形を シェーディングする ためのものだ 実際には頂点シェーダーが境界を定義し、フラグメントシェーダーが内部を埋める 教育目的では頂点シェーダーを省略し、フルスクリーンをフラグメントシェーダーで埋めることもある GPU コードを学ぶうえで最もつらいのは、初期設定が複雑で難解 なことだ データフォーマット、変換の順序、CPU-GPU 間の境界など、概念が難しくドキュメントも不足している GPU のグローバル変数システムも混乱しやすい 自分も同じ疑問が多かったので、WebGL 学習用にブログ記事を書いた Barebones WebGL in 75 lines, Barebones 3D rendering with WebGL Vulkan には WebGL よりはるかに多くの ボイラープレートコード が必要になる 質問の一部は GPU 自体というより API 設計 に関するものだ GPU は SIMT 構造なので、データアクセスの一貫性が重要になる 変換は各スレッド内で順次適用され、CPU-GPU 間の境界は性能予算に応じて何度もまたげる グローバル変数は uniform のように各スレッドへ同一に渡される定数の概念だ CUDA では atomic 演算によってグローバルアクセスが可能だが、性能低下が大きい WebGL の入門コースは良い出発点になるだろう サイトの完成度が驚くほど高い ダイアグラム、スクロールバー、スタイルのどれも素晴らしい シェーダーは GPU より先に登場しており、CPU 上でも実行できる GPU の核心は SIMT/SIMD 実行モデル にあり、シェーダーは本質的に コールバック関数 の概念だ CPU と同じ逐次的な思考で書ける点が、シェーダーの単純さと優雅さを生んでいるのだと思う すべてのイラストが Figma で制作されている点が特に印象的だ フィードバックが素晴らしいという返信を残した 作品は本当に美しく、完成度が高い 100% 同感。ちなみにこのサイトが Next.js で作られたカスタムアプリなのか気になる 素晴らしい仕事だった。見ていてずっと楽しかった Iñigo Quilez の動画 “This painting is a mathematical formula” を勧めたい 各ピクセルの x, y 座標を関数として表すシェーダーの概念をよく示している
1件のコメント
Hacker Newsの意見
WebGL と WebGPU は Vulkan を経由せず、直接 D3D と Metal の上で動作する
また Vulkan は オープンソースではなく標準 である
WebGPU はブラウザ専用でもなく、C++向けの Dawn、Rust向けの WGPU ライブラリとしても提供されており、Windows、macOS、Linux、iOS、Android などで実行できる
Vulkan は DirectX よりやや多くのプラットフォームで動作するが、Windows の標準構成には含まれず、macOS や iOS では動作しない
実装は各ハードウェアベンダーが担当しており、Vulkan 自体は単なるヘッダーファイルにすぎない
また MoltenVK や KosmicKrisp のような Vulkan-to-Metal 変換レイヤーを通じて、Apple プラットフォームでも十分に動作する
DirectX は Windows と Xbox、Vulkan は Linux、Android、Windows、Nintendo Switch、Switch 2 などで利用できる
PlayStation は Vulkan をサポートしておらず、Switch では OpenGL/Vulkan ではなく主に NVN が使われている
一部の Linux の VNC 環境で Vulkan が使えないとしても、それは一般的なケースではない
ほとんどのユーザーは GPU ドライバ経由で Vulkan のサポートを受けられるからだ
本が予約販売の形でも出るなら、プロジェクトを支援したいと思うほどだ
最初の記事から追っているが、記事を読むたびにますます感心している
Kirell Benzi の印象的な作品がある
flatpak、AUR、macports、Windows などさまざまなプラットフォームに対応している
だが GPU プログラミング はその難易度がはるかに高い
多くの落とし穴、ハードウェアとソフトウェアの不一致、デバッグツールの不足などにより、開発体験は非常に厳しい
コミュニティにこの問題を改善しようという意志があまり感じられないのも残念だ
ペンで絵を描くのとは違い、シェーダーは各ピクセルの位置を計算して色を決める
オブジェクトを動かすのではなく、空間を操作する 形で考える必要がある
頂点シェーダーは三角形の位置を出力するので、より自然に感じられる
実際にはテクスチャサンプリングやライティング計算など、レンダリングパイプラインの最後の段階 を担うものだ
PBR や遅延レンダリングでは大半が共通シェーダーを共有し、特殊効果だけをカスタムする
シェーディングは輪郭線を描くことではなく、物理ベースの材質を表現する過程だ
絵画はシェーディングに近いが、ペンドローイングはそうではない
シェーダーは長方形を シェーディングする ためのものだ
教育目的では頂点シェーダーを省略し、フルスクリーンをフラグメントシェーダーで埋めることもある
データフォーマット、変換の順序、CPU-GPU 間の境界など、概念が難しくドキュメントも不足している
GPU のグローバル変数システムも混乱しやすい
Barebones WebGL in 75 lines,
Barebones 3D rendering with WebGL
Vulkan には WebGL よりはるかに多くの ボイラープレートコード が必要になる
GPU は SIMT 構造なので、データアクセスの一貫性が重要になる
変換は各スレッド内で順次適用され、CPU-GPU 間の境界は性能予算に応じて何度もまたげる
グローバル変数は uniform のように各スレッドへ同一に渡される定数の概念だ
CUDA では atomic 演算によってグローバルアクセスが可能だが、性能低下が大きい
WebGL の入門コースは良い出発点になるだろう
ダイアグラム、スクロールバー、スタイルのどれも素晴らしい
シェーダーは GPU より先に登場しており、CPU 上でも実行できる
GPU の核心は SIMT/SIMD 実行モデル にあり、シェーダーは本質的に コールバック関数 の概念だ
CPU と同じ逐次的な思考で書ける点が、シェーダーの単純さと優雅さを生んでいるのだと思う
各ピクセルの x, y 座標を関数として表すシェーダーの概念をよく示している