SlideShare ist ein Scribd-Unternehmen logo
1 von 15
浮動小数点テクスチャについて
浮動小数点テクスチャを扱う際に初心者がつまずくこと
(初心者が浮動小数点テクスチャを使うとは言っていない)
@kyasbal_1994 (石井 翔)
浮動小数点テクスチャの利用手法1
• CPU書き込み+GPU読み込み
• シェーダーリソースとして浮動小数点テクスチャを用いるとき
• CPU側でテクスチャに書き込んでGPU側で用いる際
• 用途: スキニング用の行列配列を渡す場合など
• gl.getExtension(”OES_texture_float”)がnull以外を返せば使用可能
浮動小数点テクスチャの利用手法2
• GPU書き込みを伴う場合
• フレームバッファーに浮動小数点テクスチャをアタッチするとき
• GPU側でテクスチャに書き込む。(CPU側でさらに読み込みが必要なケースも
含む)
• 用途: G-Buffer、数値的なシミュレーション等
• gl.getExtension(“OES_texture_float”)でnull以外を返せばOK….ではない。
WEBGL_color_buffer_float
• 実は浮動小数点テクスチャの書き込みに関しては別のGL拡張
• これで晴れてgl.getExtension(“WEBGL_color_buffer_float”)がnullじゃな
かったら使える
• この拡張をサポートしてても、これがnullを返す場合がある。
(と言うかこれがnull以外を返すケースを見たことがない)
….わけではない。
WEBGL_color_buffer_float
• 一度テクスチャ作って、FBOとバインドして、ステータスを見てみるし
かない。
WEBGL_color_buffer_float
• 一度テクスチャ作って、FBOとバインドして、ステータスを見てみるし
かない。
こんな仕様おかしいよ!
こんな仕様おかしいよ!
浮動小数点テクスチャが描画対象として、
利用できない時は…?
• UBYTEのRGBAテクスチャに落とし込むしかない。
• どうパッキングするか?
• 格納する小数を以下の2パターンに分類する
• その小数のとりうる最大値、最小値がわかっている時(今日はここだけ)
• どうしても浮動小数がいい時(IEEE 754に無理やり丸める)
最大値、最小値がわかっている時
• 事実上の256進数として各ベクトルの要素を用いて表現して格納する。
最大値、最小値がわかっている時
• 普通に各要素から復元する。
最大値、最小値がわかっている時
• 32bit分必要ない時は、ベクトルの長さを変えて16,24bit分でも格納する
のは容易
• パッキングとアンパッキングが比較的高速
• N bit用いる時の最大数値誤差は最小値から最大値まで均等に分布し、
以下のように表される。
𝜖 𝑁 =
1
2 𝑁 − 1
(𝑀𝑎𝑥 − 𝑀𝑖𝑛)
最大値最小値を理論的に求める
(時間が余った時用)
• 例えば、ある法線の圧縮の計算式(|𝕟 𝑥𝑦𝑧| = 1を仮定)は以下のように表
せる
𝕖 𝑥𝑦 =
𝕟 𝑥𝑦
8𝕟 𝑧 + 8
+
1
2
,
1
2
(CryEngineが採用している法線圧縮方式)
• ただし、(0,0,-1)は除外点
(ビュー空間の時、(0,0,-1)は映らない位置にあるため)
• これの最大値、最小値は高校数学ぐらいの知識で求まる。
最大値最小値を理論的に求める
(時間が余った時用)
𝕟 𝑧 = 𝑘とおく
𝑘2 + 𝕟 𝑥
2
+ 𝕟 𝑦
2
= 1
∴ 𝕟 𝑥
2 + 𝕟 𝑦
2 = 1 − 𝑘2
− 1 − 𝑘2 < 𝕟 𝑥, 𝕟 𝑦 < 1 − 𝑘2
𝕖 𝑥𝑦 =
𝕟 𝑥𝑦
8𝑘+8
+
1
2
,
1
2
𝕖 𝑥 =
𝕟 𝑥
8𝑘+8
+
1
2
∵ 𝕟 𝑥と𝕟 𝑦は独立
𝕟 𝑥 = 2𝕖 𝑥 + 1 2 𝑘 + 1
𝕖 𝑥𝑦 =
𝕟 𝑥𝑦
8𝕟 𝑧 + 8
+
1
2
,
1
2
最大値最小値を理論的に求める
(時間が余った時用)
− 1 − 𝑘2 < 2𝕖 𝑥 − 1 2 1 + 𝑘 < 1 − 𝑘2
−2 2 1 + 𝑘 2 1 − 𝑘 +
1
2
< 𝕖 𝑥 < 2 2 1 + 𝑘 2 1 − 𝑘 +
1
2
𝛿
𝛿𝑘
2 1 + 𝑘 2 1 − 𝑘 =
2
− 𝑘−1 𝑘+1 2 3𝑘2
+ 2𝑘 − 1
𝕖 𝑥𝑦 =
𝕟 𝑥𝑦
8𝕟 𝑧 + 8
+
1
2
,
1
2
k=1/3の時、最大、最小となり、求めたい値の最大値、最
小値はkに1/3を入れて計算したもの。 → UBYTEテクス
チャに先ほどの式でパッキングできる。

