Разное

Webgl water: WebGL Water Simulation by Evan Wallace

19.11.2022

Вода В WebGL — Та, Которую Вы Должны Увидеть

WinAx

Иногда есть демонстрационные программы, которые вы просто должны увидеть, потому что они красивы. В данном случае это имитация воды с трассировкой лучей, но с использованием WebGL для ее доставки в вашем браузере.

Пока вы используете современный Firefox, Chrome или IE, вы можете получать удовольствие, наблюдая за рябью воды в этом симуляторе трассировки лучей WebGL. Убедитесь, что вы нажимаете или касаетесь поверхности воды, чтобы вызвать рябь, и обязательно перетащите сферу, чтобы увидеть, как она нарушает воду и изменяет освещение. 

Это было бы достаточно впечатляюще в качестве настольного приложения, но вам почти нужно ущипнуть себя, чтобы вспомнить, что все это происходит в браузере. 

Каустики, линии света на поверхности, вычисляются только с помощью графического процессора. Поверхность воды моделируется с помощью сетки поля высоты-каждая вершина перемещается к средней высоте своих соседей – и это простое действие создает волны.

Общая трассировка лучей создается специально для конкретной сцены. 

Я бы настоятельно рекомендовал вам попробовать эту программу по адресу http://madebyevan.com/webgl-water/, но если вы не можете, то посмотрите видео:

Если вы не видите его в действии, это потому, что у вас нет последнего браузера или вы используете iOS. Safari-последний из крупных браузеров, который избегает WebGL, и это лишает пользователей iOS такого рода веб-опыта.

Почему Apple не помещает WebGL в Safari? Данная причина связана с безопасностью, поскольку код, использующий графический процессор, не может быть изолирован. Microsoft дала ту же причину для того, чтобы держать WebGL вне IE, но теперь он включен, и нет упоминания о каких-либо трудностях с безопасностью. В обоих случаях реальные причины, скорее всего, коммерческие – Microsoft защищает DirectX, а Apple защищает свои доходы от App Store. 

Сказав это, верно, что большинство экспертов по графическим процессорам согласны с тем, что использование WebGL и GPU из браузера создает проблему безопасности, которую до сих пор никто не воспринимал всерьез.  

Понравилось это:

Нравится Загрузка…

Categories: Игры

Categories

• .NET [262]

• 3D Датчики [64]

• Android [258]

• Apple/iOS [72]

• AR/VR [44]

• Art [35]

• C/C++ [36]

• ePub [62]

• Google [13]

• HTML/CSS [22]

• Java [205]

• JavaScript [297]

• Mobile [434]

• Open Source [301]

• Perl [17]

• Python [106]

• Windows [150]

• Алгоритмы [59]

• Базы данных [361]

• Безопасность [213]

• Бизнес [381]

• Большие данные [198]

• Браузеры [202]

• Война в Украине [796]

• Другое [329]

• Железо [353]

• Игры [213]

• ИИ [575]

• Инструменты [383]

• Картография & GIS [60]

• Космос [25]

• Культура, СМИ [78]

• Методология [22]

• Наследие [312]

• Облачные вычисления [197]

• Обучение и карьера [568]

• ОС [98]

• Проекты [13]

• Профи [396]

• Робототехника [292]

• Сайт [18]

• Соревнования & Хакатон [212]

• Социальные сети [42]

• Теория [149]

• Технологии [1159]

• Фото [76]

• Фреймворки [18]

• Языки [443]

RANDOM POSTS

webgl-water/index.

html на мастере · evanw/webgl-water · GitHub
Вода WebGL
0, user-scalable=no»>
<скрипт src="lightgl.js">
<скрипт src="cubemap.js">
<скрипт src="renderer.js">
<скрипт src="main.js">
Загрузка. ..
<дел>

Вода WebGL

Сделано Эваном Уоллесом

Для этой демонстрации требуется приличная видеокарта и последние версии драйверов. Если вы не можете запустить демонстрацию, вы все равно можете посмотреть ее на YouTube.

Взаимодействий:

