Задать вопрос
WasTabon
@WasTabon

Как в URP игнорировать свет на камере?

Я хочу сделать камеру ночного видения, как в игре Outlast. Мне нужно, чтобы spot light освещал окружение только через эту камеру. В проекте, использующем Built-in Render Pipeline, я просто использовал этот скрипт, и MainCamera успешно игнорировала источник света от камеры ночного видения.

public class IgnoreNightVisionLight : MonoBehaviour
{
    [SerializeField] private Light limelight;

    private void OnPreCull()
    {
        limelight.enabled = false;
    }
    private void OnPreRender()
    {
        limelight.enabled = false;
    }
    private void OnPostRender()
    {
        limelight.enabled = true;
    }
}


Но в проекте с URP рендеринг работает по-другому, и этот скрипт больше не работает. Я также пробовал установить специальный слой для источника света и исключить его в Culling Mask MainCamera, но это тоже не помогло. Я не нашел решения через Google, поэтому не знаю, как это исправить.

Если есть какие-то другие простые способы создать камеру ночного видения, которая будет освещать окружение только для себя, буду рад узнать об этом.
  • Вопрос задан
  • 63 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
WasTabon
@WasTabon Автор вопроса
public class CameraLight : MonoBehaviour
{
    [SerializeField] private Camera _camera;
    [SerializeField] private Light _light;
    
    void OnEnable()
    {
        RenderPipelineManager.beginCameraRendering += OnBeginCameraRendering;
        RenderPipelineManager.endCameraRendering += OnEndCameraRendering;
    }
    
    void OnDisable()
    {
        RenderPipelineManager.beginCameraRendering -= OnBeginCameraRendering;
        RenderPipelineManager.endCameraRendering -= OnEndCameraRendering;
    }
    
    void OnBeginCameraRendering(ScriptableRenderContext context, Camera cam)
    {
        if (cam == _camera)
        {
            _light.enabled = false;
        }
    }
    
    void OnEndCameraRendering(ScriptableRenderContext context, Camera cam)
    {
        if (cam == _camera)
        {
            _light.enabled = true;
        }
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DrRen7
6739ee4c30235387577379.png
6739ee57c7779378270462.png
ну вероятно можно и совсем без источника света обойтись через шейдеры
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы