Как через HISM точечно расставить объект по всему ландшафту?

Всем здравия!
Это мой первый опыт в создании игры. В программировании я тоже не разбираюсь, поэтому рассчитываю только на использование нодов (Blueprints).

Я создаю большой город в Unreal Engine 5.6, поэтому мне нужно расставлять дома с помощью HISM (Hierarchical Instanced Static Mesh), чтобы не перегружать сцену множеством одинаковых мешей, дублируемых через Ctrl+C.

Но сейчас моих знаний хватает только на то, чтобы расставлять меши через HISM по горизонтали и вертикали - то есть ровными рядами. Из-за этого невозможно гибко подстраивать расстановку под рельеф ландшафта: всё будет расположено однотипно и неестественно.

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

Я слышал, что существуют какие-то процедурные решения для таких задач, но я в них не разбираюсь, а платные инструменты мне недоступны, так как я безработный)

Нейросеть посоветовала мне такой подход:

  • Расставить по ландшафту пустые Actors (через добавление быстрых объектов на поверхность) в тех местах, где должны стоять дома.
  • Назначить всем этим Actor одинаковый тег, например “ТочкаДом1”, чтобы потом можно было через Blueprint ссылаться на все эти точки по тегу.

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

Если кто-то действительно работал с HISM и знает, как расставить объекты по заранее выбранным точкам (Actor) на ландшафте, пожалуйста, поделитесь скриншотами структуры нодов, файлом или ещё чем-либо. Я просто устал уже общаться с нейросетью, которая не может мне объяснить всё по пальцам.

Возможно, я туплю или нейросеть ошибается где-то. Но я уже не знаю, что делать: ни одного подробного ролика на YouTube по теме «Как через HISM расставлять объекты по ландшафту в заданных точках» я так и не нашёл. Такое ощущение, что это какая-то “секретная информация”, за которую нужно заплатить миллион долларов…

Сейчас этот HISM я уже удалил, но могу попробовать восстановить его, если кому-то нужна будет информация о том, как выглядела моя структура Blueprint’а вживую.

Если кто-то может посоветовать лучший или более понятный способ расстановки домов по ландшафту через HISM - буду очень благодарен.

Кто мешает запихать свой дом в Foliage и расставить где надо? По одному объекту там можно ставить.

Если б я знал что это такое, но я не знаю что это такое. У меня русский интерфейс… Переводчик говорит, что это кая-то “листва”. Предлагаете расставлять дома через функцию растительность, как деревья и траву что ли? Если да, то это выглядит странно и непрофессионально.
Мне в основном нужно именно то, что связано с HISM… его разные методы, готовые файлы, скриншоты, если уж никто помочь не может с тем, о чём писал выше. Костыли не приветствуются, если они пытаются лишь пародировать, а не точно копировать функцию HISM, у меня всё должно быть правильно и чтобы потом не вызвало проблем с редактированием, взаимодействием и т.п. Если этот Foliage расставляет также, как и HISM, то хотел бы узнать подробнее, что это такое. Я не знаю, что конкретно имеете ввиду под “Foliage”.
Я не просто так вначале указал, что я новичок, короткие шифры “Foliage” мне никакого объяснения не дают, я не являюсь длительным пользователем Unreal Engine, чтобы по одному слову “Foliage” понимать о чём речь.
А что на счёт того метода, о котором писал в первом сообщении?

Снизу скриншот, структура по совету нейросети, которая не работает…

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

Как сказал Михаил, система Foliage на самом деле использует HISM под капотом. Она в основном создана как инструмент для “рисования” деревьев и травы, но технически её можно использовать для любых статичных мешей.

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

Один из вариантов — разместить все дома как обычные Actors с нужными мешами в уровне. Потом создать отдельного Actor с компонентом HISM, который при запуске игры найдёт все эти Actors по классу, добавит их меши как инстансы в HISM и удалит оригинальные Actors. Так получишь ручное размещение и при этом пользу от производительности HISM.

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

Понятно, благодарю за понимание. То есть,

  1. в каталоге создать акторы с целыми мешам каждого нужного дома внутри,
  2. расставить в нужных местах эти акторы(с видимыми мешами),
  3. у каждого актора прописать свой тег,
  4. создать отдельные актор-hism для каждого дома-актор(так как дома разные, а нейросеть писала, что один HISM нельзя использовать для разных мешей),
  5. в нодах HISM указать теги от этих акторов, к которым будут обращаться эти HISM, то есть ко всем нужным домам

Но я не знаю структуру нод для этого процесса. Или подойдёт тот скриншот со структурой по совету ИИ?

Забыл написать, я в нодах то и не разбираюсь особо, примитивно, всё делаю по советам Gpt4, который не всегда понятно и верно всё объясняет.

Понятно. Foliage - проблема в том, что я ничего не понимаю как и что правильно делать, почему так делать, для чего так делать, зачем так делать и т.п, а не в том, что Foliage плох. Я только недавно узнал, что через функцию “растительность” можно не только растительность расставлять. Только в этом диалоге узнал, что растительность тоже ISM, думал, что ISM делается только через НОДЫ (конечно, я догадывался, что растительность тоже ISM или HISM). А сегодня узнал, что оказывается расставленную растительность можно поворачивать и перемещать, а я думал, что она остаётся неизменяемой до конца своих дней.
Я не умею читать мысли знающего в движке человека и общаться на его уровне, чтобы понимать, почему он мне советует это делать.
И как я понял, растительность расставляется как ISM, а не HISM, просто у файла растительности в каталоге, который автомат. создался из меша именно эта подпись. А мне нужен HISM, так как он автоматически будет детализироваться на расстоянии. Конечно, можно у этого ISM прописать дистанцию в сведениях, но это будет резко… И не факт, что я даже сейчас верно понимаю всю ситуацию
Что за плагин по смене раскладки языка?

И благодарю за намёк на Foliage

Foliage наследуется от HISM в чём несложно убедиться и где вы там ISM увидели.. я хз.

Плагин тут => GitHub - SoulofAO/FastChangeLanguagePlugin
Знакомый по моей просьбе сделал.

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

Я тоже не могу угадывать мысли или передать свои знания на флешке.

Вот здесь увидел ISM , когда навёл курсор на файл:

Благодарю за плагин.

Хорошо, на самом деле я бы сделал один актор, который будет управлять всеми домами. У этого актора должен быть всего один компонент меша, который можно менять во время работы игры и который обновляется в скрипте построения (Construction Script).
Так ты сможешь просто менять меш через панель деталей.

Потом я бы создал ещё один актор, который при запуске игры (Begin Play) получает всех акторов указанного класса и в цикле для каждого из них:
– автоматически создаёт компонент HISM внутри себя с нужным мешем,
– добавляет экземпляр этого меша в HISM,
– после чего удаляет исходный актор из сцены.

Извиняюсь за английский в видео.

Думаю, для новичка это может быть немного сложно, но так можно сделать, если не хочется использовать инструмент “Растительность”.
Если всё же хочешь использовать “Растительность”, я бы порекомендовал найти видео на эту тему. Можно также посмотреть официальную документацию — её будет проще перевести на русский.

Просто гигантское благодарю за видео! Не ожидал такой подробной инфы.
Теперь ещё нужно будет разобраться в этом, некоторое всё равно не с первого раза понятно, нужно понять принцип и логику работы каждой ноды)

На счёт видео:

  1. Ты создал блуепринт-актор, чтобы использовать его в качестве оболочки для мешей, продублировал его и добавил в копии дома. Они пока считаются разными draw call.
  2. Создал блупринт-hism, который будет обращаться к этому единственному BP_House.
  3. Под конец этот HISM поставил на сцену, чтобы он автоматически заменил все BP_House?
  4. Теперь, когда я буду переносить этот BP_House на сцену и добавлять к каждому новые меши, этот HISM на сцене будет всё это автоматически забирать в себя?
  5. HISM обращается к BP_House, но когда ты продублировал на сцене BP_House, то у второго стало название BP_House2 - это нормально? Типа, суть в том, что он всё равно обращается к одному единственному файлу BP_House именно в каталоге, неважно сколько раз продублировал на сцене, если файл BP в каталоге только один?
  6. UP. А почему ты в Components блуипринта-hism не добавлял компонент Hierarchical Instanced Static Mesh в верхнем левом углу? Или это не обязательно, так как в нодах и так всё прописано?

Может как-то глупо выглядит мой ответ, просто пытаюсь понять.

Ещё картинки почему-то не погружаются в инструкции Unreal Engine.

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

Ещё столкнулся с такой проблемой:

Да, этот Blueprint с HISM автоматически обработает все размещённые в уровне акторы BP_House.
Он работает так: для каждого найденного BP_House он проверяет, есть ли уже компонент HISM с таким же мешем.

Если есть — просто добавляется новая инстанция с такой же трансформацией, как у BP_House.

Если нет — создаётся новый компонент HISM, меш задаётся, и затем добавляется инстанция.

Что касается дублирования — это абсолютно нормально. Когда ты дублируешь BP_House в уровне, и он получает имя вроде BP_House2 — это просто ещё один актор того же класса, и он тоже будет обработан. Blueprint ссылается на класс, а не на имя, и просто перебирает все акторы этого класса в мире.

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

И твои вопросы абсолютно нормальные — честно. Глупый вопрос — это тот, который не был задан.

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

Понятно. В общем… благодарю за большую оказанную помощь. А то бы так и сидел c домиками в ряд и спорил с GPT. Боюсь представить, что ждёт меня дальше…

Может заново проект пересоздам, а то вдруг что-то понажимал, из-за чего такие пятна на ландшафте. Всё равно теперь заново придётся многое создавать…

Я бы попробовал создать новый уровень, прежде чем полностью перезапускать проект. Возможно, проблема в самом уровне.

Попробую

Обнаружил связь этой проблемы (тёмные поля на ландшафте) с источником освещения “DirectionalLight”. Чем ближе угол Солнца поворачиваю к зениту, тем темнее становятся поля на ландшафте в игровом режиме, чем ближе к горизонту, тем светлее, но всё равно имеют отличительный оттенок от оригинала.

Ещё заметил: Эти пятна появляются тогда, когда на сцену добавляю любой меш дома, а когда убираю, то исчезают. Но не точно.

Попробовал новый проект - ничего не помогает. Тут либо в NVIDIA писать, либо в поддержку Unreal Engine.
Драйвер пока не пробовал переустанавливать…

Отпишусь на счёт твоих нод из видео. HISM с BP работает. В статистике RHI цифровые значения вроде бы не меняются сильно, но когда просто меши (НЕ HISM) расставлял, то тоже не менялись. В общем в показателях RHI не особо разбираюсь.
Единственное неудобство: Допустим, когда хочу у дома “X1” поменять материал, то приходится в каталоге копировать этот меш “X1” в качестве меша “X2”, назначать “X2” другой цвет и уж потом добавлять этот меш с новым материалом в BP на ландшафте. Может это нормально, не шарю, иного я не придумал…