Как сделать плавное ослабевание света?

Общие вопросы о Unity3D

Как сделать плавное ослабевание света?

Сообщение TerraGruff 11 окт 2018, 18:31

Допустим в игре есть вход в пещеру, либо в какое-нибудь здание без освещения. Не подскажите, можно ли сделать так, чтобы по мере вхождения света в здание, он ослабевал? И например у входа было светло, а в конце здания непроглядная тьма. По факту же в юнити получается так, что во всём здании просто тень. 1 фото - как есть, 2 фото - как должно быть. Слышал что такое можно сделать с помощью запекания света, но я пробовал изучать его - так и не дошло, как сделать похожий на картинке результат.
Изображение
Изображение
TerraGruff
UNец
 
Сообщения: 16
Зарегистрирован: 23 июн 2018, 21:47

Re: Как сделать плавное ослабевание света?

Сообщение LemanRass 12 окт 2018, 13:22

Попробуй в здании установить источник черного света.
Разработчик SpaceBall
Скрытый текст:
LemanRass
UNIверсал
 
Сообщения: 385
Зарегистрирован: 23 фев 2014, 12:00
Skype: coder.dev

Re: Как сделать плавное ослабевание света?

Сообщение TerraGruff 12 окт 2018, 15:00

LemanRass писал(а):Попробуй в здании установить источник черного света.

Не получается, чёрный свет вообще никак не влияет на освещение.
TerraGruff
UNец
 
Сообщения: 16
Зарегистрирован: 23 июн 2018, 21:47

Re: Как сделать плавное ослабевание света?

Сообщение TerraGruff 13 окт 2018, 16:07

Тема все ещё открыта. Дайте хотя бы какой-то гайд или направление куда нужно копать.
TerraGruff
UNец
 
Сообщения: 16
Зарегистрирован: 23 июн 2018, 21:47

Re: Как сделать плавное ослабевание света?

Сообщение jetyb 14 окт 2018, 12:25

У меня есть некоторый скрипт, ответственный за общее освещение.
Синтаксис:
Используется csharp
public static class LightManager
{
    //степень затененности [0;1] , определяется из другого скрипта
    public static float darkFactor;    
    public static float ambientIntensivity;
    public static float sunIntensivity;
    public static Color fogColor;
   
    //Вызывается 1 раз каждый кадр
    public static void Update()
    {  
          RenderSettings.ambientIntesivity = ambientIntensivity * darkFactor;
          RenderSettings.sun.intensivity = sunIntensivity * darkFactor;
          RenderSettings.sun.enabled = darkFactor > 0.1f;
          RenderSettings.fogColor = fogColor * darkFactor;      
    }
}
 

В тоm числе таm есть некий параmетр darkFactor, который устанавливается внешниm скриптоm в 0 - 1 в зависиmости от степени затененности.

При входе здания когда darkFactor = 1 mожно теmную полупрозрачную плашку вешать. Ну это если просто.
Я у себя таm mутил с шейдероm,
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Как сделать плавное ослабевание света?

Сообщение TerraGruff 14 окт 2018, 19:46

jetyb писал(а):У меня есть некоторый скрипт, ответственный за общее освещение.
Синтаксис:
Используется csharp
public static class LightManager
{
    //степень затененности [0;1] , определяется из другого скрипта
    public static float darkFactor;    
    public static float ambientIntensivity;
    public static float sunIntensivity;
    public static Color fogColor;
   
    //Вызывается 1 раз каждый кадр
    public static void Update()
    {  
          RenderSettings.ambientIntesivity = ambientIntensivity * darkFactor;
          RenderSettings.sun.intensivity = sunIntensivity * darkFactor;
          RenderSettings.sun.enabled = darkFactor > 0.1f;
          RenderSettings.fogColor = fogColor * darkFactor;      
    }
}
 

В тоm числе таm есть некий параmетр darkFactor, который устанавливается внешниm скриптоm в 0 - 1 в зависиmости от степени затененности.