Weitere ähnliche Inhalte

Was ist angesagt?

mrubyのfiberを試してみた
mrubyのfiberを試してみたmrubyのfiberを試してみた
mrubyのfiberを試してみた
Kindai University
 
Wm勉強会@関西#1
Wm勉強会@関西#1Wm勉強会@関西#1
Wm勉強会@関西#1
Yutaka Tsumori
 
新インフラエンジニアに捧ぐ職業○のおはなし - qpstudy 2014.04 LT資料
新インフラエンジニアに捧ぐ職業○のおはなし - qpstudy 2014.04 LT資料新インフラエンジニアに捧ぐ職業○のおはなし - qpstudy 2014.04 LT資料
新インフラエンジニアに捧ぐ職業○のおはなし - qpstudy 2014.04 LT資料
Kei Mikage
 
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
mametter
 
3dsMaxとAway3Dによるキャラクターアニメーション作成
3dsMaxとAway3Dによるキャラクターアニメーション作成3dsMaxとAway3Dによるキャラクターアニメーション作成
3dsMaxとAway3Dによるキャラクターアニメーション作成
Katsushi Suzuki
 

Was ist angesagt? (20)

Summer camp2019 group2
Summer camp2019 group2Summer camp2019 group2
Summer camp2019 group2
 
mrubyのfiberを試してみた
mrubyのfiberを試してみたmrubyのfiberを試してみた
mrubyのfiberを試してみた
 
Wm勉強会@関西#1
Wm勉強会@関西#1Wm勉強会@関西#1
Wm勉強会@関西#1
 
EC2クラスタインスタンス使ってみました!
EC2クラスタインスタンス使ってみました!EC2クラスタインスタンス使ってみました!
EC2クラスタインスタンス使ってみました!
 
Hyperlapse for Azure Media Servicesを本気で使ってみた
Hyperlapse for Azure Media Servicesを本気で使ってみたHyperlapse for Azure Media Servicesを本気で使ってみた
Hyperlapse for Azure Media Servicesを本気で使ってみた
 
ここから始めましょう、イチからーーいいえ、Cosmosから!
ここから始めましょう、イチからーーいいえ、Cosmosから!ここから始めましょう、イチからーーいいえ、Cosmosから!
ここから始めましょう、イチからーーいいえ、Cosmosから!
 
Uguisudani
UguisudaniUguisudani
Uguisudani
 
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
 
PasQポスター
PasQポスターPasQポスター
PasQポスター
 
地球地図を利用した地図タイルの作成 - FOSS4G TOKYO 2014 全体セッション2
地球地図を利用した地図タイルの作成 - FOSS4G TOKYO 2014 全体セッション2地球地図を利用した地図タイルの作成 - FOSS4G TOKYO 2014 全体セッション2
地球地図を利用した地図タイルの作成 - FOSS4G TOKYO 2014 全体セッション2
 
