テラByteの時代にキロByte

shader又はdemosceneに関係する事

shaderシンセ用の自作クラスを使ってみる。その2

以前、書いたダイヤルで周波数を変える奴。 glSynth.pyはここ from glSynth import * class MainWindow(GLSynth): def __init__(self, parent=None): super().__init__() self.freq = 0 self.setVolume(0.8) def shaderScript(self): return ''' uniform flo…

shaderシンセ用の自作クラスを使ってみる。その1

shaderシンセ用の自作クラスを使って、shadertoyのmusic shaderを鳴らしてみる。 今回は Byte Beat をshaderでやってます。Byte Beatもdeepな世界ですよ。ほぼカンで勝負だ。みたいな世界だ。 glSynth.pyはここ from glSynth import * shadertoy = ''' vec2 …

shaderシンセ用のクラスを作る

やはり、毎回コピペで作るのは、いかがなもので、クラスを作りました。 しかし、世間でいうライブラリーとは言い難い。自分が使いやすいように作りました。 受け入れられるかは、置いておいて載せてみます。 とりあえず、ファイル名は glSynth.py と言う事に…

shaderでシンセサイザーへの一歩

pyside2にQDialを一つ配置。周波数を変えるダイヤル。任意のキーボード入力で発音。 とりあえずシンセの原形ができた。あとは、色々と試しながら遊ぶだけ。 音源を直接shaderにも書けるし、ツマミを使ってテストもできる。一つのscriptに機能を全部詰め込ま…

再)リアルタイム music shader (used transform feedback)

compute shaderで書いた奴を違うPCで試したら、使えなかった。どうなってるのだろう? なので、transform feedbackで書いた奴を載せておきます。きっと、こっちの方が安定してるかな。 そのうちにcompute shaderの方は調べてみます。 from PySide2.QtWidge…

pySide2を使ってリアルタイムでmusic shaderを鳴らす

pyside2を使ってリアルタイムでmusic shaderを鳴らしてみました。 リアルタイムなので、時間の制限がありません。これができればシンセサイザーを作るのも可能になってきます。 やっと、始められます。 <追記> このscriptは正常に動かないGPUがあります。…

SSBOでMeshを作る

ここ何年かvertex shaderでmeshを作っては、挫折しての繰り返し。compute shaderならイケるかなと閃いた。 これから試して行きます。 球のmeshをcompute shaderで作った奴。説明は、もう少し理解したら追記しておきます。とりあえず動いているソースを載せて…

fragmentでノイズのtextureを使わずにSSBOやってみる

3D_textureノイズを作るのをSSBOやってみる事にした。作り始めて気が付いたが、1次元の大量の配列のノイズは、簡単に2次元、3次元、4次元に加工できる。 その時の用途によりけりfragment shaderで加工してもいいかな? リアルタイムでノイズを生成するよりte…

SSBO経由でfragment shader

SSBOをバックバッファとして使いcompute shaderでグラフィックを作り、fragment shaderに渡して描写。 fragment shaderでSSBOからグラフィックを引っ張るのに必要なIDなのだが、 int(gl_FragCoord.x+(gl_FragCoord.y+0.5)*resolution.x) と、謎の0.5が登場す…

SSBOのデータを抜き取る (compute shader)

音楽を作る為にSSBOのデータを抜き取ってみます。 samples = (c_float * SND_NUMSAMPLESC)() glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, sizeof(samples), byref(samples)) この部分です。今回は音楽ですので簡単ですが、numpyとかで抜き取ってデータ…

SSBOの使い方 (compute shader)

やっとSSBOの上手い使い方を見つけた。 今回の例で書いてみる。 vertex shader とCompute Shaderに struct Particle{ vec4 pos; }; layout(std430, binding=7) buffer particles{ Particle par[]; }; これを書く。 compute shaderでは uint id = gl_GlobalIn…

Compute Shaderを書いてみた

pythonを使って、conpute shaderを書いてみた。 compute shaderでtextureを作り、fragment shaderでtextureとして貼り付けてます。とりあえず、変数をどう取り扱うかのテストを兼ねてます。 from OpenGL.GL import * from OpenGL.WGL import * from ctypes i…

mp4 fileを作る

qiita.com

wav fileを作る

qiita.com

gif fileを作る

<工事中>

webGLで同等の事をする。

前回のpythonソースをwebGLに書き直すと、openGL部分は、ほぼ一緒ですが、音楽部分が別物です。 <script id="vs" type="x-shader/x-vertex"> #version 300 es void main() { gl_Position = vec4(ivec2(gl_VertexID&1,gl_VertexID>>1)*2-1,0,1); } </script> <script id="fs" type="x-shader/x-vertex"> #version 300 es precision highp float; uniform ve…

demoのc言語のソースをpythonに移植。

c言語のソースをpythonに移植しました。だいたい似た感じでつくっているので、この2つを見ていけば、python<->c言語は出来るようになると思います。関数の引数とか手順に関して言えば、全く同じです。pythonの場合は、フラグの定数とか、構造体を別途、書か…

C言語でdemoを作る。

demoを作るには、c言語は、避けて通れません。なのでc言語の話から。 c言語を使って作るのですが、c言語のスキルなんて、ほぼいらないです。なんとかなります。 以前iq氏のページを見たのですが、デバック用とリリース用のc言語のソースが載ってました。 考…

差し当たりの方向性

この前、ちょっとしたアイディアを思いついた。 compute shaderの使い道で、モデリングを思いついた。ポリゴンを計算してモデルを作る。8K introなら、いけると思うよ。たぶん・・・。ついでにスキニングだ。— gaz (@gaziya5) December 21, 2018 で、これを…

ブログ始めます。

とりあえず、ブログを始めてみます。 webGLでcompute shaderが使えるようになりました。まだベータ版ですが、新しい可能性が出てきました。しばらくは、これの試行錯誤のことを書いていく予定です。 基本、ボビープログラマーなので、世の中の流れとか関係な…