Курсовая работа по Компьютерной графике Симуляция поверхности океана в реальном времени с использованием gpu студент



Pdf просмотр
Дата14.02.2017
Размер3.09 Mb.
Просмотров138
Скачиваний0
ТипКурсовая

Московский Авиационный Институт
(Национальный Исследовательский Университет)
Курсовая работа по
Компьютерной графике
Симуляция поверхности океана в реальном времени с использованием GPU
Студент:
Колесников Е. В.
Преподаватель:
Измайлов А. А.
21 февраля 2015 г.

Содержание
1
Введение
2 1.1
Исследуемая область
2 1.2
Перспективность исследований . . . . . . . . . . . . . . . . .
2 1.3
Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . .
3 1.4
Возможные методы решения . . . . . . . . . . . . . . . . . .
3 1.5
Используемые технологии
3 2
Используемые математические модели
4 2.1
Модель волны . . . . . . . . . . . . . . . . . . . . . . . . . .
4 2.2
Модель освещения . . . . . . . . . . . . . . . . . . . . . . . .
5 3
Детали реализации
8 3.1
Скайбокс . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 3.2
Поле высот . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 3.3
Освещение
13 4
Подведение итогов
15 4.1
Полученные результаты . . . . . . . . . . . . . . . . . . . . .
15 4.2
Вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
Список литературы
16 1

1
Введение
1.1
Исследуемая область
Исследуемой областью является одно из перспективных направле- ний в компьютерном моделировании – симуляция поверхности океана.
Кажущееся интуитивным предположение, что поставленная задача эк- вивалентна задаче моделирования жидкости, на самом деле является неверным.
Моделирование жидкости – область компьютерной графики, исполь- зующая средства вычислительной гидродинамики для реалистичного мо- делирования, анимации и визуализации жидкостей, газов, взрывов и дру- гих связанных с этим явлений, в то время как задача симуляции по- верхности жидкости является задачей моделирования волны, что сильно упрощает используемый математический аппарат.
1.2
Перспективность исследований
Активному развитию данной области способствуют кинематограф и игровая индустрия, которые используют разработанные методы в сво- их продуктах. Так например в данной работе частично реализована мо- дель океанской поверхности, которая была использована в фильме "Ти- таник".
Хотя CPU с каждым годом увеличивают свою мощность, ее все равно еще не достаточно для использование реалистичных моделей поверхно- сти жидкости в компьютерных играх. Решением данной проблемы может стать одно из перспективных направлений исследований в последнее вре- мя – распределенные вычисления на GPU. Именно этот подход исполь- зуется в данной работе для увеличения скорости работы программы.
Если для кинематографа скорость не является ключевым фактором,
то в игровой индустрии – наоборот. Поэтому, пока у пользователей нет возможности использовать необходимую мощность для просчета реали- стичной модели воды, данная область исследований останется перспек- тивной, так как с одной стороны необходимо улучшать внешний вид мо- делей и их физическое поведение, так с другой стороны – нельзя вы- ходить за рамки возможного количества вычислений, т.е. необходимо разрабатывать новые модели и более оптимизированные алгоритмы.
2

1.3
Постановка задачи
В данной работе решается задача моделирования поверхности откры- того океана в реальном времени с использованием GPU для вычисления поля высот.
1.4
Возможные методы решения
Существует много подходов к моделированию и анимации поверхно- сти воды. Большая часть из них основана на аналитической модели су- перпозиции волн, и решение здесь либо задается сразу в виде линейной комбинации тригонометрических функций со специально подобранными коэффициентами, либо получается в результате обратного преобразова- ния Фурье со специально заданным спектром. Выбор спектра и опреде- ляет сложность, реалистичность и детализацию модели. Такие модели могут быть как очень сложными и дорогими с вычислительной точки зрения, так и довольно простыми.
Моделированием водной поверхности занималось достаточное коли- чество разработчиков, наиболее успешным среди которых был Тессен- дорф (Tessendorf). Именно его модель частично реализована в данной работе.
1.5
Используемые технологии
• Программа написана на OpenGL 4.1 с использованием GLFW3 в качестве GUI.
• Для вычисления поля высот используется технология CUDA и биб- лиотека CUFFT для вычисления обратного преобразования Фурье.
• Библиотека SDL2_image и Devil необходимы для загрузки текстур для шейдера.
• В качестве библиотеки линейной алгебры используется библиотека
GLM, специально разработанная для использования с OpenGL.
3

