作成者別アーカイブ: masafumi

NVIDIA PhysX がバージョン4.0から3-Clause BSDライセンスでオープンソースに

12/20に公開になるNVIDIA PhysX 4.0からライセンスが変更になり,3-Clause BSDにライセンスが変更され,オープンソースになるアナウンスされています.

Announcing PhysX SDK 4.0, an Open-Source Physics Engine

https://news.developer.nvidia.com/announcing-physx-sdk-4-0-an-open-source-physics-engine/

今回のライセンス変更は以下のプラットフォーム向けのものが対象になります.

  • Apple iOS
  • Apple Mac OS X
  • Google Android ARM (version 2.2 or later required for SDK, 2.3 or later required for snippets)
  • Linux (tested on Ubuntu)
  • Microsoft Windows XP or later (NVIDIA Driver version R304 or later is required for GPU acceleration)

ゲームのコンソール機に関しては従来のEULAのままだそうです.

Syysgraph 2018のEA SEED の発表 Modern Graphics Abstractions & Real-Time Ray Tracingのスライド

Syysgraph 2018のModern Graphics Abstractions & Real-Time Ray Tracingスライドが公開になっています.

Modern Graphics Abstractions & Real-Time Ray Tracing
https://www.ea.com/seed/news/syysgraph-2018-modern-graphics-abstractions-real-time-ray-tracing

今年のHalcyonの発表は色々とありましたが,集大成的な発表になっています.

  • Vulkan版対応の話
  • Render Graphの話
  • マルチGPUでのGPUの仮想化
  • Machine Learning対応
  • アセットパイプライン
  • シェーダ
    • マルチプラットフォーム対応
    • Wave / Subgroup対応
  • レイトレーシング
  • ハイブリッドレンダリング
  • Transparent Shadow
  • Transparency & Translucency
  • GI
  • デノイズ

WHLSL : Web向け高級シェーダ言語

ブラウザ向け3Dは現在WebGLが使われていますが,WebKitやMozillaやGoogleなど様々な次世代APIが検討されています.

そこで使うシェーダ言語の1つとしてHLSLをベースにしたWHLSLの開発が進んでいますが,その詳細を解説した記事があります

Web High Level Shading Language
https://webkit.org/blog/8482/web-high-level-shading-language/

WHLSLに関しては,SIGGRAPH 2018のBoFのHLSL Realtime Shading Languageで知りました.BoFの説明ではW3Cというのがありますね.

SIGGRAPH 2018のBoFリスト
https://s2018.siggraph.org/conference/conference-overview/birds-of-a-feather/

さて,今回は,WebKitの話ですが,WebKitではAppleを中心にWebGPUというAPIが提案され現在開発が進んでいます.

WebGLはOpenGLをベースにしていましたが,WebGPUはMetal, Direct3D12, VulkanなどのAPIの設計をWebに持ってくるようなイメージですね.

AppleはWebGPUの実装をMetalベースで提案していましたが,他のOS環境に関してはDirect3D12やVulkanでの実装を行ってよいようでした.シェーダ言語に関しては,Metal Shadering Laungage(MSL)で提案していましたが,今回の記事を見ているとMSLはなくなったように思えます.

プロポーザル
https://webkit.org/wp-content/uploads/webgpu-api-proposal.html#shadinglanguage

今回の記事では,HLSLの構文を参考にしたWHLSLが説明されています.HLSLを参考にしているのはシェーダプログラマの人口が多いというところになりそうです(MSLやGLSLやSPIR-Vなど採用されなかったものについては記事に書いてあります).

ここで注意しないといけないのがWHLSLはHLSLと単語が共通ですが,HLSLの仕様がまるまる採用されておらず,言語仕様的には別な言語になっているようですね.Web High Level Shading Launguageということです.

