August 26, 2022

Генерация случайных точек на поверхности мешей с помощью линий

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

Метод можно погуглить как "Sampling with Global Lines" или "Sampling with Uniformly Distributed Lines". Есть несколько интересных вариаций, расскажу о самой простой.

Итак:

  1. Формируем баунд-сферу вокруг геометрии сцены.
  2. Берем две случайные точки на поверхности баунд-сферы и делаем из них линию.
  3. Находим точки пересечения линии с геометрией уровня. Это и будут наши искомые точки на поверхности.
  4. Повторяем 2-4.

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

Результат такой же, как и в методе inverse cdf, с той лишь разницей, что мы исключили невидимые точки

https://t.me/lab_sborki