Разработка визуализатора движения жидкости

Визуализация движения жидкости в реальном времени как одно из наиболее важных направлений для исследования и разработки в области компьютерной графики. Методика определения векторного дифференциального оператора Лапласа в трехмерном пространстве.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 17.07.2020
Размер файла 2,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

}

float3vorticityForce = vorticityEpsilon*cross(normalizedEta, curl[index]);

newVelocity[index] +=vorticityForce*deltaTime;

Последний шаг цикла симуляции заключается в вызове ядра ApplyXSPHViscosity. В листинге 14 приведен фрагмент данной функции, находящий сумму из формулы (29)для соседей из ячейки c хешом ce llId.

01

02

03

04

05

06

07

08 for (int j = cellStarts[cellId]; j <cellEnds[cellId]; ++j)

{

float3positionDifference = positions[index] -positions[j];

float3velocityDifference = velocities[j] -velocities[index];

floataverageDensityInverse = 2.f / (densities[index] + densities[j]);

accumulatedVelocity += velocityDifference*averageDensityInverse *

poly6Kernel(norm2(positionDifference));

}

Код расчета новой скорости для частицы

01 newVelocities[index] =velocities[index] +cXSPH*accumulatedVelocity;

Реализаци яScreen Space Fluid Rendering

В следующих фрагментах кода оператор “*” осуществляет покомпонентное произведение векторов.

В приведенной части фрагментного шейдера на языке GLSL производится расчет линейной глубины (т.е. расстояния от наблюдателя) до видимой поверхности жидкости.

01

02

03

04

05

06

07

08

09

10

11

12 vec3 viewSpaceSphereNormal;

viewSpaceSphereNormal.xy = 2 * gl_PointCoord.xy - 1;

float radius2 = dot(viewSpaceSphereNormal.xy, viewSpaceSphereNormal.xy);

if (radius2 > 1.0f)

{

discard;

}

viewSpaceSphereNormal.z = sqrt(1 - radius2);

vec4 surfacePosition= vec4(viewPosition.xyz +

viewSpaceSphereNormal * particleRadius, 1);

FragColor.r = -surfacePosition.z;

Работа шейдера основана на применении точечных спрайтов, которые позволяют сократить расходы на преобразование геометрии сферы в пространство наблюдателя. Точечный спрайт представляет собой квадрат, лежащий в плоскости экрана. Для фрагментных шейдеров OpenGL определена переменная gl_PointCoord, которая содержит координаты фрагмента, лежащего внутри точечного спрайта. Данные координаты лежат в пределах [0, 1] и по умолчанию изменяются от 0 к 1 слева направо по горизонтали и сверху вниз по вертикали, см. рисунок 27.

Рисунок 27 - Применение точечных спрайтов для рисования сферы

Сперва рассчитываются xи y координаты нормали к поверхности сферы относительно ее центра (строка 2). Обработка фрагментов, лежащих вне радиуса сферы, прекращается (строки 4 - 7). Для фрагментов внутри сферы вычисляется z-компонента нормали. После этого находится позиция соответствующей точки на сфере в пространстве наблюдателя как суммы радиус-вектора центра сферы (viewPosition) и отмасштабированной нормали (строка 10). Наконец z-компонента данной точки сохраняется в качестве глубины (строка 12).

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

01

02

03

04

05

06

07

08

09

10 vec3 viewSpaceSphereNormal;

viewSpaceSphereNormal.xy = 2 * gl_PointCoord.xy - 1;

float r2 = dot(viewSpaceSphereNormal.xy, viewSpaceSphereNormal.xy);

if (r2 > 1.0f)

{

discard;

}

viewSpaceSphereNormal.z = sqrt(1 - r2);

FragColor.r = 2 * particleRadius * viewSpaceSphereNormal.z;

Сначала шейдер производит расчет нормали способом, описанным ранее (строки 1-8). Далее вычисляется длина хорды, по которой прошел бы луч, выпущенный от наблюдателя в точку на сфере (строка 10). Шейдер записывает эту длину в качестве толщины в соответствующую текстуру. Рендеринг производится cприменением аддитивного смешивания, которое активируется командой glBlendFunc(GL_ONE, GL_ONE). Таким образом толщина жидкости накапливается по мере обработки частиц.

Следующий код фрагментного шейдера содержит функцию BilateralFilter, которая применяется для сглаживания карты глубины.

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29 float BilateralFilter(int x, int y)

{

float sum = 0;

float weightSum = 0;

float depth = GetDepth(x, y);

for (int xOffset = -filterRadius; xOffset<= filterRadius; ++xOffset)

{

for (int yOffset = -filterRadius; yOffset<= filterRadius; ++yOffset)

{

float offset2 = xOffset * xOffset + yOffset * yOffset;

float weight = MultiplierS * exp(-(offset2) * InverseTwoSigmaS2);

float sample = GetDepth(x + xOffset, y + yOffset);

float difference = (sample - depth);

float gauss = MultiplierR *

exp(-difference * difference * InverseTwoSigmaR2);

sum += sample * weight * gauss;

weightSum += weight * gauss;

}

}

if (weightSum> 0.0f)

{

sum /= weightSum;

}

returnsum;

}

Вычисления производятся в соответствии с формулой (30). Значение для каждого пикселя в радиусе действия фильтра рассчитывается в строке 12, - в строке 16. Сумме из формулы (30) соответствует переменная sum, а коэффициенту нормализации -weightSum.

Код из фрагментного шейдера восстанавливает нормали к поверхности жидкости на основе карты сглаженной глубины.

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22 float x = TexCoords.x;

float y = TexCoords.y;

float depth = GetDepth(x, y);

float dzdx = GetDepth(x + dx, y) - depth;

float dzdx2 = depth - GetDepth(x - dx, y);

if (abs(dzdx) > abs(dzdx2))

{

dzdx = dzdx2;

}

float dzdy = GetDepth(x, y + dy) - depth;

float dzdy2 = depth - GetDepth(x, y - dy);

if (abs(dzdy) > abs(dzdy2))

{

dzdy = dzdy2;

}

vec3 extractedNormal = vec3(-Cy * dzdx, -Cx * dzdy, Cx * Cy * depth);

float extractedNormalLength = length(extractedNormal);

FragColor = vec4(extractedNormal / extractedNormalLength, 1.0f);

Сначала вычисляется глубина для текущего пикселя из карты сглаженной глубины (строка 4).Далее вычисляются производные глубины по направлению x (строки 6-11)иy (строки 13-18). Они рассчитываются для обоих направлений по x и по y, т.к. на границе сферы производные могут очень резко вырасти, когда частица находится на фоне других частиц, более удаленных от наблюдателя. Поэтому в таких случаях берется наименьшая производная, что способствует созданию сглаженной поверхности. Нормаль вычисляется по формуле (34) в строке 20.

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

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19 vec3 viewFragmentCoordinates = GetViewSpaceFragmentCoordinates();

vec3 directionToView = normalize(-viewFragmentCoordinates);

vec3 normal = texture(normalsTexture, ScreenCoordinates).xyz;

// Find reflected color from skybox

vec3 reflectedDirection = reflect(-directionToView, normal);

vec3 reflectedColor = GetSkyboxColor(reflectedDirection);

// Find refracted color from skybox

vec3 refractedDirection = refract(-directionToView, normal,

airRefractionIndex / fluidRefractionIndex);

vec3 refractedColor = GetSkyboxColor(refractedDirection);

float thickness = texture(thicknessTexture, ScreenCoordinates).x

vec3 attenuation = max(exp(-attenuationCoefficients * thickness), 0.2f);

refractedColor = mix(fluidColor, refractedColor, attenuation);

float reflectedPart = FreshnelFunction(f_0, dot(normal, directionToView));

return vec4(mix(refractedColor, reflectedColor, reflectedPart), 1);

В первую очередь координаты фрагмента преобразуются из координат экрана в пространство наблюдателя, после чего определяется вектор, направленный от фрагмента к наблюдателю, а также извлекается нормаль (строки 1-3). Затем находится отраженный свет по формуле (39) с помощью функции GLSLreflect (строки 6-7). Далее вычисляется преломленный свет по формуле (41), для этого используется встроенная в GLSL функция refract, а также соотношение коэффициентов преломления воздуха и жидкости (строки 10-12). В строках 14-16 происходит затенение преломленного света. Наконец рассчитывается соотношение отраженного и преломленного света и вычисляется окончательный цвет поверхности (строки 18-19)

В данной главе были описаны основные технологии, использованные для разработки. Была рассмотрена платформа и модель программирования CUDA, а также ее применение к реализации алгоритма PositionBasedFluids. Кроме того, был проведен обзор реализации метода ScreenSpaceFluidRendering на языке GLSL с использованием библиотеки OpenGL.

Заключение

Визуализация движения жидкости в реальном времени является важным направлением для исследования и разработки в области компьютерной графики.

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

В рамках данной работы были изучены подходы к моделированию жидкости с точки зрения Эйлера и Лагранжа, последние из которых были рассмотрены более подробно на примерах SPH, PCISPH и PBF.

Была разработана программа визуализации движения жидкости в реальном времени на основе метода Position Based Fluids.

В ходе данной работы были выполнены следующие задачи:

1. Изучены математические модели симуляции жидкости в реальном времени;

2. В качестве математической модели был выбран метод PBF;

