前: 便利なクラス 次: Material3D クラス

8. Material と MaterialSpec

手続き材質の記述は、手続きテクスチャの記述とよく似ています。Material は Java クラスで、artofillusion.Material をサブクラスします。記述する材質はほぼどの場合でも、Material3D をサブクラスします。

TextureSpec オブジェクト内で表面プロパティを返す getTextureSpec() メソッドを Texture が持つのと同じく、Material も MaterialSpec オブジェクト内でプロパティを返す getMaterialSpec() メソッドを持ちます。以下は MaterialSpec クラスの定義です。

public class MaterialSpec
{
  public RGBColor transparency, color, scattering;
  public double eccentricity;

  public MaterialSpec();
}
color パラメータはその材質固有の色です。光が材質を透過すると、color に向けて次第に変わっていきます。これが起きる比率は transparency(透明度)で決定します。transparency の要素が0のときは、この材質はその色に対して完全に不透明となります。transparency が1のときはこの材質は完全に透明になり、その色要素は材質の透過での影響を受けません。

scattering(散乱、粒)で、材質を透過して、視点に向けて散乱する光の量を決定します。散乱光の量は、eccentricity(偏り)にもよります。この値の範囲は -1〜1 です。値0は等方散乱(光が全方向に等量で散乱)に対応します。プラスの値は、光が後方により強く散乱することを意味します。マイナスの値では、光は前方により強く散乱します。

(注意: Material で光の散乱をさせる場合、isScattering() をオーバーライドして「真」(true) を返す必要があります。そうしないと scattering と eccentricity のパラメータが無視され、この Material で光が散乱しなくなります)

Texture の場合と同じように、これらのパラメータの解釈は、標準の Material クラスで慣れたものとはわずかに異なります。density(密度)パラメータがないことにお気づきかと思います。標準のクラスはこの値を、以下の方程式で計算します。

transparency = pow(transparencyColor, density)
scattering = scatteringColor * density

Material はすべて、屈折率を持っています。これは setIndexOfRefraction() メソッドで設定されます。これを編集可能なパラメータにするときは、edit() メソッドでユーザインターフェイスを与えて、その値を writeToFile() メソッドで保存してください。デフォルトでは、すべての Material で屈折率は 1.0 です。

前: 便利なクラス 次: Material3D クラス