Что такое генератор ландшафтов

Что такое генератор ландшафтов

Дельта принтеры крайне требовательны к точности изготовления комплектующих (геометрия рамы, длины диагоналей, люфтам соединения диагоналей, эффектора и кареток) и всей геометрии принтера. Так же, если концевые выключатели (EndStop) расположены на разной высоте (или разный момент срабатывания в случае контактных концевиков), то высота по каждой из осей оказывается разная и мы получаем наклонную плоскость не совпадающая с плоскостью рабочего столика(стекла). Данные неточности могут быть исправлены либо механически (путем регулировки концевых выключателей по высоте), либо программно. Мы используем программный способ калибровки.
Далее будут рассмотрены основные настройки дельта принтера.
Для управления и настройки принтера мы используем программу Pronterface.
Калибровка принтера делится на три этапа:

1 Этап. Корректируем плоскость по трем точкам

Выставление в одну плоскость трех точек — A, B, C (расположенных рядом с тремя направляющими). По сути необходимо уточнить высоту от плоскости до концевых выключателей для каждой из осей.
Большинство (если не все) платы для управления трехмерным принтером (В нашем случае RAMPS 1.4) работают в декартовой системе координат, другими словами есть привод на оси: X, Y, Z.
В дельта принтере необходимо перейти от декартовых координат к полярным. Поэтому условимся, что подключенные к двигателям X, Y, Z соответствует осям A, B, C.(Против часовой стрелки начиная с любого двигателя, в нашем случае смотря на логотип слева — X-A, справа Y-B, дальний Z-C) Далее при слайсинге, печати и управлении принтером в ручном режиме, мы будем оперировать классической декартовой системой координат, электроника принтера сама будет пересчитывать данные в нужную ей систему. Это условность нам необходима для понятия принципа работы и непосредственной калибровки принтера.

Точки, по которым мы будем производить калибровку назовем аналогично (A, B, C) и позиция этих точек равна A= X-52 Y-30; B= X+52 Y-30; C= X0 Y60.

