Вопрос

Я изучал шум Перлина через некоторые примеры @ http://dindinx.net/Opengl/index.php?menu=exemples&submenu=shaders. и не мог помочь заметить, что его make3DNoiseTexture() в perlin.c использует noise3(ni) вместо PerlinNoise3D(...)

Теперь, почему это? Не шумено не должен быть суммированием разных частот шума и амплитуды?

Qestion 2 - это то, что делает ni, inci, incj, inck стоять? Зачем использовать ni вместо X, Y координат? Почему ni увеличивается с
ni[0]+=inci;
inci = 1.0 / (Noise3DTexSize / frequency);
Я вижу Hugo Elias создал свой Perlin2D с координатами X, Y, и Perlinnoise3D (...).

Заранее спасибо :)

Это было полезно?

Решение

Теперь я понимаю, почему и собираюсь ответить на свой вопрос в надежде, что он помогает другим людям.

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

Теперь, если входная точка была целым числом, таким как координаты XYZ текстуры, которую вы хотите создать, точечный продукт всегда будет возвращать 0, что даст вам плоский шум. Так вместо этого мы используем inci, incj, inck как альтернативный индекс. Да, просто индекс, больше ничего.

Теперь возвращаюсь к вопросу 1, существует два метода для реализации шума Perlin:
1.Калькулировать значения шума отдельно и хранить их в слотах RGBA в текстуре
2.SyntheSize Showes up перед рукой и хранить их в одном из слотов RGBA в текстуре

noise3(ni) является фактическим внедрением метода 1, в то время как PerlinNoise3D(...) предполагает последнее.

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

Другие советы

Мое предположение по причине использования noise3(ni) в make3DNoiseTexture() вместо этого, если PerlinNoise3D(...) Это когда вы используете эту текстуру шума в своем шейдере, вы хотите иметь возможность реплицироваться и изменять функциональные возможности PerlinNoise3D(...) прямо в шейдере.

Мое предположение для рассуждения позади ni, inci, incj, inck Состоит в том, что использование x, y, z тома непосредственно не дает хорошего результата, поэтому путем масштабирования шума с частотой вместо этого можно регулировать разрешение шума независимо от объема.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top