Войти
ПрограммированиеФорумГрафика

Отсечение невидимой геометрии (3 стр)

Страницы: 1 2 3 4 515 Следующая »
#30
21:42, 21 сен. 2017

u960
Фрустум куллинг - это не "типо рейкастинга в 3д". Фрустум куллинг отсекает все, что не попадает в пирамиду видимости камеры, но он не учитывает, виден ли объект(не перекрыт ли он другим, попавшим в пирамиду видимости, объектом).


#31
22:15, 21 сен. 2017

> Каким способом лучше отсекать?
u960, отсекать иерархический квадтри, либо даже просто грид через FC.

> топ-даун
Если камера сверху и объектов на уровне меньше, чем сотни тысяч - то даже просто Frustum Culling легко всё сделает. Если их сотни тысяч/миллионы - можно сделать grid, отсекать его через Frustum Culling и уже только прошедшие отcечение "ячейки" куллить пообъектно тем же самым Frustum Culling

> Всё равно ничего не понял
Кратко:
- фрусту-куллинг занимается тем, что бы отсечь то, что не попадает в камеру
- оккулюжен-куллинг потом отсекает то, что попадает в камеру, но при этом, например, загорожено другими объектами
- порталы - они в основном для закрытых помещений (условно говоря - отсекают по "комнатам"). так же порталы удобны когда игра, скажем, FPS но внутри каньонов (на макушки гор забраться нельзя) - получаются те же самые "комнаты" но огромного размера
- есть ещё миллион алгоритмов и большинство из них не заменяют, а дополняют друг-друга.

Сответственно, можно, напрмиер, сделать так:
- фрустум-куллинг отсекает всё что не попало в камеру
- среди этого находим порталы и по ним отсекаем внутренние части (комнаты) помещний внутри видимых в камеру домов
- а в помещениях, например, можно использовать BSP или что-то ещё

Но, как правило, хватает самого простого - фрустум-куллинга, всё остальное имеет смысл делать только когда становится понятно, что иначе никак. В общем, если у тебя сейчас стоит вопрос в выборе - то советую сделать F/C, посмотреть на его работу и, 90% вероятность, что большего тебе и не понадобится ;-)

#32
22:20, 21 сен. 2017

u960
Frustum culling:
frustum_culling | Отсечение невидимой геометрии

RayCasting:
raycasting | Отсечение невидимой геометрии

#33
23:06, 21 сен. 2017

> Сейчас загружаю уровень целиком, одна сетка это пол, вторая сетка это стены.
u960, сколько там поликов в них? 50 млн что ли? Какое целевое железо?
Если железо нормальное и поликов не десятки миллионов - то можно и не париться вообще, просто брать и рисовать.

> А потом расставляются двери, немного мебели и так далее
FC будет норм.

#34
1:37, 23 сен. 2017

zombihello
А ты как поступаешь с ModelView-матрицей - вычисляешь пирамиду для каждого объекта или как? У каждого же объекта своя матрица трансформаций...
Или это только для LookAt? И как ты проверяешь на видимость VBO?

#35
10:01, 23 сен. 2017

Daniil Petrov
> У каждого же объекта своя матрица трансформаций...
BoundingBox/BoundingSphere должны уже быть пересчитаны с учетом WorldMatrix для объекта
>И как ты проверяешь на видимость VBO?
BoundingBox строится по вершинам VBO.

#36
11:26, 23 сен. 2017

Daniil Petrov
> А ты как поступаешь с ModelView-матрицей - вычисляешь пирамиду для каждого
> объекта или как?
Я вычисляю пирамиду один раз используя View и Projection матрицы

> У каждого же объекта своя матрица трансформаций...
> Или это только для LookAt?
у меня BoundingBox уже пересчитан с учетом матрицы трансформации

> И как ты проверяешь на видимость VBO?
У меня BoundingBox описывает геометрию объекта, что упрощает проверку на видимость (8 вершин против N вершин).
А проверку видимости я делаю по формуле вычисления расстояния точки до плоскости [ A*x + B*y + C*z + D ]
( Если расстояние положительно, значит, точка лежит перед плоскостью, отрицательна – значит за плоскостью. )
Где A, B, C, и D - четыре числа, которые определяют плоскость и X, Y, и Z - координаты точки.

