1 Востаннє редагувалося 77kruk11 (28.03.2023 18:09:31)

Тема: Розробка BTN

Вітаю спільното. Працюю над процедурним мешем в UE4, зіштовхнувся з задачею яку не можу вирішити, прошу допомоги.
Є клас А в якому є масив TArray<FVector>Vertex;
Є клас B в якому є масив TArray<FVector>MyVertex;

Задача в масиві Vertex об'єкта класа А 42 значення, додані через .Add циклом,
треба щоб з 0 по 20 скопіювалися в об'єкт B1 класу B, а з 21 по 42 в об'єкт B2 класу B.
Причому за адресою, так що б якщо ми наприклад змінюємо MyVertec[2] в B2 то і Vertex[24] теж змінився.

Сльозно прошу допомоги бо взагалі пічаль(((

2

Re: Розробка BTN

Це ж просто плюси, так?
Значить, "за адресою" означає, що в масивах має бути саме адреса, тобто покажчик. FVector*. Ну, або ж TArray<FVector>*. Всі передачі за адресою чи значенням в C++ більш-менш явні. Причому, якщо ви не використовуєте розумні покажчики на кшталт shared_ptr, то вам доведеться самому відстежувати, щоб посилання на знищені об'єкти не були запитані.
А звідки така задача? Чому за зміну однієї сутності відповідають два об'єкти? Як ці об'єкти співвідносяться і взаємодіють?

Подякували: Chemist-i1

3 Востаннє редагувалося 77kruk11 (13.03.2023 22:12:21)

Re: Розробка BTN

Дякую, розібрався. Виною всьому була звичайна неуважність.)))

Роблю гру на UE4. Щось подібне до OldWorld або Civilization. Але хочу реалізувати деякі механікі стосовно ландшафту. Задача така виникла з того що ігрову мапу створюю як єдиний процедурний меш, адреси вершин якого передаю в гекс елементи, а вже потім черег гекс керую окремими вершинами які йому належать.
Таким чином в кожному гексі є масив вершин, адреси яких є спільними з процедурним мешем мапи.

4

Re: Розробка BTN

https://replace.org.ua/uploads/images/10181/20dbd043eea1cd3f86e984dded3b30bc.jpg https://replace.org.ua/uploads/images/10181/87b5948d59fd8acd182a9283224d49f1.jpg

Спільното, прошу критики, які тайли краще використати канонічні гекси чи трохи рандомні?
Дякую за відгуки.

5

Re: Розробка BTN

При рандомі берегова лінія виглядає більш природньо за рахунок згладжування. Але тоді вам доведеться робити змішані гекси земля-берег (наприклад трава-пісок, трава-скелі тощо). Але це вирішувати вам, як автору  :)

Подякували: 77kruk111

6 Востаннє редагувалося 77kruk11 (26.03.2023 12:12:24)

Re: Розробка BTN

PeSePol написав:

При рандомі берегова лінія виглядає більш природньо за рахунок згладжування. Але тоді вам доведеться робити змішані гекси земля-берег (наприклад трава-пісок, трава-скелі тощо). Але це вирішувати вам, як автору  :)

Матеріали і гори, це більш для наглядності, накинуті швидкоруч, поки що визначаюсь з формою тайлів. Дякую за коментар.
Сьогодні ще думав над варіантом зробити 4-5 видів тайлів, і рандомно їх міксувати.

7 Востаннє редагувалося koala (26.03.2023 13:11:11)

Re: Розробка BTN

І те, і те виглядає неприродним. Але оцей напівхаос мені не подобається, краще якісь передбачувані правила згладжування. Більш округлі краї, наприклад.

Подякували: wander, 77kruk112

8 Востаннє редагувалося wander (26.03.2023 20:08:56)

Re: Розробка BTN

Зберігайте шестикутну генерацію, навіщо вам якась незрозуміла геометрія? Просто додайте щось на зразок "берегів" (shores), щоб поєднати водні та сухопутні границі у щось більш природне (але все ще зберігаючи свою шестикутну природу). Та ж 6 цива приблизно те саме робить. І, як я бачу щось схоже у вас вже є, тре лиш це допрацювати.

Якщо я вірно пам'ятаю, то ця техніка називається "corner tiles" - яка зазвичай базується на алгоритмах маршування (marching squares, marching triangles). Вам мали б підійти останні, адже ми можемо побудувати шестикутник з 6 трикутників. Ось так це може виглядати, але майте на увазі, що я це генерував з випадкового шуму.

Прихований текст

https://i.ibb.co/S7TGyR2/image.png

Подякували: 77kruk11, leofun012

9 Востаннє редагувалося 77kruk11 (26.03.2023 22:50:43)

Re: Розробка BTN

wander написав:

Зберігайте шестикутну генерацію, навіщо вам якась незрозуміла геометрія? Просто додайте щось на зразок "берегів" (shores), щоб поєднати водні та сухопутні границі у щось більш природне (але все ще зберігаючи свою шестикутну природу). Та ж 6 цива приблизно те саме робить. І, як я бачу щось схоже у вас вже є, тре лиш це допрацювати.

