Комментарии 19
Хорошо бы исходники на гитхабе, было бы гораздо удобнее.
+6
Почему не используете libnoise или Accidental Noise Library?
+2
Не плохо было бы реализовать всё тоже самое, но на GPU.
Скорость должна увеличиться на порядок, а то и два.
Скорость должна увеличиться на порядок, а то и два.
0
А я и хотел сначала сделать это на гпу. Но после того как увидел на сколько сильно может отличаться результат на разных гпу, передумал.
0
Для данной задачи результат на разных гпу должен быть едва ли не bit-perfect одинаковый.
Разное получается, если выпендриваться.
Разное получается, если выпендриваться.
0
Ну так я и выпендривался…
Простая формула гпсч: fract(sin(dot(gl_FragCoord.xy ,vec2(12.9898,78.233))) * 43758.5453)
Результат: интегрированный гпу (какой то старый офисный селерон) и GeForce GTX460 (справа)
Простая формула гпсч: fract(sin(dot(gl_FragCoord.xy ,vec2(12.9898,78.233))) * 43758.5453)
Результат: интегрированный гпу (какой то старый офисный селерон) и GeForce GTX460 (справа)
0
НЛО прилетело и опубликовало эту надпись здесь
Я рассматривал такой вариант. Диаграмма Вороного хорошо бы подошла для раскраски, но ячеистая текстура больше подходит для создание рельефности и теней между камнями.
0
Используемая в статье ячеистая текстура (одна из вариаций Cellular или Worley noise) получает интенсивность как разницу расстояний между второй и первой ближайшей контрольной точкой. В результате 0 (чёрный цвет) получается как раз на границе ячеек диаграммы Вороного. Но кроме границ, получаются еще и холмы в центре ячейки. К тому же алгоритм идеально ложится на GPU.
0
Крутяк!
Однако, отмечу, что то, что вы называете шумом Перлина, таковым не является. На самом деле у вас фрактальный value noise, а оригинальный шум Перлина несколько сложнее.
Кроме того, у вас довольно странные места в коде, много их.
Например, вот это
значительно и непредсказуемо дороже, чем просто при надобности делать
Однако, отмечу, что то, что вы называете шумом Перлина, таковым не является. На самом деле у вас фрактальный value noise, а оригинальный шум Перлина несколько сложнее.
Кроме того, у вас довольно странные места в коде, много их.
Например, вот это
delete[] interpolateTable;
interpolateTable = new float[f];
значительно и непредсказуемо дороже, чем просто при надобности делать
(1.0f-cosf(a))*0.5f
0
Почему дороже? Доступ к переменной дешевле чем вычисление. Я тестировал оба варианта и брать готовое значение оказалось дешевле. Если вы про дорогое выделение памяти, то оно происходит всего несколько раз по сравнению с многими тысячами вычисления значений.
+2
Потому что это потенциальное прерывание и уход в ядро на неизвестно сколько миллисекунд. Высвобождение памяти тоже может быть очень не бесплатным.
Если и предрассчитывать таблицы, то где-то заранее и (квази-)статичного размера. При этом надо иметь в виду размер кэшей, промах по которым может нарушать «Доступ к переменной дешевле чем вычисление».
Если и предрассчитывать таблицы, то где-то заранее и (квази-)статичного размера. При этом надо иметь в виду размер кэшей, промах по которым может нарушать «Доступ к переменной дешевле чем вычисление».
-1
+2
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.
Процедурное текстурирование: генерация текстуры булыжника