Как через 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 и расставить где надо? По одному объекту там можно ставить.

(post deleted by author)

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

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

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

1 Like

Как сказал Михаил, система 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
Знакомый по моей просьбе сделал.

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

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

1 Like

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

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

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

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

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

1 Like

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

1 Like

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

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

  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 вручную в панели компонентов, потому что иначе тебе пришлось бы создавать отдельный компонент для каждого типа меша — а это лишняя работа. Этот способ создаёт всё автоматически и упрощает процесс.

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

1 Like

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

1 Like

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

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

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

Попробую

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

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

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