Рельеф и свет в Roblox Studio: карта, которую хочется разглядывать
Как слепить холмы, реку и пещеру редактором рельефа, чем Voxel отличается от Future и почему одна правильная настройка света меняет карту сильнее, чем сто новых деталей.
Средне 22 минуты проверен 1 час назад
Что понадобится
Roblox Studio и умение двигать деталь в сцене. Хватит гайда «Первая игра в Roblox Studio».
Текст гайда «Рельеф и свет в Roblox Studio: карта, которую хочется разглядывать»
Содержание
Две карты из одинаковых блоков выглядят по-разному, и дело почти никогда не в количестве деталей. Дело в двух вещах: под ногами лежит настоящий рельеф вместо плоской платформы, и свет настроен под задумку, а не оставлен как есть. Обе вещи делаются в Studio без единой строчки кода, и обе занимают вечер, а не месяц.
Рельеф — это не детали#
Terrain в Roblox — отдельная сущность. Это не набор кубиков, а объём, который заполнен материалом: землёй, камнем, песком, водой. Именно поэтому холм из рельефа мягкий, у него нет граней, а пещера внутри него — настоящая дыра, а не декорация. Живёт всё это в одном объекте Terrain внутри Workspace, и удалять его не надо: он там с самого начала.
Инструменты лежат на вкладке Terrain вверху окна Studio. Их удобно разделить на три группы.
| Группа | Инструменты | Зачем |
|---|---|---|
| Создать сразу | Generate, Import | Насыпать целый остров или горы одним нажатием — как черновик |
| Область | Select, Move, Resize, Copy, Delete | Работать с куском карты целиком: подвинуть, скопировать, стереть |
| Лепить руками | Add, Subtract, Grow, Erode, Smooth, Flatten | Добавлять и убирать объём кистью, сглаживать и выравнивать |
| Материалы | Paint, Replace, Sea Level | Красить поверхность, менять один материал на другой, заливать воду |
Начинай с Generate, а не с чистого листа
Ручная лепка с нуля — самый долгий путь. Нажми Generate, получи черновой ландшафт с горами и водой, а потом убери лишнее инструментом Subtract и выровняй площадки под постройки через Flatten. Так карта появляется за час, а не за неделю.
У каждой кисти есть три настройки, которые решают всё: размер (Base Size), сила и форма — шар, куб или цилиндр. Большая кисть лепит общий силуэт, маленькая — тропинку и вход в пещеру. Не пытайся делать мелкую деталь большой кистью: получится каша, и разгребать её придётся дольше, чем лепить заново.
Вода и пещеры#
Вода в рельефе — такой же материал, как земля. Её можно нарисовать кистью с материалом Water или залить всю карту до нужной высоты через Sea Level. Персонаж в такой воде плавает сам, писать для этого ничего не нужно.
Пещера делается наоборот: сначала насыпается гора, потом внутри неё инструментом Subtract выедается ход. Проверь результат до того, как ставить внутрь свет: узкий проход, в который персонаж не пролезает, — самая частая беда самодельных пещер. Ширина хода должна быть заметно больше персонажа, иначе камера упрётся в стену и играть будет невозможно.
Рельеф стоит производительности
Огромная карта из рельефа с водой и пещерами грузит слабые телефоны сильнее, чем ровная поляна с домиками. Если игра рассчитана на мобильных, не делай мир размером с континент: лучше небольшая, но проработанная карта. Проверить, что получилось, можно эмулятором устройства прямо в Studio.
Свет: одна служба, четыре режима#
За свет отвечает служба Lighting в дереве объектов. Главное её свойство — Technology: оно решает, как вообще считаются тени. Режимов несколько, и разница между ними видна сразу.
| Режим | Как выглядит | Кому подходит |
|---|---|---|
| Voxel | Мягкий свет крупными кубами, теней от мелочей нет | Простые карты, ставка на слабые устройства |
| ShadowMap | Чёткие тени от солнца, лампы светят проще | Золотая середина, самый частый выбор |
| Future | Тени от каждой лампы, честные блики | Атмосферные игры, где картинка важнее максимального FPS |
Дальше идут свойства, которые настраивают саму сцену. Их немного, и каждое стоит попробовать вживую — эффект виден мгновенно.
- ClockTime — время суток от 0 до 24: положение солнца и цвет неба
- Brightness — общая сила солнечного света
- Ambient и OutdoorAmbient — подсветка теней в помещении и на улице; полностью чёрные тени почти всегда выглядят грязно
- GlobalShadows — тени вообще; выключишь — мир станет плоским
- ExposureCompensation — экспозиция: осветляет или притемняет всю картинку целиком
- FogEnd — расстояние, на котором всё тонет в тумане; удобно, чтобы спрятать край карты
Атмосфера, небо и эффекты#
Внутрь Lighting добавляются дочерние объекты — именно они дают ту самую «атмосферность», ради которой всё и затевалось. Добавляются они кнопкой «плюс» рядом с Lighting.
| Объект | Что делает |
|---|---|
| Atmosphere | Воздух с плотностью и дымкой: даль тает, объём чувствуется |
| Sky | Своё небо, размер солнца и луны, количество звёзд |
| BloomEffect | Свечение вокруг ярких мест |
| ColorCorrectionEffect | Цветокоррекция: контраст, насыщенность, оттенок всей картинки |
| SunRaysEffect | Лучи от солнца |
| DepthOfFieldEffect | Размытие дальнего плана |
| BlurEffect | Размытие всего экрана — обычно включают из кода на паузе |
Эффекты — приправа, а не блюдо
Свечение на максимуме и кислотная цветокоррекция превращают карту в мыло. Хорошее правило: выставил значение, которое нравится, — уменьши его вдвое и посмотри снова. В девяти случаях из десяти второй вариант окажется лучше.
Лампы: три вида и одна опасность#
Кроме солнца свет дают источники внутри деталей. Их три: PointLight светит во все стороны, как лампочка; SpotLight — конусом, как фонарь; SurfaceLight — от плоскости детали, как потолочная панель. Все три кладутся внутрь Part или Attachment.
У каждого есть Brightness, Range, Color и галочка Shadows. Опасность одна: свет — самая дорогая вещь на карте. Полсотни ламп с тенями в режиме Future уронят FPS на телефоне гораздо надёжнее, чем тысяча кубиков. Ставь лампы там, где игрок действительно бывает, и не включай тени у декоративных гирлянд.
-- Script в ServerScriptService.
-- Полный цикл суток за десять минут игрового времени.
local Lighting = game:GetService("Lighting")
local RunService = game:GetService("RunService")
local CYCLE_SECONDS = 600 -- сколько длится сутки
local HOURS_PER_SECOND = 24 / CYCLE_SECONDS
RunService.Heartbeat:Connect(function(delta)
-- ClockTime идёт от 0 до 24 и сбрасывается через остаток от деления.
Lighting.ClockTime = (Lighting.ClockTime + delta * HOURS_PER_SECOND) % 24
end)Смену суток считает сервер: тогда время одинаковое у всех игроков. Если написать то же самое в LocalScript, у каждого будет свой полдень — и договориться, «встречаемся на закате», станет невозможно.
Порядок работы, который экономит вечер#
- Сначала силуэт: крупные формы рельефа и главные постройки. Никакого света и эффектов
- Потом проходимость: пробеги карту персонажем, поправь слишком крутые склоны и узкие места
- Дальше материалы: покрасить землю, камень, песок — карта сразу перестаёт быть однотонной
- Только теперь свет: время суток, яркость, тени. Смотри на карту с уровня глаз игрока, а не сверху
- В конце эффекты и лампы — по одному, каждый со сдержанным значением
- Финальная проверка на телефоне через эмулятор устройства: то, что красиво на компьютере, там может стать кашей
Когда карта готова, её пора наполнить звуком и проверить в бою: об этом — «Звук и музыка в игре» и «Как тестировать свою игру». Весь курс по Studio собран в разделе Studio.
Обсуждение
Пиши по делу и без личных данных. Ссылки на сторонние сайты, обмен и «бесплатные робуксы» мы скрываем — почему.
Комментарии пишут те, кто вошёл — так спокойнее всем.
ВойтиПока никто ничего не написал. Будь первым.