2017-07-31 7 views
2

私は、SceneKitを使用して通常の再生とVRの両方をサポートするゲームに取り組んでいます。正常に再生するときは、ビューのオーディオリスナーにも対応する1台のカメラSCNViewが1つあります。 VRモードに切り替えると、2つの別のカメラから同じシーンを再生する2つの画面に分割され、オーディオリスナーを挟んで2つに分割されます。問題はありません。複数のSCNViewオーディオエラー

私はSCNActionを使用してSCNAudioSuorceを使用してサウンドエフェクトを再生するためにポジションオーディオが必要ですが、同じシーンが両方のビューで再生されているので、どのようにそれらの1つをミュートして、私はウェブとドキュメントを検索しましたが、これについては何も見つかりませんでした。

iOS版11更新:その音、アクションからそれを削除する(iOSの11に私のアプリをテストし、VRモードで__UpdateAudioTransformでレンダリングキューのスレッドでアプリがクラッシュし、私が遊ぶためながらサウンドを再生しようとした後、どの他のノードの変換を含む)はゲームをうまく動かす。

アップデート1:アドバイスを@ricksterのおかげで私はstereoCameraLeftNamestereoCameraRightNameを文字列として別の場所で定義されたノードの名前として使用されているこの

SCNTechnique(dictionary: [ 
    "passes" : [ 
     "leftView": [ 
      "draw": "DRAW_SCENE", 
      "pointOfView": stereoCameraLeftName, 
      "viewport": "(0, 0, 400, 400)" 
     ], 
     "rightView": [ 
      "draw": "DRAW_SCENE", 
      "pointOfView": stereoCameraRightName, 
      "viewport": "(200, 0, 400, 400)" 
     ] 
    ], 
    "sequence": [ "leftView", "rightView" ] 
    ]) 

を得たSCNTechniqueを実装し、アップルのマニュアルを参照して、次の試してみましたビューポートの寸法はテスト用です。私はこのテクニックをシーンに適用しても機能しません。シーンpointOfViewがどのように設定されているかによって、背景色でいっぱいのシーンが表示されます(pointOfViewは、非VRモードに使用されるカメラに設定されます。シーングラフ)、または2台のカメラ(pointOfViewnilに設定されています)のいずれかを使用してレンダリングされたフルサイズで、何が欠けていますか?

アップデート2:そこ

let technique = SCNTechnique(dictionary: [ 
    "passes" : [ 
     "leftView": [ 
      "outputs": [ "color": "COLOR" ], 
      "draw": "DRAW_SCENE", 
      "colorStates": [ 
       "clear": true, 
       "clearColor": "sceneBackground" 
      ], 
      "pointOfView": stereoCameraLeftName, 
      "viewport": "0 0 \(w) \(h)" 
     ], 
     "rightView": [ 
      "outputs": [ "color": "COLOR" ], 
      "draw": "DRAW_SCENE", 
      "colorStates": [ 
       "clear": false 
      ], 
      "pointOfView": stereoCameraRightName, 
      "viewport": "\(w) 0 \(w) \(h)", 
      "blendStates": [ 
       "colorOp": "add", 
       "alphaOp": "add" 
      ] 
     ] 
    ], 
    "sequence": [ "leftView", "rightView" ] 
]) 

しかし:いくつかの試行錯誤の後、私は、カスタムビューポートのためのシンプルなパスを定義するための正しい方法はwCGFloatとして定義hで、次のようであることが判明問題は2パス目がレンダリングされたときに画面の左側が黒色(クリアカラー)になり、右側が正しくレンダリングされます。このパスを除外して最初のものだけを残すと、左側が正しくレンダリングされ、右側シーンの背景色が期待どおりに表示されます。奇妙なのは、iOS 11を実行しているiPhone 6でテストするのではなく、シミュレータ(iOS 11)でテストしてもうまくいくように見える場合、2つのパスを組み合わせる際に何か不足していると確信しています。

更新2.1:blendStatesを2番目のパスから削除すると同じ結果が得られます。

アップデート3:私は私のアプローチが正しいことを発見した問題を再現するためにMWEを再作成しようとしているは、私が問題だ場所を見つけるために私のプロジェクトの他の部分を調査しようとするでしょう。

最終更新:の問題、それはSCNTechniqueが正常に動作させる無効化、ビューにアクティブになるアンチエイリアシングに起因すると思われるが、iOSの11のバグのように思えるし、私はすでにバグレポートを提出してきました。

答えて

2

これは、複数のビューで同じシーンをレンダリングしようとする際のいくつかの問題の1つです。 (他のものにはパフォーマンスと並行処理が含まれます)。単一のビューのみを使用し、ビューのシーンを2度レンダリングする場合はSCNTechniqueを使用する方が良いでしょう。

テクニックを設定するときは、ドローパスごとに別々にpointOfViewを設定することができます。これはおそらく、ステレオ分離をお探しの場合に便利です。

また、パスごとにviewportを設定することもできます。ある種のステレオレンダリングをしている場合は、これを使って1つのレンダーパスをビューの半分に、もう一方のレンダーパスをもう一方の半分にすることができます。

+0

ありがとう、私はそれを調べるでしょう、あなたはこれについて読むべきチュートリアル/ガイドがありますか? –

+0

私は、あなたが私の質問で見ることができるように、テクニックを定義する際にいくつかの進歩を遂げました。なぜ正しく動作していないのか分かりませんか? –

+0

最終更新について:マルチサンプリング(アンチエイリアス)に関するバグを提出しています。テクニックでは、パス単位でマルチサンプリングを制御できるので、問題の一部には、ビュー固有の設定とパス固有のマルチサンプリング設定の間の競合が含まれる場合があります。 – rickster

関連する問題