Jump to content

[SOLVED] Галактики, скопления звезд и т.п.


photo

Recommended Posts

Хочу сделать  что-то  типа того

Spoiler

 

Человек в том ассете проделал конечно титаническую работу, но с галактикой там все понятно. Это конечно партиклы, скорее всего со своими материалом.

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

Quote
Emitter Max Particles Limits the maximum number of emitted particles present in the world at the same time.
  • 0 means there is no limit for maximum number of particles.
  • The higher the value, the more particles are present in the world simultaneously.

но почему-то в движке я такого не вижу. Посмотрел видео, у них тоже такого нет (достала эта документация, слава Богу я прошел школу изучения Java. Тем не менее, каждый раз как я притрагиваюсь к движку, это прям какой-то детектив, с расследованиями, убийствами, а конце убийца совсем не садовник).

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

Вопрос - как ограничить их количество?

 

Затем есть штука с генерацией билбордов. Такое я вижу в первый раз, но он весьма неплох. Звездное небо из него получается очень даже. Правда не смотрел сколько все  это стоит системе. Но как я понял, это просто коллекция билбордов, так что не должно быть много. Это хуже, так как нет такого широкого функционала как у партиклов, плюсом это билборды. Да, для звёздного неба очень даже, но для скопления звезд в космосе, очень ограниченный функционал.  Так что не подходит.

 

Ну и затем, я просто нагенерировал в сферу с радиусом в 70000, 3000 объектов звезд. Конечно сходу получилось хуже чем партиклы, но зато какой потенциал. Движок ест все это очень хорошо, даже без лодов и билбордов. Однако проблема. Я нагенерировал все это в рантайме, но как мне  это сделать в самом движке? Не сидеть же и расставлять эти звезды ручками. Была мысль записать всё это в файл, но 3000 объектов... Это всё и писаться, и читаться будет пару минут. Да и выглядит это как костыли (да, я разбалован современными движками). Разве что генерировать каждый раз заново... Наверняка тут можно указать нужное зерно генератору, дабы мои генерации  всегда были одинаковые. Однако, лучше с этим работать непосредственно в движке.

Вопрос - как мне нагенерировать их непосредственно в движке?

 

Ну и с полетом между звезд... Вот тут даже ума не приложу, как бы сделать. С нативными анимациями тут ведь так пока ничего и не сделали? Всё так же нельзя взять, записать, а потом просто воспроизвести, верно? Может есть какие дельные мысли? Ну кроме интерполированного перемещения объекта через код. Это и так понятно.

Edited by nikolay.sykharev
Link to comment

Добрый день!

@nikolay.sykharev Действительно, Emitter Max Particles сейчас отсутствует в редакторе и в документацию параметр закрался по ошибке. К вечеру это уже будет исправлено, спасибо :)

В данный момент вы можете контролировать количество частиц при помощи такого набора аргументов как Spawn Rate, Number Per Spawn, Life Time, Limit Per Spawn, где в общем виде все эти значения перемножаются друг на друга и получается "Particles Count" счетчик, который вы видите в окне параметров объекта.

Что касается самой задачи, то здесь не совсем понятно - как в конечном счете вы хотите чтобы выглядели звезды? Это должна быть именно геометрия в виде сферы или биллборды тоже подойдут?

Спасибо!

Link to comment
11 hours ago, bmyagkov said:

В данный момент вы можете контролировать количество частиц при помощи такого набора аргументов как Spawn Rate, Number Per Spawn, Life Time, Limit Per Spawn, где в общем виде все эти значения перемножаются друг на друга и получается "Particles Count" счетчик, который вы видите в окне параметров объекта.

А, да, вопрос был поставлен не правильно. Не ограничить количество, а исключить появление новых. Прошу прощения.

Счетчик это понятно. Проблема в том что они постоянно генерируются. Насколько я понял, Spawn Rate и Number Per Spawn задают их количество спавна за единицу времени. Я могу только с помощью лимита времени, убирать лишние партиклы, таким образом найдя баланс их количества. Ну согласитесь, странно если бы на небе постоянно то исчезали, то появлялись звезды.

Просто партиклы, это очень важная вещь. С их помощью можно делать очень многие тяжелые вещи, например полет пуль, астероидное поле, просто какую-то  застывшую взвесь и т.д., а у вас получается эта штука вырезана. 

 

11 hours ago, bmyagkov said:

Это должна быть именно геометрия в виде сферы или биллборды тоже подойдут?

Конечно идеально это геометрия. Ни каких бубнов с танцами, только оптимизация, даже наверное одними ЛОДами можно обойтись (кстати они у вас какие-то странные, зачем-то привязаны к дистанции от камеры). Билборды, это если геометрия не потянет такое количество звезд. По моим тестам, для начала 3000 вполне достаточно.

Edited by nikolay.sykharev
Link to comment

Добрый день!

@nikolay.sykharev Есть определенный трюк, который, кажется, может идеально вам подойти для решения этой задачи.

Если вы хотите получить всё-таки именно геометрию, то тогда самый простой способ будет использовать систему частиц со всеми ее возможностями, но при этом в чайлды к объекту еще добавить ObjectMeshCluster с предварительно заготовленным примитивом.

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

В нужный момент, когда визуально положение частиц будет вас устраивать, вы останавливаете симуляцию в редакторе и вытаскиваете ObjectMeshCluster из иерархии ObjectParticles, где ObjectMeshCluster сохранит расположение объектов в момент остановки.

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

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

В качестве демонстрации процесса, прикрепил видео в приложение к сообщению, посмотрите, пожалуйста :)

Спасибо!

  • Like 1
  • Thanks 1
Link to comment
41 minutes ago, bmyagkov said:

Если вы хотите получить всё-таки именно геометрию, то тогда самый простой способ будет использовать систему частиц со всеми ее возможностями, но при этом в чайлды к объекту еще добавить ObjectMeshCluster с предварительно заготовленным примитивом.

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

В нужный момент, когда визуально положение частиц будет вас устраивать, вы останавливаете симуляцию в редакторе и вытаскиваете ObjectMeshCluster из иерархии ObjectParticles, где ObjectMeshCluster сохранит расположение объектов в момент остановки.

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

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

То что нужно! Спасибо!

  • Like 1
Link to comment
  • nikolay.sykharev changed the title to [SOLVED] Галактики, скопления звезд и т.п.
×
×
  • Create New...