3. Изучен алгоритм Screen Space Fluid Rendering для осуществления рендеринга жидкости в реальном времени;

4. Изучены методы использования технологии CUDA и библиотеки thrust.

5. Изучены методы использования библиотеки OpenGL и необходимых вспомогательных библиотек;

6. Реализована программа визуализации движения жидкости в реальном времени;

7. Разработана техническая документация.

Дальнейшая работа может состоять в реализации обработки столкновений между частицами жидкости и произвольными 3D-моделями. Также возможным направлением может стать интегрирование данной работы в виде компонента для моделирования жидкости в другие программы, связанные с компьютерной графикой.

Литература

1) Bender J., Mьller M., Macklin M. A survey on position based dynamics, 2017 //Proceedings of the European Association for Computer Graphics: Tutorials. - 2017. - С. 1-31.

2) Chrisman C. L. A comparison of grid-based techniques for Navier-Stokes fluid simulation in computer graphics: дис. - UC San Diego, 2008.

3) CUDA C++ Programming Guide. [Электронныйресурс] //URL: https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#introduction.(Дата обращения: 24.05.2020, режим свободного доступа).

4) Fluid Simulation For Video Games (Part 1). [Электронный ресурс] //URL: https://software.intel.com/content/www/us/en/develop/articles/fluid-simulation-for-video-games-part-1.html.(Дата обращения: 26.04.2020, режим свободного доступа).

5) Glad. [Электронный ресурс] Available: https://glad.dav1d.de/.(Дата обращения: 24.05.2020, режим свободного доступа).

6) GLFW. [Электронныйресурс] Available: https://www.glfw.org/ (Дата обращения: 24.05.2020, режим свободного доступа).

7) Ihmsen M. et al. SPH fluids in computer graphics. - 2014.

8) LearnOpenGL. [Электронный ресурс] //URL: https://learnopengl.com/Advanced-OpenGL/Cubemaps.(Датаобращения: 24.05.2020, режимсвободногодоступа).

9) Macklin M., Mьller M. Position based fluids //ACM Transactions on Graphics (TOG). - 2013. - Т. 32. - №. 4. - С. 1-12.

10) Monaghan J. J. Smoothed particle hydrodynamics //Annual review of astronomy and astrophysics. - 1992. - Т. 30. - №. 1. - С. 543-574.

11) Mьller M., Charypar D., Gross M. Particle-based fluid simulation for interactive applications //Proceedings of the 2003 ACM SIGGRAPH/Eurographics symposium on Computer animation. - Eurographics Association, 2003. - С. 154-159.

12) NanoGUI. [Электронный ресурс] //URL: https://github.com/mitsuba-renderer/nanogui.(Дата обращения: 24.05.2020, режим свободного доступа).

13) OpenGLMathematics. [Электронный ресурс] //URL: https://glm.g-truc.net/0.9.9/index.html.(Дата обращения: 24.05.2020, режим свободного доступа).

14) Paris S. et al. Bilateral filtering: Theory and applications. - Now Publishers Inc, 2009.

15) Schneiderbauer S., Krieger M. What do the Navier-Stokes equations mean? //European Journal of Physics. - 2013. - Т. 35. - №. 1. - С. 015020.

16) Smith R. et al. Open dynamics engine. - 2005.

17) Stam J., Fiume E. Depicting fire and other gaseous phenomena using diffusion processes //Proceedings of the 22nd annual conference on Computer graphics and interactive techniques. - 1995. - С. 129-136.

18) Solenthaler B., Pajarola R. Predictive-corrective incompressible SPH //ACM SIGGRAPH 2009 papers. - 2009. - С. 1-6.

19) van der Laan W. J., Green S., Sainz M. Screen space fluid rendering with curvature flow //Proceedings of the 2009 symposium on Interactive 3D graphics and games. - 2009. - С. 91-98.

Размещено на Allbest.ru

...

Подобные документы

  • Задача о движении однородного плоского тела круглой формы в пространстве по наклонной плоскости. Давление распределено по закону Герца. Результаты решения систем, а также их наглядная визуализация в математическом пакете Maple 11 и Macromedia Flash 8.

    дипломная работа [2,8 M], добавлен 15.06.2013

  • Ознакомление с понятием компьютерной графики. Области применения конструкторской и рекламной графики, компьютерной анимации. Рассмотрение преимущества графической визуализации бизнес-процессов. Особенности кольцевой, биржевой и лепестковой диаграмм.

    реферат [94,6 K], добавлен 02.02.2016

  • Возможности применения растровой, векторной и фрактальной компьютерной графики. История создания рекламы. Использование интерактивных графических систем в рекламе. Создания макета календаря с помощью векторного графического редактора Adobe Illustrator.

    курсовая работа [1,6 M], добавлен 20.10.2014

  • Разработка программы на языке С++ для решения дифференциального уравнения Лапласа в прямоугольной области методом сеток. Численное решение задачи Дирихле для уравнения Лапласа, построение сетки и итерационного процесса. Листинг и результат программы.

    курсовая работа [307,5 K], добавлен 30.04.2012

  • Суть принципа точечной графики. Изображения в растровой графике, ее достоинства. Обзор наиболее известных редакторов векторной графики. Средства для работы с текстом. Программы фрактальной графики. Форматы графических файлов. Трехмерная графика (3D).

    дипломная работа [764,7 K], добавлен 16.07.2011

  • Разработка вычислительной системы обработки данных в реальном времени, состоящей из устройства ввода и ПЭВМ. Назначение данной разработки и основные требования к ее качеству и функциональности. Этапы создания данной системы и анализ результатов.

    курсовая работа [223,5 K], добавлен 05.01.2010

  • Информация в современном мире как один из наиболее важных ресурсов. Рассмотрение особенностей разработки информационной системы для автоматизации рабочего места оператора телефонной компании по предоставлению услуг. Этапы создания информационной базы.

    курсовая работа [2,6 M], добавлен 13.03.2013

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

    презентация [641,9 K], добавлен 29.05.2010

  • Рассмотрение областей применения компьютерной графики. Изучение основ получения различных изображений (рисунков, чертежей, мультипликации) на компьютере. Ознакомление с особенностями растровой и векторной графики. Обзор программ фрактальной графики.

    реферат [192,9 K], добавлен 15.04.2015

  • Понятие и виды компьютерной графики. Применение спецэффектов в кинематографе. История развития компьютерной графики. Изменение частоты киносъемки с помощью спецэффектов. Виды компьютерной графики как способ хранения изображения на плоскости монитора.

    реферат [34,8 K], добавлен 16.01.2013

  • Определение параметров движения при вращательном движении, зависимости скорости, ускорения, времени от угла поворота, установление времени поворота на определенный угол. Применение построенной математической модели к расчету параметров движения тела.

    курсовая работа [112,0 K], добавлен 18.03.2010

  • Анализ средств визуализации. Разработка программы-расширения для визуализатора инженерных и научных расчетов Compaq Array Visualizer на языке Фортран. Оценка экономической эффективности и конкурентоспособности созданного программного обеспечения на рынке.

    дипломная работа [335,4 K], добавлен 10.09.2010

  • История развития компьютерной графики. Возникновение компьютерной (машинной) графики: научной, деловой, конструкторской, иллюстративной, художественной и рекламной. Компьютерная анимация. Графика для Интернета. Векторная графика и художественные эффекты.

    курсовая работа [692,0 K], добавлен 12.11.2014

  • Разработка автоматизированной системы реализации модели движения тела переменной массы на примере движения одноступенчатой ракеты, расчет времени и скорости полета. Описание формы загрузки программы. Требование к программному и техническому обеспечению.

    курсовая работа [255,0 K], добавлен 18.03.2012

  • Задачи компьютерного зрения. Анализ, разработка и реализация алгоритмов поиска и определения движения объекта, его свойств и характеристик. Алгоритмы поиска и обработки найденных областей движения. Метод коррекции. Нахождение объекта по цветовому диапазон

    статья [2,5 M], добавлен 29.09.2008

  • Расчётная схема для определения параметров движения при поступательном движении. Определение зависимости от пути скорости, ускорения и времени. Математическая модель расчёта параметров поступательного движения тела на участке разгона и торможения.

    курсовая работа [438,1 K], добавлен 22.01.2015

  • Методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов. Основные понятия компьютерной графики. Особенности применения растровой, векторной и фрактальной графики. Обзор форматов графических данных.

    реферат [49,1 K], добавлен 24.01.2017

  • Подбор игрового движка и описание его основных характеристик. Разработка структуры, алгоритма и интерфейса программы. Проектирование иерархии классов. Выделение типового приема визуализации. Тестирование правильности работы программного обеспечения.

    курсовая работа [3,1 M], добавлен 19.01.2017

  • Сферы применения машинной графики. Виды компьютерной графики. Цветовое разрешение и цветовые модели. Программное обеспечение для создания, просмотра и обработки графической информации. Графические возможности текстовых процессоров, графические редакторы.

    контрольная работа [21,9 K], добавлен 07.06.2010

  • Различные виды определения термина "мультимедиа". Мультимедиа-технологии как одно из наиболее перспективных и популярных направлений информатики. Мультимедиа в сети Internet. Компьютерная графика и звуки. Различные области применения мультимедиа.

    курсовая работа [43,5 K], добавлен 19.04.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.