Делал по уроку от NeHe Ссылка
Если что, то вот код отвечающий за обновление фрустума и проверку видимости Ссылка

#37
12:21, 23 сен. 2017

zombihello
Ну я вот тоже его урок переделал:

+ Показать

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

> у меня BoundingBox уже пересчитан с учетом матрицы трансформации
А это как?

#38
13:38, 23 сен. 2017

zombihello
На точке проверил, нормально работает:

+ Показать
#39
14:27, 23 сен. 2017

Daniil Petrov
> но у тебя код получше проработан, чем мой!
:D уверен? Как по мне +/- твой и мой код одинаковый (небольшие различия только)

Daniil Petrov
> А это как?
По сути пока этого в движке нету, так как модели не трансформируются (пока это не надо), а
браши уровня уже находятся в мировой СК с учетом трансформации.

Но в теории это звучит как-то так: вершины BoundingBox'a обновляются с помощью матрицы трансформации.

вот пример псевдо кода:

void UpdateBoundingBox( glm::mat4 Transform )
{
//Vertexs - массив вершин типа glm::vec3 (их всего 8 у BoundingBox'a)
//Transform - матрица трансформации объекта

for ( int i = 0; i < 8; i++ )
Vertexs[i] *= Transform; // ну или примерно так, еще не проверял
}

Понимаю что объяснил коряво, но как-то так (у меня всегда был "талант" объяснения )) )

#40
14:28, 23 сен. 2017

> А это как?
Daniil Petrov, берёшь OBB, трансформируешь его его же мировой матрице - и получаешь его OBB в пространстве мира. Для статической геометрии, которой обычно 95% игрового мира - оно будет константным и обновлять его больше не надо.

P/S Я у себя считаю вообще баундинг-сферами - проще код, быстрее работает, но менее точно (но и у нас и объектов иногда бывает по 100к и больше).

#41
14:48, 23 сен. 2017

zombihello
> Как по мне +/- твой и мой код одинаковый
Я не допёр, что после вычисления каждой плоскости, идёт нормализация :)

> Но в теории это звучит как-то так: вершины BoundingBox'a обновляются с помощью матрицы трансформации.
Примерно так - http://www.mbsoftworks.sk/index.php?page=tutorials&series=1 - уроки 18, 19? Я сам ещё их не штудировал.

slava_mib
> берёшь OBB, трансформируешь его его же мировой матрице - и получаешь его OBB в пространстве мира.
При загрузке моделей?

> Я у себя считаю вообще баундинг-сферами - проще код, быстрее работает, но менее точно
Сделаю проверку и сфер, и боксов, а там уже буду плясать по ситуации.

#42
15:05, 23 сен. 2017

Daniil Petrov
> Примерно так - http://www.mbsoftworks.sk/index.php?page=tutorials&series=1 -
> уроки 18, 19? Я сам ещё их не штудировал.
Так там, как я понял, идет выбор объекта мышкой, а не обновления вершин BoundingBox'a
(я статью не читал, посмотрел демку только)

Тебе не понятно как обновить BoundingBox с учетом трансформации объекта? Если да, то вершины BoundingBox'a
обновляются так же само как ты, например, перемещаешь вершины модели в шейдере
(умножением вершины в локальной СК на матрицу трансформации)

#43
15:11, 23 сен. 2017

Daniil Petrov
> При загрузке моделей?
По началу да, а если модель сместилась, повернулась и т.п, то так же само обновляешь. (если я правильно понял мысль slava_mib)
Я ведь правильно понял OBB - это ограничивающее тело?

#44
16:30, 23 сен. 2017

> При загрузке моделей?
Daniil Petrov, при загрузке моделей считаешь для каждой из них AABB. А при добавлении на сцену каждой из них, их же много инсансов - берушь исходный AABB у множаешь на матрицу инстанса - получаешь OBB для каждого объекта в мире.

> Я ведь правильно понял OBB - это ограничивающее тело?
zombihello, в общем и целом - да ) https://habrahabr.ru/post/257339/

Страницы: 1 2 3 4 515 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.