Renderizado independiente por cámara
Por defecto, el modo de renderizado (RenderMode) y el modo de carga (LoadMode) de un LCC Actor son iguales para todas las vistas. Se pueden sobrescribir estos ajustes para un jugador concreto o para un SceneCapture concreto: por ejemplo, en pantalla partida hacer que el jugador 1 vea 3DGS y el jugador 2 vea nube de puntos; o que el SceneCapture de un minimapa use nube de puntos en vista cenital y cargue solo el cuerpo principal para reducir el coste.
Tanto el pipeline LCC1 como el LCC2 admiten este conjunto de interfaces. Para las firmas, ver ULCCComponentBase - Multi-Viewport.
Solo se puede llamar en tiempo de ejecución
Los parámetros de estas funciones son objetos de tiempo de ejecución (APlayerController / USceneCaptureComponent2D) que todavía no existen en la fase de colocación en el editor, por lo que no son propiedades del panel y solo se pueden llamar desde Blueprint o C++ con el juego en marcha. Los RenderMode / LoadMode del panel son los valores predeterminados globales que afectan a todas las vistas; este conjunto de interfaces hace una sobrescritura local por encima del valor global, y las vistas que no llaman a la función de sobrescritura siguen usando el ajuste global.
Aclaración: distingue las cámaras por «identidad de vista»; la vista de un jugador usa el ID único de la vista de renderizado, y un SceneCapture usa el índice de su RenderTarget. Por eso hay que pasar el
PlayerController(y no el Pawn): el Pawn no lleva la información de «en qué viewport se muestra».
Sobrescribir por jugador (pantalla partida / varios jugadores locales)
// El viewport del jugador 2 ve nube de puntos; los demás viewports no se ven afectados
LCCComponent->SetPlayerRenderMode(Player2Controller, ERenderMode::PointCloud);
LCCComponent->SetPlayerLoadMode(Player2Controller, ELoadMode::OnlyMain);
Blueprint en texto:
[Custom Event: SetupSplitScreen]
│
▼
[Get Player Controller] Player Index = 1 → Player2Controller
│
▼
[Set Player Render Mode]
Target = (LCC Component)
Player Controller = Player2Controller
In Render Mode = Point Cloud
El ajuste surte efecto al fotograma siguiente. Cuando no se llama a la función de sobrescritura, todos los viewports comparten el ajuste global del panel.
Sobrescribir por SceneCapture (minimapa / imagen de vigilancia)
// El minimapa usa nube de puntos + solo el cuerpo principal, el coste mínimo
LCCComponent->SetSceneCaptureRenderMode(MinimapCapture, ERenderMode::PointCloud);
LCCComponent->SetSceneCaptureLoadMode(MinimapCapture, ELoadMode::OnlyMain);

El viewport principal ve 3DGS, y el minimapa con SceneCapture de la esquina superior izquierda usa nube de puntos en vista cenital
Requisito: para renderizar contenido LCC en un SceneCapture, hay que activar antes SceneCaptureComponent Support en la configuración del proyecto, que está desactivado por defecto.
Atención al momento de la llamada (error habitual)
La sobrescritura de un SceneCapture solo surte efecto cuando puede calcular un ID de vista válido. Si en ese momento el capture aún no se ha renderizado ni una vez, no hay ID y el ajuste se descarta en silencio (sin error). Por tanto, garantizar el momento correcto de una de estas dos formas:
- Capturar una vez, ajustar y volver a capturar:
Capture Scene→SetSceneCaptureRenderMode/LoadMode→Capture Scene. - O marcar
Capture Every Frameen el SceneCapture2D para que el ViewState sea permanente, de modo que el ajuste surta efecto.
Además, confirmar que el Texture Target del SceneCapture2D está asignado; en momentos demasiado tempranos como BeginPlay, se puede retrasar un fotograma antes de llamar.
Error habitual 1: llamar a
SetSceneCapture...antes deCapture Scenesin que el capture tenga marcadoCapture Every Frame→ el ajuste se pierde y la imagen no cambia.Error habitual 2: conectar
Targetal SceneCapture2D. La conexión correcta es Target = el componente LCC que se captura, y el SceneCapture2D va en el parámetroIn Capture 2D.