Jump to content

[SOLVED]Коллизии клаттеров при генерации.


photo

Recommended Posts

Добрый день.

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

И второй вопрос-просьба, перегрузить метод с R8 setMaskImage(ImagePtr) до RGBA8 setMaskImage(ImagePtr, int channel). Боль, когда нарезка с RGBA на 4 R по времени столько же, сколько вся генерация мира.

set_bug.jpg

Edited by Vasara
Link to comment

Vasara

Для клаттеров такие проверки замедлят его генерацию. Даже при рассадке объектов внутри одного клаттера при сильно больших плотностях возможны самопересечения объектов. Кластеры в этом плане немного удобнее, т.к. вся расстановка там по сути происходит в оффлайн-режиме и можно сделать какие угодно правила расстановки (см. Cluster Painting Tool). Для клаттеров такое в принципе невозможно сделать не просадив скорость генерации ниже плинтуса. К сожалению, кластеры тоже не панацея, т.к. для очень больших миров хранить позиции миллионов объектов в файле становится очень накладно.

Quote

И второй вопрос-просьба, перегрузить метод с R8 setMaskImage(ImagePtr) до RGBA8 setMaskImage(ImagePtr, int channel). Боль, когда нарезка с RGBA на 4 R по времени столько же, сколько вся генерация мира.

А можно чуть больше контекста? Для чего эта перегрузка? Можете показать весь код который сейчас используете?

Спасибо.

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Link to comment
23 hours ago, silent said:

А можно чуть больше контекста? Для чего эта перегрузка? Можете показать весь код который сейчас использует

Забираю с гпу 16к RGBA8 текстуру. Создаю 4 image R8 и обычным циклом копирую каналы по картинкам. Стандартными методами движка. R8 перегоняются в клаттеры, клаттеры в кластеры. Получается нужно выделить в памяти 4 по 256 куска, потом их заполнить прыгая туда сюда по всей памяти, потому, что где они там выделились науке не известно. Поэтому хочется сразу отдать в метод setMask текстуру и канал, чтобы избежать всего этого блуда с памятью.

Link to comment

Дело в том, что клаттеры не работают с текстурами, только с Image, поэтому сделать метод, который напрямую возьмет текстурку из GPU и будет использовать её какой-то конкретный канал будет делать всё то же самое, что и сейчас делаете вы у себя в коде. Быстрее работать оно точно не станет :)

Как вариант можно побробовать подпилить на вашей стороне, через простенький шейдер разбить одну RGBA8 текстуру на 4 R8, и потом уже эти текстуры копировать на CPU (можно даже использовать метод getImage() у текстуры). В этом случае возможно будет немного быстрее.

Спасибо.

  • Thanks 1

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Link to comment
  • Vasara changed the title to [SOLVED]Коллизии клаттеров при генерации.
×
×
  • Create New...