シェーダ 勉強ノート

2019-11-13

このページは

  • シェーダを勉強している時に書き留めた個人的なメモやリンク集

はじめに

ざっくりとした歴史

グラフィックス API / シェーダ言語 / ゲームエンジン / モバイル端末をとりまく時系列:

時期 出来事
2000-11 DirectX 8.0 で原始的なプログラマブルシェーダが導入される
(マシン語みたいなやつ)
2002-12 DirectX 9.0 で高級シェーダー言語 HLSL が導入される
2003 OpenGL 1.5 / 高級シェーダー言語 GLSL 1.0 が導入される
2003 OpenGL ES 1.0
2004 OpenGL 2.0 / GLSL 1.1
2007 OpenGL ES 2.0
2007 DirectX 10 でジオメトリシェーダが導入される
2008 OpenGL 3.0
2008-08 OpenGL 3.2 でジオメトリシェーダに対応
2009 DirectX 11 / テッセレーションシェーダ
/ コンピュートシェーダ
2010-03 OpenGL 4.0 / テッセレーションシェーダ
2012 OpenGL ES 3.0
2012-06 Unity 4 リリース
2012-08 OpenGL 4.3 / コンピュートシェーダ
2014-03 UE4 リリース
2014-09 iOS 8 から Metal が導入される
2015 DirectX 12 / Windows 10 でのみ利用可能
2015-03 Unity 5 リリース / 無料版の機能制限がなくなる
2015-03 UE4 が無料化(ロイヤリティ形式)
2016-02 Vulkan 1.0 正式仕様リリース
2016-08 Android 7.0 から Vulkan サポート開始
2018-05 Unity 2018 / シェーダグラフが追加
2018-06 Apple が macOS / iOS で OpenGL を非推奨にすると発表

基礎知識

  • よく使うのは頂点シェーダとフラグメントシェーダ
    • (OpenGL ではフラグメントシェーダ、DirectX ではピクセルシェーダと呼ぶ)
  • Unity では ShaderLab という枠組みの中で、専ら HLSL でシェーダを実装する
    • Unity が各プラットフォーム向けに最適化したものに変換してくれる
    • 時々 Cg/HLSL のように表現されることがあるが、Cg は NVIDIA とマイクロソフトが共同開発したシェーダ言語で、HLSL とよく似ている
  • Unity にある Surface Shader というのは、ライティングとかを考慮しなくてよいお手軽シェーダ
    • 内部的には Unity によって頂点シェーダ / フラグメントシェーダに変換されている

情報源

書籍

シェーダの本に関しては近年、日本語の書籍で出版社から出ているものは少ないが、同人で書かれているものがいくつかある。 (主に Unity 向け):

英語ではそれなりに書籍がありそう。以下に書籍情報がよくまとまっている:

Packt で検索するといくつかある:

基礎を学べる系

スライド

チュートリアル系

  • Unity Tutorials - Roystan
    • 草原シェーダ / アウトラインシェーダ / トゥーンシェーダ / トゥーンな水面の描画など
    • 質の高い内容が丁寧な解説でまとまっている。記事の装丁も綺麗で見やすい

シェーダやってる人のサイト

レイマーチング

最初に読みたい系

解説記事 / チュートリアル

スライド

ツール

実装時によく見るやつ

GLSL → HLSL

シェーダ実装テクニック / 実装例


VJ 系

目に止まった作品 / 実装例

Shadertoy

  • [2019-07] Neon road
    • by kaneta / 286 行 / ネオン系。綺麗 / ブルーム、魚眼レンズ、ディザリング
  • [2015-08] 2d signed distance functions
    • by Maaten / 359 行 / 基本的なシェイブと、光と影
    • レイマーチングの図形描画の基本形として参考になる / コードの命名もわかりやすくて読みやすい
  • [2018-08] Optical Stream
    • by notargs / 144 行 と短め / めっちゃカラフル
  • [2017-06] caustics and water
    • by frankbatista / 54 行 / 水面っぽい表現。実用性ありそう

Shadertoy 以外

Unity アセット



関連リンク

自分でやったやつ