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/ Javaだろうと、NDKだろうとスレッド別なら全く別処理でテクスチャも何もかも共有できないよね? OpenGLESの知識は浅井ですが、自分の認識です↓
ttp://eaglesakura.hatenablog.com/entry/2013/12/28/235121 >>646
shared_contextは遅いの? >>632
遅いのはJAVAとかNDKとか以前にreadpixelじゃないの? >>648
そうです。
その代替案を探してるだけなんですが、描画と処理のスレッド別なので、テスクチャIDやフレームバッファを共有できない(EGLコンテキスト共有できない)と思ってましたが方法ありそうですね androidのことは詳しくないけどJava側のレンダリングスレッドからネイティブのレンダリング処理出すんじゃだめ?
CPUは並列に動かせてもGPUは並列には動かないし、別スレッドに分ける意味余りないよね? レンダリングを別スレッドでやりたいわけじゃないでしょ。 並列で動いてるんじゃねレンダ要求直後VBO書き換えるとチラつく >>652
実装はAPIの関知する限りではない
いわゆる未定義動作の類なのでは? 未定義つうか禁則じゃねVBO使わずにnioバッファの時は勝手に調停してくれてたんだが ほんと初心者で申し訳ないのですが、質問をお許しください。
現在、MAX/MSP jitterを使っているものです。
GLSLの勉強をしているのですが、例えばjitter側で生成した球に、
グローエフェクトをかけたい場合、どういう考え方でGSGLを記述したらよいでしょうか。
vvvvとかならグローエフェクト専用のノードで一発なのに、
MAXでシェーダを書く場合の例とかいろいろ検索しても出てきません。
質問自体もおかしなところがあるかも知れませんが、是非MAXの環境で
映像を作っていきたい理由があるので、どなたかご教示お願いします。 未定義は定義してないってことだね
禁則はやっちゃいけないってことだね
全然別の意味だね君の頭の中までは文句は無いよ
脳内の混同は取るに足らないありふれた事象だし >>657
プログラマは未定義動作をするプログラムを書いてはいけない事に変わりない。やっちゃいけないことだよ。 未定義動作とごっちゃにしているんだろうなと思ったら案の定。 未定義動作しても構わないよ
そこに到達しないコードを書くのが基本 未定義動作なんて聞かない言葉だと思ってググったらバッファの初期化忘れのことかよ
もしも初期化してなきゃ最初の1フレームは起きるかもしれないが件のは前のフレームと
次のフレームとの境目で起きると思われるちらつきだから未定義動作とやらでは無いわな WebGLだとセキュリティ上の理由でglMapBufferみたいな安全を保証できない機能は使用禁止 GTX1060(モニター@を接続)とQuadro4000(モニターAを接続)の2枚差し
PhotoshopなどのOpenGL系でGTX側に接続しているモニター@を10bitカラー表示させることってでませんか?
どのような効果が見込めるか分からなかったのですが、
NVIDIAコントロールパネル/3D設定の管理/OpenGLレンダリングGPU
の設定ではグローバル設定→Quadro4000に変更してみました photoshopなら設定にあるけど他のソフトはソフトが対応してるかだからユーザーがどうこうできる問題じゃない >>664
つうかWebGL以前にglMapBufferはOpenGL ESにねーし
GLESベースのWebGLに無くて当然
WebGL1.0でもテクスチャ使えば似たような事は出来る glewの2.0.0のVC10のglew.slnをビルドすると
error LNK2019:未解決の外部シンボル memsetが関数 glewContextInitで参照されました
と出てビルドできないのですが、どう直せばいいのでしょうか? ちなみにソリューションを検索しても「memset」の文字列は出てきませんでした。 VAOで描画する時ってglBufferSubDataとかで毎フレーム頂点データを書き換えるような場合は使えない? VAOって何よ GL_DYNAMIC_DRAW指定しとけ glslのIDEとかってないですか?
vulkanで使うのですが 人とAIの共存を主とする「Google PAIR」、機械学習(NN含む)をブラウザ上で全て実行できるWebMLライブラリ「deeplearn.js 0.1.0」をリリース
http://shiropen.com/2017/08/12/27359
人を中心としたAIシステムの研究と設計をするGoogleのプロジェクト「The People + AI Research Initiative(PAIR)」は、
ブラウザ上で機械学習(Machine learning)を全て実行できるオープンソースライブラリ「deeplearn.js 0.1.0」をリリースしました。
本ライブラリは、可能な限り多くの人に機械学習を開かせたいという思いのもと開発されました。
その為、インストールやバックエンドなし、ブラウザ上で全て実行できる仕様になっています。
今までもWeb Machine learning(WebML)ライブラリは存在していましたが、
Javascriptの速度によって制限されていたり、
訓練ではなく推論に限定されていたりしていました。
一方で、deeplearn.jsは、
WebGLを利用しGPUで計算することで大幅にスピードアップさせ、
またニューラルネットワークを学習させる際に用いられるアルゴリズムBackpropagation(バックプロパゲーション)機能も備わっています。 > 「OpenGL 4.6」が公開
> 「OpenGL 4.6」の仕様公開を発表した
> OpenGL 4.5は2010年に登場したOpenGL 4系の最新版。
> OpenGL 4.5の仕様はプロジェクトのWebサイトで公開されている。 Androidで動くVulkanとOpenGLESの比較できるベンチマークアプリ知らない? >>679
スラドのhylom
OSDNマガジンの末岡洋子 最新トップYoutuberの年収は10億円、1億円の時代はもう古い
http://www.himatubushisp.com/entry/2017/05/10/224945
Youtuberヒカルが月収を明らかに!!おはよう朝日です出演
https://www.youtube.com/watch?v=RLZGrqQnnZc
第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ!
https://www.youtube.com/watch?v=asF2wQ2xhjY&t=61s
ユーチューバーの儲けのカラクリを徹底検証!
https://www.youtube.com/watch?v=FUSb4erJSXE&t=504s
【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開!
https://www.youtube.com/watch?v=Y7DAQ0RKilM&t=326s
誰も言わないなら俺がYouTuberのギャラ相場を教えます
https://www.youtube.com/watch?v=E4q-vaQh2EQ&t=118s
最高月収5000万円だとさ。年収じゃなくて「月収」な
おまえらもyoutubeに動画投稿したほうがいい
手っ取り早く視聴数稼ぐには有名ユーチューバーへの物申す系動画がオススメ
しばたーやよりひとやkunやぽんちやモンスタージョンなどを真似すればいい AndroidでGLES2で実装されてるやつをVulkanに置き換えてみたんだが1/3(GLES2は45 Vulkanは15程度)しかFPS出なかった。(3D性能自体あんまりよくない中華スマホ)
単純に置き換えただけじゃFPS出ないとはよく言われてるし最適化考えてないベタ移植だからこんなもんかなぁと思ってたんだが、Windows上のNVIDIA環境で動かしたら1割アップ(GL3は880、Vulkanは1000)してた。
これデバイスの特性ってやつなのかスマホのドライバーがアレなのかどっちだと思う?
デバイスの特性だったとしたらどうやって最適化したらええんやろか… モバイルだとライフサイクルからして
ドライバとデバイスを分ける意味はあんまりないと思うけど
ベタ移植でも環境によっては効果があるなら
両方実装して性能の良いほうに切り替えれば良いのでは 素人が効率の良いOpenGL実装をVulkanで作るって不可能な気がするので
ANGLEに期待
ANGLE on Vulkan Update Q1 2017
https://groups.google.com/d/msg/angleproject/HfDeJyIXlrU/MnSe6jNiAQAJ 自前じゃ一枚絵を出すのも大変そうだから公式レンダラを
みんなでチューニングやカスタマイズみたいな方向になるのかしらね >>683
不明要素が多いから何とも言えない
バックバッファの切り替えウェイト、デバイス固有のリミッタとかに填まっている可能性もある。
中身はARMで泥ならば、所詮はVM。
変更できない要素に左右される。
例えば、電池消耗を抑えるためにフレームレートを制限なんかは想像しやすい。
MS違う iOSはJava使ってないから無条件に速いと思ってる
iPhone信者か 電池理由でアプリに制限を掛ける。
そういう設計もあるって話。
スマホでfpsを求めるのが間違い。
一番電池を消耗するのは、電波発信。
次がバックライト。その次がプロセッサ どう解釈したら>>690と>>687が繋がるのかさっぱり分からん
電池理由でアプリに制限を掛ける設計があるとして
GLES2とVulkanで性能差が出る説明にならないし
結局はアプリによるが
性能が限られたスマホだからこそfpsが求められるんじゃないの?
要求が60fps超でなく例えば30fpsだとしても VulkanってAndroidのJava APIからは使えないよね 用意されるのかなそれともvulcan入れてあるけどNDKでやってくれとなるのか JavaってC#みたいな構造体やポインタの操作みたいな
ローレベルな事は出来ないけど
VulkanみたいなローレベルのAPIを持ってけんの? 提供されるとは思わんが
できるかできないかで言えばで
構造体は「同等のバイナリを生成する」クラスで実現できるし
ポインタ操作(演算)はそもそも必要ないだろう
ポインタ使った最適化したければNDK使えで済む話 >>691
そのデバイスでバックバッファをクリアとスワップをするだけのアプリを走らせれば、性能が出せるのかは、わかるだろ JavaからじゃvkMapMemoryで頂点バッファにアクセス出来ないよな
WebGLも同じような理由でglMapBufferがない
代わりにglBufferData的なバッファのアップロード用の関数が必要 3DMarkに追加されたAPI Overhead TestをHuawei P10 Liteでやったが
OpenGL ES 3.0: 31547
Vulkan: 45753
でVulkanの方が45%ぐらい早いという結果に
ミッドレンジのGPU貧弱な端末だとこんなものか
Galaxy S7 edgeだと5.8倍近い差がつくらしい
http://www.4gamer.net/games/143/G014363/20170818014/ >>698
おー情報サンクス。リリースグットタイミングだわ。
グラフ見るとOpenGLESのほう60までしかFPS出てないからvsyncで頭打ちになってるっぽいね。
単純にスコアの比較はできない
俺もHuawei P10 Liteだからやってみたけど
GLES 36950
Vulkan 53200
だったけど、GLESは60以上出てなかったし、Draw Call per frameの線とFPSの線が交わる高さが一緒だから効率全く変わらない気がする(リンク先のGalaxyだとVulkanの方が交わる位置が高い)
CommandBufferを一度作ったら作り直さないみたいなLowLevelAPIに有利さな実装になってると思うから、それで互角ってことはそれができないアプリだと逆にVulkan負けそう。もちろんP10 Liteの話ね。 OpenGL ES超絶難易度アルティメット級でワロタw
俺かなりITと親和性も高いし、3Dそのものは15年以上やってるけど、
CGがちゃんと表示できないwwww
これどうやったらちゃんと表示できんの?w
もう2週間くらい挑戦してるけど全く進まなくて辛すぎwwwwwwwwwwww
教えてえろい人w それはみんな通過する儀式的なもの絵を出せて半人前
しかし泥なんかあんなにユーザーいるのにまともなレンダラ無いんだよな
テクスチャと頂点と視点渡せば絵が出るようなやつが最初からあれば
捗るんだが そんな中途半端なものがまともだとは思えないんだが。 中途半端かね?完成したものはどんなだか興味があるな
入門者が玉転し作れる程度の物すらないのよね 初心者向けならユニティでいいじゃないかと。
なんでJavaで作りたいのか OpenGL 4.6の進化点やOpenCLの将来について,Khronos Group代表のNeil Trevett氏に聞いてみた
http://www.4gamer.net/games/107/G010729/20170907023/
・OpenGL 4.6がリリース
Vulkanとの相互連携機能を搭載
・2017年はVulkanのアップデートなし
移植工程を短縮するラッパーの開発が進む
・OpenCLソフトウェア資産をVulkanで動作させるソリューションを開発
・glTFは物理ベースレンダリングに対応
WebGLはFlash終了問題が普及の追い風に
・AMDの「プリミティブシェーダ」は,OpenGLやVulkanに取り入れられるのか? glTFの物理ベースって
最新観てもペンディングだったんだが。
器を汎用的で高機能を目指すにしても、別にこの形式のままシェーダに流し込む訳でもないだろうと。 初心者がスクラッチで0からレンダラ書くと年単位でかかる
発熱が少ないバイナリが小さいユニティ使ったこと無いけどなー 最新のOpenGLでできることを
OpenGL ESで実現しようとすると大変だが
OpenGL ESで実現できることは
OpenGLでも(スレチだがDirect Xでも)大差ないと思うんだが
>>700はなぜES名指しなんだろう? 昔のOpenGLはシェーダとか使わなくてもよかったからじゃないかな。 OpenGL 1.5が約15年前な訳だが
携帯デバイスだとデバッグがやりにくい
というのなら分からんでもないが
それは難易の問題じゃないしなぁ 昔のOpenGLを再現するデフォルトシェーダーとかあると良いのにネ 俺がOpenGL始めたの2007年くらいだったけど
そのころは固定機能パイプラインによる解説ばっかだった気がする。
スマホが普及してESが登場した頃から日本度でもまともにGLSLを学習できるようになった気がする。 当時はリアルタイムグラフィックス分野はDirectXが開拓していた
だからあえてOpenGLをやる人は
クロスプラットフォームだとか互換性を重視していた
DirectXやっていた人がOpenGLに流れたのが
スマホが普及してESが登場した頃であって
OpenGL内だけで言えば固定機能パイプラインとの決別は
OpenGL3の策定時点(それこそ2007年頃)で既に決定的だったと思う >>712
それなら素直にOpenGLES1.1使えばええやん 動作も軽いし製作者の力量でソコソコ綺麗な絵出るもんね
ただ時代の流れでサポ切りとかあるのか無いのか知りたい GLES自体新しくて多くの端末で動いてるし動かないアプリが出ても困るから安易に切られることはナイアル スマホはDirectX使えないからな
必然的に互換性という面でOpenGLが出てくる
スマホ、特にAndroidはパフォーマンス厳しいしVulkanに頼りたくなる OpenGL系は基本後方互換前提の代物だからそうそう切られることはないはず
アーキテクチャの違いでパフォーマンスが下がるとかはあるかもしれないけど誤差の範囲でしょ GLUT (pronounced like the glut in gluttony) is the OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. glutでポリゴンにアンチエイリアスかけれないんだが。
線ならかけれるのに。
どうやんの? 実際のところ画面の高解像度化で
アンチエイリアシングなしでも
そこそこ鑑賞に堪えうるようになってしまった
ミップマップや異方性フィルタリングは欲しいが WinはDirectX
MacはMetal
VulkanはLinux専門になりそう ほんでもクロスプラットフォームにしようとおもったらVulkan一択なんやろ? >>730
別にWinでもVulkan普通に動くじゃん
Androidでもいつかはみんな使うようになる
問題はAppleなんだよな AppleはmacOSでもiOSでもAPIとして採用する気無はなくMetal以外眼中に無い感じやしね
最近Web標準のAPI草案にMetal特有の仕様を突っ込もうとしてMSとGoogleに反発されてなかったっけ 各プラットフォームが足並み揃えてくれないと、クロスプラットフォームが形骸化してしまうし使う意味もなくなるな
WebGLはどうなるんだろ
ライブラリの開発者は大変だな 物凄く大変だとは思うがそれに見合った収益はあんのかしら glfwとglewで OpenGL 4.6 ターゲットにプログラムしています。
glslの "layout(binding = N)" が反映されず困っています。
glGet○○すると 0 が返って来ます。
どうやら宣言順にインデックスが付けられてるようで
glGet○○の値を使えば正常に動作します。
でも気持ち悪いです。
何で binding 指定が有効にならいのでしょうか?
初めはUniformBuffer使おうとして気づいたのですが、
ショートプログラムで確認した結果、
shaderStorage、sampler、image等も同じく反映されないようです。
環境はGeforce GTX760、ドライバVer388.13、VSコミュ2017使ってます。 >>736
横からだが、シェーダ側で指定したバインド順番をCPUに強制させたいという話かと理解したが
それは後方互換性を維持するためではないかと DX9cから始めて11のあとにglに来たんだが
混乱と雑音をうむだけの後方互換性は、はよ切り捨てろとは思った。
glは統一規格を目指してない。
専用機での利用を大前提としたGPU規格のテンプレートみたいな印象がした。 >>736
GLSL一行目の#version指定が正しくないとか?
layout指定は300以降だったかな?
OpenGL/GLESとGLSLのversion指定って混乱するよね…… >>739
一行目必須、BOM禁止。コメント禁止だしね
それ以外もドライバ依存が激しい。
PS4やDSなんかのコンソールやiPhoneなら、それ以外がないから気にならないが
泥の現状はカオス、コキュートスモード 腹が立ってきた。
glはハードウェア実装に特化して作る方ほことを考えてないんだな。
directXが至高と思えてきた。
せめてカレントあたりについては、リファレンスも目的語か「どこに」を書けよ。 自己解決しました。
glGet(Uniform/Resoruce)Indexが返す値が"layout(binding = N)"のNと思い込んでいました。
プログラムオブジェクトに入力するパラメータは必ずバインドしないといけないと思い込んでおりました。
layout(binding = N) と glBindBufferBase(GL_UNIFORM_BUFFER, N, ubo);
が対になっていてglUniformBlockBinding呼ぶ必要ないと。
酒飲んでプログラムすると駄目だなぁ。 ■ このスレッドは過去ログ倉庫に格納されています