ベクトル型や組み込み関数などは共通するようですが,HLSLでサポートする仕様とはいくつかの点が違いますがそれを挙げていきます(順不同.これが全部ではないです).

  • Cスタイルの暗黙の型変換はサポートしない
    • エラーの原因.Swiftなどと近いアプローチ
  • enumのサポート
    • 実行時のコストがかからず便利だから
  • 構造体
    • HLSLやCと一緒
    • 継承,virtual,アクセス制御,privateはサポートしない
  • プリプロセッサはサポートしない
    • 理由:プリプロセッサでシェーダのバリエーションを増やす手法はHLSLでは使われるが保守性が悪い
  • セーフポインタ
    • 既存のCPUコードの移植しやすさを考えて
      • 機械学習やComputer Vision,信号処理の人たちがコードをもっていきやすいように
  • 配列の参照
  • プロパティ
  • プリプロセッサの未サポート
    • HLSLでは1つのシェーダコードのバリエーションを増やすために使われるが保守性の悪さ
    • シェーダ読み出しの仕組みが違うのではサポートしない
    • 代わりにSPIR-Vのspecialization constantsにあたるものがある
  • セマンティクスのサポート
    • シェーダステージ間をやりとりするためにHLSLと同じくある
      • ただし,グローバル変数ではなく関数のパラメータ入力と出力の形式になる

だいぶ作業が進んでるなという印象ではありますが,ブラウザ上での実装はセキュリティの問題など配慮すべきことが多いためまだまだ時間がかかりそうではありますが,WebGLよりもよりパフォーマンスを引き出せるものというのを期待したいところですね.

メッシュ最適化ライブラリmeshoptimizer v0.9がリリース

meshoptimizer v0.9がリリースになったようですね.

v0.9のリリースノート
https://github.com/zeux/meshoptimizer/releases/tag/v0.9

meshoptimizerって何?という方は以前下記の記事を書きましたが,基本機能は現在も同じなので参考になると思います.

オープンソースのメッシュ最適化ライブラリmeshoptimizerとメッシュ最適化の話題
http://www.shader.jp/?p=2279

今回,個人的に興味深いのはNew algorithmsの記述ですね.

  • Introduce an experimental algorithm, meshopt_buildMeshlets, that can create meshlet data from index buffer that can be used to efficiently drive the mesh shading pipeline in NVidia RTX GPUs
  • Introduce experimental algorithms, meshopt_computeClusterBounds and meshopt_computeMeshletBounds, that can compute bounding sphere and bounding normal cone for use in GPU cluster culling.
  • Introduce an experimental algorithm, meshopt_generateShadowIndexBuffer, that can generate a second index buffer that shares the vertex data with the original index buffer, but is more efficient when a subset of vertex attributes is needed.

meshoptimizerはDirect3D9時代ぐらいからある最適化に加えて新しい最適化やメッシュ圧縮手法が加わっていますが,今回はexperimental algorithmということで実験的な機能だそうですが,かなり先端的な手法の取り込みがきていますね.上から

  • GeForce RTXシリーズのMesh Shader向けのmeshletをindex bufferから作成する機能
  • GPU cluster cullingのための
  • Shadow描画用のIndex Bufferの作成

となります.GPUのジオメトリ機能の進歩で最適化の在り方も変わってきそうなところが見えてきますね.

なお,今回の機能についてはMesh Shaderの理解が必要になりますが,NVIDIAの記事が参考になります.

Introduction to Turing Mesh Shaders
https://devblogs.nvidia.com/introduction-turing-mesh-shaders/

VulkanでGeForce RTXシリーズ向けレイトレーシング拡張とドライバの公開

VulkanでGeForce RTXシリーズのレイトレーシング機能を使用する拡張(VK_NV_ray_tracing)の仕様書が出たようです.

https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_ray_tracing

ドライバは416.81以降となるようです.

http://www.nvidia.com/Download/driverResults.aspx/139606/en-us

ShaderConductor : Microsoftのオープンソースシェーダ言語変換ツール

MicrosoftがShaderConductorというシェーダ変換ツールを公開しています.

ShaderConductor
https://github.com/Microsoft/ShaderConductor

このツールは,HLSLから以下のシェーダを出力ができるものになっています.

  • DXIL (Direct3D12)
  • SPIR-V (Vulkan)
  • GLSL (OpenGL)
  • ESSL (OpenGL ES)
  • MSL (Metal)
  • HLSL (Direct3D9/10/11)

DXILとSPIR-V はDirectXShaderCompilerから出力を行い,残りはSPIR-VをSPIR-V-Crossを使って出力するというものになっています.

DirectXShaderCompilerによるVulkan向けSPIR-V出力に関しては下記の記事などが参考になると思います.EA SEEDの事例ですがVulkan向けのシェーダをHLSLで開発する話があります.DirectXShaderCompilerからのフローはだいぶ完成度が高まっている感じはあります.

Running Microsoft FXC in Docker
https://www.wihlidal.com/blog/pipeline/2018-09-17-linux-fxc-docker/

Khronos Munich 2018 – Halcyon and Vulkan
https://www.ea.com/seed/news/khronos-munich-2018-halcyon-vulkan

日本語での関連記事は新masafumi’s Diaryの方で書いています.

EA SEEDのHalcyonのDirect3D12やVulkan向けのシェーダの話
http://masafumi.cocolog-nifty.com/masafumis_diary/2018/10/ea-seedhalcyond.html

HalcyonのVulkan対応の話
http://masafumi.cocolog-nifty.com/masafumis_diary/2018/10/halcyonvulkan-c.html

NVIDIAのRTX向けレイトレーシングのサンプル集

NVIDIAがGitHubでGettingStartedWithRTXRayTracingというRTXのサンプルを公開しています.

GettingStartedWithRTXRayTracing
https://github.com/NVIDIAGameWorks/GettingStartedWithRTXRayTracing

NVIDIAのレンダリングフレームワークのFalcor上で以下のようなサンプルやDXRのチュートリアル的サンプルがあります.

  • 01-OpenWindow
  • 02-SimpleRasterShader
  • 03-RasterGBuffer
  • 04-RayTracedGBuffer
  • 05-AmbientOcclusion
  • 06-TemporalAccumulation
  • 07-SimpleAntialiasing
  • 08-ThinLensCamera
  • 09-LambertianPlusShadows
  • 10-LightProbeEnvironmentMap
  • 11-OneShadowRayPerPixel
  • 12-DiffuseGlobalIllumination
  • 13-SimpleToneMapping
  • 14-GGXGlobalIllumination

DXRサンプルは2つです.Ray Tracing In One WeekendをDXRでやるサンプルもあります.

  • DXR-RayTracingInOneWeekend
  • DXR-Sphereflake Better

このサンプル自体はWindows 10 RS4を対象にしたもののようでRS5では動作しないようなのでそこは少し待つ必要がありそうです.

VulkanからRTXのレイトレーシングを行うNVIDIAの記事

NVIDIAの開発者向けサイトでIntroduction to Real-Time Ray Tracing with Vulkanという記事が公開されています.

Introduction to Real-Time Ray Tracing with Vulkan
https://devblogs.nvidia.com/vulkan-raytracing/

この記事ではVK_NVX_raytracing拡張からRTXを利用することが紹介されています(この記事執筆時点では公開されていない拡張です).

記事を読むとわかりますが,VK_NVX_raytracingによるレイトレーシングはOptiXやDXRと比較的近い構造になっています.シェーダはGLSLで記述をします.

TuringアーキテクチャのGPUの新機能のOpenGL/Vulkan拡張の記事

NVIDIAのCyril Crassin氏がTuringアーキテクチャのGPUの新機能のOpenGLとVulkan拡張をまとめた記事を書いています.

NVIDIA Turing Vulkan/OpenGL extensions
https://blog.icare3d.org/2018/09/nvidia-turing-vulkanopengl-extensions.html

今回OpenGLとVulkanの拡張として公開されているのは以下の機能です.以前の記事で公開された新機能以外のものも入っています.

  • Ray-Tracing Acceleration
  • Mesh Shading
  • Variable Rate Shading
  • Exclusive Scissor Test
  • Texture Access Footprint
  • Derivatives in Compute Shader
  • Barycentric Coordinates and manual attributes interpolation
  • Ptex Hardware Acceleration
  • Representative Fragment Test
  • Multi-View Rendering