<ул>
  • Нарисуйте на воде рябь
  • Перетащите фон, чтобы повернуть камеру
  • Нажмите ПРОБЕЛ, чтобы приостановить и возобновить паузу
  • Перетащите сферу, чтобы переместить ее
  • Нажмите клавишу L, чтобы установить направление света
  • Нажмите клавишу G, чтобы переключить гравитацию
  • Особенности:

    <ул>
  • Отражения и преломления с трассировкой лучей
  • Аналитическое затенение окружающей среды
  • Моделирование воды в Хайтфилде *
  • Мягкие тени
  • Каустика (подробнее см.
    здесь
    ) **
  • * требуется расширение OES_texture_float
    ** требуется расширение OES_standard_derivatives

    Текстура плитки из zooboing на Flickr

    jpg»>

    Рендеринг каустик в реальном времени в WebGL | Эван Уоллес

    Я создал http://madebyevan.com/webgl-water/ еще в 2011 году и всегда хотел объяснить, как это работает. На мой взгляд, наиболее интересным аспектом демонстрации является мой подход к рендерингу каустики. Термин «каустический» относится к рисунку, который создает свет, когда он отражается или преломляется изогнутой поверхностью. Каустики выглядят так:

    Каустики от солнца на дне бассейна

    Обычно это недостижимо для графики в реальном времени, потому что объем требуемых вычислений в общем случае огромен. Очень трудно сказать, какой свет пришел в данную точку, если свет падает с разных направлений. Общий подход заключается в том, чтобы некоторое время отражать лучи света повсюду и позволять им накапливаться, а затем смотреть, где они собираются. Это известно как трассировка пути. Свет, сфокусированный на меньшей площади, накапливается больше и становится ярче (вспомните, как увеличительное стекло концентрирует свет в яркое пятно), а рассеянный свет тускнеет.

    Трассировка пути не специфична для каустик; это общее решение для имитации поведения света и рендеринга реалистичных изображений. Есть несколько методов реального времени, которые приближают это в определенных случаях, но они основаны на том факте, что непрямое освещение в рассеянных средах обычно медленно меняется вдоль поверхности, и в этом случае вы можете обойтись разреженной выборкой. Это совсем не относится к каустикам. Каустики создают сложные световые узоры с резкими складками, которые будут размыты и даже могут быть полностью потеряны при использовании этих приближений в реальном времени.

    Лучшим подходом является аппроксимация волнового фронта света с помощью сетки. Каждая вершина меша представляет собой луч света, выходящий из источника света и приземляющийся где-то в сцене. Каждый треугольник сетки аппроксимирует все возможные световые лучи между вершинами треугольника. Увеличение площади треугольника означает, что свет рассредоточен и его необходимо приглушить. Уменьшение площади означает, что свет был сфокусирован и должен быть ярче. Изменение яркости пропорционально отношению исходной площади к конечной площади. Представление площади напрямую вместо выборки позволяет избежать необходимости большого количества выборок для четкого разрешения каустических форм и, следовательно, намного эффективнее. Этот подход работает только в определенных случаях, но он идеально подходит для каустики из-за преломления света через плоский водоем.

    Этот метод особенно удобен, поскольку он очень эффективно сопоставляется с оборудованием для растеризации. Обычно вычисление площади может быть выполнено на графическом процессоре с использованием шейдера геометрии, поскольку шейдеры геометрии имеют одновременный доступ ко всем трем вершинам треугольника, но WebGL поддерживает только вершинные и фрагментные шейдеры. Вершинные шейдеры рассматривают только одну вершину, поэтому стандартному вершинному шейдеру не хватает информации. Вы можете раздуть свой формат вершин, чтобы также включить две другие вершины в треугольник и заставить каждый вершинный шейдер преобразовывать все три вершины, чтобы определить площадь треугольника, но это означает, что вы больше не можете использовать общие вершины между соседними треугольниками в сетке. Есть лучший способ.

    На самом деле можно вычислить соотношение исходной и конечной площадей треугольника, даже не прибегая к расположению вершин. Фрагментные шейдеры имеют интересную стратегию оценки: они всегда оцениваются по четыре за раз в группе 2×2 (подробности см. в этом посте). Поскольку все фрагментные шейдеры в этой группе используют один и тот же указатель команд, каждый из них может вычислить мгновенную частную производную экранного пространства по осям x и y любого значения, используя конечную разность между собой и соседним фрагментным шейдером по этой оси.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *