Does anyone know a way to get different lights/light properties rendered for two cameras pointed at the same scene rendering at the same time?
I used to be able to disable/enable lights during the RenderPipelineManager.beginCameraRendering and RenderPipelineManager.endCameraRendering callbacks in the 2019.2 beta but i guess something changed in the implementation.
Maybe there is something I can do with the new CustomPass stuff?
Actually nevermind. I’ve found SetLightDimmer on HDAdditionalLightData does actually get checked in the lightloop if I update that in those callbacks. So I can just set that instead of messing with gameObject.SetActive or Light.enabled
I had the same problem, I share my solution for URP if someone need it in the futur.
you have just to test if the camera is the good camera (it’s a little strange).
for disabling lights for a specific camera add this script to the camera and use addLight(Light) to add lights to disable
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
public class DisableLightsForCam : MonoBehaviour
{
public List<Light> Lights;
private Camera currentCam;
private void OnEnable()
{
currentCam = transform.GetComponent<Camera>();
RenderPipelineManager.beginCameraRendering += RenderPipelineManager_beginCameraRendering;
RenderPipelineManager.endCameraRendering += RenderPipelineManager_endCameraRendering;
}
private void OnDisable()
{
RenderPipelineManager.beginCameraRendering -= RenderPipelineManager_beginCameraRendering;
RenderPipelineManager.endCameraRendering -= RenderPipelineManager_endCameraRendering;
}
private void RenderPipelineManager_beginCameraRendering(ScriptableRenderContext context, Camera camera)
{
foreach (Light light in Lights)
{
if (camera == currentCam) light.enabled = false;
}
}
private void RenderPipelineManager_endCameraRendering(ScriptableRenderContext context, Camera camera)
{
foreach (Light light in Lights)
{
if (camera == currentCam) light.enabled = true;
}
}
public void addLight (Light light)
{
Lights.Add(light);
}
public void removeLight (Light light)
{
Lights.Remove(light);
}
}
for enabling lights for a specific camera add this script to the camera and use addLight(Light) to add lights to enable
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
public class EnableLightsForCam : MonoBehaviour
{
public List<Light> Lights;
private Camera currentCam;
private void OnEnable()
{
currentCam = transform.GetComponent<Camera>();
RenderPipelineManager.beginCameraRendering += RenderPipelineManager_beginCameraRendering;
RenderPipelineManager.endCameraRendering += RenderPipelineManager_endCameraRendering;
}
private void OnDisable()
{
RenderPipelineManager.beginCameraRendering -= RenderPipelineManager_beginCameraRendering;
RenderPipelineManager.endCameraRendering -= RenderPipelineManager_endCameraRendering;
}
private void RenderPipelineManager_beginCameraRendering(ScriptableRenderContext context, Camera camera)
{
foreach (Light light in Lights)
{
if (camera == currentCam) light.enabled = true;
}
}
private void RenderPipelineManager_endCameraRendering(ScriptableRenderContext context, Camera camera)
{
foreach (Light light in Lights)
{
if (camera == currentCam) light.enabled = false;
}
}
public void addLight (Light light)
{
Lights.Add(light);
}
public void removeLight (Light light)
{
Lights.Remove(light);
}
}