2
Используемые математические модели
2.1
Модель волны
В данной работе рассморен статистический метод создания волны.
Модели такого типа основаны на возможности разложения поля высо- ты волны в сумму синусоид и косинусоид с использование случайных величин для генерации амплитуд частот. Вычислительно более выгодно использовать БПФ для вычисления этих сумм.
Поле высот с использованием БПФ можно представить в виде сумм синусоид с сложными, изменяющимися со временем амплитудами:
ℎ(x, ??????) =
∑︁
k
˜
ℎ(k, ??????) exp (???????????? · x)
(1)
где x = (??????
1
, ??????
2
) – положение точки на двумерной сетке, ?????? – время, а k = (??????
1
, ??????
2
), ??????
1
=
2????????????
??????
1
, ??????
2
=
2????????????
??????
2
, −
??????
2
≤ ?????? <
??????
2
, −
??????
2
≤ ?????? <
??????
2
Величины амплитуды однозначно задают все поле высот. Идея стати- стического метода заключается в создании случайных наборов амплитуд,
удовлетворяющих эмпирическим законам океанографии.
Океанографические исследования показали, что уравнение 1 являет- ся достаточно точным представлением ветряных волн, возникающих в открытом океане.
˜
ℎ(k, ??????) можно представить в виде:
˜
ℎ(k, ??????) = ˜

0
(k) exp (????????????(??????)??????) + ˜

*
0
(−k) exp (−????????????(??????)??????)
(2)
где ˜

0
(k) - амплитуды поля высоты в момент времени ?????? = 0, которые задаются по формуле:
˜

0
(k) =
1

2
(??????
??????
+ ????????????
??????
)
√︀
??????

(k)
(3)
где ??????
??????
, ??????
??????
?????? (0, 1), а ??????

(k) - спектр Филлипса, который задается эмпи- рической формулой:
??????

(k) = ??????
exp (−1/(????????????)
2
)
??????
4

k · ˆ
??????|
2
(4)
в которой ?????? =
??????
2
??????
Именно спектр Филлипса является необходимым эмпирическим за- коном океанографии, благодаря которому волны становятся похожи на
4
настоящие. Данная формула была получена с помощью эксперементаль- ных данных разного вида, собиравшихся в течение продолжительного количества времени.
2.2
Модель освещения
В качестве модели освещения используется модель Блинна-Фонга.
Несмотря на то, что существую более точные модели освещения, она является стандартом в компьютерной графике.
Основная идея модели Блинна-Фонга заключается в предположении,
что освещенность каждой точки тела разлагается на 3 компоненты:
1. фоновое освещение (ambient),
2. рассеянный свет (diffuse),
3. бликовая составляющая (specular).
Свойства источника определяют мощность излучения для каждой из этих компонент, а свойства материала поверхности определяют её спо- собность воспринимать каждый вид освещения.
Рис. 1: Модель Блинна-Фонга
Фоновое освещение это постоянная в каждой точке величина надбав- ки к освещению. Вычисляется фоновая составляющая освещения как:
??????
??????
= ??????
??????
??????
??????
, где
(5)
• ??????
??????
– фоновая составляющая освещенности в точке;
• ??????
??????
– свойство материала воспринимать фоновое освещение;
• ??????
??????
– мощность фонового освещения.
5

Рассеянный свет при попадании на поверхность рассеивается равно- мерно во все стороны. При расчете такого освещения учитывается толь- ко ориентация поверхности (нормаль) и направление на источник света.
Рассеянная составляющая рассчитывается по закону косинусов (закон
Ламберта):
??????
??????
= ??????
??????
(⃗
?????? · ⃗
?????? )??????
??????
, где
(6)
• ??????
??????
– рассеянная составляющая освещенности в точке,
• ??????
??????
– свойство материала воспринимать рассеянное освещение,
• ⃗
?????? – направление из точки на источник,
• ⃗
?????? – вектор нормали в точке,
• ??????
??????
– мощность рассеянного освещения.
Рис. 2: Необходимые векторы для модели Блинна-Фонга
Зеркальный свет при попадании на поверхность подчиняется следую- щему закону: “Падающий и отраженный лучи лежат в одной плоскости с нормалью к отражающей поверхности в точке падения, и эта нормаль
6
делит угол между лучами на две равные части”. Т.о. отраженная со- ставляющая освещенности в точке зависит от того, насколько близки направления на наблюдателя и отраженного луча. Это можно выразить следующей формулой:
??????
??????
= ??????
??????
( ⃗
?????? · ⃗
?????? )
??????
??????
??????
, где
(7)
• ??????
??????
– зеркальная составляющая освещенности в точке,
• ??????
??????
– коэффициент зеркального отражения,
• ⃗
?????? =

?????? + ⃗
??????
|⃗
?????? + ⃗
?????? |
– ориентация площадки, на которой будет максималь- ное отражение,
• ⃗
?????? – вектор нормали в точке,
• ??????
??????
– мощность зеркального освещения,
• ?????? – коэффициент блеска, свойство материала.
Именно зеркальное отражение представляет наибольший интерес, но в то же время его расчет требует больших вычислительных затрат. При фиксированном положении поверхности относительно источников света фоновая и рассеянные составляющие освещения могут быть просчитаны единожды для всей сцены, т.к. их значение не зависит от направления взгляда. С зеркальной составляющей этот фокус не сработает и придется пересчитывать её каждый раз, когда взгляд меняет свое направление.
Во всех вычислениях выше, для рассеянной и зеркальной компонен,
если скалярное произведение в правой части меньше нуля, то соответ- ствующая компонента освещенности полагается равной нулю.
7

3
Детали реализации
3.1
Скайбокс
Скайбокс – объект в трёхмерной графике, играющий роль неба и го- ризонта. Представляет собой несложную трёхмерную модель (как пра- вило, куб), с внутренней стороны которой натянута текстура неба – "ку- бическая текстура".
Рис. 3: Реализованный скайбокс
Обработка трёхмерной графики требует много вычислительной рабо- ты, поэтому "честно"просчитывать объекты, находящиеся на горизонте,
было бы расточительством. К тому же, трёхмерное аппаратное обеспе- чение имеет Z-буферы, которые из-за ограниченной разрядности отбра- сывают всё, что находится далеко от камеры.
8

