ShaderToy は、ピクセル シェーダーを作成するためのツールです。
ピクセル シェーダーとは
フル スクリーン クワッドをレンダリングする場合、つまり 4 つのポイントのそれぞれがビューポートの 4 つのコーナーの 1 つに配置される場合、そのクワッドのフラグメント シェーダーはピクセル シェーダーと呼ばれます。画面のピクセル。したがって、ピクセル シェーダーはフルスクリーン クワッドのフラグメント シェーダーです。
したがって、属性は常に同じであり、頂点シェーダーも同じです。
positions = [ [-1,1], [1,1], [-1,-1], [1,-1] ]
uv = [ [0.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 1.0] ]
そして、そのクワッドは としてレンダリングされTRIANGLE_STRIP
ます。また、明示的に設定する代わりに、フラグメント シェーダーの組み込み変数 を使用して、たとえば a で分割するUVs
ことを好む人もいます。gl_FragCoord
uniform vec2 uScreenResolution
頂点シェーダー:
attribute vec2 aPos;
attribute vec2 aUV;
varying vec2 vUV;
void main() {
gl_Position = vec4(aPos, 0.0, 1.0);
vUV = aUV;
}
フラグメント シェーダーは次のようになります。
uniform vec2 uScreenResolution;
varying vec2 vUV;
void main() {
// vUV is equal to gl_FragCoord/uScreenResolution
// do some pixel shader related work
gl_FragColor = vec3(someColor);
}
ShaderToy は、ピクセル シェーダーで使用できるデフォルトのiResolution
(aka uScreenResolution
) 、、、、iGlobalTime
などのいくつかのユニフォームを提供できます。iMouse
ジオメトリをフラグメント シェーダー (別名ピクセル シェーダー) に直接コーディングするために、開発者はレイ トレーシングと呼ばれるものを使用します。これはプログラミングの非常に複雑な領域ですが、簡単に言えば、いくつかの数式を使用してジオメトリを提示し、後でピクセル シェーダーで、一部のピクセルがジオメトリの一部であるかどうかを確認する場合は、その数式を使用してその情報を取得します。Google で少し調べてみると、レイ トレーサーが正確にどのようにどのように構築されているかを読み取るための十分なリソースが得られるはず
です。
お役に立てれば。