SlideShare a Scribd company logo
6
Most read
8
Most read
10
Most read
Mobility Technologies Co., Ltd.
Rustで3D graphics programming
Kiyotomo Hiroyasu
2020/10/29 MoT.rs #2
Mobility Technologies Co., Ltd.
● これから話す内容
○ Rustで3D graphics programmingしたい動機
○ GPU使った3D描画パイプラインの概要
○ three-d crateの紹介
○ まとめ
はじめに
2
Mobility Technologies Co., Ltd.
動機
3
Mobility Technologies Co., Ltd.
● エッジAI開発において、入力画像の前処理をGPU上で高速に実現したい
○ shaderを使った並列処理
● OpenGLとかshaderとかなんもわからんので簡単に試しながら学習できる環
境がほしい
開発主言語がRustなので、いい感じにshader扱えるcrateはないか探す
動機
4
Mobility Technologies Co., Ltd.
3D描画のパイプライン概要
5
Mobility Technologies Co., Ltd.
・多量のpolygonについて処理が
実行されて3D描画が行われる
・各Shaderの処理はGPU上で
並列で高速に実行
3D graphicsの描画処理パイプライン
6
OpenGLのレンダリングパイプライン図
(OpenGL wikiより)
Mobility Technologies Co., Ltd.
three-d crate
7
Mobility Technologies Co., Ltd.
● crates.ioでOpenGLで検索かけたときに上の方に出てきたcrate
● OpenGLESには対応してなさそうだが、学習環境として使えないかと思い試用
● WebAssemblyのビルドにも対応している
○ examplesはwasmでビルドされたモジュールを使用している
three-d crate
8
Mobility Technologies Co., Ltd.
● ビルドしてサンプル実行するまでに5分かからない
○ リポジトリのREADMEに書いてあるとおり実行するだけでdesktop版も
Web版も簡単に動作確認できる(wasm版は要node.js)
three-d crate
9
Mobility Technologies Co., Ltd.
● shaderも簡単に実装できる
○ hello_worldサンプルの実装内容を紹介
色付きのポリゴンがY軸中心に回転するだけのサンプル
頂点座標と対応する色情報をshaderに渡して描画
three-d crate
10
Mobility Technologies Co., Ltd.
● shaderのコンパイルや描画実行も簡単な記述で可能
● vertex shaderに渡す頂点座標/色情報と回転行列を指定してdraw_arrays()するだけ
three-d crate
11
←ここでshaderが起動し、ポリゴンが描画される
Mobility Technologies Co., Ltd.
● shaderコード
○ vertex shaderで入力頂点座標に指定された回転行列を乗算
○ fragment shaderはvertex shaderに渡されたcolorを描画ピクセルに設定して
いるだけ
■ ピクセル座標に応じた補間値が渡されるのでグラデーションになる
three-d crate
12
vertex shaderのソース(color.vert) fragment shaderのソース(color.frag)
Mobility Technologies Co., Ltd.
まとめ
13
Mobility Technologies Co., Ltd.
● three-d crateを使うとシンプルな記述でshader起動するコードが書ける
○ 生のOpenGL APIで同じ事しようとすると数倍のコード量になる
○ shader初心者でも簡単に始められる(手を動かしながらの学習に良い)
○ wasm+WebGLに対応してるので、Web向けビルドも可能
● OpenGLESに対応しておらず、エッジ向けにビルドできないのがBad
○ 汎用計算に使用するcompute shaderにも非対応
○ 他にも使えそうなcrateがないかさらに調査する
まとめ
14

More Related Content

PPTX
SLAM勉強会(PTAM)
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
ICCV2019読み会「Learning Meshes for Dense Visual SLAM」
PDF
Boost.Preprocessorでプログラミングしましょう
PDF
DI(依存性注入)について
PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例
PPTX
【DL輪読会】時系列予測 Transfomers の精度向上手法
SLAM勉強会(PTAM)
新入社員のための大規模ゲーム開発入門 サーバサイド編
ICCV2019読み会「Learning Meshes for Dense Visual SLAM」
Boost.Preprocessorでプログラミングしましょう
DI(依存性注入)について
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
【DL輪読会】時系列予測 Transfomers の精度向上手法

What's hot (20)

PDF
異次元のグラフデータベースNeo4j
PDF
Pythonによる黒魔術入門
PDF
関数型プログラミングのデザインパターンひとめぐり
PDF
Intro to SVE 富岳のA64FXを触ってみた
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
PPTX
【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone Scan
PDF
闇魔術を触ってみた
PDF
中3女子が狂える本当に気持ちのいい constexpr
PPTX
いまさら学ぶMVVMパターン
PDF
動作認識の最前線:手法,タスク,データセット
PDF
ACRi HLSチャレンジ 高速化テクニック紹介
PDF
LiDAR-SLAM チュートリアル資料
PDF
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
PDF
プログラムを高速化する話
PDF
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
PDF
ゲームAI入門(後半)
PPTX
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
PDF
ゲームAIの中の数学(上)
異次元のグラフデータベースNeo4j
Pythonによる黒魔術入門
関数型プログラミングのデザインパターンひとめぐり
Intro to SVE 富岳のA64FXを触ってみた
プログラムを高速化する話Ⅱ 〜GPGPU編〜
【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone Scan
闇魔術を触ってみた
中3女子が狂える本当に気持ちのいい constexpr
いまさら学ぶMVVMパターン
動作認識の最前線:手法,タスク,データセット
ACRi HLSチャレンジ 高速化テクニック紹介
LiDAR-SLAM チュートリアル資料
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
プログラムを高速化する話
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
ゲームAI入門(後半)
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
ARM CPUにおけるSIMDを用いた高速計算入門
ゲームAIの中の数学(上)
Ad