Алгоритм настройки:

  1. Подключаемся к принтеру. (В случае “крагозяб” в командной строке, необходимо сменить скорость COM порта. В нашем случае с 115200 на 250000 и переподключится)

    После чего мы увидим все настройки принтера.
  2. Обнуляем высоты осей X, Y, Z командой M666 x0 y0 z0.
    И сохраняем изменения командой M500. После каждого изменения настроек необходимо нажать home (или команда g28), для того что бы принтер знал откуда брать отсчет.
  3. Калибровка принтера производится “на горячую”, то есть должен быть включен подогрев стола (если имеется) и нагрев печатающей головки (HotEnd’а) (Стол 60град., сопло 185 град.) Так же нам понадобится щуп, желательно металлический, известных размеров. Для этих задач вполне подойдет шестигранный ключ (самый большой, в нашем случае 8мм, он предоставляется в комплекте с принтерами Prizm Pro и Prizm Mini)
  4. Опускаем печатающую головку на высоту (условно) 9мм (от стола, так, что бы сопло еле касалось нашего щупа, т.к. высота пока что не точно выставлена.) Команда: G1 Z9.
  5. Теперь приступаем непосредственно к настройке наших трех точек.
    Для удобства можно вместо g- команд создать в Pronterface четыре кнопки, для перемещения печатающей головки в точки A, B, C, 0-ноль.
  • Последовательно перемещаясь между тремя точками (созданными ранее кнопками или командами) выясняем какая из них находится ниже всего (визуально) и принимает эту ось за нулевую, относительно нее мы будем менять высоту остальных двух точек.
  • Предположим, что точка A у нас ниже остальных. Перемещаем головку в точку B(Y) и клавишами управления высотой в Pronterface опускаем сопло до касания с нашим щупом, считая величину, на которую мы опустили сопло (в лоб считаем количество нажатий на кнопки +1 и +0.1)
    Далее командой меняем параметры высоты оси Y: M666 Y <посчитанная величина>
    M666 Y0.75
    M500
    G28
  • Ту же операцию проделываем с оставшимися осями. После чего следует опять проверить высоту всех точек, может получится, что разброс высот после первой калибровки уменьшится, но высота все равно будет отличатся, при этом самая низкая точка может изменится. В этом случае повторяем пункты 6-7.
  • 2 Этап. Исправляем линзу

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

    Корректируется этот параметр т.н. дельта радиусом, который подбирается экспериментально.

    Калибровка:

    1. Отправляем головку на высоту щупа в любую из трех точек стола. Например G1 Z9 X-52 Y-30
    2. Сравниваем высоту центральной точки и высоту точек A,B,C. (Если высота точек A, B, C разная, необходимо вернутся к предыдущей калибровки.)
    3. Если высота центральной точки больше остальных, то линза выпуклая и необходимо увеличить значение дельта радиуса. Увеличивать или уменьшать желательно с шагом +-0,2мм, при необходимости уменьшить или увеличить шаг в зависимости от характера и величины искривления (подбирается экспериментально)
    4. Команды:
      G666 R67,7
      M500
      G28
    5. Подгоняем дельта радиус пока наша плоскость не выровняется
    3 Этап. Находим истинную высоту от сопла до столика

    Третьим этапом мы подгоняем высоту печати (от сопла до нижней плоскости — столика) Так как мы считали, что общая высота заведомо не правильная, необходимо ее откорректировать, после всех настроек высот осей. Можно пойти двумя путями решения данной проблемы:
    1 Способ:
    Подогнав вручную наше сопло под щуп, так что бы оно свободно под ним проходило, но при этом не было ощутимого люфта,

    • Командой M114 выводим на экран значение фактической высоты нашего HotEnd’а
    • Командой M666 L получаем полное значение высоты (Параметр H)
    • После чего вычитаем из полной высоты фактическую высоту.
    • Получившееся значение вычитаем из высоты щупа.

    Таким образом мы получаем величину недохода сопла до нижней плоскости, которое необходимо прибавить к полному значению высоты и и записать в память принтера командами:
    G666 H 235.2
    M500
    G28

    2 Способ:
    Второй способ прост как валенок. С “потолка”, “на глаз” прибавляем значение высоты (после каждого изменение не забываем “уходить” в home), добиваясь необходимого значения высоты, но есть шанс переборщить со значениями и ваше сопло с хрустом шмякнется об стекло.

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

    Источник статьи: http://itnan.ru/post.php?c=2&p=265414

    Создание реалистичных виртуальных ландшафтов

    3D-художник Алиреза Хаджехали – настоящий мастер ландшафтного дизайна. Он создал бесчисленное количество виртуальных локаций, полностью играбельных в UE4. В этом интервью она описал свой рабочий процесс и рассказал о том, как WorldMachine и Megascans помогают ему конструировать большие и реалистичные цифровые миры.

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

    С оригинальным материалом можно ознакомиться тут.

    Введение

    Всем привет! Меня зовут Алиреза Хаджехали, и я здорово подсел на реализм. В данный момент я получаю степень бакалавра по специальности «Программирование», и мой выпуск должен состояться примерно через 8 месяцев. Что касается 3D-графики, то здесь я самоучка, и эта область знаний для меня – настоящая страсть. Именно она и помогает мне двигаться вперед.

    Все началось с того, когда я обнаружил, что у моего Crysis 1 есть редактор, который можно открыть двойным кликом мышки и тут же стать игровым разработчиком. «Никогда не говорите ребенку, что посадить пару деревьев – это непосильная задача!» Вскоре вышел CryENGINE 3 Free SDK, после чего моей основной деятельностью стали создание сцен и помощь маленьким инди-проектам, плюс я несколько лет проводил кучу свободного времени за бесплатной работой и в один прекрасный момент смог, наконец, представить себя как художника окружения с солидным портфолио.

    Из того, что я делал недавно, можно выделить LawBreakers, где я делал природные фоны для уровней. Работая над Chronicles of Elyria, я был в позиции универсала, то есть создавал и игровые уровни, и рекламные шоты. Кроме того, я делал ландшафт в Squad и сейчас работаю с друзьями над Our Ghosts of War, это личный проект.

    Я думаю, каждый художник окружения мечтал заниматься этим с самого детства. К примеру, когда мне было 4-5 лет, то я всегда, смотря фильмы, думал о том, как бы я оформил декорации, доверь они это дело мне. Мне всегда нравилось комбинировать вещи таким образом, чтобы они отлично смотрелись друг с другом – именно это я и делал в CryENGINE 2 в свои моддеррские деньки.

    Переход от маленьких сцен к обширным пространствам произошел, когда я впервые увидел Battlefield 3. Я был очень впечатлен этими огромными пейзажами и особенно – работой Эндрю Гамильтона. Он собаку съел на всем, что касается открытых локаций, поэтому в его работе все детали изумительны и находятся в полной гармонии друг с другом. В общем-то, в этом и есть секрет хороших открытых ландшафтов. «Не нужно недооценивать что-либо, исходя из размера. Даже маленькая галька на земле так же важна, как и огромные горы!» На тот момент я по-прежнему пользовался CryENGINE 3, но из-за недостатка инструментов для создания больших открытых пространств я таки бросил его и перешел на UE 4.0.1.

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

    Процесс создания

    Работа над каждой сценой начинается с идеи, родившейся в голове, или с картинки-референса. К примеру, недавно я создал кусочек Исландии, и этот проект начался с того, что я случайно увидел классные фотки полуострова Рейкьянес. Локация, которую я сделал после, была вдохновлена сценой из фильма «Безумный Макс: Дорога Ярости».

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

    Генерация ландшафта

    Как правило, для генерации карты высот я использую WM2 (World Machine 2). Далее беру карты высот и несколько масок, с их помощью делая карту веса (splat map). Использование карты веса для ландшафтов – это старый, но по-прежнему самый лучший метод. Я также экспортирую карту высот в сетку, а затем использую эту сетку для дизайна фонов локации. Для этого я сначала упрощаю сетку, а затем запекаю высокополигональную модель в низкополигональную, чтобы у меня был низкополигональный ландшафт и карта нормалей, которые можно разместить за пределами локации и тем самым создать видимость, что локация больше, чем на самом деле. Вот две картинки, показывающие разницу с фоновыми моделями и без них:

    Затем я использую 3ds Max и ZBrush для создания вспомогательных объектов для окружения. К примеру, камни. Чтобы «распластать» камни по UV-плоскости, я использую программу Unfold3D. Она, к слову, очень быстрая. Затем я делаю плиточные текстуры в UE4 при помощи нода Object Radius, чтобы плотность текселей оставалась одинаковой, как бы я не менял масштаб камня.

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

    Дополнительная работа в UE4

    Самое интересное начинается после того, как я импортирую в UE4 карту высот и начинаю играться с материалами, функциями, освещением, атмосферой и т.д. Я делаю кучу поправок, постоянно все меняя, пока не поймаю настроение локации.

    Я использую, как правило, 4-6 материалов на один пейзаж, и конечный результат, который можно видеть на картинках, как правило, требует 3 Гб памяти RAM (4K-текстуры) и бегает с частотой от 60 до 100 кадров в секунду на моей 970, что неплохо для мира площадью в 64 квадратных километра, с динамическим глобальным освещением (при помощи LPV) и включенной тесселляцией (от англ. «tessellation»; это технология, разбивающая полигоны на мелкие части, которые затем можно использовать для улучшения качества картинки), меняющейся в зависимости от расстояния.

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

    А вот еще одна функция, которая в качестве входной информации использует траву и на ее основе позволяет создавать бесконечное количество вариаций – не генерируя новые текстуры, а просто по-другому окрашивая траву. Впрочем, иной раз для того, чтобы пространство не выглядело однообразно, достаточно лишь одного типа травы, безо всяких вариаций.

    Геометрия

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

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

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

    Текстуры

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

    Теперь к важному. Вы об этом не спрашивали, но, как мне кажется, этим стоит поделиться. Неважно, Megascans это или нет, но когда вы импортируете текстуру в движок, она начинает выглядеть посредственно. В библиотеке Megascans поверхности отрендерены в миллионы полигонов. Мельчайшая детализация, все в 3D, поддержка теней и генерация AO. Но совсем другое дело, когда вы импортируете эти материалы в игровой движок. В игровых движках поверхности выполнены с небольшим количеством полигонов – как правило, 2 треугольника на один квадратный метр. Но есть способы это обойти. Среди художников окружения есть расхожее мнение, что на PBR-движке металлическим материалам не нужна карта отражений. Также многие ошибочно думают, что на карте альбедо не должно быть теней. Согласиться с этим категорически не могу.

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

    Если удалить эти тени с карты альбедо, то игровой движок их реконструировать не сможет – независимо от того, используете ли вы отдельную карту для AO или нет. AO-карты никак не повлияют на текстуру, если поверхность находится под освещением, т.к. они работают, только если поверхность покрыта тенями. Так что эти микротени нужно добавлять на карты альбедо. Некоторые люди зачем-то удаляют эти тени, затем используют отдельную AO-карту, а затем объединяют ее с картой альбедо в редакторе материалов, но я не понимаю, зачем удалять тени, а затем снова их добавлять ценой дополнительной AO-карты.

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

    Я не использую для этого отдельную карту отражений, т.к. это лишняя трата вычислительных ресурсов. Но я могу задействовать карту отражений на карте альбедо, добавив нод Clamp (он ограничивает заданное значение в пределах определенного диапазона) с минимальным значением «0» и максимальным «0,5» («0,5» – это отражение на большинстве неметаллических поверхностей). Чтобы добавить вариативности на получившуюся карту отражений и сделать поверхность более интересной, мы можем пропустить ее через нод Power (он берет заданное значение и умножает его на себя определенное количество раз), чтобы сделать более контрастной перед тем, как за работу примется нод Clamp. Это позволяет сделать поверхность более правдоподобной, поскольку теперь дыры и трещины не отражают свет так же, как и плоская поверхность.

    Ниже – пара фотографий, демонстрирующих разницу между обычной текстурой для камня и текстурой, куда я добавил изменения, о которых рассказал выше.

    А вот то же самое, но если смотреть только через буфер отражений.

    Здесь также можно было бы рассказать об эффекте Френеля, но поскольку этот текст и так превращается в «Войну и мир», то я, пожалуй, воздержусь. Может быть, в следующий раз.

    Оптимизация

    Способов оптимизировать окружение есть великое множество, и некоторые из них я использую для своих пейзажей. Думаю, самый лучший метод – это укладка в каналы (от англ. «channel packing»; это техника, при которой каналы R, G и B изображения используются для хранения различных данных), он помогает сберечь ресурсы памяти и уменьшить сложность шейдеров. То есть вы можете уложить три монохромные карты альбедо в одну RGB-текстуру, а затем раскрасить каждый канал в редакторе материалов. Я, правда, этим методом не пользуюсь, т.к. стараюсь сохранить оригинальную цветовую информацию. Но что я делаю, так это помещаю карту смещения (displacement map) в синий канал карты нормалей и выставляю тип компрессии на «Masks». Затем я простой математикой реконструирую синий канал карты нормалей в редакторе материалов, что позволяет мне не использовать отдельную карту смещения. Выставление типа компрессии на «Masks» снижает использование памяти примерно на 50%. Я также, бывает, извлекаю карту неровностей из карты альбедо и помещаю ее в альфа-канал карты нормалей, но редко – лишь в случаях, когда нужна уникальная карта неровностей.

    Что касается сеток для камней, то я, как правило, не экономлю треугольники, и стараюсь придерживаться уровня примерно в 30 тысяч треугольников на камень – это очень помогает погружению, если игрок вдруг окажется рядом с таким камнем. Кроме того, я использую, как правило, 4 или 5 уровней детализации – чтобы при перемещении игрока объект не дергался. Кроме того, я стараюсь максимально снизить количество треугольников на уровень детализации, при этом сохраняя форму, поэтому у меня не получается так, что на 0-ом уровне детализации я вижу камень, а на 5-ом – базуку.

    О другом способе я уже рассказывал выше – это функция для травы. Смысл в том, что я использую для травы одну текстуру и одну сетку, а затем делаю много разных вариаций, чтобы покрыть ими сотни метров вокруг игрока, причем тот не замечает, что это, по сути», «клоны» одной и той же травы.

    Освещение

    Прощу прощения, но этот раздел обещает быть большим. Системам для работы с PBR-материалами нужно физическое освещение. Я имею в виду, что мы должны знать, сколько именно света мы проливаем на наши материалы, иначе смысл в использовании PBR для создания реалистичных ландшафтов, по сути, попросту теряется.

    К сожалению, свечение от солнца в UE4 не измеряется в единицах измерения вроде люксов, поэтому мы, в сущности, не знаем, сколько света излучаем на создаваемый мир. Впрочем, есть несколько способов, позволяющих рассчитать эту величину, но результат вряд ли будет таким же удовлетворительным, как с физическим светом. Поэтому я поделюсь с вами собственными находками. Если у вас облачная погода, то вам нужна, собственно, облачная небесная сфера и параметр «Skylight Intensity», выставленный «1». Для солнечно-облачного денька параметр «Sun Intensity» лучше выставить на «3.14», а «Skylight Intensity» имеет смысл немного снизить – для поддержания хорошего контраста между светом и тенью. Если у вас меньше облаков и больше солнца, то для «Sun Intensity» подойдет значение «4» или «5». Для выжженных пустынь с беспощадным солнцем параметр «Sun Intensity» можно выставить на «7».

    Но я очень не рекомендую идти выше «7», поскольку материалы начинают выглядеть хуже. Люди часто ставят «10» или даже «12», но это ошибка. В итоге либо ваши текстуры будут недостаточно освещены (они будут темнее, чем должны), либо вы станете жертвой тональной компрессии (от англ. «tone mapping»; это конвертация цветового диапазона из HDR в более «узкий» LDR). В UE4 эта функция ограничивает белый цвет, поэтому поначалу у вас получается очень блеклое изображение, и немного компенсировать это можно, лишь сильно подняв параметр «Sun Intensity». Но в итоге от такого света материалы теряют свою оригинальную детализацию. Чтобы справиться с этим, но не отключая тональную компрессию (поскольку вместе с ней отключится и куча других функций), я создал специальную таблицу – если загрузить ее в Post Processing Volume, это вернет белые цвета обратно к оригинальным позициям, а вы сможете пользоваться полным диапазоном яркости (0-255).

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

    Совет

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

    Кроме того, после создания карты высот и до перехода к текстурированию/освещению имеет смысл немного пробежаться уровню, чтобы проверить масштаб. Это очень сэкономит вам время.

    Следите за тем, чтобы ваши материалы выглядели как надо. Не бойтесь менять материалы (особенно цвета), пока не достигнете полной гармонии.

    Делая окружение для открытых локаций, станьте первым, кто по нему пройдется, станьте первым, кто будет судить, подходит ли эта локация хотя бы для 2-3 разных типов геймплея или нет. Будьте первым, кто позаботится о производительности и оптимизации. Упростите работу другим.

    Обращайте внимание на мелкую детализацию, не делайте исключений. Камни, трава, галька, горы – не забывайте ни о чем. Не перескакивайте с одного объекта на другой, пока хорошенько его не доделаете. Один хорошо сделанный световой меч заслуживает больше уважения, чем 10 посредственных локаций.

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

    Не бойтесь делать по несколько проходов. Делайте одну версию, потом еще и еще, пока не поймете, что да – это оно! И учитесь у тех, кто критикует вашу работу.

    Если у вас есть какие-то вопросы, можете смело писать мне. Но заранее извиняюсь, если с ответом будут задержки. Бывает, я работаю по 16 часов подряд, забывая даже почесать макушку.

    Представительства сайта «80 level» в Twitter и VK.

    Источник статьи: http://www.progamer.ru/dev/virtual-landscapes.htm

    Читайте также:  Когда стояли под беседкой
    Оцените статью