Поэтому удалённые объекты изображаются крайне примитивно: в ви- де куба, шесть граней которого — текстуры неба и горизонта. Если отоб- разить этот куб так, чтобы камера находилась точно в центре, будет казаться, что через камеру действительно видны небо и горизонт.
В данной компьютерной симуляции скайбокс реализован в виде куба с 6-ю различными текстурами, которые накладываются на каждую из граней.
Фрагментный шейдер, используемый для текстурирования имеет три- виальный вид:
1
#
v e r s i o n 410 c o r e
2 3
i n v e c 3 texCoord
;
4
o u t v e c 4 f C o l o r
;
5
u n i f o r m samplerCube cubemap
;
6 7
v o i d main
(
v o i d
) {
8
f C o l o r
=
t e x t u r e
(
cubemap
,
texCoord
) ;
9
}
3.2
Поле высот
Для того, чтобы эффективно реализовать симуляцию, используя рас- пределенные вычисления на GPU, необходимо принимать во внимание следующие 2 факта:
1. Копирование данных со стороны CPU на сторону GPU является очень затратной операцией,
2. GPU имеет ограниченный объем памяти.
Вторая проблема решиется на уровне постановки задачи – предпо- лагается, что вся необходимая для симуляции информация, полностью помещается в памяти GPU.
Для того, чтобы решить первую проблему, необходимо написать про- грамму таким образом, чтобы значения, вычисленные на GPU не пе- редавались обратно на сторону CPU, а сразу копировались в OpenGL
буффер. Для того, чтобы реализовать такое поведение, CUDA предо- ставляет 4 функции:
• cudaGraphicsGLRegisterBuffer – регистрирует вспомогательную CUDA
структуру, которая может обращаться к OpenGL буферу,
• cudaGraphicsMapResources – соединяет вспомогательную структу- ру с OpenGL буфером,
9

• cudaGraphicsResourceGetMappedPointer – возвращает указатель, с помощью которого можно скопировать данные в OpenGL буфер напрямую,
• cudaGraphicsUnmapResources – закрывает соединение вспомогатель- ной структуры с OpenGL буфером.
Рис. 4: Пример сгенерированного поля высот
Вычисление поля высот происходит каждый раз, когда рендерится изображение.
1
// g e n e r a t e wave spectrum i n f r e q u e n c y domain
2
c u d a G e n e r a t e S p e c t r u m K e r n e l
(
d_h0
,
d_ht
,
spectrum
,
meshSize
,
meshSize
,
curTime
,
p a t c h S i z e
) ;
3 4
// e x e c u t e i n v e r s e FFT t o c o n v e r t t o s p a t i a l domain
5
c h e c k C u d a E r r o r s
(
c u f f t E x e c C 2 C
(
f f t P l a n
,
d_ht
,
d_ht
,
CUFFT_INVERSE
) ) ;
6 7
// update heightmap v a l u e s i n v e r t e x b u f f e r
8
c h e c k C u d a E r r o r s
(
cudaGraphicsMapResources
( 1 , &
cuda_heightVB_resource
, 0 ) ) ;
9
c h e c k C u d a E r r o r s
(
c u d a G r a p h i c s R e s o u r c e G e t M a p p e d P o i n t e r
( (
v o i d
* * )
&
g_hptr
, &
num_bytes
,
cuda_heightVB_resource
) ) ;
10