При входе здания когда darkFactor = 1 mожно теmную полупрозрачную плашку вешать. Ну это если просто.
Я у себя таm mутил с шейдероm,


Спасибо за ответ, но это не совсем то, что мне нужно(нужна прорисовка освещения которая будет независима от положения персонажа и каких-либо скриптов, чтобы добиться большей реалистичности). Причём я не нашел гайдов где на конкретном примере показывается способ достижения подобного на 2 фото эффекта. Такое в юнити вообще возможно сделать? Я не спорю что скорее всего у меня руки кривые и вообще я ни в чём не разбираюсь, но посмотрев гайды по прорисовке освещения, все там просто учили запекать освещение и настраивать это самое запекание. Вот например фото входа в пещеру:
Изображение
У самого входа светло, но чем глубже, тем темнее. Свет меняется не сразу, а меняется плавно и градиентно, от светлого до непроглядного тёмного, чего я и хочу добиться. В юнити же происходит так, что свет находится только в двух состояниях: свет и тень. Причём ладно бы только это было бы проблемой... Допустим я хочу просто сделать темноту в здании без всяких там градиентов. Каким образом я должен это сделать? Если менять цвет эмбиент лайта на самый тёмный, то непроглядная темнота(т.е когда цвет полностью чёрный) будет не только в здании, а к примеру под деревьями, что смотрится убого. Если поставить 2 источника света и сделать так, чтобы один освещал здание, а другой всё остальное, регулируя силу теней у обоих источников цвета, то опять появляется проблема - темнота появляется не только в здании, а и снаружи здания в области которая не охватывается светом. Вообщем, жду дальнейших сообщений.
TerraGruff
UNец
 
Сообщения: 16
Зарегистрирован: 23 июн 2018, 21:47

Re: Как сделать плавное ослабевание света?

Сообщение jetyb 15 окт 2018, 08:23

Ну, если рендерить в режиme Forward..
Тогда делать внутренности пещеры шейдероm. Чтобы он совсеm не приниmал солнечный directional light.
В режиme ForwardAdd, наоборот, чтобы все работало норmально. Для адекватной работы других источников света.
А AmbientLight точки чтобы теmнел по mере погружения в пещеру (наподобие Occlusion). Эту степень затененности определять по специальной плавно изmеняющейся текстуре.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Как сделать плавное ослабевание света?

Сообщение TerraGruff 15 окт 2018, 13:22

jetyb писал(а):Ну, если рендерить в режиme Forward..
Тогда делать внутренности пещеры шейдероm. Чтобы он совсеm не приниmал солнечный directional light.
В режиme ForwardAdd, наоборот, чтобы все работало норmально. Для адекватной работы других источников света.
А AmbientLight точки чтобы теmнел по mере погружения в пещеру (наподобие Occlusion). Эту степень затененности определять по специальной плавно изmеняющейся текстуре.

Спасибо, буду пробовать)
TerraGruff
UNец
 
Сообщения: 16
Зарегистрирован: 23 июн 2018, 21:47

Re: Как сделать плавное ослабевание света?

Сообщение jr900 15 окт 2018, 23:33

Что то какие-то мудреные варианты пошли... Если нужна имитация распространения света от проема - поставь в оконный проем источник света area light, направленный внутрь, настрой интенсивность и запекай освещение. Будет тебе красиво.. это старый прием 3д,-шников для имитации освещения. Ну это при условии, что у тебя не динамическое освещение типа день ночь и можно все запекать, весь свет и GI.

З.Ы. кстати, судя по второму фото в первом посте там так сделано - стоит area light, точно подогнанный по оконному проему.
Скачать бесплатно ассеты для Unity
Скачать ассеты для Unreal Engine 4 / 5
Скачать 3d-модели для игр и дизайна
Персонажи DAZ-Poser для игр
jr900
UNIт
 
Сообщения: 83
Зарегистрирован: 16 апр 2016, 10:13


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 10