четверг, 7 июня 2012 г.

[OpenSim] Терраформ

Ну вот, у нас есть четыре сима, настало самое время заняться их комплексным терраформированием, чтобы получить единое пространство. Как я уже говорил, я буду моделировать полуостров Крым, для чего иду в «Google Maps»:



Кстати, кое-какой терраформ можно выполнять и из консоли сервера. Для примера, давайте вместо лысых пятачков на всех четырех регионах сделаем одино большое и ровное плато. Для этого нужно из рута сервера отдать команду на терраформ:
  1. Переходим в корень:
    Region (Crimea1) # change region root
  2. Ровняем землю и поднимаем на уровень 30 метров (вода у нас по умолчанию на 20 метрах):
    Region (root) # terrain fill 30
И все, все четыре сима превращаются в одно большое пространство. Если же нужно с каким-то одним регионом проделать подобное, то... Думаю, вы уже догадались ;D



Итак, нас есть скриншот, который нужно переработать в битовую карту (RAW) террейна, понятную симулятору. Немного теории. Мы знаем, что регион имеет размеры 256х256 метров. Сетка высот кодируется raw-файлом, размерами 256х256 точек, таким образом получается, что одна точка кодирует высоту одного квадратного метра террейна. Значение точки может лежать в пределах от 0 до 255, что на практике дает нам цвет пикселя в градациях серого. Если это рассматривать в системе цветокодирования RGB, то получается, что мы имеем 4 канала цвета: R (красный), G (зеленый), B (синий) и A (прозрачный, альфа). Смотрите, как понимает значение этих каналов сервер, потому что если с красным и синим все более-менее понятно, то зеленый канал таит в себе чудеса:
  1. R (красный) Высота основания точки в метрах от 0 до 255
  2. G (зеленый) Множитель к высоте основания точки
  3. B (синий) Высота уровня воды (20 м по умолчанию)
Вычисляется окончательная высота точки по специальной формуле, описывающей взаимодействие красного и зеленого каналов карты, к счастью, несложной:
  1. Высота (канал R) * Множитель (канал G) / 128
Зачем так сделали и что хотели этим достичь, я не знаю, да и не очень хотелось бы знать. Большие знания - большие печали. Просто поступим так, как требуется, чтобы получить то, что мы хотим. Возвращаемся к нашему скриншоту и вырезаем квадрат, равный 512х512 пикселей (2х256, у нас же по два сима на одну сторону) с необходимой территорией внутри:



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



Ну вот, теперь у нас есть материал для терраформирования - установим значения каналов по 128, разрежем на четыре части эту картинку и... Здесь бы написать «и загрузим на сервер», да только обломитесь, девочки и мальчики. Не все так просто. Тут как в сексе - вроде бы ничего непонятного, все предельно ясно, но сноровка требуется :D Короче, разрезаем нашу картинку на четыре равные части и каждую сохраняем как 24-битную TGA, потому что дальше мы пойдем приводить их к общему знаменателю и удобоваримому виду. И вот на что обратите внимание особое - у меня не даром покрашен полуостров в серый цвет, а то место, где должно быть море - в черный. Помните теорию? Вот я таким образом явно разделил высоты.



Теперь немного пошарим по инету и скачаем вот что:
  1. «Terragen» - генератор ландшафтов.
Сегодня мы им воспользуемся для конверсии наших картинок, но вообще рекомендую ее освоить, потому что в ней можно делать весьма прикольные терраформы и потом все это барахло грузить в сим. В конце статьи, в качестве бонуса, я покажу терраформ горного участка местности с озерцами на те же четыре сима, сделанный в ней.
  1. «Bailiwick» - редактор каналов raw-файлов (требует для работы .Net 2.0).
Эта прога специально написана добрыми самаритянами, чтобы генерировать правильные файлы для SL из того шита, что в нее грузят такие деятели, как мы с вами. Так что ставим все это барахло, курим (программы под Win32, имейте в виду, если что, WINE вас спасет) и делаем четыре raw'чика для наших регионов.

А теперь внимательно следите за руками, кто прощелкает, у того дырки в земле будут! :D



Итак, берем «Terragen» и, немного поигравшись с ним, как же без этого, начинаем выполнять некие осмысленные действия. Сперва нажимаем кнопку «Import» (1) и в открывшемся окне (опять 1) выбираем первый из подготовленных загодя четырех картинок в TGA. Когда он загрузится, нажимаем кнопку «Modify» (2) И выставляем значения высот, зафиксировав их нажатием кнопки «Set Height Range». Я выбрал такие, как на скриншоте, у вас могут быть свои, определенные экспериментально. После настройки высот закройте это окошко кнопкой «Close», иначе все остальные окна будут неактивны. Затем установим необходимый уровень воды - у нас он равен 20 метрам, так как мы его не меняли на своих симах. Окно настроек воды открывается нажатием на квадратную кнопку слева с изображением волн. Значение воды также фиксируем.

Ну вот, основное сделано, теперь можно посмотреть предварительно, как все будет выглядеть. Сбоку на панельке есть большая квадратная кнопа «3D», жмем:



Там есть некое подобие левой руки 3D-камеры, можно посмотреть со всех сторон эскиз, но управление у нее абсолютно нечеловеческое. Впрочем, лучше, чем ничего. Теперь жмем кнопку «Save» (3) и сохраняем то, что у нас получилось, в формате террейна с расширением .ter.

Теперь берем другую софтину, «Bailiwick», и при минимуме телодвижений формируем RAW-файл, годный для сима. Импортируем, проверяем, что все в порядке, сохраняем уже как .raw, все. Стоит обратить внимание, что у этой программы также есть поле с указанием уровня воды. Так как он у нас стандартный, то мы ничего не делаем, если у вас свой, то нужно его перед сохранением изменить в этом поле.





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



По правде сказать, по уму надо бы еще поработать над рельефом, поскольку в Крыму есть горы, озера и т.п. Но перенос рельефа - это задача, производная от той, которую мы только что решили, стало быть, дело техники. Поэтому я бы вам порекомедовал самостоятельно поработать над этим и задать высоты в своих тераформах, хотя бы ради тренировки. Ну а сейчас обещанный результат работы «Terragen'a»:



Вот и все. Можно, конечно, сказать, что заморочено как-то все, проще по-старинке, in-world при помощи старых добрых Ctrl-5... Болтуны. Уж кто этими «старыми добрыми» что-то и терраформил, такой ереси точно не скажут :D

2 комментария:

  1. Вот так вот крым и был отсоединен от украины, а мы то все гадали, как? каким образом?

    ОтветитьУдалить
  2. Ну вот, старался старался, а самое главное замылил. "выгружаем на симы"....интересно как это сделать? Всё описал подробно, а на последнем шаге оставил нас с удивленными мордами и непониманием.

    ОтветитьУдалить