ゲームのカメラとSceneCapture2Dのカメラがかなり離れているような状況の時、SceneCapture2Dで写した方のキャラクタ等のテクスチャが荒いのは仕様でしょうか?
たとえば、SceneCapture2DをXYZ:0,0,0に配置した状態で、ゲームプレイをXYZ:100000,0,0からスタートした場合、SceneCapture2Dで写している映像の中のテクスチャが荒いままとなっています。
これの原因を探っていたのですが、
void FStreamingManagerTexture::PrepareAsyncTask(bool bProcessEverything) 内のCurrentViewInfosにはゲームカメラの情報しか入っておらず、Capture側のView情報は入っていませんでした。
このため、後に続く様々な処理はゲーム側のカメラの情報のみ処理が行われ、SceneCapture2D側は取り残されているの為、原点付近にいるキャラクタのTextureStreamingのMipリクエストが働かず荒くなっているように思えました。
ゲームプレイ後にキャラクタの座標を原点に近づけるとテクスチャストリームによってテクスチャが読み込まれるようになるのでSceneCapture2Dで写しているテクスチャも問題無くなる事を確認いたしました。
SceneCapture2D側のTextureStreamingは考慮されていない(と思う)のは仕様なのでしょうか?
よろしくお願いいたします。
はい。複数のキャプチャがあった際の優先度の設定が煩雑になるため、現在のところはメインのViewのみというのが仕様となります。
こちらでも手元で確認いたしました。(マネキンが変なポーズなのは無視してください。。。)
コードを見るとTextureStreamerは複数のViewに対応しているため、ためしに、SceneCaptureComponentのCapture時にCaptureComponentのロケーションをStreamerに渡すようにいたしました。
void USceneCaptureComponent2D::UpdateSceneCaptureContents(FSceneInterface* Scene)
{
FTransform Transform = this->GetComponentToWorld();
FVector ViewLocation = Transform.GetTranslation();
IStreamingManager::Get().AddViewSlaveLocation(ViewLocation, 1.0f);
Scene->UpdateSceneCaptureContents(this);
}
すると、正しくストリームされるようになりました。メインカメラとの優先度はAddViewSlaveLocationの引数の1.0fを調整することでスケールできるかと思います。
こちら、動作保証などではなくあくまで手元での検証結果なのですが、ご参考になれば幸いです。