10
cudaUpdateHeightmapKernel
(
g_hptr
,
d_ht
,
meshSize
,
m e s h S i z e
) ;
11
c h e c k C u d a E r r o r s
(
cudaGraphicsUnmapResources
( 1 , &
cuda_heightVB_resource
, 0 ) ) ;
В данном коде функции cudaGenerateSpectrumKernel, cufftExecC2C,
cudaUpdateHeightmapKernel выполняются на GPU. Функция cufftExecC2C
является библиотечной функцией, которая производит в данном случае обратное преобразование Фурье, а оставшиеся функции написаны вруч- ную и имеют следующую реализацию:
1
// g e n e r a t e wave h e i g h t f i e l d a t t i m e t b a s e d on i n i t i a l h e i g h t f i e l d and d i s p e r s i o n r e l a t i o n s h i p
2
__global__
v o i d g e n e r a t e S p e c t r u m K e r n e l
(
f l o a t 2
*
h0
,
f l o a t 2
*
ht
,
3
u n s i g n e d i n t in_width
,
u n s i g n e d i n t out_width
,
4
u n s i g n e d i n t out_height
,
f l o a t t
,
f l o a t p a t c h S i z e
)
5
{
6
u n s i g n e d i n t x
=
b l o c k I d x x
*
blockDim x
+
t h r e a d I d x x
;
7
u n s i g n e d i n t y
=
b l o c k I d x y
*
blockDim y
+
t h r e a d I d x y
;
8
u n s i g n e d i n t i n _ i n d e x
=
y
*
in_width
+
x
;
9
u n s i g n e d i n t in_mindex
= (
o u t _ h e i g h t
- y
) *
in_width
+ (
out_width
- x
) ;
// m i r r o r e d
10
u n s i g n e d i n t out_index
=
y
*
out_width
+
x
;
11 12
f l o a t 2 k
;
13
k x
= ( - (
i n t
)
out_width
/ 2 . 0
f
+
x
) * ( 2 . 0
f
*
CUDART_PI_F
/
p a t c h S i z e
) ;
14
k y
= ( - (
i n t
)
out_width
/ 2 . 0
f
+
y
) * ( 2 . 0
f
*
CUDART_PI_F
/
p a t c h S i z e
) ;
15 16
f l o a t k_len
=
s q r t f
(
k x
*
k x
+
k y
*
k y
) ;
17
f l o a t w
=
s q r t f
( 9 . 8 1
f
*
k_len
) ;
18 19
i f
( (
x
<
out_width
) && (
y
<
o u t _ h e i g h t
) ) {
20
f l o a t 2 h0_k
=
h0
[
i n _ i n d e x
] ;
21
f l o a t 2 h0_mk
=
h0
[
in_mindex
] ;
22
ht
[
out_index
] =
complex_add
(
complex_mult
(
h0_k
,
complex_exp
(
w
*
t
) ) ,
23
complex_mult
(
c o n j u g a t e
(
h0_mk
) ,
complex_exp
( - w
*
t
) ) ) ;
24
}
25
}
26 27
// update h e i g h t map v a l u e s b a s e d on o u t p u t o f FFT
28
__global__
v o i d updateHeightmapKernel
(
f l o a t
*
heightMap
,
29
f l o a t 2
*
ht
,
u n s i g n e d i n t width
)
30
{
31
u n s i g n e d i n t x
=
b l o c k I d x x
*
blockDim x
+
t h r e a d I d x x
;
32
u n s i g n e d i n t y
=
b l o c k I d x y
*
blockDim y
+
t h r e a d I d x y
;
11

33
u n s i g n e d i n t i
=
y
*
width
+
x
;
34 35
f l o a t s i g n _ c o r r e c t i o n
= ( (
x
+
y
) & 0
x01
) ?
- 1 . 0
f
:
1 . 0
f
;
36 37
heightMap
[
i
] =
ht
[
i
] .
x
*
s i g n _ c o r r e c t i o n
;
38
}
Функция generateSpectrumKernel генерирует поле высот из начально- го поля высот и пройденного времени, а updateHeightmapKernel – вспо- могательная функция, которая реализует смещение точек после обрат- ного преобразования Фурье.
Не менее интересной является реализация функции, которая генери- рует начальное поле высот:
1
f l o a t
Waves
: :
p h i l l i p s
(
f l o a t
Kx
,
f l o a t
Ky
)
2
{
3
f l o a t k_squared
=
Kx
*
Kx
+
Ky
*
Ky
;
4 5
i f
(
k_squared
== 0 . 0
f
) {
6
r e t u r n
0 . 0
f
;
7
}
8 9
f l o a t
L
=
windSpeed
*
windSpeed
/
g
;
10
f l o a t k_x
=
Kx
/
s q r t f
(
k_squared
) ;
11
f l o a t k_y
=
Ky
/
s q r t f
(
k_squared
) ;
12
f l o a t w_dot_k
=
k_x
*
windDir x
+
k_y
*
windDir y
;
13
f l o a t p h i l l i p s
=
A
*
e x p f
( - 1 . 0
f
/ (
k_squared
*
L
*
L
) )
14
/ (
k_squared
*
k_squared
) *
w_dot_k
*
w_dot_k
;
15 16
// f i l t e r o u t waves moving o p p o s i t e t o wind
17
i f
(
w_dot_k
< 0 . 0
f
) {
18
p h i l l i p s
*=
dirDepend
;
// dir_depend ;
19
}
20 21
r e t u r n p h i l l i p s
;
22
}
23 24
v o i d
Waves
: :
g e n e r a t e H 0
( )
25
{
26
f o r
(
u n s i g n e d i n t y
= 0 ;
y
<
spectrum
; ++
y
) {
27
f o r
(
u n s i g n e d i n t x
= 0 ;
x
<
spectrum
; ++
x
) {
28
f l o a t kx
= ( - (
i n t
)
m e s h S i z e
/ 2 . 0
f
+
x
) * ( 2 . 0
f
*
CUDART_PI_F
/
p a t c h S i z e
) ;
29
f l o a t ky
= ( - (
i n t
)
m e s h S i z e
/ 2 . 0
f
+
y
) * ( 2 . 0
f
*
CUDART_PI_F
/
p a t c h S i z e
) ;
30 31
f l o a t
P
=
s q r t f
(
p h i l l i p s
(
kx
,
ky
) ) ;
32 12

33
f l o a t
Er
=
g a u s s
( ) ;
34
f l o a t
Ei
=
g a u s s
( ) ;
35 36
f l o a t h0_re
=
Er
*
P
*
CUDART_SQRT_HALF_F
;
37
f l o a t h0_im
=
Ei
*
P
*
CUDART_SQRT_HALF_F
;
38 39
i n t i
=
y
*
spectrum
+
x
;
40
h_h0
[
i
] .
x
=
h0_re
;
41
h_h0
[
i
] .
y
=
h0_im
;
42
}
43
}
44
}
3.3
Освещение
Реализация модели освещения Блинна-Фонга имеет стандартный вид:
1
/* v e r t e x s h a d e r */
2
#
v e r s i o n 410 c o r e
3 4
l a y o u t
(
l o c a t i o n
= 0 )
i n v e c 4 meshPos
;
5
l a y o u t
(
l o c a t i o n
= 1 )
i n f l o a t h e i g h t
;
6
l a y o u t
(
l o c a t i o n
= 2 )
i n v e c 2 s l o p e
;
7 8
u n i f o r m mat4 PVM
;
9
u n i f o r m v e c 3 l i g h t P o s
;
10
u n i f o r m v e c 3 eyePos
;
11 12
o u t v e c 3 l
;
13
o u t v e c 3 h
;
14
o u t v e c 3 n
;
15
o u t v e c 3 r
;
16 17
o u t v e c 4 pos
;
18 19
v o i d main
( ) {
20
v e c 3 l p
=
abs
(
l i g h t P o s
) ;
21
v e c 3 p
=
v e c 3
(
meshPos x
, 1
e
+2 *
h e i g h t
,
meshPos z
) ;
22
g l _ P o s i t i o n
=
PVM
*
v e c 4
(
p
,
1 . 0 ) ;
23
p x
=
p x
- 1 0 0 0 ;
p z
=
p z
- 1 0 0 0 ;
24
p y
=
p y
- 5 0 0 ;
25
pos
=
v e c 4
(
p
,
1 . 0 ) ;
26
l
=
n o r m a l i z e
(
l p
- p
) ;
27
v e c 3 v
=
n o r m a l i z e
(
eyePos
- p
) ;
28
h
=
n o r m a l i z e
( (
v
+
l
) /
l e n g t h
(
v
+
l
) ) ;
29
n
=
n o r m a l i z e
(
c r o s s
(
v e c 3
( 0 . 0 ,
s l o p e y
,
1 . 0 / 2 5 6 ) ,
v e c 3
( 1 . 0
/ 2 5 6 ,
s l o p e x
,
0 . 0 ) ) ) ;
30
r
=
r e f l e c t
( - l
,
n
) ;
13

31
}
1
/* f r a g m e n t s h a d e r */
2
#
v e r s i o n 410 c o r e
3 4
i n v e c 4 pos
;
5
o u t v e c 4 f C o l o r
;
6 7
u n i f o r m v e c 3 s o u r c e C o l o r
;
8
u n i f o r m v e c 3 d i f f C o l o r
;
9
u n i f o r m v e c 3 s p e c C o l o r
;
10
u n i f o r m v e c 3 l i g h t P o s
;
11
u n i f o r m v e c 3 eyePos
;
12 13
i n v e c 3 l
;
14
i n v e c 3 h
;
15
i n v e c 3 n
;
16
i n v e c 3 r
;
17 18
u n i f o r m v e c 3 Ka
;
19
u n i f o r m v e c 3 Kd
;
20
u n i f o r m v e c 3 Ks
;
21
u n i f o r m f l o a t a l p h a
;
22 23
v e c 3 BlinnPhongModel
( )
24
{
25
r e t u r n
Ka
*
s o u r c e C o l o r
+
26
Kd
*
max
(
d ot
(
n
,
- l
) , 0 . 0 ) *
d i f f C o l o r
+
27
Ks
*
max
(
pow
(
d o t
(
n
,
h
) ,
a l p h a
) , 0 . 0 ) *
s p e c C o l o r
;
28
}
29 30 31
v o i d main
(
v o i d
) {
32
v e c 3 BlinnPhong
=
exp
( - 0 . 8 + 1 . 2 *
abs
(
pos x
/3000+
pos z
/ 3 0 0 0 ) )
*
BlinnPhongModel
( ) ;
33
f C o l o r
=
v e c 4
(
BlinnPhong
,
0 . 9 ) ;
34
}
В фрагментном шейдере используется ??????-канал не равный единице, в данной реализации ?????? = 0.9, чтобы была возможность сквозь воду про- сматривать дно.
14

