(sim) ベガス・スフィアのためのシェーダー作成
(whenistheweekend.com)- The Sphere ページは、5つの例とGLSLシェーダー断片を通じて、球体表面の色をどのように計算するかを示している
- シェーダー入力は
time、vUv、vNormalで構成され、時間とUV座標が色の変化の中心となる main()はgl_FragColorにvec4(...)を入れて、各ピクセルの最終色を計算する- RGB値は
cos(time + vUv.xyx + vec3(0., 2., 4.))を基に生成され、時間ベースの変化を表現している - 宣言された
vNormalは、提示されたコード断片内では使われておらず、現在の色計算には影響しない
The Sphere ページ構成
- タイトルは The Sphere
- 本文には
example 1からexample 5までの例の表記がある - 続いて、GLSLと思われるシェーダーコードが配置されている
GLSLシェーダーコードの流れ
- 入力変数は
time、vUv、vNormalの3つtimeはuniform floatvUvはvarying vec2vNormalはvarying vec3
main()関数がgl_FragColorを設定する- 色は
0.5 + 0.5 * cos(...)の形で計算される cos()の入力には 時間値、vUv.xyx、vec3(0., 2., 4.)が一緒に入る- アルファ値は
1.に固定される
1件のコメント
Hacker News のコメント
Matrix 風のエフェクトを動くようにした。
球の上部が見えるように UV を調整しようとして諦めたが、three.js の uniform である projectionMatrix と modelViewMatrix は、GLSL の先頭で宣言しておくだけで参照できた。
静的な Penrose タイリングを作った: https://gist.github.com/vjeranc/265db912d4004c7c0b0f16ae5fda...
球は無限ではないので非周期タイリングを使う実用的な意味はないが、それでも見た目はよい。
無限の円錐をタイリングできる似たタイル集合や単一タイルがあるのかは、まだ分からない。
興味深い問いは残るだろうが、どの投影に意味があるのかが十分明確ではなく、これ以上掘り下げにくい。
少し話題からそれるが、The Sphere が実際にどれほど大きな工学プロジェクトなのかが魅力的だ。
構造物そのものから、球の内外にある数千枚の LED パネルの同期、ラスベガスの暑さの中での冷却、内部の 18,000 席を十分涼しく換気された状態に保つことまで、すべてが含まれる。
普通のオフィスビルでも、まともに換気できていないところは多い。
簡単な smiley.frag を作ってみた: https://gist.github.com/nickbarth/4ec5147bd1288fd2bcfc4c5b46...
プロジェクトがとても良い。
各コードに個別の URL があると共有しやすそう。URL の中にコードを埋め込む方式でもよさそうだ。
大きなスマイル顔シェーダーを作った。
sdRingで口を作り、左右対称を利用して目を一度に処理したうえで黄色で出力する GLSL コードだ。シェーダーを初めて触って、回転するスイカを作った。
RGB タプルを扱っていて、
fract()が剰余演算のように見え、その値を二乗して足すことで滑らかな帯を作っている、という程度は分かるが、シェーダーが正確にどう動いているのか、vUvが何なのか、gl_FragColorがどこに代入されるのかはまだ不透明だ。その後、三角形をフラグメント、つまりピクセルに分割し、各フラグメントごとにフラグメントシェーダーを実行する。
ここでは、すべてのフラグメントに同じ値として入る
timeuniform と、頂点から出力された後に三角形内で線形補間されるvUvが入力で、vUvは球上のピクセル座標に相当する。gl_FragColorはそのフラグメントに適用される RGBA 色の出力だ。一般的なゲームや Google Earth のシェーダーなら、ここにテクスチャリングとライティングが加わる。GPU の実行モデルはピクセルを 1 つずつコーディングしているように見えるが、実際には SIMT なので、NVIDIA は 32 個、AMD は 64 個のピクセルを同時に処理する。
条件文はおおむね、両方の分岐を実行する条件付き演算に変わると考えればよい。
https://www.shadertoy.com/ も気に入ると思う。
https://www.glslsandbox.com のシェーダーも見る価値がある。
ただし、そこには未熟な人たちが NSFW シェーダーを頻繁に投稿していて、管理者がそこまで細かく見ているわけではなさそうなので注意が必要だ。
「NSFW GLSL コンテンツ」のコルモゴロフ複雑性がどの程度なのか気になる。
https://www.glslsandbox.com/e#108133.0
NSFW: https://www.glslsandbox.com/e#108230.3
コードのコメントには、ChatGPT に体をもっと太くし、背景のスクロール線を追加し、色を変え、特定の身体部位を追加するよう求めるプロンプトが残っている。
とても良い。
私の isocity プロジェクトに誰かが投稿した解法を見ると、作った都市を URL で共有できるようにしている。
似た方式を実装できそうだ: https://github.com/victorqribeiro/isocity/commit/c6588171e37...
The Sphere はデモパーティーを開くのに素晴らしい場所になりそうだ。
https://en.wikipedia.org/wiki/Demoscene#Parties