OpenGL/Vulkanスレ Part22©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
クロスプラットフォームの3D API OpenGL 及び次世代のローレベルAPI Vulkan に関する話題を扱うスレッド。
現在の最新バージョンは4.5
https://www.opengl.org/
https://www.khronos.org/vulkan
== OpenGLと一緒に使われるツール&ライブラリ ==
苦労したくなかったらとりあえず入れとけ。
・glx: XからOpenGLを使うためのライブラリ。普通は直接は使わず意識する事はない
・glut: クロスプラットフォームなツールキット。でもさすがに古くさい
・GLFW より新しいマルチプラットフォームなツールキット
・glew: これを入れないと拡張機能が使えないor使いにくい
・glxgears: 歯車が回るベンチマーク。-infoでOpenGLのバージョンが見られる。OpenGLの動作確認はこれで
・glxinfo: 自分の使っているカードのOpenGLの機能が全てリストアップされる。
・OpenTK C#からOpenGLを簡単に使えるようになる。VC#の強力なIntellisenseとあわせてサクサク開発可能。
・OpenSceneGraph: OpenGL を高度に抽象化し、利便性を高めたラッパー。C++ ライブラリ
・OpenGL Mathematics (GLM): GLSL 文法ライクの C++ 数学ライブラリ
== チュートリアルサイト ==
床井研究室: http://marina.sys.wakayama-u.ac.jp/~tokoi/oglarticles.html
OpenGL de プログラミング: http://wiki.livedoor.jp/mikk_ni3_92/
NeHe: http://nehe.gamedev.net/
Tutorials for OpenGL 3.3 and later http://www.opengl-tutorial.org/
Learning Modern 3D Graphics Programming http://www.arcsynthesis.org/gltut/
== 前スレ ==
OpenGLスレ Part21
http://peace.2ch.net/test/read.cgi/tech/1409581958/
== 関連スレ ==
【O3D】HTML5用 3D API WebGL 【Canvas:3D】
http://peace.2ch.net/test/read.cgi/tech/1308761577/
OpenGL 2.0 専用スレ
http://peace.2ch.net/test/read.cgi/tech/1126268759/ ドキュメント読むとハードルめちゃ高いなー
早くVulkanのプログラムしたいけどGPUも買い換えないといけないのかなぁ…
NVIDIAだけど既存のGPUもサポートしてくれる事を祈る >>39
自前で組む分にはハードルが高いが
実際は有志から出された物やドライバのレイヤーを使って組むことが多いと思う http://peace.2ch.net/test/read.cgi/tech/1440666771/38
38 名前:デフォルトの名無しさん[sage] 投稿日:2015/09/24(木) 00:46:56.91 ID:r/3RmciX [1/2]
https://www.khronos.org/assets/uploads/developers/library/2015-cedec/Vulkan-CEDEC2015-DMP_Aug15.pdf
VulkanのOverviewが日本語に翻訳されてた
しかもVulkanAPIの解説付きだからこれでVulkanの全貌が把握出来る
なんとなくVulkanもMaxwell2と相性悪そうな気がする テクスチャフォーマットについて
2Dで表示するものは各8bitのRGBA(アルファ不要ならRGB)
3Dや多少の見た目の劣化が許容できるものはDXT1,3,5
こんな感じの使い分けがベターだと思ってるんだけど
詳しく解説されてるの見たことがないのでより良い選択肢があれば教えて欲しい 補足
動作環境はwindowsのデスクトップPCを想定してます >>43
αの扱いによってDXT1〜5を選択するだけで素のRGBAは有り得ない >>45
遅レスだけど返答ありがとう
劣化が気になることもあるけどDXT主体で使い分けてみるよ MMDはアプリだから表示なんかできないと思うんだが…
openglで表示してみた、というのは自分で何かopenglのプログラムを作ったという事かな?
だとすると表示が落胆ものなのは、完全に>>47 自信のスキルがアレなせいだと思う >>47
二枚目って自作?
とりあえず続きはブログでやってくれ なぜかあにまさ式だとうまくできました、
ブログはHTMLが面倒なのでげ製作でやっときます ☆ 日本の核武装は早急に必須ですわ。☆
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。 Lat式は表示方法自体がMMDデフォの描画プロセスを完全再現しないと
とんでもない事になる特殊なモデリングだから仕方なし 2D描画をステート変更無しで高速に行えて
少し古い環境でも動くのってTexture Atlasだけ?
ES3の2D Array Textureって同じサイズのテクスチャじゃないと駄目みたいだし
代わりになりそうなのはBindless Textureだけど普及してないし
当分Texture Atlasを使うしかなさそう Texture Atlasの手法だと色が混ざっちゃうからミップマッピング出来ないのだけ不便 2D描画でミップマップなんて使わないだろ
奥行きがある多重スクロールとかかよ マップチップ的なものならES3.0が使えるならArray Textureでいけるし
無くても1/4までなら画質は大丈夫
それ以外は諦める 同じシーンを描画し続けてて急に負荷が高くなる場合ってどんなところ疑うべき?
起動して10秒くらいまでは軽いんだけど、突然重くなってその状態を維持し続けるっていう…
ごちゃごちゃになってるプログラム整理しながら間違い探してるんだけどWGLとかシェーダとか色々初体験でどこが悪いやら… 多分、色々と食い潰してる。
どうでもいいが「重い」とか言っときながら、まさかプロセスやリソースの状態も
調べてないとか言い出すなよ? リッチなデバッガ、プロファイラのある環境で作ってEmscriptenで変換 あ、WGLってWebGLじゃなくてWinGLの事か。 >>58
デバッグ用の拡張命令とかも調べつつなんでお察しください…
>>59
JavaScriptとかよく分からないんだけど…C++コード弄るの飽きたら試してみるわ
>>60
不安になってググってみたらWinGLもなんか違うな…wglCreateContext関数とか使うやつだわ 最近のVisual Studioは無料版でもプロファイラが付いているからまずそれを使う
後はOpenGLデバッガのgDEBuggerを使うとか
>>61
それがWGLでしょう。 これとは無関係
てか普通WGLをWinGLって書く奴は見たことねえ
Windows ゲーム作成用ライブラリ for Win16/32
http://www.vector.co.jp/soft/win31/prog/se028202.html >>62
VSのプロファイラは使ってるけどgDEBuggerってのは使ってなかったので試してみるよ ありがとう WindowsでOpenGLするならNVIDIAだよな?
AMDは使ってないから分からんが多分大丈夫だろうけど
IntelのWindows用OpenGLドライバは腐ってる >>65
昔はNvidiaだったが、いまやOpenGL・OpenCLのデファクトVGAはATI
Win/Linuxで安定度・性能がNvidiaよりずっと上 AMDのMantleが元になってるからな。
これでAMDが負けたら日本人が日本語クイズでアメリカ人に負けるようなもの Vulkanは超シンプルなAPIだからハード性能がダイレクトに効いてくる
当然AMDのハードが良かったらVulkanで勝てるだろうが別に有利不利とかはない 文字列をテクスチャに描画するのにFBOを使っていたんだが
PCだと爆速なのにAndroid機 (Snapdragon 801)だと10〜20個ぐらいでもう60fps出せないぐらい遅かった
CPUで画像をコピーするのを避けていたんだが、FBOの切り替えやその他のレンダリングステートの変更、ドローコールが思ったより高価だったようだ
テクスチャを通さず画面に直接描けばそんな遅くないかもしれないが
設計的にそうも行かない事情があった
これはCPU側で全てテクスチャに使う画像を作って送るしかないんだろうか PowerVR系のTBDRが文字描画と相性が悪いというのは有名だけど
Snapdragon(Adreno)だと何だろうね
そのうちフォントのラスタライズもGPUで行う時代になるのかね
ラスタライザの実装自体は難しくないとしても
結局フォントデータが日本語だと1書体で数MB〜数十MBだからなぁ Android機なんてPCの10分の1程度の性能なんだからそんなもんだろ 言いたいことは分かるがAndroidとPCて比較できる関係にないだろ
それにデスクトップPCの時代は過ぎたし OpenGL ESはデスクトップで動くんだから完全に比較できるでしょ
あとデスクトップPCの時代が過ぎたって意味が分からん
Steamの同時接続ユーザー数がピーク時に1150万人以上を記録とか言ってるし
むしろ増え続けてる 日本ではPCは終わってるかもね。
いや、始まってすらいないか。
PC使えない老害と新卒新入社員が問題になる国だもんな。 問題って…どんだけネットに洗脳されてんだ…
仕事がPCが出来る出来ないだけで方が付くんであれば楽なもんだな こんな事書いてあるけどOpenGLのコマンドがすぐに戻って来ないって事は良くあんの?glReadPixelsみたいな結果を得る必要があるコマンドでなくても?
Chromeだと複数のプロセスからのOpenGLコマンドを一つのプロセスでまとめて実行してるようだ
http://www.chromium.org/developers/design-documents/gpu-command-buffer
The #3 goal is speed. Speed is why a command buffer implementation was chosen.
The client can write commands very quickly with little or no communication with the service and only once in a while tell the service it has written more commands.
For example, another implementation could have used a separate IPC for each OpenGL ES 2.0 function but that would arguably be too slow.
The command buffer gets another speed boost because it effectively parallelizes calls into the OS graphics API.
A call like glUniform or glDrawArrays might be a very expensive call but because of the command buffer the client just writes a few bytes into the command buffer and is done.
The GPU process calls the real OpenGL function on another process which effectively makes the program multi-core. コマンドが戻って来る来ないってのがよく分からないけど
処理が遅くなるって事なら前のコマンドが解決されてなかったりすれば後のコマンドもその分待たされるんじゃないの? >>77
そうじゃなく泥タブだってPCといえばPCだしPCの定義って何って話
MacはPCじゃないらしいけどな
Steamのユーザ数とデスクトップPCのシェアは別だよね
それにIntelHDユーザがどれだけいることか スマホから見ればPCはすべてを導いてくれる神様なんだからPC使えないんだったら黙って崇めとけ >>80
戻ってこないなんて書いてあるか?
ChromeとかブラウザのWindows版は全部WebGL(OpenGL)→DirectXに変換して実行してるから
その為に一旦自前のコマンドバッファに溜め込んでるよって事でしょ
その自前のコマンドバッファはマルチコア対応だから軽いよって書いてある
実際ANGLE使わずにOpenGLを直に使うようにするとCPU負荷が少し増える 別にANGLE限定とは書いてない
互換性やセキュリティの問題はWindows以外でも存在するし
複数のスレッドから直接OpenGLのAPIを呼ぶより
アプリ側でAPIコールを纏めて一つのスレッドから呼んだ方が速いとされているのだが
実際にどの程度速度が変わるのかは分からない
ドライバ実装によっても変わるかもしれない よく見たらWebGLの話しではなかったな…
HTMLレンダラーとかGPU使って描画する時の話しだったな
そもそもOpenGLはマルチスレッドに対応してないから複数スレッドからAPIをコール出来ない
複数スレッドからDrawコールをしたい場合は自前のコマンドバッファが必須だな >>86
別にWebGLでは使ってないとは書いてないけど
プロセス毎にOpenGLコンテキストを作ればマルチスレッドでも使えるだろうが
それだと遅かったのだろう 質問させてください。
100 millions個以上の三角形ポリゴンを60fpsで描画したいのですが
一番いいソフトウェア上の組み合わせって何でしょうか。
Windows10(64bit),,GTX750TI,i5,
VS2010で64bitビルド,freeglut2.8
描画にPBO用いてglDrawElements利用
で試したのですが,25 millions個の三角形メッシュで<1FPS程度です。
どうもfreeglutはGDI用いていてそれがボトルネックになっている気がしています。
レス読む限りWGLで書いていくのがよさそうな気がしましたがお知恵下さい。 まともなエンジニアなら
ソフトウェアの組み合わせの前に
100 millions個以上の三角形ポリゴンを
60fpsで描画しないで済む方法を検討すると思うが
要件をはっきりさせるべき >100 millions個以上の三角形ポリゴンを
>60fpsで描画しないで済む方法を検討すると思うが
要件は100 millions個以上の三角形ポリゴンを 60fps以上でです
これを回避出来ないか答えられません。済みませんが どんな解像度でレンダリングしようとしてんのかしらんけど8Kディスプレイでもピクセル数3300万だぞ
1億ポリゴンのうちどれだけ描画されるのか考えた?
その要件が絶対というならそのバカな要件を精々頑張ってくれ クラスター化したりGPU積むなりして分散レンダリング、通信して集めて重畳するくらいかね すみません、普段MAX/MSP以外のプログラミングには全然疎くて
それでMAXでOpenGLを使うときの質問なのですが
nurbs曲線を引きたいんです。
そこでjit.gl.nurbsオブジェクトで、曲面でなく曲線を描きたいのですが、
制御点(のx,y,z座標)を予め設定するには、どうしたらいいですか?
ググっても殆ど出てこないし、ネット上のチュートリアルには
jit.gl.nurbsの使い方なんて載ってません。
ヘルプを見ても、どうも最初に設定している様子もないので、困っています。
どなたか助けてください・・・ Maliでは各FBOのバインドは1フレーム1回までにしろって書いてあるけど
glClear()して同じのを使いまわしたのではパフォーマンス低下する?
https://community.arm.com/groups/arm-mali-graphics/blog/2014/04/28/mali-graphics-performance-2-how-to-correctly-handle-framebuffers
Binding each FBO (other than FBO 0) exactly once in each frame, rendering it to completion in a contiguous sequence of API calls. >>97
想像だけど1回までにしろといってるのはFBOをアンバインドする時に
そのFBOに対する描画が全部完了するまでブロックが発生したりするからだと思われる
だからglCleare()で使い回すのはパフォーマンスは低下しないでしょ
ただ別にFBO作った方が速いだろうね (レンダリングが並列に実行されるだろうから) >クラスター化したりGPU積むなりして分散レンダリング、通信して集めて重畳するくらいかね
これいいですね アイデア頂きです 分散レンダリングで60fpsを目指すとかさすがだな レイテンシ問わないならあるいは……
でも並列化が可能なデータなら
クラスタ化の前にできることがあるような…… ディファードレンダリングにして各GPUにどのタイルをレンダリングするかを
割り当てれば割と簡単に分散は出来そうだな
ただ頂点処理はかなり重複する事になるから多ポリゴンをレンダリングする
目的には1GPUの時とあまり変わらずに結局向かないと思うよ 4.2からglMemoryBarrier増えてるけどこれってComputeShader使う場合のみ
必要って認識であってる?
例えばTransformFeedbackでVBOの頂点情報変形させてから続けてそのVBO使って
通常の描画する場合ってMemoryBarriorしなくても古いVBOのキャッシュで
描画したりはしないよね Radeon R7 200 でVTFしようとしてるんだけど
バーテックスシェーダー内でvec4 col=texture(texture1,texcode0);
してもテクスチャカラーがuv 0,0の位置のしか所得出来ない
フラグメントでは問題無く持ってこれる、ドライバ問題? >>105
別にマイナーな機能でもないし可能性は低いと思う
最新のドライバにして改善しないなら多分お前のコードにバグがある
テクスチャ周りはミスしやすいから
テクスチャユニットの番号が間違ってないかとか
座標の値がおかしくないかとか
ユニフォームの設定が間違ってないかとか調べ直したほうがいい >>106
何か情報無いかなと書いてみたんだけど、
やはり自前バグの可能性たかいよね、もう一度調べてみるわ シェーダー内で途中でintを経由して値が0になってるとかだろうな 105の件解決(?)しました
4頂点の単純な板ポリで試してたんだけど四隅が全部黒の値拾っていた、
で
トーラスの頂点数の多い物で試したらキチンと反映していた
UVが1.0の値補完か何かで0.0位置の色を拾ってたくさいw >>110
VTFを数値データとして使うなら普通0.5足してピクセル中央をフェッチするんだよ >>111
もしかしてUVの画像位置と合わせて頂点を凸凹させる時も? >>112
すまん>>111は書き方が変だったので訂正しておく
0.5というのはu = (x + 0.5) / 1024 のようにするという事を言いたかった
だから最終的に足されるのは0.5とは限らない
要するにテクセルの値を取得する時にはそうすべきというだけで
2つのテクセルのフィルタリングされた値が欲しければする必要はないだろう >>113
やっと理解したかも、補完かからない対策ですね
、1ドットの中心をアクセスすれば安全って事ですか? >>114
そうだ
あとFILTERの値もNEARESTにする glPolygonOffsetでポリゴンの前後関係を調整するのに環境によって
前後関係が異なる結果になることがあるんだけど 上手い対策とか無いでしょうか? 上手い対策というのは知らないが
unitsを使わないとか
自前でオフセットを計算しとくとか
そもそもZテストを使わないとか あとglDepthRange()を使うというテクニックがあったような >>117
環境ってGPUの違いとかOSとかの事か?
単にシーンの違いとかだとまじめに計算すればちゃんとうまく行くはず
ちなみにZ値は遠くへ行くほど荒くなってるから同じオフセットでも前後関係は変わる 今までWindowsでDirect3D(9、11)を使ってたんですが、
新たにAndroidでOpenGL ES 2.0を使おうと考えています。
レンダリングした結果をCPU側に戻すのをやりたいんですが、
OpenGL ES 2.0で可能でしょうか? glReadPixelsで読める
が、激遅の場合がある、というよりまず遅いと思ったほうがいい
てかそれくらいググれ OpenSceneGraphなんてあるんだ。
始めて知った。
自作のシーングラフライブラリを置き換えようかな。 なんだOpenSceneGraphのライセンスはLGPL系か。
GPLは使えない(使いたくない)な。 LGPLは改変せずに使うなら幾ら使っても問題になる事はない LGPLはおおまかには、静的リンクか動的リンクかでソース公開の義務が変わる たしかライブラリ側が更新された時にプログラム全体が更新出来るように公開する、だっけ >>130
そういう事言うからLGPLが敬遠されるんだろうな
スタティックリンクでもソース公開の義務は無いよ
最悪*.oを公開するだけだ
それもゲーム機とか家電用の場合は実行ファイル自体が非公開だから*.oすら公開する必要はないけどな >>132
適当なこと言ってると後で痛い目見るよ
GPLって名前が入ってるものには一切手を触れないのが一番
ヨウ
ヨウ
エビバーデー
いい加減、「weight」を「重み」って言うのやめね??
あれは誤訳だ
英語のweightとは重さ・重量という意味もあるが「ナニナ〜ニに影響される」「行動や思想などに引っ張られる」
という意味がある
したがっちぇ、これは重みではなく「影響度」と言うべきなのだ!、
やっとglutに慣れて以前作った物理シミュレーションを可視化しようとしたら
これグローバル変数しか使えないじゃねえか 何にせよglutを新規に使う場合は割り切りが必要だよ
いまさら固定機能使うとか考えたくないし
固定機能相当で十分なら
もっと抽象度の高い(OpenGLを隠蔽した)ライブラリの方がいいんじゃね ■ このスレッドは過去ログ倉庫に格納されています