UE4 | Цикл день і ніч | Модифікація SkySphere

Зміна дня і ночі часто піднімається серед користувачів. І якщо саме по собі рух сонця організувати досить просто, то домогтися більш або менш реалістичною роботи ***SkySphere*** вже значно складніше.

У цій статті я не планую показувати всілякі способи зміни орієнтації DirectionalLight з порами року і прецесією. На дану тему, на мій погляд, матеріалів достатньо. Хтось робить це через Blueprint, я ж використовую С++, таким чином, щоб годинник цокав на сервері і періодично (раз у кілька секунд) синхронізували годинник клієнта. При цьому на сервері ніякого руху не відбувається. Не панська це справа, рухати сонце по небу.

Далі я розповім про виникаючі проблеми і покажу мій варіант модернізації стандартного BP_Sky_Sphere для його коректної роботи з денним циклом.

Перед модифікацією буде зовсім незайвим скопіювати весь вміст папки EngineSky в свою директорію, щоб не зіпсувати стандартний Blueprint і підключені до нього ресурси.

В першу чергу хочу розповісти про ба (або особливо) стандартної сфери. Прикріплений StaticMesh для сфери має масштаб 400. Якщо змінити його на 1, то начебто нічого не зміниться, але трохи пробігши вперед ви відчуєте себе як у фільмі “Шоу Трумена”. Так, ця сфера хоч і величезна, але має свої межі. Явна проблема для відкритих світів, яку дуже легко виправити, змусивши сферу рухатися разом з гравцем.

Звичайно, в якості альтернативи, можна зробити сферу ще більше, але мені така ідея не дуже імпонує.

Наступним пунктом йде налагодження нормальної ночі. Мені категорично не подобається, що зірки з’являються тільки опівночі, а все решта — це просто якийсь тривалий вечір.

Теж досить просто вирішується налаштуванням існуючих кривих і додаванням нових.

Читайте також  Бензинові велосипеди або дивний пошук продуктів (e-commerce)


Приклад кривої

Наступна проблема, це згасання світла для DirectionalLight і SkyLight. Досить дивно спостерігати, що вночі видно нітрохи не гірше, ніж вдень. Теж вирішується дуже просто, додаванням і налаштуванням кривих.

Зміна рівнів освітлення

Ну, і на десерт… Зірки не рухаються! Якщо ніч довга і сповнена жахів, то гравець може це і не помітить. Але ми ж за серйозний підхід?

Спочатку я примусив рухатися текстуру зірок, додавши додаткові змінні до матеріалу.

От якось так

Поки сонце рухається по екваторіальній площині — все в порядку. Але ось при імітації високих широт починаються математичні складності і небажання текстури закручуватися так як нам хочеться. Але ми ж за серйозний підхід? 🙂

У підсумку, прийняв рішення робити дві небесні сфери. Одна з хмарами, сонцем і небом, а друга, трохи більшого розміру, з зірками. Додаткову сферу підключив до того ж BP_Sky_Sphere і ввічливо попросив її обертатися разом із сонцем…

І найцікавіша частина! Зробити меншу небесну сферу частково прозорою. Просто так підключивши логіку матеріалу до Opacity, звичайно ж, отримав до чудові зорі, світять через чорні нічні хмари. Тому знову довелося доопрацювати напилком матеріал, фактично намалювавши два неба. Одне з чорними нічними хмарами для візуального ряду. І друге, із завжди білосніжними хмарами, для Opacity. Плюсом додав багато-багато білого в денний час, фактично зробивши небо непрозорим, щоб просвітчаста синява не лякала своєю глибиною.

Blueprint

Картинка кликабельна

Material





Тепер все працює як задумано Творцем, в даному випадку — мною. Залишилося тільки точно налаштувати керуючі криві, але в цілому виглядає вже непогано.

Якщо є ідеї, як зробити це простіше, будь ласка поділіться. Буду вдячний.

Читайте також  Обчислюємо «магічні квадрати» за допомогою GPU

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

You may also like...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *