- Lod ландшафта что такое
- jMonkeyEngine 3 урок (10) — Hello Terrain
- Пример кода
- Что такое карта высот(Heightmap)?
- Взглянем на код карты высот
- Что такое Texture Splatting?
- Взглянем на код текстурирования
- Что такое Ландшафт(Местность)?
- Взглянем на код местности
- Что такое LOD (уровень детализации)?
- Упражнения
- Упражнение 1: Текстурные слои
- Упражнение 2: Случайный Ландшафт
- Упражнение 3: Твердая местность
- Вывод
- Смотрите также:
- Добавить комментарий Отменить ответ
- LOD Мира
- Введение
- Поля данных и Кнопки
- Примечания
- Terrain Mesh Generation (Генерация Сетки Ландшафта)
- Terrain Texture Generation (Генерация текстур ландшафта)
- LOD Object Generation (Генерация LOD объектов)
- LOD деревья
- LOD вода
- Регенерация данных LOD
Lod ландшафта что такое
Докуметация | Cтарт | Статьи | Форум | Лента | Вход |
---|
jMonkeyEngine 3 урок (10) — Hello Terrain
Одним из способов создания 3D-ландшафта является лепка огромной модели местности. Это дает вам много свободы творчества — но визуализация такой огромный модели может быть довольно медленной. В этом руководстве объясняется, как создавать участки местности которые быстро рендерятся, с помощью карты высот(heightmaps), и как использовать texture splatting(метод комбинирования разных текстур), чтобы местность хорошо выглядела.
Пример кода
Когда вы запустите этот пример вы должны увидеть пейзаж с коричневыми горами, траву на равнинах, а также дорогу между ними.
Что такое карта высот(Heightmap)?
Карта высот(Heightmap) — это эффективный способ представления формы холмистого ландшафта. Не каждый пиксель ландшафта сохраняется, вместо этого, используется сетка из выборочных значений для обозначения высоты рельефа в определенных точках. Высота между выборочными значениями интерполируется.
В Java, карта высот является float массивом, содержащим значения высоты между 0f и 255f. Вот очень простой пример ландшафта, генерируемого из карты высот с количеством значений высот 5×5=25.
Важные вещи на заметку:
- Низкие значения (например, 0 или 50) являются долины.
- Высокие значения (например, 200, 255) являются холмами.
- Карта высот задает лишь несколько точек, а движок интерполирует остальное. Интерполяция является более эффективной, чем создание модели с несколькими миллионами вершин.
При взгляде на типы данных Java для хранения массива из значений от 0 до 255, на ум приходит изображение. Сохранение значений высоты ландшафтом, в качестве изображение из градаций серого, имеет одно большое преимущество: Такой результат является очень удобным, и похожим на топографическую, карта:
- Низкие значения (например, 0 или 50) являются темно-серым — это долины.
- Высокие значения (например, 200, 255) являются светло серым — это холмы.
Посмотрите на следующий скриншот: В левом верхнем углу вы видите изображение размером 128×128 в градациях (карта высот), которое использовалось в качестве основы для создания изображения местности. Для того, чтобы холмистая форма поверхности была лучше видна, горные вершины окрашены в белый цвет, долины — коричневый, а участки между ними зеленым:
В реальной игре, вы будете хотеть использовать более сложные и более гладкие местности, чем простые карты высот, показанные здесь. Как правило, карты высот имеют квадратные размеры 512×512 или 1024×1024, и содержат от сотни тысяч, до 1 миллиона значений высоты. Независимо от того, какой размер, концепция является такой же, как описано здесь.
Взглянем на код карты высот
Первый шаг создания ландшафта является карта высот. Вы можете создать её самостоятельно в любом стандартном графическом приложении. Убедитесь, что она будет обладать следующими свойствами:
- Размер должен быть квадратным, и при этом степенью двойки.
- Примеры: 128×128, 256×256, 512×512, 1024×1024&
- Цветовой режим должен быть 255 оттенков серого.
- Не задавайте цветное изображение, оно будет интерпретировано как оттенки серого цвета, с, возможными, странными результатами.
- Сохраните картинку как .jpg или .png файл изображения.
Файл mountains512.png , что вы видите здесь, является типичным примером изображения карты высот.
Вот как вы создаёте объект heightmap в вашем коде jME:
- Создайте объект типа Texture .
- Загрузите подготовленное изображение карты высот в объект типа Texture .
- Создать AbstractHeightmap объект из ImageBasedHeightMap .
Для это потребует изображения из объекта типа Texture JME. - Загрузите карту высот.
Что такое Texture Splatting?
Ранее вы узнали, как создать материал для простой фигуры, такой, как куб. Все стороны куба при этом имели один и тот же цвет. Вы конечно можете применить один и тот же материал на всю местности, но тогда у вас будет либо одна большая поляна, либо одна большая пустыня и.т.д. Думаю это далеко не всегда то, что вы бы хотели иметь.
Texture splatting позволяет создать пользовательский материал, и «рисовать» текстурами на нем, как «кистью». Это очень удобно для ландшафтов: Как вы видите в приведённом здесь примере, вы можете разрисовать текстурой травы долины, текстурой грязи горы, и нарисовать дороги любых размеров между ними.
Splat textures основаны на материале Terrain.j3md . Если вы откроете файл Terrain.j3md , и посмотрите в разделе параметров материала, вы увидите, что у вас есть несколько текстурных слоев для рисования: Tex1 , Tex2 , Tex3 и.т.д.
Прежде чем начать рисовать, вы должны принять несколько решений:
- Выберите три текстуры. Например, grass.jpg , dirt.jpg и road.jpg .
- Вы «нарисуете» три текстурных слоя, используете три цвета: красный, синий и зеленый. Вы можете произвольно выбрать, что …
- Красный — это трава — красный слой это Tex1 , поэтому текстура травы в Tex1 .
- Зеленый — это грязь — зеленый слой это Tex2 , поэтому текстура грязи в Tex2 .
- Синий — это дороги — синий слой это Tex3 , поэтому текстура дороги в Tex3 .
Теперь вы начинаете рисовать текстуру:
- Сделайте копию вашей карты высот местности, mountains512.png . Использование её, будет вам полезно тем что вы будете лучше знать форму поверхности ландшафта.
- Назовите вашу копию alphamap.png .
- Откройте alphamap.png в графическом редакторе и переключитесь на режим цветного изображения.
- Закрасьте черные долины красным — это будет трава.
- Закрасьте белые холмы зеленым — это будет грязь гор.
- Закрасьте синими линиями, те места где вы хотите, чтобы на ландшафте пролегали дороги.
- Конечный результат должен выглядеть примерно так:
⇒ | Взглянем на код текстурированияКак обычно, вы создаете объект типа Material . Основанный на Описании Материала(Material Definition) Terrain.j3md , который включен в фреймворк jME3. Загрузите четыре текстуры в этот материал. Первый из них, Alpha , это alphamap , которую вы только что создали. Три другие текстуры это слои, которые вы ранее нарисовали: трава, грязь, и дороги. Вы создаете объекты текстуры и загружаете три текстуры, как обычно. Обратите внимание, как вы назначаете их соответствующим текстурным слоям (Tex1, Tex2 и Tex3) внутри Материала! Масштаб конкретной текстуры (например, mat_terrain.setFloat(«Tex3Scale», 128f); ) зависит от размера используемых вами текстур. Используйте setWrap(WrapMode.Repeat) , чтобы заполнять большую области небольшими текстурами которые будут многократно повторятся. Если повторение слишком заметно, попробуйте отрегулировать значение Tex*Scale . Что такое Ландшафт(Местность)?Генерируемая сетка(mesh) ландшафта внутри разбивается на плитки(tiles) и блоки(blocks). Это оптимизация, упрощающая отсечение. Вам не стоит слишком беспокоиться о «плитках» и «блоках» просто используйте рекомендованные значения которое на данный момент — 64 хорошее для начала. Предположим, что вы хотите создать местность 512×512. Вы уже создали объект карты высот. Вот шаги, которые вы выполняете каждый раз, когда создаете новый ландшафт. Создайте TerrainQuad (Квадрант Ландшафта) со следующими аргументами:
Взглянем на код местностиВы создаете объект terrain .
Что такое LOD (уровень детализации)?JME3 включает в себя оптимизацию, которая регулирует уровень детализации (LOD) ландшафта в зависимости от того, насколько близко или далеко участок ландшафта находится от камера. Близкие участки ландшафта визуализируются полностью. Части ландшафта что расположенные в отдалении от камеры в любом случае видны хуже, и JME3 повышает производительность, делает их менее детализированными. Таким образом, вы можете себе позволить загружать огромные территории без серьезных тормозов, вызванных деталями ландшафта что все равно не видны или видны плохо. УпражненияУпражнение 1: Текстурные слоиЧто произойдет, если поменять местами два слоя, например Tex1 и Tex2? Как можете увидеть, легче поменять местами слои в коде, чем изменить цвета в alphamap. Упражнение 2: Случайный ЛандшафтСледующие три строчки генерируют объект heightmap на основе вашего пользовательского изображения: Вместо этого, вы так же можете позволить JME3 генерировать случайный ландшафт для вас:
Вы видите, разнообразие холмистых ландшафтов, которые могут быть получены с помощью этого метода. Упражнение 3: Твердая местностьМожете ли вы объединить то, что вы узнали здесь и в Hello Collision, и сделать рельеф местности твердым? ВыводВы научились создавать ландшафты местность, которые являются более эффективными, чем загрузка одной гигантской модели. Вы знаете, как генерировать случайные карты высот, или создавать их вручную. Вы можете добавить control LOD для ускорения рендерига больших территорий. Вы знаете, как вы можете применить, то что вы узнали об обнаружении столкновения, чтобы сделать рельеф местности твердым для игрока с физикой. Вы также можете текстурировать ландшафт «как босс», используя слоистые материалы и texture splatting. Вы знаете, что jMonkeyEngine SDK предоставляет TerrainEditor, который помогает справиться с большинством из этих задач вручную. Вы хотите услышать как ваши игроки говорят «ой!», когда они врезаются в стену или падают с горы? Тогда продолжите обучение, как добавить звук в вашу игру. Смотрите также:Переведено для jmonkeyengine.ru, оригинал. Добавить комментарий Отменить ответДля отправки комментария вам необходимо авторизоваться. Источник статьи: http://www.jmonkeyengine.ru/wiki/jme3/beginner/hello_terrain LOD МираВведениеДиалоговое окно World LOD используется для генерации LOD ландшафта и LOD геометрии строений для мира. Поля данных и Кнопки
ПримечанияTerrain Mesh Generation (Генерация Сетки Ландшафта)
Terrain Texture Generation (Генерация текстур ландшафта)
LOD Object Generation (Генерация LOD объектов)
LOD деревья
LOD вода
Регенерация данных LOD
Источник статьи: http://bethplanet.ru/fallout-new-vegas/articles/geck/world-lod |