Similar to Rustで3D graphics programming (20)

PPTX
RustによるGPUプログラミング環境
PPTX
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
PDF
3Dプリンタでロボット作るよ#1_黎明編
PDF
WeDX Flow Hands-on
PDF
携帯SoCでの画像処理とHalide
PDF
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
PPTX
Si2017 チームイエスマン 発表スライド
PDF
NGK2023S ChatGPT
PDF
ベアメタルで実現するSpark&Trino on K8sなデータ基盤
PDF
Bjarne dont speaking
PDF
ゲームアプリの数学@GREE GameDevelopers' Meetup
PDF
ゲームアプリの数学@GREE GameDevelopers' Meetup
PPTX
SIGGRAPH 2019レポート
PDF
Google の AIツール 『Auto ML』で機械学習してみた
PDF
Unreal Studio+機械CADのワークフロー
PPTX
宇宙建造物と3Dプリント―3D Printing Corporation
PDF
Datadog Agent on CloudRunによるGCPトレービリティ向上
PPTX
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
PDF
SDNアプローチによるBGP経路監視の提案
PDF
Hello, DirectCompute
RustによるGPUプログラミング環境
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
3Dプリンタでロボット作るよ#1_黎明編
WeDX Flow Hands-on
携帯SoCでの画像処理とHalide
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
Si2017 チームイエスマン 発表スライド
NGK2023S ChatGPT
ベアメタルで実現するSpark&Trino on K8sなデータ基盤
Bjarne dont speaking
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
SIGGRAPH 2019レポート
Google の AIツール 『Auto ML』で機械学習してみた
Unreal Studio+機械CADのワークフロー
宇宙建造物と3Dプリント―3D Printing Corporation
Datadog Agent on CloudRunによるGCPトレービリティ向上
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
SDNアプローチによるBGP経路監視の提案
Hello, DirectCompute
Ad

Rustで3D graphics programming

  • 1. Mobility Technologies Co., Ltd. Rustで3D graphics programming Kiyotomo Hiroyasu 2020/10/29 MoT.rs #2
  • 2. Mobility Technologies Co., Ltd. ● これから話す内容 ○ Rustで3D graphics programmingしたい動機 ○ GPU使った3D描画パイプラインの概要 ○ three-d crateの紹介 ○ まとめ はじめに 2
  • 4. Mobility Technologies Co., Ltd. ● エッジAI開発において、入力画像の前処理をGPU上で高速に実現したい ○ shaderを使った並列処理 ● OpenGLとかshaderとかなんもわからんので簡単に試しながら学習できる環 境がほしい 開発主言語がRustなので、いい感じにshader扱えるcrateはないか探す 動機 4
  • 5. Mobility Technologies Co., Ltd. 3D描画のパイプライン概要 5
  • 6. Mobility Technologies Co., Ltd. ・多量のpolygonについて処理が 実行されて3D描画が行われる ・各Shaderの処理はGPU上で 並列で高速に実行 3D graphicsの描画処理パイプライン 6 OpenGLのレンダリングパイプライン図 (OpenGL wikiより)
  • 7. Mobility Technologies Co., Ltd. three-d crate 7
  • 8. Mobility Technologies Co., Ltd. ● crates.ioでOpenGLで検索かけたときに上の方に出てきたcrate ● OpenGLESには対応してなさそうだが、学習環境として使えないかと思い試用 ● WebAssemblyのビルドにも対応している ○ examplesはwasmでビルドされたモジュールを使用している three-d crate 8
  • 9. Mobility Technologies Co., Ltd. ● ビルドしてサンプル実行するまでに5分かからない ○ リポジトリのREADMEに書いてあるとおり実行するだけでdesktop版も Web版も簡単に動作確認できる(wasm版は要node.js) three-d crate 9
  • 10. Mobility Technologies Co., Ltd. ● shaderも簡単に実装できる ○ hello_worldサンプルの実装内容を紹介 色付きのポリゴンがY軸中心に回転するだけのサンプル 頂点座標と対応する色情報をshaderに渡して描画 three-d crate 10
  • 11. Mobility Technologies Co., Ltd. ● shaderのコンパイルや描画実行も簡単な記述で可能 ● vertex shaderに渡す頂点座標/色情報と回転行列を指定してdraw_arrays()するだけ three-d crate 11 ←ここでshaderが起動し、ポリゴンが描画される
  • 12. Mobility Technologies Co., Ltd. ● shaderコード ○ vertex shaderで入力頂点座標に指定された回転行列を乗算 ○ fragment shaderはvertex shaderに渡されたcolorを描画ピクセルに設定して いるだけ ■ ピクセル座標に応じた補間値が渡されるのでグラデーションになる three-d crate 12 vertex shaderのソース(color.vert) fragment shaderのソース(color.frag)
  • 13. Mobility Technologies Co., Ltd. まとめ 13
  • 14. Mobility Technologies Co., Ltd. ● three-d crateを使うとシンプルな記述でshader起動するコードが書ける ○ 生のOpenGL APIで同じ事しようとすると数倍のコード量になる ○ shader初心者でも簡単に始められる(手を動かしながらの学習に良い) ○ wasm+WebGLに対応してるので、Web向けビルドも可能 ● OpenGLESに対応しておらず、エッジ向けにビルドできないのがBad ○ 汎用計算に使用するcompute shaderにも非対応 ○ 他にも使えそうなcrateがないかさらに調査する まとめ 14