「Windows Azureで HPC 」 for JAZUG 2013年9月
「Windows Azureで HPC 」 for JAZUG 2013年9月「Windows Azureで HPC 」 for JAZUG 2013年9月
「Windows Azureで HPC 」 for JAZUG 2013年9月
 
新インフラエンジニアに捧ぐ職業○のおはなし - qpstudy 2014.04 LT資料
新インフラエンジニアに捧ぐ職業○のおはなし - qpstudy 2014.04 LT資料新インフラエンジニアに捧ぐ職業○のおはなし - qpstudy 2014.04 LT資料
新インフラエンジニアに捧ぐ職業○のおはなし - qpstudy 2014.04 LT資料
 
20180801 ガチラボ vol.7
20180801 ガチラボ vol.720180801 ガチラボ vol.7
20180801 ガチラボ vol.7
 
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
 
Debianでタイルマップサービスを作ってみた
Debianでタイルマップサービスを作ってみたDebianでタイルマップサービスを作ってみた
Debianでタイルマップサービスを作ってみた
 
3dsMaxとAway3Dによるキャラクターアニメーション作成
3dsMaxとAway3Dによるキャラクターアニメーション作成3dsMaxとAway3Dによるキャラクターアニメーション作成
3dsMaxとAway3Dによるキャラクターアニメーション作成
 
20160618 第23回シェル芸勉強会LT コマンドプロンプト芸
20160618 第23回シェル芸勉強会LT コマンドプロンプト芸20160618 第23回シェル芸勉強会LT コマンドプロンプト芸
20160618 第23回シェル芸勉強会LT コマンドプロンプト芸
 
Omochi-Renderer2@レイトレ合宿3!!! - お餅
Omochi-Renderer2@レイトレ合宿3!!! - お餅Omochi-Renderer2@レイトレ合宿3!!! - お餅
Omochi-Renderer2@レイトレ合宿3!!! - お餅
 
Fabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesFabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFes
 
20130316 JAWS DAYS 美人CDP+
20130316 JAWS DAYS 美人CDP+20130316 JAWS DAYS 美人CDP+
20130316 JAWS DAYS 美人CDP+
 

Mehr von 翔 石井

Mehr von 翔 石井 (10)

WebでのARには ハードル(闇)がいっぱいある話
WebでのARには ハードル(闇)がいっぱいある話WebでのARには ハードル(闇)がいっぱいある話
WebでのARには ハードル(闇)がいっぱいある話
 
Emscripten night "WebGL + WASM"
Emscripten night "WebGL + WASM"Emscripten night "WebGL + WASM"
Emscripten night "WebGL + WASM"
 
DotsLT AA Overview
DotsLT AA OverviewDotsLT AA Overview
DotsLT AA Overview
 
Grimoire.js Community announcement June 20 2016
Grimoire.js Community announcement June 20 2016Grimoire.js Community announcement June 20 2016
Grimoire.js Community announcement June 20 2016
 
jThree community kickoff
jThree community kickoffjThree community kickoff
jThree community kickoff
 
jThree announcment 4-24
jThree announcment 4-24jThree announcment 4-24
jThree announcment 4-24
 
jThree 0.10 alpha release
jThree 0.10 alpha releasejThree 0.10 alpha release
jThree 0.10 alpha release
 
チョコ溶かす奴
チョコ溶かす奴チョコ溶かす奴
チョコ溶かす奴
 
Dynamic lighting and dropping shadow in WebGL
Dynamic lighting and dropping shadow in WebGLDynamic lighting and dropping shadow in WebGL
Dynamic lighting and dropping shadow in WebGL
 
Efficacy of deferred rendering in WebGL
Efficacy of deferred rendering in WebGLEfficacy of deferred rendering in WebGL
Efficacy of deferred rendering in WebGL
 

Kürzlich hochgeladen

Kürzlich hochgeladen (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

WebGLで浮動小数点テクスチャを扱う話