Теперь я понимаю, почему и собираюсь ответить на свой вопрос в надежде, что это поможет другим людям.
Шум Перлина на самом деле является синтезом градиентных шумов. В его производственном процессе мы должны вычислить скалярное произведение вектора, указывающего от одного из углов, перекрывающих входную точку, до самой входной точки со случайно сгенерированным вектором градиента.
Теперь, если бы входной точкой было целое число, такое как координаты xyz текстуры, которую вы хотите создать, произведение точек всегда возвращало бы 0, что давало бы плоский шум. Поэтому вместо этого мы используем inci, incj, inck
в качестве альтернативного индекса. Да, просто индекс, больше ничего.
Теперь, возвращаясь к вопросу 1, есть два способа реализации Шума Перлина:
1. Рассчитайте значения шума отдельно и сохраните их в слотах RGBA в текстуре
2. Синтезируйте шумы заранее и сохраните их в одном из слотов RGBA в текстуре
noise3(ni)
- это фактическая реализация метода 1, тогда как PerlinNoise3D(...)
предлагает последний.
По моему личному мнению, метод 1 намного лучше, потому что у вас гораздо больше гибкости в том, как вы используете каждую октаву в своих шейдерах.