iw4nna.rock
> Почему бы не сделать случайные точки в плоскости треугольника?
Очевидно же почему. Треугольники мелкие.
убрать лишние по радиусу не должно быть проблемой.
Salamandr
сразу видно, что ты не пытался делать нечто похожее.
Всю жизнь пользовал равномерное случайное распределение по треугольнику - нормально трава раскидывалась безо всяких градиентов.
iw4nna.rock
> А потом разбросать рандомно точки внутри прямоугольника и оставить только те, что попали в треугольник
Псевдокод от Борескова
// находим случайные барицентрические координаты a = rnd (0, 1 ) b = rnd ( 0, 1 ) if ( a + b > 1 ) { a = 1 - a b = 1 - b } c = 1 - a - b p = a * A + b * B + c * C // итоговая случайная точка
g-cont
> Всю жизнь пользовал равномерное случайное распределение по треугольнику - нормально трава раскидывалась безо всяких градиентов
Осталось poisson disc по треугольникам раскидать
MrShoor
да и без него неплохо.
0xFFFFFFFF
Если в tool time надо сажать то blue noise поможет. Просто расстояние считать не на плоскости а в 3д.
хм, к вопросу о пружинках:
https://gamedev.ru/code/forum/?id=78020
0xFFFFFFFF
Ландшафт из треугольников же?
В чем проблема разложить по треугольникам, если уж знаешь всякие распределения Поисона и вихри Мерсена?
В общем серебряной пули из гумна лепить не очень, пришел к тому, что универсального решения искать не надо и не буду:
Вообще опираясь на
ребята используют подобие poisson disk sample, которые затайлены и пронумерованы, плюс каждому свое значение нойза для дизера. В общем я не нашел у них в выступлении, как они со склонами себя ведут(походу игнорят это). Они только density map строят всякие, потом по ним этим паттерном рассаживают.
Для себя решил следующее:
1)кусты и прочее буду пробовать рассаживать как в хорайзене, забив на склоны, по затайленному паттерну ( все на GPU )
2)деревья у меня в tool time итак.
3)трава довольная мелкая, скорее всего либо как в п1 сделаю, либо по треугольникам с игнором соседних.
4)от расстановки камушков, корешков и уступов на склонах не отказываюсь, буду делать отдельно, возможно по треугольникам, но буду прореживать нойзами и прочим
Потом отпишусь как получится.
0xFFFFFFFF
Хайразен... Интересно , сколько там работает программеров?
0xFFFFFFFF
Тебе же надо кидать каждую точку в один из триков с вероятностью ~ его площади?
Алгоритм (не помню имя автора):
// p - вероятности попаданий в трики, в сумме=1 void Prepare(int n,float p[],int k[]) { float a=1./n; for( int i=0,j=0; i<n; ++i) { while( p[i]>a) { while( p[j]>=a) ++j; // p[j]<a, 0<=j<n обязательно найдется p[i]+=( p[j]-a); // p[i]+p[j]-a>=0 k[j]=i; } } } // 0<=P<=1 void Select( int n,float p[],int k[],float P) { int i=P*n; return ( P-float( i)/n<=p[i])?i:k[i]; }