Вольный перевод главы «Tesselation Example — Terrain Rendering» или коротко о том, как сгенерировать ландшафт с помощью аппаратной тесселяции.

Совушка
Всем прекрасной графики!

Разбираюсь в этой теме сам и заодно помогу другим. Есть прекрасная статья, демонстрирующая реальное применение аппаратной тесселяции на различных примерах. Привожу вольный пересказ (который никак не относится к самой главе и к её содержанию, все совпадения — случайны) этой статьи о генерации ландшафта + даю некоторые ссылки, которые объясняют те или иные термины. В конце статьи будет ссылка на готовый пример. Всё, что в тексте будет курсивом или оформлено как спойлер —  это мои дополнения, которые я разжёвывал прежде всего для себя. Если кто-то читает эту статью и ему важен прежде всего её смысл — не читайте текст курсивом.

Чтобы продемонстрировать потенциал использования тесселяции, мы рассмотрим простую систему рендеринга местности, основанную на четырёхугольных патчах и displayment mapping. Displaysment map (карта сдвигов) — это текстура, которая содержит сдвиги поверхности в каждой точке. [spoiler title=’Что такое displayment mapping на примере’ style=’green’ collapse_link=’true’]Для примера — мы создали некоторую сетку, из координат которой составили некоторую плоскость. Она растянута в нашей 3D-сцене по координатам x и z. Координата y по всей поверхности — занулена. Тем самым мы получаем гладкую 2D-поверхность из квадратов. Координату y нужно как-то обработать и сделать это таким образом, чтобы на этой поверхности возникли горы и овраги, и всё это было более-менее плавно. Для этого используется карта высот (некоторая структура, хранящая значение координаты y для каждой точки плоскости) и displayment mapping, обычно, подразумевает формирование такой карты высот через текстуру, загруженную в вершинный шейдер. [/spoiler] Читать далее →

Расшифровка чёрных ящиков из habr-статьи «Процедурная растительность на OpenGL и GLSL».

itxor - рендеринг динамически-изменяемой воды с помощью шейдеров тесселяции
Тесселяция способна на прекрасные вещи. (Картинка не имеет никакого отношения к статье, кроме тесселяции. Она просто для привлечения вашего внимания)

На хабре есть прекрасная статья от 2016 года, рассказывающая как отрендерить на сцене динамическую растительность, красиво развивающуюся под действием «ветра». Там же, в самом начале статьи, приложена ссылка на github автора, и он крайне советует читать код по мере изучения материала статьи. Я же в данной статье постараюсь дать подробные комментарии к его шейдеру управления тесселяции (далее просто шейдер тесселяции) и приведу немного ссылок по тесселяции в OpenGL, которые могут оказаться полезными.

Читать далее →

Коротко об mt19937, uniform_real_distribution и генерации одномерных шумных текстур

Столкнулся с интересной темой — надо загрузить в видеопамять большое (относительно) количество шума. Под шумом понимается некоторое количество равномерно распределённых случайных чисел, иначе говоря — случайных чисел из одного интервала.

Решение известно давно, но мало где описывается, поэтому продублирую сюда с некоторыми пояснениями, на поиск которых я потратил некоторое время.

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

Читать далее →