前: Material3D クラス 次: あとがき: これはいい方法では?

10. サンプル Material

この章では、Material のサンプルを実装します。この Material は、Perlin ノイズを3オクターブを足し合わせて不均一な霧(patchy fog)の効果を作成します。また、その結果を透明度の調整に使います。これはたくさんの調整可能なパラメータ(霧の色と濃さ、光を散乱させる強度、影を作るかどうか)を含みます。

すべてのソースコードは PatchyFog.java にあります。以下は getMaterialSpec() メソッドです。

public void getMaterialSpec(MaterialSpec spec, double x, double y, double z, double xsize, double ysize, double zsize, double t)
{
  double size = 1.0, scale = 1.0;
  float d = 0.0f;

  for (int i = 0; i < 3 && xsize < size && ysize < size && zsize < size; i++)
    {
      d += (float) (size*Noise.value(x*scale+123.456, y*scale+123.456, z*scale+123.456));
      size *= 0.5;
      scale *= 2.0;
    }
  d = 0.5f*d + 1.0f - thickness;
  if (d > 1.0f)
    d = 1.0f;
  else if (d < 0.0f)
    d = 0.0f;
  spec.transparency.setRGB(d, d, d);
  spec.color.copy(color);
  if (scattering > 0.0f)
    {
      d = scattering*(1.0f-d);
      spec.scattering.setRGB(d, d, d);
      spec.eccentricity = 0.0;
    }
}
このメソッドについて重要な注意点がいくつもあります。 以下は PatchyFog Material をレンダーした画像です。

前: Material3D クラス 次: あとがき: これはいい方法では?