Как сделать освещение в террарии

Обновлено: 06.07.2024

Я пытаюсь сделать свое освещение похожим на Terraria's, block-lighting. Теперь я знаю, как сделать блоки более темными, я могу назначать блоки на определенный уровень света, но как бы я сделал реальную световую сущность, которая излучает свет в круглой форме (может также иметь форму алмаза)?
Помощь была бы также признательна, если бы я не был ясно в своем вопросе, не стесняйтесь спрашивать.

Базовое 2D-освещение очень простое. Просто сделайте дистанционную проверку с вашего блока, на свой свет и используйте это значение для масштабирования вашего света.
Это то, что вы могли бы сделать достаточно просто, поскольку Spritebatch.Draw имеет приятный параметр цветового оттенка [link]

Псевдофункция может быть

Для более приятного взгляда вы можете заменить "distance/light.MaxDistance" более плавным эффектом.
Если вы также хотите, чтобы свет проходил через несколько блоков, таких как Terraria, вы могли подсчитать все блоки между вашим блоком и источником света. Масштабируйте свой LightPower на эту сумму, и вы получите тот же эффект, что и у Terraria.

Конечно, это не оптимизированный способ сделать это, но должен работать.

Последняя версия Terraria, похоже, имеет гладкое освещение на пиксель вместо блока [предварительный просмотр]. Для этого я предполагаю, что они использовали вторую цель рендеринга и/или Pixel Shader, чтобы поддерживать высокую производительность. Это может быть немного сложно, если вы не знакомы с рендерингом конвейеров.

Fade
> Уже в который раз встает вопрос по поводу реализации идентичного освещения, как
> во всеми известной игре - Terraria.
а в чем проблема? там не сложное освещение же

Fade
> Так вот, нужно хорошее, производительное решение реализации.
> Пишу на Java
No. А вообще флудфилл чем не устраивает?

> а в чем проблема? там не сложное освещение же
> No. А вообще флудфилл чем не устраивает?
Да тормозит оно. Делаю так:
прохожу циклом по блокам в видимой области;
если текущий блок == воздух
присвоить ему свет 100
иначе
если текущий блок != воздух и он граничит с блоком воздуха, то
вызвать функцию освещения в радиусе (Flood Fill)

Тормозит и все равно не получается так, как в Террарии. Хотя в ней плавное, цветное освещение не тормозит. Я не знаю, каким образом еще реализовать.

Mephistopheles, если алгоритм не сложен, можешь помочь? Уже не один проект бросил из-за этого дурацкого освещения.

Fade
> прохожу циклом по блокам в видимой области;
как часто?

Fade
> если текущий блок == воздух
> присвоить ему свет 100
> иначе
> если текущий блок != воздух и он граничит с блоком воздуха, то
> вызвать функцию освещения в радиусе (Flood Fill)
покажи код, я думаю ты както не так заимплементил алгоритм или не так его применяеш

Обновляется каждый игровой тик. Вот код из метода tick класса World:

Вот сам рендер освещения:

Я прозреваю, что в Террарии вовсе не так, т.к. в ней входы в пещеру затемнены постепенно. Так хочется узнать, как же все-таки сделано в Террарии.
И как, черт подери, у них не тормозит при огромном кол-ве источников света (от магического оружия, от пуль и т.д.) в видимой области? Я поражаюсь просто.

Способ который я описывала тебе в лс вполне справляется с "входы в пещеру затемнены постепенно" и "не тормозит при огромном кол-ве источников света". В Explorisles вообще можно хоть все 3600 видимых блоков факелами заставить - фпс не упадет ни на единицу.

Твой код я не особо понимаю, сложно мне чужие коды читать, мб там то же самое, но тогда все должно быть нормально.
Тот код даже подобие теней от блоков делает.

Fade
> Обновляется каждый игровой тик.
Жесть, ты с ума сошел?) Обновлять только при каждом обновлении мира, типа блок воткнули или убрали. А если немного заморочиться, то обновлять можно вообще очень малый кусочек мира, который будет обновляться вообще мгновенно.

Fade
> Обновляется каждый игровой тик. Вот код из метода tick класса World:
Жестковато конечно:)

Сделай карту освешения, размером с видимую область + некоторый запас в 5-10 блоков с каждого края
Собираеш на этом участке источники света и вырезаеш из карты освешения то что освещенно и после накладываеш это карту при рендере.


и обновляй ее при изменении мира и движении игрока

Это-то понятно, но мне важна правильная реализация. Я и сам знаю, что нужно создать карту освещенности, вырезать участки и так далее. Вопрос стоит в самой реализации.

ArchiDevil, можешь подробнее рассказать?
Rinrin, честно говоря, не понял твой способ.

Императрица Света — босс хардмода в Terraria. Она достаточно сложная и появляется далеко не всегда. Сейчас мы расскажем, как призвать Императрицу Света и победить ее.

Как призвать Императрицу Света в Террарии


Для начала вам нужно попасть в Святые земли, которые открываются после убийства Стены Плоти. Также необходимо убить Плантеру, трех механических боссов и голема. Благодаря этому начнется поздняя стадия игры, на которой вы сможете призвать Императрицу Света.