4
Подведение итогов
4.1
Полученные результаты
Результат работы программы виден на следующем скриншоте:
Рис. 5: Скриншот работы программы
Полученный результат напоминает жидкость, но океан имеет более сложную текстуру. Можно было бы продолжить исследовать проблему симуляции поверхности океана и добавить такие эффекты, как порыви- стые волны, брызги, пену, более подходящую для океана модель освеще- ния, интерференцию волн, отражение мира на поверхности воды, кау- стический эффект и многое другое, которые бы улучшили внешний вид воды, но тема слишком сложная для любительского ознакомления.
4.2
Вывод
Симуляция поверхности океана - очень интересный, важный и актив- но развивающийся раздел моделирования. С помощью распределенных вычислений на GPU можно добиться вычисления очень большой площа- ди поверхности в режиме реального времени с неплохой точностью. В
данной работе была реализована самая простая статистическая модель волны, однако даже эта модель позволяет просчитать поведение волн с хорошей точностью.
15

Список литературы
[1] Tessendorf, J. 2001. Simulating Ocean Water. ACM SIGGRAPH.
[2] NVIDIA. 2011. Ocean Surface Simulation. NVIDIA Graphics SDK 11
Direct3D.
[3] Chin-Chih Wang, Jia-Xiang Wu, Chao-En Yen, Pangfeng Liu, Chuen-
Liang Chen. Ocean Wave Simulation in Real-time using GPU.
[4] Farber,
R.
2011,
CUDA
Application
Design and
Development,
Applications of GPU computing, Elsevier Science
[5] David B. Kirk, Wen-mei W. Hwu. 2012, Programming Massively Parallel
Processors: A Hands-on Approach, Newnes
16

Document Outline

  • Введение
    • Исследуемая область
    • Перспективность исследований
    • Постановка задачи
    • Возможные методы решения
    • Используемые технологии
  • Используемые математические модели
    • Модель волны
    • Модель освещения
  • Детали реализации
    • Скайбокс
    • Поле высот
    • Освещение
  • Подведение итогов
    • Полученные результаты
    • Вывод
  • Список литературы


Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал