2010年8月26日木曜日

Collada transparentとtransparencyの関係

は、現在、オプションのopaque属性を持ちます。
内で、子要素は、現在、以下の有
効な値を持つオプションのopaque 属性を持ちます。

• A_ONE(デフォルト):カラーのアルファチャネルから透明度情報を取り出します。ここで値
1.0 は不透明を表します。
• RGB_ZERO:各チャネルが独立して調整される、カラーのR(赤)、G(緑)、B(青)チャネル
から透明度情報を取り出します。ここで値0.0 は不透明を表します。

もしくはが存在する場合、透明レンダリングが有効になるので、
レンダラをアルファブレンディングモードに切り替える必要があります。2 つの値を組み合わせる方法
は、以下の式で定義されます。 これらの式を使って、の不透明設定に基づき正しい
結果を求めます。ここで、fb はフレームバッファ(すなわち、レンダリング中のものの背後にあるイ
メージ)であり、mat は透明度計算前のマテリアルカラーです。
• A_ONE 不透明モードでは、以下のとおりです。
result.r = fb.r * (1.0f - transparent.a * transparency) + mat.r *(transparent.a * transparency)
result.g = fb.g * (1.0f - transparent.a * transparency) + mat.g *(transparent.a * transparency)
result.b = fb.b * (1.0f - transparent.a * transparency) + mat.b *(transparent.a * transparency)
result.a = fb.a * (1.0f - transparent.a * transparency) + mat.a *(transparent.a * transparency)

• RGB_ZERO 不透明モードでは、以下のとおりです。
result.r = fb.r * (transparent.r * transparency) + mat.r *(1.0f -transparent.r * transparency)
result.g = fb.g * (transparent.g * transparency) + mat.g *(1.0f -transparent.g * transparency)
result.b = fb.b * (transparent.b * transparency) + mat.b *(1.0f -transparent.b * transparency)
result.a = fb.a * (luminance(transparent.rgb) * transparency) + mat.a *(1.0f - luminance(transparent.rgb) * transparency)

ここで、luminance(輝度)は、ISO/CIE カラー標準(『ITU-R Recommendation BT.709-4』を参照)
に基づき、以下のようにカラーチャネルを平均して1 つの値にする関数です。
luminance = (color.r * 0.212671) +(color.g * 0.715160) +(color.b * 0.072169)

が存在しない場合には、は式の結果に影響を与えません。不
透明モードは、デフォルトの不透明モードのままです。つまり、次の式と同じことになります。
transparent = 1.0 1.0 1.0 1.0

が存在しない場合、は式の結果に影響を与えません。つ
まり、係数が1.0 であるのと同じことになります。
transparency = 1.0
の両方が存在する場合は、両方ともその機能を発揮しま
す。

またはが指定されていない場合は、以下のように仮定することで、
アプリケーションは同等の結果を得ることができます。
transparent = 0.0 0.0 0.0 1.0
transparency = 1.0
A_ONE は透明度情報がRGB チャネルでなくアルファチャネルからもたらされるということを指定するので、次の例では、カラーは指定され使用されていますが、RGB の値は透明度の計算に対して無視されます。
1 0 0.5 0

0 件のコメント:

コメントを投稿