С чего начать при создании 3D редактора местности? [закрыто]

22

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

Итак, что я должен пройти, чтобы сделать такой редактор местности?

А может быть есть ценные ресурсы по теме?

Да, забыл упомянуть, что меня интересует 3D-редактор местности.

joltmode
источник

Ответы:

24

Для «классического» трехмерного редактора местности, шаги могут быть такими:

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

Это должно быть сделано в 3DMesh и отображено в вашей программе.

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

Создайте большую текстуру (например, 1024x1024x4 или лучше) и наложите на нее текстуру, которая называется splat-map: введите описание изображения здесь

Сделайте возможным рисовать его (с помощью R, G, B ИЛИ Alpha, например, не розовый) и выбирать текстуры, заменяющие эти уродливые основные цвета (красный, синий, зеленый, альфа) или, более того, представленные ими:

Шейдер (который вам нужно будет создать) должен умножить эти приятные текстуры (скажем, камень, трава, ...) на интенсивность в splatmap (уродливой), а затем смешать все вместе, чтобы он выглядел, например (с вроде только 2 цвета) вот так: введите описание изображения здесь

Извините за большие изображения, я собрал это на работе ...

Valmond
источник
Ах, это сделало это немного яснее. Теоретически, после трехмерного меша это просто перестановка вершин (вверх / вниз) и текстурирование в этом примере, вы сделали способ «splatmap», после чего шейдер напоминает его в «трехмерном» ландшафте?
Joltmode
1
Правильно для 3D сетки. Шейдер не делает ничего особенного с сеткой (вершинный шейдер), большая работа заключается в фрагментном шейдере («пиксельный шейдер»), где поиск текселей из карты сплат-карт дает количество травы, камня и т. Д. В конечном пикселе получится (вы, конечно, также можете иметь «базовую» текстуру, например, камень, который всегда на 100%, а другие текстуры обрызганы на него).
Valmond
6

Первым делом нужно уточнить структуру данных вашего ландшафта и то, что вы хотите от редактора. Это сетка? Массив высот? Какая-то воксельная система в стиле Minecraft? Нужно ли вам добавлять сетчатые элементы местности, такие как деревья и здания? Вручную, автоматически или оба? Я мог бы продолжать, но вы поняли идею.

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

SimonW
источник
Ну, меш / массив высот / вокселей и т. Д. - это просто способ хранения связанных данных, меня больше интересовало, как написать инструменты для заполнения этих данных. На самом деле, я понятия не имею, как редактор ландшафта выглядит "за кадром". Я могу почитать его инженером, но только по-своему, держу пари, что есть некоторые правила, которым я должен следовать ...
Joltmode
2
-1. Это не похоже на большой ответ для меня. Вы задаете несколько вопросов, которые лучше подходят для комментариев.
bummzack
5

Это всего лишь продолжение ответа Вальмонда, но оно кажется недостаточно коротким, чтобы добавить его в качестве комментария.

Как только вы приступите к созданию основного редактора, вы можете поэкспериментировать, сгенерировав карту высот полностью на GPU. Это совершенно необязательно, но это хороший способ перенести работу на GPU для постоянно меняющейся местности. Вальмонд уже упоминал, что на пиксельном шейдере делаются текстуры, но можно использовать и вершинный шейдер, используя поиск текстуры для поднятия и опускания вершин в сетке. Вот учебник о том, как сделать это с помощью вершинного шейдера. Не-шейдерная штука специфична для C # и XNA, но важная штука в шейдерном коде.

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

Имейте в виду, что не все модели шейдеров поддерживают выборку текстур в вершинном шейдере (например, в HLSL вам нужна как минимум модель шейдера 3.0).

ChrisC
источник
0

Вы можете взглянуть на ETM Огре http://www.ogre3d.org/addonforums/viewforum.php?f=16 , чтобы дать вам некоторые идеи. Artifex Terra основан на этом, если вы хотите увидеть его в действии.

Johann
источник
2
Я предлагаю вам объединить ваши ответы и удалить неиспользованные.
Joltmode
Для создания / манипулирования графическим ландшафтом ознакомьтесь со статьями Джиллиама де Карпентье, весьма информативными по данной теме. decarpentier.nl/scape-render
Иоганн
Как уже предположил Том, статьи Scape, возможно, уже послужили интересной ссылкой на создание и рендеринг ландшафта. Но после этого предложения я опубликовал еще одну статью о Scape, которая еще более актуальна для этой темы, полностью освещая процесс редактирования на основе кисти. Так что я бы хотел, чтобы вы знали. www.decarpentier.nl/scape-brush-pipeline