2016-10-27 14 views
3

メタルAPIにPoint LightAmbient Lightしかないのか、私の3D環境でSpot LightDirectional Lightを使用することができますか?彼らはAppleのメタルAPIに存在する場合Spot LightDirectional Lightを実装する方法メタルAPIの光の種類

struct Light { 

    var color: (Float, Float, Float) 
    var ambientIntensity: Float 

    static func size() -> Int {  
    return sizeof(Float) * 4 
    } 

    func raw() -> [Float] { 
    let raw = [color.0, color.1, color.2, ambientIntensity] 
    return raw 
    } 
} 

Picture from SolidAngle User Manual

+1

MetalKitはModel I/Oフレームワークと簡単にインターフェイスします。モデルI/Oには、これらのライトタイプの作成に使用できるMDLLightクラスがあります。 developer.apple.com/reference/modelio/mdllight – Marius

+0

@ Marus Thanxたくさん。 – andy

+1

ModelIOは軽いレンダリングにはあまり役に立ちません。メタルとのある程度の相互運用性はありますが、主にモデルデータから使用可能なバッファを作成するなどの点で役に立ちます。 –

答えて

4

メタルAPI自体はそういうことのための現代のOpenGL doesn't-APIはの道を行ったのと同じように、「光」とは何のような高レベルの概念がありません恐竜はfixed-function pipelineである。最新の低レベルのグラフィックスAPIでは、独自のライティングをロールバックする必要があります。優れたMetal By Exampleシリーズはですが、何が起きているのかをより明確に理解するために、前のセクションを参照してください。この記事では指向性ライトのみを扱うことに注意してください。スポットライトは非常にトリッキーなので、それらが通常どのように行われているかを見つけて、Metalでそのアプローチを実装するためには、いくつかの調査を行う必要があります。

メタルを直接使用する代わりに、SceneKitを調べることができます。これは非常に強力で、SCNLightクラスを使用してさまざまなタイプのライトをサポートしています。

1

Mariusは私にMDLLightクラスは、シーンに光源を記述するオブジェクトの抽象スーパークラスであるというヒントを与えました。 MDLAssetクラスを使用してアセットファイルからライトをロードするとき、またはアセットをビルドするときにライトを作成するときは、MDLPhysicallyPlausibleLightMDLAreaLightMDLPhotometricLight、またはMDLLightProbeの1つ以上のコンクリートサブクラスを使用します。光の種類

case unknown = 0 

0:

...とMDLLightTypeはlightTypeプロパティで使用される光によって提供される照明の形状及びスタイルのオプションを有する列挙あります不明であるか、または初期化されていません。

case ambient = 1 

1.光源は、位置または方向に関係なく、シーンを均一に照らす必要があります。

case directional = 2 

2.光源は、位置に関係なく、均一な方向からシーンを照らします。

case spot = 3 

3.光源は、特定の位置と方向からシーンを照らします。

case point = 4 

4.光源は、特定の位置からあらゆる方向にシーンを照らします。

case linear = 5 

5.光源は、線の形の領域からあらゆる方向にシーンを照らします。

case discArea = 6 

6.光源は、ディスクの形の領域からあらゆる方向にシーンを照らします。

case rectangularArea = 7 

7.光源は、四角形の領域からあらゆる方向にシーンを照らします。

8.光源は、長方形の領域からあらゆる方向にシーンを照らします。

case photometric = 9 

9.光からの照度は、測光プロファイルによって決定されます。

case probe = 10 

10.光の照明は、特定のポイントのシーンのサンプルを表すテクスチャ画像によって決まります。

case environment = 11 

11.光の照明は、シーンの周囲環境のサンプルを表すテクスチャ画像によって決定されます。

これらはApple Metal API Referenceの抜粋です。

MDLPhysicallyPlausibleLight

MDLPhysicallyPlausibleLightオブジェクトは、実世界の物理学に基づいてシェーディングモデルで使用するための光源を説明します。

MDLAreaLight

MDLAreaLightオブジェクトは、単一の点又は方向からではなく3Dシーンを照明する光源を表すが、領域から特定の形状を有します。エリアライトの形状は、ライトのローカル座標空間のxy平面内の2次元図形であり、その照明はz軸の負の方向に向けられます(継承されたinnerConeAngleプロパティとouterConeAngleプロパティに従ってその方向から広がります) )。

Area Light

MDLPhotometricLight

MDLPhotometricLightオブジェクトは、その形状、方向、及び照明の強度測光プロファイルによって決定される光源を表します。光源の物理的測定値を含むIES形式のファイルから測光光を作成します。実際の照明器具の多くの製造業者は、その製品の照明特性を記述するファイルを公開している。この測光データは、光源を取り巻く光ウェブを測定します。光源周囲の全方向の光の強度を測定します。

IES Lights

MDLLightProbe

MDLLightProbeオブジェクトは、すべての方向での照明の色及び強度のばらつきの点で光源を記載しています。ライトプローブは、この変化をキューブマップテクスチャとして表します。各テクセルは、キューブの中心からの特定の方向の光の色と強度、または球面調和係数のセットとして表されます。このような光源の説明に加えて、MDLLightProbeは、シーンの内容に基づいて光プローブテクスチャを生成し、テクスチャから球面調和係数を生成する方法を提供する。

Image Based Lighting Probes

+0

HI @Andy、MDLPhotometricLightでモデルI/Oをテストしましたか?それについていくつかの例がありましたか?ありがとう –

+0

いいえ、申し訳ありません。スポットライト、指向性ライト、ポイントライトを使用しました。 – andy

+0

あなたの返信ありがとう –