テラByteの時代にキロByte

shader又はdemosceneに関係する事

pygameでsound shaderを使い音を鳴らす

普段使っているsound shaderをpygameに組み込んでみた。 transform feedbackを使っているのでグラフィック部分は要らないのでOpenGLのcontextは短く書ける。 compute shaderでやる方法もあるので、そっちも試したい。 とりあえず、コードだけ。 from os impo…

pygameでOpenGLとその他のimageを同居させる

pygameでOpenGLをすると全画面を独占される。それだとglutでやる事と変わらない。pygameの特性を活かしきれない。そこでOpenGLをimageとして使う方法をやってみた。imageをつくるのにpycairoというライブラリーも使ってる。細かい説明も厄介なのでコードだけ…

JSの圧縮

JSの圧縮ツールにJsExeというのがある。ちょっとダウンロードしようとしたが出来なかった。 JsExeは持っていたが、どうせならばで作ってみた。 参考にした記事は yomotsu.net 正月早々に、俺は何でJSでバイナリなんて弄っているんだって、ぼやきながら、ずぶ…

リアルタイムコンパイルのsound shader editor

考えてみたら、リアルタイムコンパイルのsound shader editorって無いですね。使いたい人がいるかもで、pythonのソースを載せる事にしました。ファイルの入出力は付いていません。ライブコーディングみたいな感じで使えます。ちょこちょこと音が変わるので面…

pythonでmidiを使う

pythonでmidiを使う為のコード。rtmidi2でコールバックを使う方法。 import rtmidi2 import time from ctypes import * def callback(message, time_stamp): print(message, time_stamp) midi_in = rtmidi2.MidiIn() midi_in.callback = callback if len(rtm…

pyOpenGLをace.jsのエディターでリアルタイムコンパイル

pythonでOpenGLを使いだして何年か経つ。コンパイル時間がWebGLより断然速いし、FPSも出て素晴らしいのだが、これを使うための環境が酷過ぎる。いわゆるGUIが酷い。twiglのような快適に使えないのである。リアルタイムコンパイルを味わうとチマチマとshader…

つぶやきGLSLで俺的raymarching

やり方と言うのは色々あるので俺的raymarchingって事にさせてもらいました。 久々につぶやきGLSLをやったら、スタイルを忘れてた。なので纏める事にしました。 2通りの手法を使ってました。一つはレイが衝突したらループを抜けて色を付ける方法。もう一つは…

つぶやきGLSLで使ってるレイベクトル

つぶやきGLSLでraymarchingをする時に使ってるレイベクトルについて書いてみます。twiglのgeekest(300es)のフォーマットで話は進めます。 通常のレイベクトルは normalize(vec3(((FC.xy*2.-r)/r.y),2)) と、だいたい2.0くらいを焦点距離にして作る。それをつ…

shaderでmat4を使う為のあれこれ

最近はGPUが強くなってきたのでraymarchingで複数のオブジェクトも大丈夫かなと思えるようになってきた。だけど扱うオブジェクトの数が増えてくれば姿勢の管理の大変になる。そこでmat4を使ってみます。 普通raymarchingをするならmat4なんて面倒で使いたく…

ChucKにmusic shaderを移植

ChucKにmusic shaderを移植してみた。 まだ覚え始めなので、怪しいところもあると思います。 今回使ってるadsrの関数には、バグがあるので鵜呑みにしないでください。ここでは正常に動いているけど、違うパターンでダメな時がありました。そのうち直します。…

--shader(GLSL)の小技 19-- 敷居の低いmusic shader

グラフィクを書いていると音楽をつけたくなります。だけど、shaderで音を出すのは敷居が高すぎる。 そこで、敷居だけは低いByteBeatを紹介します。敷居は低いけど奥は深すぎです。でも。お気楽に手を出すのはには、ちょうどいい。 説明は、難しいのと、忘れ…

--shader(GLSL)の小技 18-- 距離関数専用エディターを移植

はてなブログでjavascriptが使えるようなので、以前、jsdo.itに書いた距離関数専用エディターを移植した。 たぶん雰囲気で使えると思います。 サンプルを幾つか用意しました。リストで距離関数を選択、エディターの中を適当に編集して、runボタンを押して遊…

--shader(GLSL)の小技 17-- twitterに書いた小技のリンク集

小出しだけど、twitterに小技を書いてきた。バラバラになっていたので、まとめてみた。 スムースabs()の作り方。floatをpとした時abs(p)はp-2.0*min(0.0,p)と置き換えられる。なので#define smin(a,b,k) -log2(exp2(-k*a)+exp2(-k*b))/kp-2.0*smin(0.0,p,32.…

--shader(GLSL)の小技 16-- 湾曲と補正

距離関数に入れる前の座標を湾曲させます。単純にすると歪がでるので、それを補正します。 www.iquilezles.org ここにも載っていますが、違う方法でやってみます。 まず、プロットに使うような関数を用意します。 float func(float x) { float t = iTime*3.0…

--shader(GLSL)の小技 15-- 極座標で折りたたむ。

折りたたみとはabs()を使うだけの事。ただ、バリエーションが色々と有り過ぎる。フラクタルまで、当てはまる。ちょっと説明しようもない事に気づいた。 ここでは、極座標を折って行く方法をやってみます。 p-=2.0*min(0.0,dot(p,v))*v; これは任意方向の折り…

--shader(GLSL)の小技 14-- raycastで面をつくる。

raycastで面をつくる。このやり方は、応用範囲が広いと思ってる。複数の四角を作り、その中で別々のraymarchingも出来たりする。 vec2 rayCastPlane(vec3 ro, vec3 rd, vec3 pos, vec3 nor, vec3 up) { float z = dot(pos-ro,nor)/dot(rd,nor); vec3 p=ro+rd…

--shader(GLSL)の小技 13-- ボリュームレンダリング

これは、ボリュームレンダリングです。shadertoyでたまに、見かける方法です。 float sphere(vec3 ro, vec3 rd, float r){ float b = dot( -ro, rd ), inner = b*b - dot(ro,ro) + r*r; return inner < 0. ? -1. : b - sqrt(inner); } これは、半径rの球にra…

--shader(GLSL)の小技 12-- 3Dプロットをしてみる

これは、raymarchingでは、ありません。 float dePoint(vec3 ro, vec3 rd, vec3 a) float deLine(vec3 ro, vec3 rd, vec3 a, in vec3 b) float deCircle(vec3 ro, vec3 rd, vec3 p, vec3 n, float r) rayの原点、rayのベクトル、位置座標等を使い、距離を導…

--shader(GLSL)の小技 11-- rayの勢いを抑えて中途半端な距離を利用する

今回の奴は最近みつけたスキルです。 ネーミング的にはゴーストなんて呼ぶのが良いかななんて思ってます。 使用例として www.shadertoy.com vec3 col=vec3(0); for(i=1.0;i>0.0;i-=1./30.0) { t+=d=map(p)*(0.2*sin(iTime)+0.6); if(d<0.001) { if(uv.y>0.0)…

--shader(GLSL)の小技 10-- raymarchingでmod()を使わないで大量モデル描写

raymarchingでmod()を使わないで大量モデル描写する。TDFのデモで使った手法だけど、誰もとってくれないので、自分で解説する事にしました。 一個一個をバウンディングして範囲に入っていたら、z値を比較し、手前なら描写という手法。GPUによるがGeForce GTX…

--shader(GLSL)の小技 09-- オブジェクトをある点に向かす

オブジェクトをある点に向かすには、mat3()を使います。lookat行列と同じ作り方をします。 違うのは、かける順番。 本当は逆行列を使うのでしょうけど、GLSLの場合は、かける順番を後にすると逆行列扱いになるようです。 // point at vec3 w=normalize(ta-q)…

--shader(GLSL)の小技 08-- Capsuleの距離関数からオペレーション部分を取り出した

Inigo Quilez :: fractals, computer graphics, mathematics, shaders, demoscene and more ここにある sdCapsule の距離関数 float sdCapsule( vec3 p, vec3 a, vec3 b, float r ) { vec3 pa = p - a, ba = b - a; float h = clamp( dot(pa,ba)/dot(ba,ba),…

--shader(GLSL)の小技 07-- 立面と側面の距離関数を使って3次元の距離関数

立面と側面の距離関数を使って3次元の距離関数作る方法。 2次元の距離関数取得 -> 2次元の距離関数取得 で3次元の距離関数になる。 2次元の距離関数を用意します。 float lengthN(vec2 v, float n) { vec2 tmp = pow(abs(v), vec2(n)); return pow(tmp.x…

--shader(GLSL)の小技 06-- raycastをraymarchigに同居させて文字を描く

raycastをraymarchigに同居させて文字を描くことをやってみます。 細かい説明は、そのうちに追記します。何故なら、すっかりアルゴリズムを忘れてました。 raycastはエフェクトに使える可能性があるので、又、取り上げてみます。 shaderの中に文字が出るのは…

--shader(GLSL)の小技 05-- 距離関数でバウンディングボックスを使う

raymarchigの進行を高速にする為のバウンディングボックスというtrick。raymarchigはモデルが増えれば増える程、GPUの負荷が増大する。そこで、モデルをグループにしてバウンディングボックスに納めるtrickを作ってみた。モデルが少ない時は邪魔ですが多い時…

--shader(GLSL)の小技 04-- 距離関数に色情報を含めないで立ち回る方法。

raymarchingにおいて色を取得する部分というのは、その仕組み上、一番やっかいなところ。みんな手を変え品を変えてとやっている。map(距離関数を格納する部分)は一番アクセスするので、なるべくコンパクトにしたい。なので、ほぼ無駄な処理を繰り返す色の情…

--shader(GLSL)の小技 03-- カメラの使い方

今回はカメラの使い方についてやってみます。これについては、色々を書き方があって人それぞれですが、ここではmat3()を使うやり方を使います。ここをブラックボックスで使うのもアリだけど、理解して使った方が、スッキリしてshaderが書けるし、3D空間のコ…

--shader(GLSL)の小技 02-- オブジェクトの回転

基本shaderは、リアルタイムなので、動きが欲しくなります。なので、移動より回転を先にしたくなります。 なので、今回は回転について。 3Dの回転なので、mat3の行列が必要と思われがちですが、2Dで回転させた方が、おすすめです。 mat3だと、xyz各軸用の行…

--shader(GLSL)の小技 01-- なるべく短くraymarching

最近、jsdo.itが繋がりにくくなり、今まで書き溜めたモノが簡単に見れなくなりました。 ちょっと、不便なので、ここに移す事にしました。せっかくなので、少し解説を付けたりしてみようと思います。 それと、今まで集めたり、作ったりしてモノも纏めてみよう…

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

キーボードを鍵盤に見立てて、音階を出せるようにしました。ADSRをツマミで調整できるようにしました。 ブログに書けるスクリプトは、このくらいかな。これ以上は、音色の調整の世界、個人の好みの問題になるので、書いてもスルーのみたい。 一回、ブログと…