uv座標とShaderの関連性

「3Dモデルの各頂点には、それぞれUV座標が割り当てられます。これにより、3Dモデル上の各頂点が2Dテクスチャ上のどの位置に対応するかが決定されます。
3Dモデル上の面(通常は三角形)は、これらの頂点と関連付けられたUV座標に基づいてテクスチャから「切り出され」、3Dモデルにマッピングされます。」

つまり 面に「何の」画像を「どのように(どこに)」貼り付けるかを規定するのがUV座標である。


一般的に画像は長方形であり、一方で物体(特に3Dオブジェクト)は三角形の面の集合体である。したがって3Dモデルの形状を作ったとしてもその各面に画像(Texture)をどのように貼り付けるかは作った段階では定義されていない。
その貼り付けのプロセスに必要な情報がUV座標であり、UV座標はモデルの各点に必要となる。

三角形に長方形の画像を貼り付けるということは、最小でも半分以上の長方形画像のデータは無駄になる。
UV座標と言うと3Dモデルの表面の絵が全部ごちゃまぜになってるイメージがあるのはそういった理由。無駄をなくしたいから。
(面の三点のUV座標を画像のUV座標に映してそれを切り取って貼り付けるイメージ。実際は面の各点のピクセルの値を確定させるために、三点を線形補完させることで、面の各点にUV座標を割り当ててそのUV座標の画像の色を取得している。)


でも面が必ずしも三角形である必要は無いため、四角形で UV座標を4つ持たせて 画像をそのまま貼り付けると言う行為も、もちろんできる。shadertoyのフラグメントShaderはまさにそれである。
自分は、

for i in width {
    for j in height{

    }
}

のイメージで各画素の色を求めているという感覚を持っている。
(i は fragCoord.x, j はfragCoord.y であり、
widthはiResolution.x , height は iResolution.yである)


この記事が気に入ったらサポートをしてみませんか?