З чого почати при створенні 3D-редактора місцевості? [зачинено]


22

Я хочу створити (для початку) простий інструмент, який міг би підняти, опустити, розгладити та текстурувати місцевість.

Отже, які речі я повинен пройти, щоб зробити такий редактор місцевості?

І, можливо, є цінні ресурси, доступні на тему?

Так, забув згадати, що мене цікавить 3D-редактор рельєфу.

Відповіді:


24

Для "класичного" 3D-редактора місцевості кроки можуть бути такими:

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

Це слід зробити 3DMesh і відобразити у вашій програмі.

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

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

Дозвольте пофарбувати його (наприклад, R, G, B OR Альфа, а не рожевий) та вибрати текстури, що замінюють ці некрасиві основні кольори (Червоний, Синій, Зелений, Альфа) або, крім того, бути представленими ними:

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

Вибачте за великі образи, я це зчепив на роботі ...


Ах, це зробило це трохи зрозуміліше. Теоретично, після 3D-сітки це просто розміщення вершини (вгору / вниз) та текстурування на цьому прикладі, ви зробили "splatmap" спосіб, після чого шейдер нагадує його на "3D" місцевість?
joltmode

1
Правильно для 3D-сітки. Шейдер не робить нічого особливого з сіткою (вершинна шейдер), велика робота - у фрагменті-шейдері ("піксельна шейдер"), де текстовий пошук із шрифтової карти дає скільки трави, каменю тощо кінцевого пікселя Ви повинні отримати (ви, звичайно, також можете мати "базову" текстуру, як, наприклад, камінь, який завжди на 100%, а інші текстури на нього набриваються).
Валмонд

6

Перше, що потрібно зрозуміти про структуру даних вашої місцевості та те, що ви хочете від редактора. Це сітка? Масив висот? Якась система вокселів у стилі Minecraft? Чи потрібно мати можливість додавати сітчасті місцевості, такі як дерева та будівлі? Вручну, автоматично або в обох випадках? Я міг би продовжувати, але ви розумієте.

Основний редактор рельєфу не так важко написати, але деталі будуть сильно відрізнятися залежно від гри, яку ви робите, а отже, і типу місцевості, яку ви хочете зробити.


Ну а сітка / масив і висоти / вокселі тощо - це лише спосіб зберігати пов'язані дані, мене більше цікавило, як написати інструменти для заповнення цих даних. Насправді я загалом не маю уявлення, як редактор місцевості виглядає «поза кадром». Я можу почитати його інженером, але тільки по-своєму, я думаю, що є деякі рекомендації, яких я повинен дотримуватися, хоча ...
joltmode

2
-1. Це не дуже відповідає мені. Ви ставите кілька запитань, які б краще підходили як коментар.
bummzack

5

Це лише здебільшого відповідь на відповідь Валмонда, але це не здається достатньо коротким, щоб додати коментар.

Після того, як ви займетесь створенням базового редактора, ви можете поекспериментувати, повністю генеруючи мапу висоти на GPU. Це абсолютно необов’язково, але це хороший спосіб перевантажити роботу на GPU для постійно мінливої ​​місцевості. Валмонд уже згадував, що бризки текстури виконуються на піксельній шейдері, але також можна використовувати вершинний шейдер, використовуючи пошук текстури для підняття та опускання вершин у сітці. Ось підручник про те, як досягти цього за допомогою вершинного шейдера. Нешадерний матеріал має специфіку C # та XNA, але важливий вміст - у коді шейдера.

У цьому випадку ваш код на стороні процесора буде просто мати справу з зміною текстури градацій сірого, що зберігається в пам'яті. Ваша сітчаста сітка залишається рівною, вершини не оновлюються процесором. Щоразу, коли текстура змінюється, нову текстуру можна передавати в GPU.

Майте на увазі, що не всі моделі шейдерів підтримують вибірку текстури на вершинній шейдері (наприклад, у HLSL вам потрібна принаймні шейдерна модель 3.0).


0

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


2
Я пропоную вам злити відповіді та видалити невикористані.
joltmode

Для створених GPU / маніпульованої місцевості ознайомтеся зі статтями Джипліама де Карпентьє про Scape, дуже інформативно прочитаними на цю тему. decarpentier.nl/scape-render
Йоганн

Як Том вже запропонував, статті Scape, можливо, вже послужили цікавою орієнтиром щодо генерування та рендерингу місцевості. Але з цієї пропозиції я опублікував ще одну статтю про Scape, яка ще більше стосується цієї теми, повністю висвітлюючи її конвеєр редагування на основі пензля. Тож я хоч би і повідомив вам про це. www.decarpentier.nl/scape-brush-pipeline
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.