Есть ли хорошая хэш-функция GLSL?

Так что я все еще получаю голоса за свой древний комментарий к этому вопросу: Каково происхождение этого однострочника GLSL rand()?

И это заставило меня задуматься, как бы выглядела хорошая хэш-функция GLSL? Для него есть очевидные варианты использования, такие как шум Перлина. Есть некоторые свойства, которые я бы искал в хорошей реализации.

  • Стабильный при различных точностях (средний, высокий). Это можно настроить.
  • Должен использоваться в ES2, поэтому он не может использовать поддержку целых чисел.
  • Только ALU, без текстур
  • Не поиск криптографических качеств, а больших периодов и "перцептивной" случайности
  • В идеале должен давать те же результаты при минимальной реализации спецификации ES2.

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

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


person starmole    schedule 27.04.2014    source источник