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

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

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

> Что ты например будешь делать, если уровень задизайнен одним солид мешем?
MrShoor, а так ещё кто-то делает?


#31
21:32, 21 сен. 2017

Всё равно ничего не понял(( А мог бы кто нить подробнее описать и по полочкам. Спасибо Cheb за более развернутый ответ. но я все равно не понял)

1. Фруструм куллинг отсекает всё, что не входит в пирамиду видимости, то есть это по типу рейкастинга только в 3д. Что вижу то и рисую? И вот загружен целый город,а ты находишься только в комнате, то тупо все остальное отсекается? А он бывает аппаратным? И это я так понял нельзя просчитать заранее? что показывать что нет.

2. BSP нарезает весь уровень, и в зависимости где ты сейчас находишься, он показывает соответствующие куски?

3. Почему 20 лет назад нельзя было использовать фруструм куллинг? Он разве такой затратный? Для скольки процентов игр он подходит?

4.  Чем щас плох BSP?

#32
21:42, 21 сен. 2017

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

#33
21:47, 21 сен. 2017

slava_mib
> > Что ты например будешь делать, если уровень задизайнен одним солид мешем?
> MrShoor, а так ещё кто-то делает?

ну а если это допустим топ-даун шутер, под небольшим углом.И один меш это пол, а второй меш это стены и все такое. Каким способом лучше отсекать?

#34
21:53, 21 сен. 2017

Vlad2001_MFS
> Фрустум куллинг - это не "типо рейкастинга в 3д". Фрустум куллинг отсекает все,
> что не попадает в пирамиду видимости камеры,
Рейкастинг задает угол обзора, то есть это типа отсечения слева-справа от смотрящего. Соответственно отсекает все по ближней плоскости..ну а по дальней луч летит пока во что то не упрется, но там можно уже свои правила придумать, отсекаться ближайшей стеной, или может дальше лететь. Если допустим это окно или прозрачное что то. На скоко я понял. смотря по картинкам что такое фруструм куллинг. это похожее что то.

frustum_culling
Изображение

raycasting
Изображение

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

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

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

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

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

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

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

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

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

#37
22:41, 21 сен. 2017

Vlad2001_MFS
это я понял

#38
22:50, 21 сен. 2017

slava_mib
> Если камера сверху и объектов на уровне меньше, чем сотни тысяч - то даже
> просто Frustum Culling легко всё сделает.
По количеству обьектов и полигонов это что то на уровне PS1. Сейчас загружаю уровень целиком, одна сетка это пол, вторая сетка это стены. А потом расставляются двери, немного мебели и так далее, это отдельные сетки.

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

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

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

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

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

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

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

#42
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 Ссылка
Если что, то вот код отвечающий за обновление фрустума и проверку видимости Ссылка

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

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

+ Показать

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

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

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

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

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

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