Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Отсечение невидимой геометрии (3 стр)

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

Поделиться

Страницы: 1 2 3 4 ... 14 15 16 Следующая

slava_mibМодераторwww21 сен. 201721:31#30
> Что ты например будешь делать, если уровень задизайнен одним солид мешем?
MrShoor, а так ещё кто-то делает?
u960Постоялецwww21 сен. 201721:32#31
Всё равно ничего не понял(( А мог бы кто нить подробнее описать и по полочкам. Спасибо Cheb за более развернутый ответ. но я все равно не понял)

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

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

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

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

Vlad2001_MFSУчастникwww21 сен. 201721:42#32
u960
Фрустум куллинг - это не "типо рейкастинга в 3д". Фрустум куллинг отсекает все, что не попадает в пирамиду видимости камеры, но он не учитывает, виден ли объект(не перекрыт ли он другим, попавшим в пирамиду видимости, объектом).
u960Постоялецwww21 сен. 201721:47#33
slava_mib
> > Что ты например будешь делать, если уровень задизайнен одним солид мешем?
> MrShoor, а так ещё кто-то делает?

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

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

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

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

Правка: 21 сен. 2017 22:09

slava_mibМодераторwww21 сен. 201722:15#35
> Каким способом лучше отсекать?
u960, отсекать иерархический квадтри, либо даже просто грид через FC.

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

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

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

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

Правка: 21 сен. 2017 22:18

Vlad2001_MFSУчастникwww21 сен. 201722:20#36
u960
Frustum culling:
frustum_culling | Отсечение невидимой геометрии

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

u960Постоялецwww21 сен. 201722:41#37
Vlad2001_MFS
это я понял
u960Постоялецwww21 сен. 201722:50#38
slava_mib
> Если камера сверху и объектов на уровне меньше, чем сотни тысяч - то даже
> просто Frustum Culling легко всё сделает.
По количеству обьектов и полигонов это что то на уровне PS1. Сейчас загружаю уровень целиком, одна сетка это пол, вторая сетка это стены. А потом расставляются двери, немного мебели и так далее, это отдельные сетки.
slava_mibМодераторwww21 сен. 201723:06#39
> Сейчас загружаю уровень целиком, одна сетка это пол, вторая сетка это стены.
u960, сколько там поликов в них? 50 млн что ли? Какое целевое железо?
Если железо нормальное и поликов не десятки миллионов - то можно и не париться вообще, просто брать и рисовать.

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

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

Правка: 23 сен. 2017 6:04

AndreyПостоялецwww23 сен. 201710:01#41
Daniil Petrov
> У каждого же объекта своя матрица трансформаций...
BoundingBox/BoundingSphere должны уже быть пересчитаны с учетом WorldMatrix для объекта
>И как ты проверяешь на видимость VBO?
BoundingBox строится по вершинам VBO.
zombihelloПостоялецwww23 сен. 201711:26#42
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 Ссылка
Если что, то вот код отвечающий за обновление фрустума и проверку видимости Ссылка

Daniil PetrovЗабаненwww23 сен. 201712:21#43
zombihello
Ну я вот тоже его урок переделал:
+ Показать

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

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

Правка: 23 сен. 2017 12:31

Daniil PetrovЗабаненwww23 сен. 201713:38#44
zombihello
На точке проверил, нормально работает:
+ Показать

Страницы: 1 2 3 4 ... 14 15 16 Следующая

/ Форум / Программирование игр / Графика

2001—2017 © GameDev.ru — Разработка игр