Как сделать освещение в террарии
Обновлено: 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. Она достаточно сложная и появляется далеко не всегда. Сейчас мы расскажем, как призвать Императрицу Света и победить ее.
Как призвать Императрицу Света в Террарии
Для начала вам нужно попасть в Святые земли, которые открываются после убийства Стены Плоти. Также необходимо убить Плантеру, трех механических боссов и голема. Благодаря этому начнется поздняя стадия игры, на которой вы сможете призвать Императрицу Света.
Чтобы заветная Императрица появилась, найдите призматическую бабочку. Это белая полностью нейтральная бабочка, которая летает и никого не трогает. Если вы ее убьете, Императрица разозлится и нападет на вас. Советуем искать бабочку ночью, потому что в ночное время Императрица Света слабее (хотя все равно способна доставить немало хлопот). Вот и все. Бейте бабочку и сражайтесь с боссом.
Как победить Императрицу Света в Террарии
В первую очередь изучите способности Императрицы Света. Она может выпускать группу снарядов, делать горизонтальные рывки, создавать круг из звезд, призывать летящие мечи и пускать лучи света.
Перед сражением обзаведитесь хорошим летающим маунтом и оружием дальнего боя, желательно магического происхождения. Также упакуйте персонажа аксессуарами на скорость.
Сражение будет состоять из двух этапов — они отличаются последовательностью атак Императрицы Света. Запоминать их не обязательно, потому что контра у них универсальная. Чтобы доджить входящий урон, много летайте и уворачивайтесь, стараясь не подбираться к Императрице слишком близко. Атакуйте издалека и следите за летящими к вам снарядам. Каждое попадание по вашему персонажу будет болезненным, поэтому будьте осторожны.
Советуем выбрать для сражения просторную арену и призывать Императрицу Света именно там. Имея хорошую скорость, на хорошей арене вы будете без проблем летать и уворачиваться от урона. А если бой покажется вам легким, попробуйте призвать этого босса днем — он станет заметно сильнее и навяжет вам неплохую борьбу!
В небе сияет новый босс, добавленный с последним патчем 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 было добавлено два босса. Одного из них мы разобрали в этой статье, а с другим, Королевой слизней, вы можете подробней ознакомиться в соответствующем гайде здесь.
Читайте также: