Google Filament のシェーディング

main.fx の main() がエントリーポイント
shading_lit.fs の evaluateMaterial() が呼ばれ、その中の evaluateLights() がライティング用の関数。shading_lit.fs の中に evaluateLights() があり、evaluateIBL() -> evaluateDirectionalLight() -> evaluatePunctualLights() の順番で呼ばれている。

evaluateIBL, evaluateDirectionalLight, evaluatePunctualLights のそれぞれで、surfaceShading() が呼ばれている。standard, cloth, subsurface が surfaceShading() を実装している。マテリアルによって切り替えている。

トゥーンシェーダー

UE4 PostProcess High quality Cel Shader(ハイクオリティなセルシェーダー)
https://www.youtube.com/watch?v=5u-pyWSpoxw

コメントから GIthub に飛び、そこからサンプルを DL 可能です。素晴らしいプロジェクトに感謝です。

Unityで楽しむノンフォトリアルな絵づくり講座:トゥーンシェーダー・マニアクス
https://www.youtube.com/watch?v=6aNB9LhSx7g

トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』
https://www.youtube.com/watch?v=gi4XO0WiRcM

Unity トゥーンシェーディングを使った3Dアニメ表現https://qiita.com/MuRo_CG/items/c417ef6d6cbeed3dd42b

ユニティちゃんトゥーンシェーダー v.2.0.4の基本的な設定の仕方
https://www.youtube.com/watch?v=z7Pr39NW5Dk

Post Processing in UE4: Cel-Shading | Live Training
https://www.youtube.com/watch?v=cQw1CL0xYBE

『崩壊3rd』開発者が語るアニメ風レンダリングの極意
https://www.youtube.com/watch?v=ZpWsinhPFLM&feature=youtu.be

『崩壊3rd』開発者が語るアニメ風レンダリングの極意
https://www.slideshare.net/UnityTechnologiesJapan002/unite-tokyo-20183rd/UnityTechnologiesJapan002/unite-tokyo-20183rd

トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』
https://www.slideshare.net/UnityTechnologiesJapan/unite-tokyo-20181-96491296

PSOFT Pencil+
https://www.psoft.co.jp/en/product/pencil/3dsmax/

グラフィックス系記事のブックマーク

NVIDIA Developer Blog – Game Development Archives
https://devblogs.nvidia.com/category/game-development/

Procedural World Generation of Ubisoft’s Far Cry 5
https://cgpress.org/archives/cgtutorials/procedural-world-generation-of-ubisofts-far-cry-5

FarCry5 Procedural-World-Generation-of-Far
https://www.gdcvault.com/play/1025557/Procedural-World-Generation-of-Far

Creating Photorealistic Procedural Materials in Substance Designer With Daniel Thiger
https://www.youtube.com/watch?v=WNwtc-OeGQ0

GPU-BASED PROCEDURAL PLACEMENT IN HORIZON ZERO DAWN
https://www.guerrilla-games.com/read/gpu-based-procedural-placement-in-horizon-zero-dawn

Terrain Rendering in FarCry5
http://twvideo01.ubm-us.net/o1/vault/gdc2018/presentations/TerrainRenderingFarCry5.pdf

GDC Vault – Terrain Rendering in FarCry5
https://www.gdcvault.com/play/1025480/Terrain-Rendering-in-Far-Cry

GHOST RECON WILDLANDS: TERRAIN TOOLS AND TECHNOLOGY
https://666uille.wordpress.com/2017/03/08/ghost-recon-wildlands-terrain-tools-and-technology/

宋さんの3ds Max キッチンスタジアム
https://area.autodesk.jp/column/tutorial/3ds_max_kitchen_stadium/

グラフィックスAPI の Draw 系関数のまとめ

Draw 関数は DirectX や OpenGL にとって最も基本となる描画命令でありながら使用できる種類が多くて学習の障害となる。なぜこんなに種類があるかと言えば、大量のオブジェクトをいかに効率的に描画するかを模索して拡張が繰り返されてきた結果です。

  • Draw
  • DrawIndexed
  • DrawIndexedInstanced
  • DrawIndexedInstancedIndirect
  • DrawInstanced
  • DrawInstancedIndirect

Draw 関数には、大まかに上記のバリエーションが存在する。(DirectX も OpenGL も同じような関数があったはず)

  • Indexed
  • Instanced
  • Indirect

描画するジオメトリがインデックス付けされた頂点なのか、インスタンス描画されるものなのか、描画命令の引数のパラメータが既に GPU メモリー上にあるものを使うのかによって、使用する関数が異なる。

描画は基本的な命令であれば CPU 側の関数に対して、引数に指定されたパラメータを使うが、Compute Buffer などを利用して作った、GPU メモリー上のパラメータを間接的 (Indirect) に使うこともできる。

グラフィックス系記事のブックマーク

Path tracing wikipedia
https://en.wikipedia.org/wiki/Path_tracing

Rendering Chronology of important published ideas
https://en.wikipedia.org/wiki/Rendering

チュートリアル16:シャドウマッピング
http://www.opengl-tutorial.org/jp/intermediate-tutorials/tutorial-16-shadow-mapping/

Z Buffer Optimizations
https://fr.slideshare.net/pjcozzi/z-buffer-optimizations

Implementing fast, ray traced soft shadows in a game engine
https://www.imgtec.com/blog/implementing-fast-ray-traced-soft-shadows-in-a-game-engine/

NVIDIA’s Official CES 2019 Press Event
https://www.youtube.com/watch?v=xmXKPVuIQVI

The Cornell Box 
https://www.graphics.cornell.edu/online/box/

Book of the Dead
https://unity3d.com/jp/book-of-the-dead
Unity Plus/Pro ライセンスを持っている人向けに、アセットのダウンロードが可能
このために、Plus を契約するか

DirectX Raytracing

2019年1月時点のまとめです。

DirectX Raytracing は 2018年3月に行われた GDC 2018 で発表され、半年間のオープンなテスト期間を得て Window 10 October 2018 Update (RS5, ver1809) の提供と同時に正式リリースとなりました。

ただ登場したばかりのため機能のため、対応している GPU ハードウェアが今のところ NVIDIA の Titan V か Turing アーキテクチャの製品しかありません。

CES 2019 で、Turing のミドルウェアレンジである Geforce RTX 2060 が発表されましたが、それでも日本円で4万を超えてしまうため、DXR が一般に普及していくのにはまだ時間がかかりそうです。

ゲーム開発者が簡単な DXR API のテストなど、単純に実行するだけであれば Fallback Layer を使用するという方法もあります。Fallback Layer が何かは以前の記事にまとめています。
https://blog.acheul.net/?p=191

DXR のドキュメント資料は、下記のページからダウンロード可能です。
2019/1 現在のドキュメントのバージョンは v1.01 です。
http://forums.directxtech.com/index.php?topic=5860.0

NVIDIA は Project Sol という名前の、リアルタイムレイトレーシングのデモを公開しています。2018年8月の SIGGRAPH 2018 で part1 が、2019年1月の CES 2019 で part2 が公開されました。
https://www.youtube.com/watch?v=pNmhJx8yPLk

以下、DXR の記事。

DirectX Raytracing and the Windows 10 October 2018 Update
https://blogs.msdn.microsoft.com/directx/2018/10/02/directx-raytracing-and-the-windows-10-october-2018-update/

Why Today Is an Exciting Moment for Gamers and Important Catalyst for Ray-Traced Games
https://blogs.nvidia.com/blog/2018/10/02/real-time-ray-tracing-rtx-windows-10-october-update/

GDC 2018 DirectX Raytracing
https://msdnshared.blob.core.windows.net/media/2018/03/GDC_DXR_deck.pdf

MODERN GRAPHICS ABSTRACTION AND REAL-TIME RAY TRACING
https://www.ea.com/seed/news/syysgraph-2018-modern-graphics-abstractions-real-time-ray-tracing

その他

NVIDIA RTX and GameWorks Ray Tracing Technology Demonstration
https://www.youtube.com/watch?v=tjf-1BxpR9c

Introduction to NVIDIA RTX and DirectX Ray Tracing
https://devblogs.nvidia.com/introduction-nvidia-rtx-directx-ray-tracing/

Apple iOS/macOS のリアルタイムRayTracing API

2018年3月に開催された GDC 2018 で Windows の DXR が発表されたあとすぐに、Apple は 2018年5月の自身の開発者イベント WWDC2018 でリアルタイム RayTracing を実現するデモを公開しました。

WWDC 2018
https://developer.apple.com/videos/play/wwdc2018/606/

Metal for Accelerating Ray Tracing
https://developer.apple.com/documentation/metalperformanceshaders/metal_for_accelerating_ray_tracing

DirectX12 の d3dx12.h ヘルパー

DirectX12 では、d3dx12.h というヘルパー構造体/関数が用意されています。
https://docs.microsoft.com/en-us/windows/desktop/direct3d12/helper-structures-and-functions-for-d3d12

Microsoft が提供している DirectX12 のサンプルでは、ほぼほぼこのヘルパーの仕組みを使って構造体の初期化が行われているようです。DirectX に限らず、グラフィックスAPI の構造体は、パラメータ数が多く暗黙の値を受け取る物もあるため、何らかの仕組みでラップして使用することが多いです。

d3dx12.h が便利という人もいれば、低レイヤー部分が隠蔽されていることへの気持ち悪さを感じる人もいるようです。個人的にはサンプルやチュートリアルで使用されるのは良いですが、自分のプロジェクトにおいては d3dx12.h を使わずに必要があれば自前でラップすることをお勧めます。