Ответ ближе, чем вы думаете. Пишите по электронной почте Хьюгу Хоппе (http://hhoppe.com), как он привык к текстурированию штриховой поверхности. Его объяснения и предложения будут более сложными, чем вы хотите, но он знает, как.
Для значительного зернистости, вероятно, требуется преобладающее трехмерное «направление» поверхности в каждой точке (градиент?), Которое может выходить за пределы ограничений ваших моделей шейдеров (двухпроходный рендеринг и несколько целей рендеринга, или большая вершина пикселя). структура данных). Наивная первая версия будет переводить значение серого каждого пикселя в вероятность того, что пиксель будет черным или белым. Это даст вам 1-пиксельные точки, а это не то, что вам нужно.
Вы можете попробовать использовать значение градаций серого в качестве размера стека (Z) в 3D-структуре с наложением, где каждая текстура (X, Y) представляет собой нарисованный от руки случайный вид рисунка с однородной плотностью. Границы между уровнями темноты будут выглядеть странно, но попробуйте выбрать ближайшую точку и линейную выборку для измерения стека.
Я не пишу код для вас ... по крайней мере, не бесплатно.