Чтобы заветная Императрица появилась, найдите призматическую бабочку. Это белая полностью нейтральная бабочка, которая летает и никого не трогает. Если вы ее убьете, Императрица разозлится и нападет на вас. Советуем искать бабочку ночью, потому что в ночное время Императрица Света слабее (хотя все равно способна доставить немало хлопот). Вот и все. Бейте бабочку и сражайтесь с боссом.

Как победить Императрицу Света в Террарии

В первую очередь изучите способности Императрицы Света. Она может выпускать группу снарядов, делать горизонтальные рывки, создавать круг из звезд, призывать летящие мечи и пускать лучи света.


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

Сражение будет состоять из двух этапов — они отличаются последовательностью атак Императрицы Света. Запоминать их не обязательно, потому что контра у них универсальная. Чтобы доджить входящий урон, много летайте и уворачивайтесь, стараясь не подбираться к Императрице слишком близко. Атакуйте издалека и следите за летящими к вам снарядам. Каждое попадание по вашему персонажу будет болезненным, поэтому будьте осторожны.

Советуем выбрать для сражения просторную арену и призывать Императрицу Света именно там. Имея хорошую скорость, на хорошей арене вы будете без проблем летать и уворачиваться от урона. А если бой покажется вам легким, попробуйте призвать этого босса днем — он станет заметно сильнее и навяжет вам неплохую борьбу!

Императрица света — как призвать и убить нового босса Terraria 1.4 Journey’s End

В небе сияет новый босс, добавленный с последним патчем 1.4 для Terraria. Бросим же ей вызов!

Вам предстоит нелегкая схватка, ведь императрица уже зарекомендовала себя как буллет-хэлл босс. Но оно того стоит, ведь во время боя на экране вы увидите поистину красивое представление.

Императрица света — противник самой поздней стадии игры, так что вам понадобится не только открыть хардмод, но и собрать самую лучшую экипировку, прежде чем задумываться о призыве босса. Кстати говоря, у нее есть и бонусный экстра-сложный режим, связанный с началом боя в фиксированное время суток, но обо всем по порядку!

Как призвать босса

Вызов производится ночью в биоме радужных поняшек или просто Святые земли. Как я отметил выше, вам потребуется убить Стену Плоти, активировав хардмод, а также одолеть Плантеру, чтобы перейти к самой поздней игровой стадии.

Погуляйте по биому, внимательно глядя под ноги: вам нужно найти нейтральное существо Prismatic Lacewing. Убив безобидную бабочку, вы разгневаете императрицу и начнете бой.

Боевая стратегия

Босс может выглядеть красиво и мило, но кусается больно, так что рекомендую держаться от нее подальше, атакуя оружием дальнего боя. Подробней опишу сами атаки:

1. Создает группу снарядов, после небольшой задержки двигающихся за игроком. Если вы резко передвинетесь в другое место, вам удастся от них увернуться.
2. Оказывается справа или слева от игрока и делает горизонтальный рывок.
3. Перемещается в лево-верхнюю часть экрана и запускает медленно вращающиеся по часовой стрелке лучи света.
4. Создает круг из звезд, которые вращаются по часовой стрелке и обратно, оставляя после себя наносящий урон след.
5. Призывает мечи, летящие на опережение в точку, куда следовала траектория движения игрока. Пока мечи не летят, урона они не наносят, что помогает от них увернуться.

Сам бой делится на две стадии — до 50% здоровья и после. В первой стадии атаки повторяются по следующему порядку согласно индексам выше:

Во второй стадии паттерн меняется на такой:

Награды за босса: Террапризма и Soaring Insignia

Убив Императрицу, вы получите подобающиеся косметические предметы, призматическую краску и может даже какие-нибудь трофеи в зависимости от игровой сложности.

Также босс роняет следующие предметы, дублирующие разные ее атаки:
— Eventide
— Kaleidoscope
— Nightglow
— Starlight
— Stellar Tune

Вот так выглядят все возможные награды, падающие с босса. Эпичный меч в конце — та самая Terraprisma

Наконец, самое классное оружие для класса призывателя, упомянутая выше Террапризма, может упасть только с экстра-сложной версии императрицы. Как ее призвать?

Альтернативная Императрица света

Босса потребуется убить в дневное время. Чтобы сделать это, убейте бабочку для призыва императрицы в промежуток между 4:00 и 4:30 утра и дождитесь наступления рассвета, прежде чем начать наносить урон. Еще раз: босс должен получать повреждения только при дневном свете!

Днем все атаки Императрицы будут убивать вас с первого же попадания, а потому следует быть особо осторожным! Я рекомендую вам сперва обзавестись упомянутым предметом Soaring Insignia для бесконечного полета, чтобы всегда держаться на дистанции во время боя. Удачи!

Всего с патчем 1.4 в Terraria было добавлено два босса. Одного из них мы разобрали в этой статье, а с другим, Королевой слизней, вы можете подробней ознакомиться в соответствующем гайде здесь.

Читайте также: