テラByteの時代にキロByte

shader又はdemosceneに関係する事

2019-05-01から1ヶ月間の記事一覧

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