Якщо я вірно пам'ятаю, то ця техніка називається "corner tiles" - яка зазвичай базується на алгоритмах маршування (marching squares, marching triangles). Вам мали б підійти останні, адже ми можемо побудувати шестикутник з 6 трикутників. Ось так це може виглядати, але майте на увазі, що я це генерував з шуму.

Прихований текст

https://i.ibb.co/S7TGyR2/image.png

Я можливо і не правий, але аналізуючи мапи 6ї циви, таке враження що вони використовували елементи круглої форми, потім зв'язували їх між собою, це і давало плавні заокруглі переходи, до того ж на їх мапах річки які формуються між клітинами явно огортають кола, а не гекси. А зверху всього цого накладена гексагональна сітка. Хоча це моя особиста нічим не підтверждена думка.

P.S. тут ще багато чого опрацьовувати, я тільки на початку розробки.
Буду час від часу писати сюди. Може кому буде цікаво.

10 Востаннє редагувалося wander (27.03.2023 00:50:42)

Re: Розробка BTN

77kruk11 написав:

Я можливо і не правий, але аналізуючи мапи 6ї циви, таке враження що вони використовували елементи круглої форми, потім зв'язували їх між собою, це і давало плавні заокруглі переходи, до того ж на їх мапах річки які формуються між клітинами явно огортають кола, а не гекси. А зверху всього цого накладена гексагональна сітка. Хоча це моя особиста нічим не підтверждена думка.

Я теж точно не знаю, як саме вони генерують карти, але щось у мене є підозри, що вони все ж намагаються зберегти шестикутну природу своїх карт, як мінімум на логічному рівні. Так, ймовірно, вони для більш реалістичного стилю не використовують шестикутну сітку для генерації мап. Тобто, шестикутна сітка існує не як "реальна" геометрія, а лише як логічна у вигляді даних. Тоді можна зберігати кожен окремий тайл та всі його дані (положення, тип рельєфу, сусідів тощо) у пам’яті, а потім використовувати їх для створення остаточного рельєфу.

Гм.. Тоді, знаючи тип рельєфу, можна було б згенерувати мапу висот (heightmap) будуючи площини над положеннями шестикутників (тайлів) та записуючи їх як текстуру в terrain chunk (?). І тоді це можна було б прогнати через splatmap shader для блендингу текстур.

Але це все досить складно. Я б таки напевно почав з простішого і залишився з шестикутною сіткою для генерації мап. Ось тут є хороші туторіали. І лиш потім задумувався про більш реалістичну генерацію мап.

UPD. Знайшов їхню презентацію з GDC. І, схоже, вони щось подібне робили до того, що я описав вище. Вони будували динамічно мапи висот та мали текстури високої роздільної здатності на шестикутник (per hex).

Прихований текст

https://i.ibb.co/3s1S7XP/image.png

11

Re: Розробка BTN

wander написав:
77kruk11 написав:

Я можливо і не правий, але аналізуючи мапи 6ї циви, таке враження що вони використовували елементи круглої форми, потім зв'язували їх між собою, це і давало плавні заокруглі переходи, до того ж на їх мапах річки які формуються між клітинами явно огортають кола, а не гекси. А зверху всього цого накладена гексагональна сітка. Хоча це моя особиста нічим не підтверждена думка.

Я теж точно не знаю, як саме вони генерують карти, але щось у мене є підозри, що вони все ж намагаються зберегти шестикутну природу своїх карт, як мінімум на логічному рівні. Так, ймовірно, вони для більш реалістичного стилю не використовують шестикутну сітку для генерації мап. Тобто, шестикутна сітка існує не як "реальна" геометрія, а лише як логічна у вигляді даних. Тоді можна зберігати кожен окремий тайл та всі його дані (положення, тип рельєфу, сусідів тощо) у пам’яті, а потім використовувати їх для створення остаточного рельєфу.

Гм.. Тоді, знаючи тип рельєфу, можна було б згенерувати мапу висот (heightmap) будуючи площини над положеннями шестикутників (тайлів) та записуючи їх як текстуру в terrain chunk (?). І тоді це можна було б прогнати через splatmap shader для блендингу текстур.

Але це все досить складно. Я б таки напевно почав з простішого і залишився з шестикутною сіткою для генерації мап. Ось тут є хороші туторіали. І лиш потім задумувався про більш реалістичну генерацію мап.

UPD. Знайшов їхню презентацію з GDC. І, схоже, вони щось подібне робили до того, що я описав вище. Вони будували динамічно мапи висот та мали текстури високої роздільної здатності на шестикутник (per hex).

Прихований текст

https://i.ibb.co/3s1S7XP/image.png

Я бачив цей туторіал, але у ньому трохи інший підхід до генерації висот, в ньому більш схоже на Humankind, де висота задається всьому гексу. В циві висота задається окремим вершинам в рамках гексу, крайні вершини трохи підтягують сусідні гекси це дає ефект ніби гора залазить на сусідній гекс. По такому ж принципу формуються і горні хребти. Пізніше як буде час заведу тему і розпишу як воно робиться, там не так складно як здається. Відносно круглих "тайлів" так, теорія підтвердилася, можна зробити круглі тайли і на них накласти логіку гексагональної сітки, це дає плавні переходи, заокруглі форми річок і берегів. В моєму випадку доведеться дуже багато переаисуваит в функції об'єднання вертексів в трикутники, тому знайшов альтернативний варіант який формує плавну берегову лінію, через перевірку сусідніх гексів. Правда не знаю як це себе поведе при формуванні річок, можливо доведеться все ж переробити. Коли внесу зміни в гексову модель викладу фото.

12 Востаннє редагувалося 77kruk11 (28.03.2023 17:25:23)

Re: Розробка BTN

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

P.S. адмін, як можна перейменувати цю тему на "Розробка BTN"?
Не хочу плодити зайвих тем, буду тут потрохи писати про хід робіт.
Дякую.

https://replace.org.ua/uploads/images/10181/5cdee5052f5aa7c401524e71eda75239.jpg

Подякували: Firefox is dead, Chemist-i2

13

Re: Розробка BTN

Мені подобається.
А перейменувати можете самі, "редагувати" під першим дописом бачите?

Подякували: 77kruk11, Firefox is dead2

14 Востаннє редагувалося 77kruk11 (31.03.2023 15:27:11)

Re: Розробка BTN

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

https://replace.org.ua/uploads/images/10181/a75bacae7da46adfb6503d242216b6d2.png https://replace.org.ua/uploads/images/10181/2ec4fd1ec7e53c31913b9c00f3f94ff6.png https://replace.org.ua/uploads/images/10181/6cac6305ad96f1774707bd228b507576.png

Подякували: Firefox is dead, flatliner2

15

Re: Розробка BTN

Все залежить від того, де ви намалюєте landscape шляхи та будете ставити Static mesh- і (будинки або міста тощо). Якщо не будуть  передгір'я заважати то добре, а якщо ні, то доведеться переробляти.  :D . Мілководдя у вас якесь трикутне  :D

16 Востаннє редагувалося 77kruk11 (31.03.2023 18:27:22)

Re: Розробка BTN

То самий край мапи його видно не буде, до того ж воно ще буде перероблятись. Зараз ціль гори.

PeSePol написав:

Все залежить від того, де ви намалюєте landscape шляхи та будете ставити Static mesh- і (будинки або міста тощо). Якщо не будуть  передгір'я заважати то добре, а якщо ні, то доведеться переробляти.  :D . Мілководдя у вас якесь трикутне  :D

Переробив, тепер задоволений. Але критика не завадить.
https://replace.org.ua/uploads/images/10181/02673cecdd65bec755b1219bb256647a.png https://replace.org.ua/uploads/images/10181/6848a562fab1896838346ee021b0a390.png

17 Востаннє редагувалося 77kruk11 (06.04.2023 03:24:19)

Re: Розробка BTN

Додав кліматичні зонни.
Знову ж таки поки не дивимось на зовнішній вигляд)))
https://replace.org.ua/uploads/images/10181/dad02f68b58b45eff6713119c3dd7fd7.png https://replace.org.ua/uploads/images/10181/ee5a01976829e2593831b086a86ba5a5.png https://replace.org.ua/uploads/images/10181/86efef1fba584936db5e8362ea2aba03.png https://replace.org.ua/uploads/images/10181/5bd5bb8c710aaf1eae0f0b5d3acdb138.png
https://replace.org.ua/uploads/images/10181/0839e9ce879c2c0ac12b89e39f758ceb.png

18

Re: Розробка BTN

Не знаю як кому, але мені подобається. :)

19

Re: Розробка BTN

Всім привіт, ось мій прогрес у створенні процедурного ланшафту на гексогональній мапі.
До речі, кому цікаво спостерігати за розробкою, я завів Discord та YouTube канали, долучайтесь, пишіть відгуки, діліться досвідом і ідеями.
Оратор з мене поки що не дуже, але я над цим працюю.

Discord https://discord.gg/6EFcyQQf
YouTube https://m.youtube.com/@BTN_developer/featured

https://replace.org.ua/uploads/images/10181/d9791ca14a48bb17abcbd6a7e40165e5.jpg
https://replace.org.ua/uploads/images/10181/ae5f5e87e50c10c45edbfe2f4d4f47a3.jpg https://replace.org.ua/uploads/images/10181/5027d2de70b723bf52022c91f73c35ce.jpg https://replace.org.ua/uploads/images/10181/0546954d55c89ea4bdc7bc2eab3d74c3.jpg

20

Re: Розробка BTN

Хвилинка гумору)))https://replace.org.ua/uploads/images/10181/df68238be4e6efc5dc648a323ca0dd55.jpg

Подякували: PeSePol1