Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
Search
Cygames, Inc.
PRO
August 02, 2026
Technology
410
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
2026/07/24 CEDEC2026
Cygames, Inc.
PRO
August 02, 2026
More Decks by Cygames, Inc.
See All by Cygames, Inc.
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
4
27k
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
1.2k
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
3
1.3k
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
2
2.1k
【CEDEC2026】派手さと見やすさは両立できる!『Shadowverse: Worlds Beyond』エフェクト・3D背景の超進化したビジュアル設計
cygames
PRO
1
1.9k
【CEDEC2026】『Shadowverse: Worlds Beyond』続編開発におけるUIデザイン・アニメーション演出の「超進化」 ~継承と挑戦を両立するデザイン手法~
cygames
PRO
3
5.2k
【CEDEC2026】『Relink』を拡張せよ - 『GRANBLUE FANTASY: Relink - Endless Ragnarok』の開発速度と品質を守るCI運用
cygames
PRO
1
280
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
2
470
【CEDEC2026】アートとゲームデザインをつなぐVFX設計『GRANBLUE FANTASY: Relink - Endless Ragnarok』における表現と可読性の両立
cygames
PRO
1
1.3k
Other Decks in Technology
See All in Technology
「図書館」という名前のままでいいのか -Code4Lib JAPANカンファレンス2026 アンカンファレンス報告- / Code4Lib JAPAN Conference 2026: Unconference Report
ykiyota
0
160
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
130
GoCon2026 - Open Source, Open World
sanposhiho
4
3.2k
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
580
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
4
2k
ASTを使って影響範囲を特定する
nealle
0
160
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
2.6k
omasushiというライブラリを作った
polidog
PRO
0
200
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/6 - 2026/8
oracle4engineer
PRO
0
160
20260912_スクラムにジェネラリストは必要か
ryugen04
0
350
2026_devsumi_ozono.pdf
o3
2
390
Featured
See All Featured
Faster Mobile Websites
deanohume
310
32k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
720
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
520
Music & Morning Musume
bryan
47
7.4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
330
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
RailsConf 2023
tenderlove
30
1.5k
Building an army of robots
kneath
306
46k
The Curious Case for Waylosing
cassininazir
1
500
A designer walks into a library…
pauljervisheath
211
25k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
350
Transcript
エンジニアリング グラフィックスエンジニアのための ニューラルシェーディング入門 株式会社Cygames Cyllista Game Engine サブマネージャー / 林
秀一 1 /95
自己紹介 Cyllista Game Engine サブマネージャー リードグラフィックスエンジニア 林 秀一 いくつかのゲーム会社を経て、2015年に株式会社Cygamesへ合流。 内製ゲームエンジンの開発においてリードグラフィックスエンジニアを
務める。 加えて、既成エンジンを用いたプロジェクトでのグラフィックス分野に おけるテクニカルディレクション、各種カンファレンスでのグラフィックス 技術情報の収集・共有、グラフィックスエンジニアの育成など 一貫してゲームグラフィックス領域に携わる。 2 /95
はじめに 3 /95
本講演のきっかけとなったSIGGRAPH講演 “An Introduction to Neural Shading” SIGGRAPH2025のコース 本講演 = An
Introduction to NeuralShading のエッセンス +𝜶 [SIGG25-NSC] 4 /95
本講演の内容 元の講演を踏襲した部分: ◆ ニューラルネットワークの基礎説明 ◆ ニューラルシェーダによる画像生成例、等 重要ポイントを抜粋した部分: ◆ ニューラルシェーダの先行事例 ◆
数式による理論説明 ◆ サンプルプログラムの解説 追加した説明: ◆ ニューラルネットワーク処理の直感的な図解 ◆ 図解と計算式の対応 特に基本的な部分 にフォーカス ポイントを大胆に 絞ってご紹介 本講演の特徴的な 部分 5 /95
本講演聴講のコツ ◆ 初めてこのトピックに触れる場合 短時間で深く理解するのは難しいかもしれません ◆ 可能な限り要点を把握いただけるように努めましたが 情報量が多く、説明のペースが速めです ◆ この時間では、概要の理解・直感的な理解・ポイントの理解を 目指していただければ幸いです
◆ 数式やプログラムコードの詳細な説明は スライド末のリファレンス資料を本資料と合わせてご参照ください 6 /95
アジェンダ 1. 2. 3. 4. 5. 6. 7. 8. ニューラルシェーディングとは
先行事例 ニューラルネットワークと推論計算 画像近似の例 近似のプロセス ニューラルネットワークの学習 ニューラルシェーダの実装 まとめ 7 /95
ニューラルシェーディングとは 8 /95
ニューラルシェーディングとは ◆ ニューラルネットワークをシェーダ として実行 ◆ グラフィックス、コンピュート パイプラインで動作 ◆ トレーニング可能な処理なら適用可能 ◆
相対的に軽量な近似を実現 Neural Shader ◆ GPUのAI向けアクセラレータを利用可能 9 /95
なぜニューラルシェーディングなのか? 1フレームに使える時間 データ量 アルゴリズムの複雑さ ハードウェア性能 固定 急激に増大 増大 常に不足気味 10
/95
なぜニューラルシェーディングなのか? 1フレームに使える時間 データ量 アルゴリズムの複雑さ ハードウェア性能 固定 より効率の良い圧縮 より高品質で軽量な近似 AI向けHW活用 シェーダ技術進化の変遷
High Level Shading Language Geometry Shader Compute Shader Ray Tracing Neural Shader 11 /95
先行事例 12 /95
先行事例 ◆ニューラルテクスチャ圧縮 ◆ニューラルマテリアル ◆ニューラルベイクGI 13 /95
ニューラルテクスチャ圧縮 Latent Texture Neural Shader 「意味」や「構造」を表す圧縮表現 学習によって作られる PBR Texture Set
複数のPBR値を一度に出力 [HOUD24] [NVIDIA-NTC] [VAID23] [FUJI24] [INTEL-TSNC] 参照 14 /95
ニューラルテクスチャ圧縮 ◆データ量 ◼ 30~80%削減 ◼ 品質と削減率を容易にトレードオフ可能 ◆パフォーマンス ◼ 1.5倍程度のテクスチャサンプル処理時間 ◼
CoopVec API (後述)により、負荷削減の可能性 ◼ ロード時に1度だけ展開でもOK ※数値は各社の資料から読み取った概算です。 15 /95
ニューラルマテリアル ※本画像はレンダリング結果ではなく、 イメージを持っていただくための写真です。 Latent Texture 𝜔i 𝜔o 入射/反射方向 Neural Shader
BRDF [ZELT24] 参照 16 /95
ニューラルベイクGI ◆Neural Light Grid: Modernizing Irradiance Volumes with Machine Learning
[IWAN24] ◆Global Illumination In “Once Human”: A Hybrid Approach for 16km Open World [PAN25] ◆Decoding Light: Neural Compression of Global Illumination [CAO25] 17 /95
ニューラルベイクGI (プローブベース) Image: Inigo Quilez (Wikimedia Commons), CC BY-SA 3.0
時刻 ワールド位置 Neural Shader GI SH係数 5^3 Probe Brick内 の Irradiance算出 Neural Shader インドアウェイト インドア判定 18 /95
ニューラルベイクGI (プローブベース) ◆データ量 ◼ <800MB, 16km2, Time of Day ◼
98.5% 以上の削減 ◆パフォーマンス ◼ 50μsで12500プローブ解凍 @GTX1060 19 /95
ニューラルネットワークと推論計算 20 /95
ニューラルネットワークとは MLP: 多層パーセプトロン 出力[0] 入力[0] 出力[1] 入力 [1] 出力[2] 21
/95
ニューラルネットワークとは 入力層 隠れ層 出力層 22 /95
ニューラルネットワークとは レイヤー0 レイヤー1 レイヤー2 ニューロン列の間 の計算を 「レイヤー」 「層」 と呼ぶこともある ので注意!
23 /95
順伝搬(フォワードプロパゲーション) 計算結果を用いて、最終的な「推論」の答えを出す 値を用いた 追加処理 推論の答え 24 /95
ニューロンの値 右上の括弧の中が、列(レイヤー)インデックス (0) 𝑎0 (0) 𝑎1 (1) 𝑎0 (2) 𝑎0
(1) 𝑎1 (2) 𝑎1 (1) 𝑎2 (2) 𝑎2 (1) 𝑎3 (2) 𝑎3 (3) 𝑎0 (3) 𝑎1 (3) 𝑎2 25 /95
ニューロンひとつ分の計算 (0) 𝑎0 (0) 𝑎1 𝑤0 𝑤1 𝑤2 (0) 𝑎2
1 𝑏 𝑧 = 𝑤0 𝑎0 + 𝑤1 𝑎1 + 𝑤2 𝑎2 + 𝑏 a = Activation(𝑧) (1) 𝑎0 𝒘: ウェイト、𝒃: バイアス この2つを合わせて ネットワークパラメータと呼ぶ。 26 /95
活性化関数 (0) 𝑎0 (0) 𝑎1 𝑤0 𝑤1 𝑤2 (0) 𝑎2
𝑏 𝑧 = 𝑤0 𝑎0 + 𝑤1 𝑎1 + 𝑤2 𝑎2 + 𝑏 a = Activation(𝑧) (1) 𝑎0 Activation: 活性化関数 非線形性を取り入れる。 1 27 /95
ReLU活性化関数 (0) 𝑎0 (0) 𝑎1 𝑤0 𝑤1 𝑤2 (0) 𝑎2
𝑧 = 𝑤0 𝑎0 + 𝑤1 𝑎1 + 𝑤2 𝑎2 + 𝑏 a = ReLU(𝑧) (1) 𝑎0 𝑏 1 28 /95
ReLU活性化関数 (0) 𝑎0 (0) 𝑎1 𝑤0 𝑤1 𝑤2 (0) 𝑎2
𝑧 = 𝑤0 𝑎0 + 𝑤1 𝑎1 + 𝑤2 𝑎2 + 𝑏 a = max(0, 𝑧) (1) 𝑎0 𝑏 1 29 /95
順伝搬の行列計算 (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 𝑤0,1 (1) 0
𝑎0 = 𝜙(𝑤0,0 𝑎0 0 + 𝑤0,1 𝑎1 0 + ⋯ + 𝑤0,𝑛 𝑎𝑛 ( 𝑤0,0 ( 𝑤1,0 ( 𝑤0,1 ( 𝑤1,1 ( 𝑤0,𝑛 ( 𝑤1,𝑛 (0) 𝑎0 0 𝑎1 ⋮ ( 𝑤𝑘,0 ⋮ ( 𝑤𝑘,1 ⋮ ⋮ ( 𝑤𝑘,𝑛 (0) 𝑎𝑛 + 𝑏0 ) 𝑤0,2 𝑤0,3 … (0) 𝑎3 𝑤0,0 Activation 𝑤0,𝑛 … =𝜙 (0) 𝑎𝑛 ⋯ ⋯ ⋱ ⋯ + ( 𝑏0 ( 𝑏1 ⋮ ( 𝑏𝑘 𝑏0 30 /95
順伝搬の行列計算 (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 𝑤1,0 𝑤1,1 (1)
0 𝑎1 = 𝜙(𝑤1,0 𝑎0 0 + 𝑤1,1 𝑎1 0 + ⋯ + 𝑤1,𝑛 𝑎𝑛 ( 𝑤0,0 ( 𝑤1,0 ( 𝑤0,1 ( 𝑤1,1 ( 𝑤0,𝑛 ( 𝑤1,𝑛 (0) 𝑎0 0 𝑎1 ⋮ ( 𝑤𝑘,0 ⋮ ( 𝑤𝑘,1 ⋮ ⋮ ( 𝑤𝑘,𝑛 (0) 𝑎𝑛 + 𝑏1 ) 𝑤1,2 𝑤1,3 … (0) 𝑎3 Activation 𝑤1,𝑛 … (0) 𝑎𝑛 =𝜙 ⋯ ⋯ ⋱ ⋯ + ( 𝑏0 ( 𝑏1 ⋮ ( 𝑏𝑘 𝑏1 31 /95
順伝搬の行列計算 (0) 𝑎0 Activation (0) 𝑎1 (1) 0 𝑎𝑘 =
𝜙(𝑤2,0 𝑎0 (0) 𝑎2 0 + 𝑤2,1 𝑎1 0 + ⋯ + 𝑤2,𝑛 𝑎𝑛 ( 𝑤0,0 ( 𝑤1,0 ( 𝑤0,1 ( 𝑤1,1 ( 𝑤0,𝑛 ( 𝑤1,𝑛 (0) 𝑎0 0 𝑎1 ⋮ ( 𝑤𝑘,0 ⋮ ( 𝑤𝑘,1 ⋮ ⋮ ( 𝑤𝑘,𝑛 (0) 𝑎𝑛 + 𝑏𝑘 ) 𝑤2,0 𝑤2,1 𝑤2,2 … 𝑤2,3 (0) 𝑎𝑛 𝑤2,𝑛 … (0) 𝑎3 =𝜙 ⋯ ⋯ ⋱ ⋯ + ( 𝑏0 ( 𝑏1 ⋮ ( 𝑏𝑘 𝑏𝑘 32 /95
順伝搬の行列計算 (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 … (0) 𝑎𝑛
𝒂(1) = 𝜙(𝑴𝒂(0) + 𝒃) (0) 𝑎1 (0) 𝑎2 … (0) 𝑎3 (0) 𝑎0 (0) 𝑎𝑘 (1) 𝑎0 1 𝑎1 =𝜙 ⋮ (1) 𝑎𝑘 ( 𝑤0,0 ( 𝑤1,0 ( 𝑤0,1 ( 𝑤1,1 ⋮ ( 𝑤𝑘,0 ⋮ ( 𝑤𝑘,1 ⋯ ⋯ ⋱ ⋯ ( 𝑤0,𝑛 ( 𝑤1,𝑛 (0) 𝑎0 0 𝑎1 ⋮ ⋮ ( 𝑤𝑘,𝑛 (0) 𝑎𝑛 + ( 𝑏0 ( 𝑏1 ⋮ ( 𝑏𝑘 33 /95
画像近似の例 34 /95
画像をニューラルネットワーク化 R U G V B 35 /95
UVから画像を出力するNN 正解画像 ReLU Sigmoid 36 /95
UVから画像を出力するNN 16 ニューロン 32 ニューロン 64 ニューロン 32 ニューロン 3
レイヤー 3 レイヤー 3 レイヤー 4 レイヤー 37 /95
Frequency Encoding sin(u), cos(u), sin(v), cos(v) U sin(2u), cos(2u), sin(2v),
cos(2v) sin(4u), cos(4u), sin(4v), cos(4v) V 入力ニューロン を増やす sin(8u), cos(8u), sin(8v), cos(8v) 38 /95
Frequency Encoding 正解画像 入力32ニューロン Frequency Encoding 使用 入力2ニューロン (比較用) 39
/95
Latent Texture 正解画像 Latent Texture 利用 Latent Texture 40 /95
Latent Texture 値の意味が学習によって自律的に決まるため 実行のたびに内容が変化 41 /95
近似のプロセス 42 /95
非線形性 非線形 線形 折れ線、曲線 直線 (1) 0 𝑎𝑘 = 𝜙(𝑤𝑘,0
𝑎0 0 + 𝑤𝑘,1 𝑎1 0 + ⋯ + 𝑤𝑘,𝑛 𝑎𝑛 + 𝑏𝑘 ) 43 /95
線形関数にReLU適用 (𝟎) 𝐳 = 𝒘𝒂 + 𝒃 𝒂 (𝟏) =
𝒎𝒂𝒙(𝟎, 𝒛) 平地 上り坂 下り坂 平地 ゼロ未満がなくなる 44 /95
ReLUの後、線形変換 𝒂 (𝟏) 𝐳 = 𝒘𝒂 + 𝒃 = 𝒎𝒂𝒙(𝟎,
𝒛) 平地 下り坂 −𝑎 平地 −3𝑎 + 2 +傾きを急に −𝑎 上り坂 −0.3𝑎 − 1 +傾きを緩やかに 下り坂 上り坂 平地 平地 45 /95
線形変換 ReLU 𝑤𝑎 + 𝑏 線形変換 ReLU … 𝑤𝑎 +
𝑏 … 46 /95
3次関数の近似例 (0) 𝑎0 (0) (0) (0) 𝑤0 𝑎0 + 𝑏0
(1) 𝑎0 (1) (1) (1) 𝑤0 𝑎0 + 𝑏0 (0) (0) (0) 𝑤1 𝑎1 + 𝑏1 𝑎1 (1) (1) (1) (1) 𝑤1 𝑎1 + 𝑏1 (0) (0) (0) 𝑤2 𝑎2 + 𝑏2 (1) 𝑎2 𝑤2 𝑎2 + 𝑏2 (0) (0) (0) 𝑤3 𝑎3 + 𝑏3 (1) 𝑎3 (1) (1) (1) (1) (1) (1) + 𝑓 𝑤3 𝑎3 + 𝑏3 47 /95
3次関数の近似例 (0) 𝑎0 (0) (0) (0) 𝑤0 𝑎0 + 𝑏0
(1) 𝑎0 (1) (1) (1) 𝑤0 𝑎0 + 𝑏0 (0) (0) (0) 𝑤1 𝑎1 + 𝑏1 (1) 𝑎1 𝑤1 𝑎1 + 𝑏1 (0) (0) (0) 𝑤2 𝑎2 + 𝑏2 (1) 𝑎2 𝑤2 𝑎2 + 𝑏2 (0) (0) (0) 𝑤3 𝑎3 + 𝑏3 (1) 𝑎3 𝑤3 𝑎3 + 𝑏3 (1) (1) (1) (1) (1) (1) (1) (1) (1) + 𝑓 48 /95
線形変換 ReLU 線形変換 ReLU … ニューラルネットワークは ◆ 行列とベクトルを用いて計算できる ◆ 近似精度と計算負荷のトレードオフがしやすい
ニューロンの数、レイヤーの数 ◆ 非線形の複雑な関数を近似できる いくつか条件はあるが、近似可能なケースは多い。 49 /95
ニューラルネットワークの学習 50 /95
学習ループ 推論結果 U 正解画像 差分画像 R G V B ①推論
(描画) ②差分 バイアスと ウェイトの勾配 バイアスと ウェイトの調整量 −0. 73 +0.06 −∇𝐶 𝑾 = ⋮ ⑤バイアス、 −0.24 ウェイトを更新 ④調整量算出 ③勾配算出 51 /95
ネットワークパラメータの増減と勾配 52 /95
パラメータの影響 R 𝑤 𝑤 𝑏𝑗 53 /95
パラメータの影響 R 𝑤 𝑤 𝑏𝑗 54 /95
勾配降下法(Gradient Descent) 正解との差 𝐶 𝑤 𝑤 個別のパラメータ 55 /95
ニューラルネットワークは合成関数 L k 𝑤0,0 𝑎0 L k + 𝑤0,1 𝑎1
L + 𝑏0 (𝑘) 𝑎0 = 𝜙 j k 𝑤0,0 𝑎0 j k + 𝑤0,1 𝑎1 j k + 𝑤0,2 𝑎1 (j) 𝑎0 = 𝜙 𝑗 i 𝑤0,0 𝑎0 j i + 𝑤0,1 𝑎1 j + 𝑏0 (𝐿) 𝑎0 (𝑗) 𝑎0 … (L) 𝑎0 = 𝜙 (𝑘) 𝑎0 k + 𝑏0 … 連鎖律: 𝑓 𝑔 ℎ(𝑥) 𝑑𝑓 𝑑𝑓 𝑑𝑔 𝑑ℎ という合成関数の場合、 = ∙ ∙ 𝑑𝑥 𝑑𝑔 𝑑ℎ 𝑑𝑥 56 /95
正解に近づけるには? Rを上げたい! R U U U V V G V
B シアン 赤 推論結果 正解 G,Bを下げたい! 57 /95
バイアスの増減 R Rを上げたい! バイアスはRに直接加算 されるので、上げればOK 𝑏𝑗 58 /95
ウェイトの増減 ニューロンの値が 高いほど… 0.3 1.0 -1.0 ニューロンの値が 低いほど… -0.7 𝑤0
ウェイトを上げるべき 𝑤1 R 𝑤2 𝑤3 Rを上げたい! ウェイトを下げるべき 𝑤4 0.8 𝑏𝑗 59 /95
入力ニューロン値の増減 ウェイトが高いほど… 値を上げるべき R 1.43 Rを上げたい! -0.92 値を下げるべき ウェイトが低いほど… 𝑏𝑗
60 /95
入力ニューロン値の増減 R Rを上げたい! 61 /95
入力ニューロン値の増減 + + R + G Gを下げたい! + + 62
/95
入力ニューロン値の増減 + + + + R + + G +
+ B Bを下げたい! + + 63 /95
入力ニューロン値の増減 + + + + R + + G +
+ B + + トータルの増減 64 /95
誤差逆伝搬法(Back Propagation) 𝑤 𝑤 … 𝑤 𝑤 𝑏 𝑤 𝑏
𝑤 𝑏 𝑏 𝑏 𝑤 65 /95
勾配の計算式 66 /95
線形部分の勾配 (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 … (0) 𝑎𝑛
(1) 𝑎0 (1) 𝑎1 (1) 𝑎2 𝑑𝒛(1) 活性化後の勾配を 活性化前の勾配に変換 𝑑𝒛(1) = 𝑑𝒂(1) ⨀ 𝜙 ′ 𝒛 1 … (0) 𝑎3 𝑑𝒂(1) (1) 𝑎𝑘 67 /95
バイアスの勾配 (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 𝑑𝒃(1) 𝑏0 (1)
𝑎0 𝑏1 (1) 𝑎1 𝑏2 (1) 𝑎2 … (0) 𝑎3 … (0) 𝑎𝑛 𝑑𝒛(1) 𝑏𝑘 (1) 𝑎𝑘 (1) 𝑑𝒃 (1) 𝑑𝑏0 1 𝑑𝑏1 ⋮ (1) 𝑑𝑏𝑘 = 𝑑𝒛 = (1) (1) 𝑑𝑧0 1 𝑑𝑧1 ⋮ (1) 𝑑𝑧𝑘 68 /95
ウェイトの勾配 𝒂(0) (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 (1) 𝑎0
… (1) 𝑎1 … (1) 𝑎2 … … … … (0) 𝑎𝑛 𝑑𝒛(1) … … … (0) 𝑎3 𝑑𝑴(1) (1) 𝑎𝑘 𝑑𝑴(1) = 𝑑𝒛(1) ⊗𝑜𝑢𝑡𝑒𝑟 𝒂(0) = 𝑑𝒛 1 (𝒂 0 )𝑇 (1) 𝑑𝑤0,0 (1) 𝑑𝑤1,0 (1) 𝑑𝑤0,1 (1) 𝑑𝑤1,1 ⋮ (1) 𝑑𝑤𝑘,0 ⋮ (1) 𝑑𝑤𝑘,1 ⋯ ⋯ ⋱ ⋯ (1) 𝑑𝑤0,𝑛 (1) 𝑑𝑤1,𝑛 ⋮ (1) 𝑑𝑤𝑘,𝑛 = (1) 𝑑z0 1 𝑑z1 (0) 𝑇 𝑎0 0 𝑎1 ⋮ ⋮ (1) (0) 𝑑z𝑘 𝑎𝑛 69 /95
ニューロンの勾配 𝑑𝒂(0) (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 … (0)
𝑎𝑛 𝑤0,0 𝑤1,0 𝑤2,0 𝑤𝑘,0 𝑑𝒂(0) = 𝑴𝑇 𝑑𝒛(1) (1) 𝑎0 (1) 𝑎1 (1) 𝑎2 … (0) 𝑎3 𝑑𝒛(1) (1) 𝑎𝑘 (0) 𝑑𝑎0 0 𝑑𝑎1 ⋮ (0) 𝑑𝑎𝑛 = (1) 𝑤0,0 (1) 𝑤1,0 (1) 𝑤0,1 (1) 𝑤1,1 ⋮ ⋮ (1) 𝑤𝑘,0 (1) 𝑤𝑘,1 ⋯ ⋯ ⋱ ⋯ (1) 𝑇 𝑤0,𝑛 (1) 𝑤1,𝑛 ⋮ (1) 𝑤𝑘,𝑛 (1) 𝑑𝑧0 1 𝑑𝑧1 ⋮ (1) 𝑑𝑧𝑘 70 /95
学習アルゴリズムのまとめ ◆ 学習では、推論を行い、結果と正解を比較し、勾配を算出し 勾配に基づいてパラメータを増減する処理を繰り返す ◆ 勾配を元にパラメータを増減する方法を、勾配降下法という ◆ ニューラルネットワークは合成関数であり、連鎖律によって どのレイヤーの、どのパラメータに対しても勾配を求めることができる ◆
勾配には、バイアスの勾配・ウェイトの勾配・ニューロンの勾配、の 3種類がある ◆ 勾配は、行列・ベクトル演算で算出できる 71 /95
ニューラルシェーダの実装 72 /95
Slang & SlangPy 73 /95
Slang/SlangPy SlangPy ◼ 高機能なシェーダ言語 ◼ マルチプラットフォーム ◼ オープンソース ◼ HLSLとほぼ同様の基本構文
◼ モダンな言語機能 ◼ インターフェース ◼ ジェネリクス ◼ モジュールシステム ◼ Slang向け Pythonインターフェース ◆ Slangシェーダ関数をPythonから 直接的に呼出し可能 ◆ 非常にシンプルなコードで データバインディング可能 ◼ フル機能のグラフィックスAPI ◼ クロスプラットフォーム ◼ 自動微分 74 /95
パラメータバインディング Slang Python class NetworkLayer(spy.InstanceList): def __init__(…): … self.biases =
… self.weights = … self.biases_grad = … self.weights_grad = … … class Network(spy.InstanceList): def __init__(self): … self.layer0 = NetworkParameters(2, 32) self.layer1 = NetworkParameters(32, 32) self.layer2 = NetworkParameters(32, 3) ・バイアス ・ウェイト ・勾配 同名の変数に バインド 3レイヤー 保持 struct NetworkLayer<int Inputs, int Outputs> { … Tensor<float, 1> biases; Tensor<float, 2> weights; AtomicTensor<float, 1> biases_grad; AtomicTensor<float, 2> weights_grad; … } struct Network { … NetworkParameters<2, 32> layer0; NetworkParameters<32, 32> layer1; NetworkParameters<32, 3> layer2; } 75 /95
順伝搬計算 mul(weights, inputVec) + biases float[Outputs] forward(float[Inputs] x) { float[Outputs]
y; for (int row = 0; row < Outputs; ++row) { var sum = get_bias(row); for (int col = 0; col < Inputs; ++col) sum += get_weight(row, col) * x[col]; y[row] = sum; } return y; } ( 𝑤0,0 ( 𝑤1,0 ( 𝑤0,1 ( 𝑤1,1 ⋮ ( 𝑤𝑘,0 ⋮ ( 𝑤𝑘,1 ⋯ ( 𝑤0,𝑛 ( 𝑤1,𝑛 ⋯ ⋱ ⋮ ( ⋯ 𝑤𝑘,𝑛 (0) 𝑎0 0 𝑎1 ⋮ (0) 𝑎𝑛 + ( 𝑏0 ( 𝑏1 ⋮ ( 𝑏𝑘 76 /95
ネットワークを通して順伝搬(推論) float3 eval(no_diff float2 uv) { float inputs[2] = {
uv.x, uv.y }; float output0[32] = layer0.forward(inputs); for (int i = 0; i < 32; ++i) output0[i] = activation(output0[i]); Layer 0 float output1[32] = layer1.forward(output0); for (int i = 0; i < 32; ++i) output1[i] = activation(output1[i]); Layer 1 float output2[3] = layer2.forward(output1); for (int i = 0; i < 3; ++i) output2[i] = activation(output2[i]); Layer 2 return float3(output2[0], output2[1], output2[2]); 77 /95
学習ループ(再掲) 推論結果 U 正解画像 差分画像 R G V B ①推論
(描画) ②差分 バイアスと ウェイトの勾配 バイアスと ウェイトの調整量 −0. 73 +0.06 −∇𝐶 𝑾 = ⋮ ⑤バイアス、 −0.24 ウェイトを更新 ④調整量算出 ③勾配算出 78 /95
学習ループ(再掲) 推論結果 U 正解画像 差分画像 R G V ①推論 B
render(…) (描画) バイアスと ウェイトの調整量 −0. 73 +0.06 −∇𝐶 𝑾 = ⋮ ⑤バイアス、 optimizer_step() ④調整量算出 −0.24 ウェイトを更新 loss(…) ②差分 バイアスと ウェイトの勾配 bwd_diff(loss) ③勾配算出 79 /95
自動微分 [SIGG25-NSC] P.35 正解画像と推論結果の 差分を取る loss 推論画像を描画 render ニューラルネットワーク で推論
Network::eval 1レイヤー分の 順伝搬計算 Layer::forward パラメータを 使用 [Differentiable] biases weights 80 /95
自動微分 Slang 自動微分オペレータ bwd_diff(loss) 勾配算出処理 コンパイル時生成 正解画像と推論結果の 差分を取る loss 推論画像を描画
render ニューラルネットワーク で推論 Network::eval 1レイヤー分の 順伝搬計算 Layer::forward 勾配を ストア [BackwardDerivativeOf(…)] biases_grad weights_grad パラメータを 使用 [Differentiable] biases weights 81 /95
バイアス、ウェイト調整(最適化) void optimizer_step(inout float weight, inout float grad) { const
float LEARNING_RATE = 0.1; float step = (grad) * LEARNING_RATE; weight -= step; grad = 0.0f; } 増減量 = 勾配 * 学習率 ウェイト -= 増減量 82 /95
Slang/SlangPyまとめ ◆ ニューラルネットワークの行列計算を直感的に記述できる ◼ ボイラープレートが非常に少ない ◆ シェーダパラメータのバインディングが非常に楽 ◆ 勾配算出処理が自動生成される 83
/95
Cooperative Vector 84 /95
Cooperative Vector ◆大きなベクトルと行列の乗算を実行 ◆H/Wアクセラレーションが期待できる ◆どのシェーダステージでも利用可能 Shader Model 6.10 (予定) VK_NV_cooperative_vector
Metal 4 Machine Learning 85 /95
順伝搬計算(CoopVec ver.) mul(weights, inputVec) + biases CoopVec<half, Outputs> forward(CoopVec<half, Inputs>
x) { return coopVecMatMulAdd<half, Outputs>( x, CoopVecComponentType.Float16, weights, 0, CoopVecComponentType.Float16, biases, 0, CoopVecComponentType.Float16, CoopVecMatrixLayout.InferencingOptimal, false, 0 ); } ( 𝑤0,0 ( 𝑤1,0 ( 𝑤0,1 ( 𝑤1,1 ⋮ ( 𝑤𝑘,0 ⋮ ( 𝑤𝑘,1 ⋯ ( 𝑤0,𝑛 ( 𝑤1,𝑛 ⋯ ⋱ ⋮ ( ⋯ 𝑤𝑘,𝑛 (0) 𝑎0 0 𝑎1 ⋮ (0) 𝑎𝑛 + ( 𝑏0 ( 𝑏1 ⋮ ( 𝑏𝑘 coopVecMatMulAdd 86 /95
自動微分に頼らない勾配算出 bwd_diff(…) CoopVecを用いたコードには 適用できない! [BackwardDerivativeOf(eval)] public void evalBwd( inout DifferentialPair<MLVec<InputSize>>
input, MLVec<OutputSize> resultGrad) { … … 勾配の算出を行う関数を … … 自前実装する必要がある! … } 87 /95
活性化関数の勾配算出 [BackwardDerivativeOf(eval)] public void evalBwd( inout DifferentialPair<MLVec<InputSize>> input, MLVec<OutputSize> resultGrad)
{ let fwd = eval(input.p); 順伝搬計算 [ForceUnroll] for (int i = 0; i < OutputSize; i++) { if (fwd.data[i] < 0.0) resultGrad.data[i] = 0; } 引数: あるレイヤーの ・入力(前段)ニューロンの値列 ・出力(後段)ニューロンの勾配 活性化後の勾配を 活性化前の勾配に変換 順伝搬の結果が ・ゼロ未満なら勾配 0 ・ゼロ以上なら勾配 1 … } 88 /95
ウェイト、バイアス、ニューロンの勾配算出 [BackwardDerivativeOf(eval)] public void evalBwd( inout DifferentialPair<MLVec<InputSize>> input, MLVec<OutputSize> resultGrad)
{ … coopVecOuterProductAccumulate( resultGrad.data, input.p.data, weightsGrad, …); coopVecReduceSumAccumulate( resultGrad.data, (void*)biasesGrad); } ウェイトの勾配算出 coopVecOuterProductAccumulate バイアスの勾配算出 coopVecReduceSumAccumulate let dInput = coopVecMatMul<NFloat, InputSize>( resultGrad.data, …, weights, …); 入力ニューロンの勾配算出 coopVecMatMul input = {input.p, {dInput}}; 前の層に ニューロンの勾配を逆伝搬 89 /95
ウェイトの勾配 𝒂(0) (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 (1) 𝑎0
… (1) 𝑎1 … (1) 𝑎2 … … … … (0) 𝑎𝑛 𝑑𝒛(1) … … … (0) 𝑎3 𝑑𝑴(1) (1) 𝑎𝑘 ウェイトの勾配算出 coopVecOuterProductAccumulate (1) 𝑑𝑤0,0 (1) 𝑑𝑤1,0 (1) 𝑑𝑤0,1 (1) 𝑑𝑤1,1 ⋮ (1) 𝑑𝑤𝑘,0 ⋮ (1) 𝑑𝑤𝑘,1 ⋯ ⋯ ⋱ ⋯ (1) 𝑑𝑤0,𝑛 (1) 𝑑𝑤1,𝑛 ⋮ (1) 𝑑𝑤𝑘,𝑛 = (1) 𝑑𝑧0 1 𝑑𝑧1 (0) 𝑇 𝑎0 0 𝑎1 ⋮ ⋮ (1) (0) 𝑑𝑧𝑘 𝑎𝑛 90 /95
バイアスの勾配 (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 𝑑𝒃(1) 𝑏0 (1)
𝑎0 𝑏1 (1) 𝑎1 𝑏2 (1) 𝑎2 … (0) 𝑎3 … (0) 𝑎𝑛 𝑑𝒛(1) 𝑏𝑘 (1) 𝑎𝑘 バイアスの勾配算出 coopVecReduceSumAccumulate (1) 𝑑𝑏0 1 𝑑𝑏1 ⋮ (1) 𝑑𝑏𝑘 = (1) 𝑑𝑧0 1 𝑑𝑧1 ⋮ (1) 𝑑𝑧𝑘 91 /95
ニューロンの勾配 𝑑𝒂(0) (0) 𝑎0 (0) 𝑎1 (0) 𝑎2 … (0)
𝑎𝑛 𝑤0,0 𝑤1,0 𝑤2,0 𝑤𝑘,0 (1) 𝑎0 (1) 𝑎1 (1) 𝑎2 … (0) 𝑎3 入力ニューロンの勾配算出 coopVecMatMul 𝑑𝒛(1) (1) 𝑎𝑘 (0) 𝑑𝑎0 0 𝑑𝑎1 ⋮ (0) 𝑑𝑎𝑛 = (1) 𝑤0,0 (1) 𝑤1,0 (1) 𝑤0,1 (1) 𝑤1,1 ⋮ ⋮ (1) 𝑤𝑘,0 (1) 𝑤𝑘,1 ⋯ ⋯ ⋱ ⋯ (1) 𝑇 𝑤0,𝑛 (1) 𝑤1,𝑛 ⋮ (1) 𝑤𝑘,𝑛 (1) 𝑑𝑧0 1 𝑑𝑧1 ⋮ (1) 𝑑𝑧𝑘 92 /95
Slang/CoopVecまとめ ◆基本的なニューラルネットワークの実装はシンプルで ストレートフォワードなコードに落とし込める ◆Slang は多数の長所があるが 特にシェーダコードの自動微分は強力 ◆Slang と SlangPy の組み合わせにより、素早い開発が可能
◆Cooperative Vector により、ニューラルシェーディング関連 処理の大幅な高速化が期待できる 93 /95
全体のまとめ ◆グラフィックスエンジニアが解くべき問題の複雑化と ハードウェアの進化が重なり、ニューラルシェーディングが ゲームタイトルに貢献する時代が到来しています ◆ニューラルネットワークの基礎を理解し、Slang/SlangPy Cooperative Vector に代表される優れたツールセットを 把握してさらなるニューラルシェーディング時代の本格化に 備えましょう
94 /95
95 /95
References [SIGG25-NSC] Nat Duca, Yong He, Benedikt Bitterli, Chris Cummings,
Alexey Bekin, Alexey Panteleev, and Aaron Lefohn. 2025. “An Introduction to Neural Shading.” ACM SIGGRAPH 2025 Courses. ACM DL: https://dl.acm.org/doi/full/10.1145/3721241.3733999 Code/Materials: https://github.com/shader-slang/neural-shading-s25 [BEKIN25] Alexey Bekin, Alexey Panteleev, and Shawn Hargreaves. 2025. “RTX Neural Shading: Practical Techniques and Applications.” Game Developers Conference 2025. Video: https://www.nvidia.com/en-us/on-demand/session/gdc25-gdc1003/ [HARG25] Shawn Hargreaves, Joe Rozek, Anis Benyoub, and Alexey Panteleev. 2025. “Advanced Graphics Summit: Cooperative Vectors and Neural Rendering.” Game Developers Conference 2025. GDC Vault: https://gdcvault.com/play/1035477/Advanced-Graphics-Summit-Cooperative-Vectors [NVIDIA-NS] NVIDIA Corporation. “RTX Neural Shading.” GitHub: https://github.com/NVIDIA-RTX/RTXNS/tree/main 96 /95
References [HOUD24] Antoine Houdard, Georges Nader, and Olivier Pomarez. 2024.
“Machine Learning Summit: Real-time Neural Textures for Materials Compression (With Introduction from Summit Advisor Olivier Pomarez).” Game Developers Conference 2024. GDC Vault: https://gdcvault.com/play/1034439/Machine-Learning-Summit-Real-time [NVIDIA-NTC] NVIDIA Corporation. “RTX Neural Texture Compression (NTC) SDK v0.9.2 BETA.“ GitHub. https://github.com/NVIDIA-RTX/RTXNTC [VAID23] Karthik Vaidyanathan, Marco Salvi, Bartlomiej Wronski, Tomas Akenine-Möller, Pontus Ebelin, Aaron Lefohn. 2023. “Random-Access Neural Compression of Material Textures.” ACM SIGGRAPH 2023. https://research.nvidia.com/labs/rtr/neural_texture_compression/ [FUJI24] Shin Fujieda and Takahiro Harada. 2024. “Neural Texture Block Compression.” arXiv:2407.09543. https://gpuopen.com/download/2024_NeuralTextureBCCompression.pdf [INTEL-TSNC] Intel Corporation. “Intel® Texture Set Neural Compression.” GitHub. https://github.com/GameTechDev/TextureSetNeuralCompressionSample 97 /95
References [ZELT24] Tizian Zeltner, Fabrice Rousselle, Andrea Weidlich, Petrik Clarberg,
Jan Novák, Benedikt Bitterli, Alex Evans, Tomáš Davidovič, Simon Kallweit, Aaron Lefohn. 2024. “Real-Time Neural Appearance Models.” ACM Transactions on Graphics. Presented at ACM SIGGRAPH 2024. Project Page: https://research.nvidia.com/labs/rtr/neural_appearance_models/ [IWAN24] Michal Iwanicki, Peter-Pike Sloan, Ari Silvennoinen, and Peter Shirley. 2024. “Neural Light Grid: Modernizing Irradiance Volumes with Machine Learning.” ACM SIGGRAPH 2024 Course: Advances in Real-Time Rendering in Games. Materials: https://research.activision.com/publications/2024/08/Neural_Light_Grid [PAN25] Lele Pan, Maode Shi. 2025. “Global Illumination in ’Once Human’: A Hybrid Approach for 16km Open World.” Game Developers Conference 2025. GDC Vault: https://gdcvault.com/play/1035269/Global-Illumination-in-Once-Human [CAO25] Luyan Cao. 2025. “Decoding Light: Neural Compression for Global Illumination.” Game Developers Conference 2025. GDC Vault: https://gdcvault.com/play/1035273/Decoding-Light-Neural-Compression-for 98 /95
References [SAND17] Grant Sanderson, Josh Pullen. 2017. (1) “But what
is a Neural Network?” Video: https://www.3blue1brown.com/lessons/neural-networks/ (2) “Gradient descent, how neural networks learn.” Video: https://www.3blue1brown.com/lessons/gradient-descent/ (3) “Analyzing our neural network Image.” Video: https://www.3blue1brown.com/lessons/neural-network-analysis/#analyzing-our-neural-network (4) “What is backpropagation really doing?” Video: https://www.3blue1brown.com/lessons/backpropagation/ (5) “Backpropagation calculus” Video: https://www.3blue1brown.com/lessons/backpropagation-calculus/ [MOUG21] Hugo Mougard. “Visualization of the universal approximation theorem.” Video: https://www.youtube.com/watch?v=Ln8pV1AXAgQ 99 /95
Appendix 100 /95
従来の行列演算 mul(weights, inputVec) + biases Thread 0 … Thread 1
… * … + … * … + … … … … 入力ベクトル ウェイト行列 バイアスベクトル 101 /95
“Cooperative” mul(weights, inputVec) + biases 演算は専用命令 (専用H/W)で実行 ウェーブ内のスレッドが協調し 1つの大きなマトリクスを形成 Wave
Thread 0 Thread 1 Thread 2 … * … … 入力ベクトル + 〃 〃 … … … Thread 31 … … … 全ての行で 同じバイアス 〃 ウェイト行列 バイアスベクトル 102 /95
“Cooperative” CoopVec なし … Wave … * … Thread 0
Thread 1 Thread 2 Thread 31 Thread 1 … * … … … … Thread 0 CoopVec あり * … … … … … 103 /95