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

Проблема с усечением Frustum области другим Frustumом (5 стр)

Страницы: 14 5 6 7 8 Следующая »
#60
20:03, 25 янв 2021

m210
В том же Urho3D occlusion culling считается на основе того что попало в конус камеры и помечено как occluder. Можно делать динамические окклюдеры и проезщающая фура может вполне закрывать кусок сцены. В итоге BSP из оригинального уровня у меня никак вообще не использовался.

#61
20:03, 25 янв 2021

Cheb
> Если видеокарта расчитана рисовать дохреналион треугольников в кадре, а у тебя
> проседает на смешном количестве (а ретро-карты - реально смешное количество) -
> значит ты что-то делаешь не так.

В этой карте 639306 вершин, значит 213102 треугольников, не уж то мало? :)

Quake3 бегает нормально, потому что там немного другой подход - там рисование не по полигонам а по текстурам, типа на карте например 10 текстур, берется 1я текстура и рисуются все меши с этой текстурой за один drawcall, и так 10 раз. Мне такой подход не годится, иначе бы давно сделал бы также

Майнкрафт рисуется достаточно быстро, потому что там всего одна текстура - один атлас, а меш объединяется в один drawcall на чанк и опять таки полное 3D.

У меня, где одна комната может находится внутри другой комнаты и при этом не должна быть видна, если не виден портал, который в нее ведет - все эти методы не годятся

GLoom
> Можно делать динамические окклюдеры
До этого я тоже почти дошел, но пока не знаю как построить near плоскость такого оклюдера, иначе будет отсекаться то, что находится перед столбом например

#62
20:26, 25 янв 2021

Вот пример, почему мне не подходят методы из 3D движков и объединение мешей в один большой.

https://youtu.be/bobJEcvKr7w

Но мне осталось немного, чтобы добить алгоритм определения видимости до конца))

#63
20:35, 25 янв 2021

Как вариант: если портал попадает во фруструм, строим новый фруструм по вершинам портала.

т.е. не режем портал, а по числу его граней строим новые плоскости нового фруструма.

Ну будет возможно не очень оптимально... что-то лишнее отрисуется, да и то не всегда...

#64
20:40, 25 янв 2021

>Вот пример, почему мне не подходят методы из 3D движков
Я тоже когда-то был, такой, "Уря, можно сделать сектор внутри сектора! Крута!" - вот только это нелегальная операция и даже в оригинальном Дюке нихрена не работало, всё время глюки лезли, пули бились об воздух и просверкивали спрайты из того второго сектора.
См. http://chebmaster.com/downloads/mod_dn.exe - моя упоротая карта начала 2000х с порталом между параллельными мирами.

P.S. Навскидку: забить на Z и строить видимость строго обходом секторов портальным методом, на посекторной основе. Потом всё условно видимое упаковывать в списки, отсортитрованные по текстурам и сдавать видеокарте. Но сначала сдать ей неотекстуренный меш для раннего Z отсечения.

Хранить списки с предыдущего кадра и повторно использовать, если не изменились.

#65
20:43, 25 янв 2021

m210
В современных движках это можно делать включением/выключением частей уровня при переходе через триггер или телепортацией игрока в визуально идентичное место.

Или ты именно хочешь рендерить какие то старые уровни из build двика?

#66
20:48, 25 янв 2021

GLoom
> Или ты именно хочешь рендерить какие то старые уровни из build двика?
Ну он же порт пишет. Конечно хочет, хех.
https://m210.duke4.net/

#67
20:49, 25 янв 2021

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#68
20:50, 25 янв 2021

entryway
А, ок. Беда тогда, надо урезать порталы в плоскости экрана.

#69
21:00, 25 янв 2021

> значит 213102 треугольников,
Да, для Raspberry Pi 2 это напряжно, еле потянет на 60 фпс.
..для Raspberry Pi 2.
..и офисных гробиков середины нулевых.

Короче, озвученная проблема выглядит для меня, как преждевременная оптимизация. *Сначала* укротить огл и добиться производительности на современной видеокарте, используя примитивные методы отсечения (на по-секторной основе). А уже после этого начинать оптимизацию отсечения видимости для слабых машин с учётом Z. Если понадобится.

#70
21:04, 25 янв 2021

P.S. Более лучший для тебя вариант: определить взаимопроникающие секторы, вырезать их нахрен из группы соединённых секторов в две отдельные группы и присоединить искусственно добавленными порталами.
После этого, используя постулат, что взаимопроникающие секторы *не могут* быть видимы одновременно, спокойно заниматься рендером, аттача тот, который в текущий момент виден.

#71
22:21, 25 янв 2021

Cheb
Надеюсь до этого не дойдет, тем более уже проверено лично, что левая и правая плоскость фрустума автоматически отсекает пересекающиеся сектора, но если не учитывать Z, как раз получаю глюки в дюке (и все прекрасно работает на алгоритме с построением aabb, там Z учитывается и глюков меньше, чем в оригинальном рендере) Попробую в общем строить фрустум по aabb, посмотрим что получится.

#72
17:01, 27 янв 2021

Придумал еще один подход, пробую его реализовать:

Беру стену-портал, строю 4 вершины.
Далее проверяю эти вершины на видимость через текущий портал.
Если плоскости портала режут 1 вершину - игнорирую это и плоскость фрустума портала будет строиться без клипирования...если срезает 2 вершины, то вместо постройки плокости нового фрустума беру секущую плоскость текущего портала (в этом сейчас основная загвоздка)

https://youtu.be/9Ih0dGDPBkE

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

Но опытов я проводил мало и проблема скорее всего большая))

Надо теперь написать код расширения портала, а то сектора-квадратики видятся дырами

Но в целом видно то, чего я добиваюсь

#73
17:09, 5 фев 2021

Всем привет! В общем плюнул пока-что на построение точных фрустумов и реализовал идею, предложенную 0xc0de, собственно спасибо ему за наводку!

Получается конечно то, от чего я хотел уйти, но в итоге вернулся к AABB, с чего и начинал (только раньше я проецировал все стены и проверял пересечение AABB каждой стены, а сейчас от AABB строю фрустум и пересечение проверял только с порталами)

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

Вот картинка во время реализации:

+ Показать

Типа зеленый квадрат AABB от портала (5 стен, которые легко объединить в один квадрат) и справа построенный фрустум через такой AABB.

В таком ракурсе AABB получается почти ничего лишнего не захватывает, а вот если развернуть камеру так, чтобы эти стены напоминали вытянутый параллелограмм, тогда AABB получается на пол экрана, что приводит к определению лишних видимых стен - в этом можно убедиться по видео-ролику ниже на карте Египта из Duke World Tour, там из-за низкой точности этих фрустумов рисуется половина карты.


Ну и вот само видео с тем, что получается:
https://youtu.be/_aHjd7cH12w

Кстати, чтобы из AABB построить фрустум, я делаю обратное проецирование координат в мировые...отсюда и скорость работы в 2 раза меньше, ведь по-сути выполнить проецирование уже нужно дважды на каждый портал. Если есть способы, как построить фрустум без умножения на обратную матрицу, дайте знать :)

#74
20:40, 5 фев 2021

m210
> Пишу новый рендер для Build Engine, результаты такие
Ого, как!
Но там, насколько я понимаю, порталы - плоские сектора, а не фрустумы
Вычислять пересечение секторов же просто

Есть идея алгоритма растеризации 2.5D с невыпуклыми секторами, но не дошли руки реализовать

Страницы: 14 5 6 7 8 Следующая »
ПрограммированиеФорумГрафика

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