Crystallize писал: Напомни пожалуйста что такое сторона, уложенная на ноду, и чем она отличается от стороны не уложенной на ноду.
Это очень просто. Видимый полигон, который уже обрезан соседними нодами и принадлежит только этой.
Цитата:
Crystallize писал: Нода, как я знаю, обычно появляется при распространении во все стороны плоскости браша
Необязательно браша. Любой плоскости. Плоскость бесконечна. У полигона точно так же можно найти плоскость по трём точкам.
Цитата:
Crystallize писал: Но тогда как можно приводить пример с брашем висящим посреди комнаты?
Шесть нод, к каждой будет прилинкована одна из шести поверхностей этого браша. А внутри будет солидный лист. Ну это в идеальном случае, если больше не будет секущих плоскостей. Для карты коробки будет тоже шесть нод и семь лифов. Шесть из них будут принадлежать потолку, стенам и полу, седьмой - пустой и обозначит внутренее пространство коробки.
Надеюсь теперь понятно.
Ну а я тем временем разобрался как правильно задавать контентсы. Это на самом-то деле очень просто. Для каждого полигона, который мы используем для построения дерева, создаётся его зеркальный двойник, который смотрит в обратную сторону. CSG это же самое и делает. Ведь полно ситуаций, когда для CSG нет работы, но он должен дать какой-то выхлоп. Так и тут. А вся магия заключается в задании контентсов.
Основному полигону мы ставим CONTENTS_EMPTY. А зеркальному - уже соответственно CONTENTS_SKY или CONTENTS_SOLID. И из этого набора строим наше дерево.
Добавлено 27-10-2024 в 18:35:
ЗЫ. В халфе и кваке также применяется оптимизация под названием common solid leaf - тот самый нулевой лист, который не существует во время построения дерева и появляется только во время записи в bsp-файл.
В чём тут суть. Солидный лиф очевидно не может содержать никаких полигонов - он же заполнен. То есть он нам и не нужен особо. Поэтому мы можем во первых уничтожить те ветки дерева, у которых дочерние ноды ссылаются на solid leaf, ну потому что дальнейшее продвижение по дереву в этом направлении нам не даст ровным счётом ничего - сколько ни беги, там дальше везде солидный лиф. Таким образом мы можем здорово подсократить кол-во нод. А вторая оптимизация - оставшийся единичный solid leaf нам хранить вовсе необязательно, т.к. нам пофиг на его размеры уже. Поэтому мы без проблем можем его заменить на нулевой лиф, который создадим заранее и выкинуть таким образом ещё и кучу лифов. Из-за этих двух оптимизаций кол-во нодов сильно отличается от кол-ва лифов, но на самом деле изначальное дерево сбалансировано, поэтому кол-во нодов всегда равно кол-ву лифов + 1. Хотя это в сущности бесполезная информация для читаталей. Ну из разряда "знаете ли вы что...".
Добавлено 27-10-2024 в 18:40:
ЗЗЫ, И ещё раз, на примере карты-коробки с небом, после всех оптимизаций.
Такая карта содержит шесть нодов и три лифа.
К каждому из шести нодов прилинкована одна из сторон карты-коробки.
Один лиф это common solid leaf и каждая из пяти нод заканчивается им.
Шестая нода заканчивается аналогичным лифом, но уже с CONTENTS_SKY.
Ну и третий лиф с CONTENTS_EMPTY содержит ссылки на все шесть полигонов нашей карты коробки.
Дядя Миша писал: Необязательно браша. Любой плоскости. Плоскость бесконечна. У полигона точно так же можно найти плоскость по трём точкам.
Я так и не понял, эти плоскости только для колизии используются?
А в чём приемущество контентсов перед группой брашей типа того же фанк_детаила?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: А в чём приемущество контентсов перед группой брашей типа того же фанк_детаила?
Не очень понял вопроса. Ну если трассировка у тебя уткнулась в лиф и ты получил из него готовый контентс, солид или скай - вот тебе готовый результат трассировки. А если там браши, их надо ещё каждый по отдельности проверять.
Добавлено 28-10-2024 в 10:02:
ДА ЧТОЖ ЭТО ТАКОЕ!!!!
Пока я ему отвечаю, так сказать, на один пост - он его по тихому меняет и там уже совершенно другой пост!!!
Цитата:
FiEctro писал: Я так и не понял, эти плоскости только для колизии используются?
Это ограничивающие плоскости дерева. А как использовать дерево - это твое дело.
Дядя Миша писал: Пока я ему отвечаю, так сказать, на один пост - он его по тихому меняет и там уже совершенно другой пост!!!
Я понял что глупость написал. Поэтому исправил. Соррян.
У меня такое часто бывает, напишу одно, потом в голову ещё другие идеи приходят.
Цитата:
Дядя Миша писал: Это ограничивающие плоскости дерева. А как использовать дерево - это твое дело.
А как у дерева могут быть плоскости? Это же просто алгоритм поиска. Или ты имеешь ввиду что сами плоскости отсортированы?
Цитата:
Дядя Миша писал: Не очень понял вопроса. Ну если трассировка у тебя уткнулась в лиф и ты получил из него готовый контентс, солид или скай - вот тебе готовый результат трассировки. А если там браши, их надо ещё каждый по отдельности проверять.
Получается контентсы это просто свойство материала которое можно и на обычных моделях (не бсп) применять?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: А как у дерева могут быть плоскости?
секущие плоскости. Как они могут быть у дерева?
Цитата:
FiEctro писал: Это же просто алгоритм поиска
Алгоритм поиска - это бинарный поиск, например. Вот ты слова отсортировал в алфавитном порядке и теперь можешь выполнять бинарный поиск в этом массиве со словами. Вот это алгоритм поиска. Ты же никогда не задумывался почему strcmp возвращает не просто 0 и 1, а -1, 0, 1? Вот как раз для реализации бинарного поиска.
Цитата:
FiEctro писал: Получается контентсы это просто свойство материала которое можно и на обычных моделях (не бсп) применять?
Это просто какое-то число, которое мы договорились считать каким-то типом материала. Солидным или текучим или вообще небом.
Дядя Миша писал: секущие плоскости. Как они могут быть у дерева?
Я вот не могу понять смысла этой фразы:
Цитата:
Дядя Миша писал: ограничивающие плоскости дерева
Цитата:
Дядя Миша писал: Алгоритм поиска - это бинарный поиск, например. Вот ты слова отсортировал в алфавитном порядке и теперь можешь выполнять бинарный поиск в этом массиве со словами. Вот это алгоритм поиска. Ты же никогда не задумывался почему strcmp возвращает не просто 0 и 1, а -1, 0, 1? Вот как раз для реализации бинарного поиска.
Ну да, а откуда плоскости взялись?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro когда пространство делится надвое - для этого используется плоскость. Которая режет полигоны.
Добавлено 28-10-2024 в 10:38:
И вообще я тебе так сказать удивляюсь. Ты же сам нам ролик на юутбе притаскивал, где наглядно показано как дерево режет геометрию.
А теперь спрашиваешь откуда там взялись плоскости.
FiEctro писал: Я так и не понял, эти плоскости только для колизии используются?
Муж и жена разводятся и делят квартиру. Они нашли у себя в квартире примерно посередине большую стену и у неё одну большую ровную сторону на которой нет картин, лампочек, ничего. И они мысленно продолжили эту сторону стены во всех направлениях и чтобы не забыть, мелком расчертили мысленное пересечение этой плоскости со всем подряд вплоть до самых дальних краёв квартиры.
Получилась воображаемая корневая секущая плоскость (нода) всей квартиры. Про большую плоскую стену от которой расчертили ноду, говорят что она лежит на ноде (в кваке и халве). Нода поделила всю квартиру на лист мужа и лист жены. Вместе нода и её листы образуют ДЕРЕВО. Обязательно прилагается граф, на котором показано, что в ДЕРЕВЕ листы мужа и жены непосредственно прилинкованы к корневой ноде:
Crystallize ты сейчас описал процесс балансировки дерева
Добавлено 28-10-2024 в 12:02:
А само дерево (для условной комнаты) строится иначе.
Есть устойчивое заблуждение, что построение BSP начинается с деления пространства при помощи вновь созданной плоскости. Это неверно.
Т.е. подобное деление разумеется тоже возможно и используется для его балансировки, но совершенно необязательно.
Вы должны понять главное: если мы начнём делить пространство при помощи вновь созданных плоскостей, то у нас получится избыточное дерево. В котором дольше блуждать, которое занимает больше места, но при этом не даёт никаких преимуществ. Единственный смысл в таком делении - это балансировка, чтобы дерево не было перекошенным на одну из сторон.
Поэтому в норме дерево всегда строится из тех плоскостей, которые уже принадлежат реальным полигонам, из которых состоит геометрия.
Итак, на примере комнаты. Каждая из стен комнаты - это нода, и стена - это плоскость ноды. За стеной - солидный лиф. Перед стеной - пустой лиф, он обычно получается общим для всех шести нод.
Если же мы делаем BSP для кубика, то наоборот - там один общий солидный лифт, которым описано содержимое кубика и шесть пустых.
Добавлено 28-10-2024 в 12:08:
Надо бы мне побольше инструментов для визуализации дерева сделать
Нулевой лиф, он же всегда конкавный получается? Если пространственно внутри него обычные лифы? Или мы не можем здесь оценивать его по этой характеристике?
Цитата:
Дядя Миша писал: Перед стеной - пустой лиф, он обычно получается общим для всех шести нод.
А, вот этого я не знал. Значит у лифа бывает несколько нод. А наоборот бывает, когда у ноды несколько лифов?
Цитата:
Дядя Миша писал: Если же мы делаем BSP для кубика, то наоборот - там один общий солидный лифт, которым описано содержимое кубика и шесть пустых.
Я всё время воображал их либо проецируемыми из внутреннего кубика наружу, оставляя пустое место в углах, либо проецируемыми из внешних стенок внутрь.
Но видимо они просто все разного размера и формы, раз вшестером заполняют всё промежуточное пространство.
Crystallize писал: Нулевой лиф, он же всегда конкавный получается?
Это условность. Если лиф солидный, то мы дальше не проверяем ничего. Поэтому он можно представить что абстрактно он имеет форму уровня, который вычли из гигантского куба
Цитата:
Crystallize писал: А, вот этого я не знал. Значит у лифа бывает несколько нод
Это я погнал. Лифы не шарятся между нодами. А вот полигоны в разных лифах вполне могут совпадать. Это справедливо для любого BSP-дерева.
Цитата:
Crystallize писал: А наоборот бывает, когда у ноды несколько лифов?
Бывает конечно. Когда обе дочерних ноды ведут на лифы.
Добавлено 30-10-2024 в 22:39:
ЗЫ. объем у нод и лифов нужен только для отсечения их фрустумом, т.е. для рассчёта видимости. А больше он ни для чего не нужен.
Спросил нейронку какие методы отрисовки теней в 3д она знает:
Цитата:
1. Shadow Volumes
Описание: Shadow Volumes — это метод, который создает объемы вокруг объектов, отбрасывающих тени. Эти объемы определяют область, которая находится в тени.
Принцип работы: Алгоритм проходит по всем пикселям экрана и определяет, находятся ли они внутри тени, проверяя, пересекаются ли лучи света с объемами тени.
Преимущества: Высокая точность, особенно для динамических источников света.
Недостатки: Высокая вычислительная сложность, особенно для сложных сцен.
2. Ray Tracing
Описание: Ray Tracing — это метод, который моделирует путь лучей света от источника света до камеры, учитывая пересечения с объектами сцены.
Принцип работы: Для каждого пикселя экрана вычисляется трассировка лучей, и если луч пересекает объект, пиксель находится в тени.
Преимущества: Высокая точность и возможность создания реалистичных теней, отражений и преломлений.
Недостатки: Очень высокие требования к вычислительным ресурсам.
3. VSM (Variance Shadow Mapping)
Описание: VSM — это улучшенная версия Shadow Mapping, которая использует статистические методы для уменьшения артефактов, таких как "зазубрины" (aliasing).
Принцип работы: Вместо одного значения глубины в Shadow Map, VSM хранит среднее значение и дисперсию глубины. Это позволяет использовать неравенство Чебышева для оценки вероятности того, что пиксель находится в тени.
Преимущества: Уменьшение артефактов и более плавные тени.
Недостатки: Может привести к "затенению" (light bleeding) в некоторых случаях.
4. ESM (Exponential Shadow Mapping)
Описание: ESM — это еще одна улучшенная версия Shadow Mapping, которая использует экспоненциальную функцию для уменьшения артефактов.
Принцип работы: Глубина в Shadow Map хранится как экспонента от значения глубины. При проверке тени используется экспоненциальная функция для сравнения.
Преимущества: Уменьшение артефактов и более плавные тени.
Недостатки: Требуется высокая точность хранения данных, иногда может привести к "затенению".
5. PCF (Percentage Closer Filtering)
Описание: PCF — это метод, который используется в сочетании с Shadow Mapping для создания более мягких теней.
Принцип работы: При проверке тени для каждого пикселя учитываются несколько значений глубины из Shadow Map, что позволяет создать размытие тени.
Преимущества: Создание мягких теней с меньшим количеством артефактов.
Недостатки: Требует дополнительных вычислений, может быть ресурсоемким.
6. CSM (Cascaded Shadow Maps)
Описание: CSM — это метод, который использует несколько Shadow Maps для разных уровней детализации в зависимости от расстояния до камеры.
Принцип работы: Создаются несколько Shadow Maps, каждая из которых охватывает разные области сцены. Ближние области имеют более высокую детализацию, а дальние — более низкую.
Преимущества: Улучшенная детализация теней в ближней зоне, сохранение производительности в дальней зоне.
Недостатки: Сложность настройки и потенциальные артефакты на границах каскадов.
7. SSAO (Screen Space Ambient Occlusion)
Описание: SSAO — это метод, который добавляет эффект затенения в областях, где объекты близко расположены друг к другу, даже если они не отбрасывают тени.
Принцип работы: Вычисляется затенение в экранном пространстве, основываясь на расстоянии между пикселями и их нормалями.
Преимущества: Добавляет реалистичность сцены, не требует дополнительных Shadow Maps.
Недостатки: Может создавать артефакты, такие как "шум" или неправильное затенение.
8. LPV (Light Propagation Volumes)
Описание: LPV — это метод глобального освещения, который также может использоваться для создания теней.
Принцип работы: Свет распространяется в объемных сетках, и тени создаются на основе этого распространения.
Преимущества: Может создавать мягкие тени и учитывать глобальное освещение.
Недостатки: Сложность реализации и потенциальные проблемы с производительностью.
9. VPL (Virtual Point Lights)
Описание: VPL — это метод, который использует множество виртуальных точечных источников света для создания теней и освещения.
Принцип работы: Создаются виртуальные источники света, которые отбрасывают тени и освещают сцену.
Преимущества: Может создавать реалистичные тени и освещение.
Недостатки: Высокая вычислительная сложность и потенциальные проблемы с производительностью.
10. Deep Shadow Maps
Описание: Deep Shadow Maps — это метод, который использует "глубокие" текстуры для хранения нескольких значений глубины в одном пикселе.
Принцип работы: Вместо одного значения глубины, Deep Shadow Maps хранят несколько значений, что позволяет более точно моделировать прозрачность и полупрозрачность.
Преимущества: Улучшенная точность для прозрачных и полупрозрачных объектов.
Недостатки: Высокие требования к памяти и вычислительным ресурсам.
Эти методы могут использоваться как по отдельности, так и в сочетании друг с другом для достижения наилучших результатов в зависимости от требований к качеству и производительности.
По оптимизации рейтрейсинга:
Цитата:
1. Уменьшение разрешения трассировки
Метод: Трассировка лучей может быть выполнена на пониженном разрешении, а затем результат может быть масштабирован до исходного разрешения.
Преимущества: Уменьшает количество лучей, которые нужно трассировать, что значительно снижает вычислительную нагрузку.
Недостатки: Может привести к потере деталей и появлению артефактов на высоких частотах.
2. Использование ограниченного количества шагов
Метод: Ограничение количества шагов, которые луч может сделать при трассировке, чтобы избежать бесконечного цикла.
Преимущества: Ускоряет процесс трассировки, так как каждый шаг требует вычислений.
Недостатки: Может привести к неточному результату, если луч не достигнет цели за ограниченное количество шагов.
3. Использование упрощенных геометрических примитивов
Метод: Замена сложной геометрии на более простые примитивы (например, сферы или плоскости) для трассировки.
Преимущества: Упрощает вычисления пересечения луча с объектом.
Недостатки: Может привести к потере точности и появлению артефактов.
4. Использование текстурных буферов
Метод: Хранение предварительно вычисленных данных (например, глубины или нормалей) в текстурных буферах для ускорения трассировки.
Преимущества: Позволяет быстро получать информацию о сцене без дополнительных вычислений.
Недостатки: Требует дополнительной памяти для хранения буферов.
5. Использование метода "Ray Marching"
Метод: Вместо классической трассировки лучей, используется метод "Ray Marching", где луч продвигается на фиксированное расстояние на каждом шаге.
Преимущества: Может быть более эффективным для сложных сцен, где точное пересечение вычислить сложно.
Недостатки: Может привести к потере точности и появлению артефактов.
6. Использование метода "Screen-Space Ambient Occlusion" (SSAO)
Метод: Адаптация метода SSAO для выполнения частичного рейтрейсинга в экранном пространстве.
Преимущества: Может быть использован для быстрого вычисления окклюзии и других эффектов.
Недостатки: Может не давать точных результатов для всех типов сцен.
7. Использование метода "Screen-Space Reflections" (SSR)
Метод: Адаптация метода SSR для выполнения рефлексий в экранном пространстве.
Преимущества: Позволяет быстро получать рефлексии на поверхностях.
Недостатки: Может привести к артефактам на границах объектов и в сложных сценах.
8. Использование метода "Screen-Space Shadows" (SSS)
Метод: Адаптация метода SSS для вычисления теней в экранном пространстве.
Преимущества: Позволяет быстро получать тени без необходимости трассировки лучей в 3D-пространстве.
Недостатки: Может привести к артефактам и неточностям в сложных сценах.
9. Использование метода "Screen-Space Ray Tracing with Hierarchical Z-Buffer"
Метод: Использование иерархического Z-буфера для быстрого отбрасывания невидимых областей при трассировке лучей.
Преимущества: Значительно ускоряет процесс трассировки, так как позволяет быстро отбрасывать невидимые области.
Недостатки: Требует дополнительных вычислений для построения иерархического Z-буфера.
10. Использование метода "Screen-Space Ray Tracing with Temporal Accumulation"
Метод: Аккумуляция результатов трассировки лучей между кадрами для улучшения качества и снижения вычислительной нагрузки.
Преимущества: Позволяет получить более качественные результаты с меньшими вычислительными затратами.
Недостатки: Может привести к артефактам при движении объектов или камеры.
11. Использование метода "Screen-Space Ray Tracing with Denoising"
Метод: Применение методов денойзинга (например, TAA, FXAA) для улучшения качества результатов трассировки.
Преимущества: Позволяет улучшить качество изображения и снизить артефакты.
Недостатки: Требует дополнительных вычислений для применения денойзинга.
12. Использование метода "Screen-Space Ray Tracing with Early Termination"
Метод: Прекращение трассировки луча, если он выходит за пределы экранного пространства или если результат уже достаточно хорош.
Преимущества: Ускоряет процесс трассировки, так как не тратит время на ненужные вычисления.
Недостатки: Может привести к неполному результату в некоторых случаях.
13. Использование метода "Screen-Space Ray Tracing with Adaptive Sampling"
Метод: Адаптивное изменение количества лучей в зависимости от сложности сцены и требуемого качества.
Преимущества: Позволяет сбалансировать производительность и качество.
Недостатки: Требует дополнительных вычислений для определения необходимого количества лучей.
14. Использование метода "Screen-Space Ray Tracing with Depth Peeling"
Метод: Использование метода Depth Peeling для разделения слоев глубины и трассировки лучей в каждом слое отдельно.
Преимущества: Позволяет более точно учитывать глубину и сложность сцены.
Недостатки: Требует дополнительных вычислений для разделения слоев глубины.
15. Использование метода "Screen-Space Ray Tracing with GPU Acceleration"
Метод: Использование GPU для ускорения вычислений трассировки лучей.
Преимущества: Значительно ускоряет процесс трассировки, так как GPU оптимизирован для параллельных вычислений.
Недостатки: Требует хорошего знания программирования шейдеров и оптимизации для GPU.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Нейронка в кучу свалила техники и методы фильтрации. Ну ей простительно.
ESM и VSM часто дают лайтблидинг, а так да - очень мягкие тени получаются и совсем не алиасят. Но с лайтблидингом не получается бороться.
PCF относительно дешёвый, но там постоянно надо мутить с depthBias и depthOffset. Причём их нельзя просто взять как константы. Их надо динамически перерасчитывать для каждого источника, причём формула перерасчёта ещё и зависит от типа источника. Для прожекторов одна, для всенаправленных другая, для каскадных третья. Но если всё это победить, получится результат как в Tesseract. Это примерно предел того, на что способны тени с PCF.
Каскадные тени - это как раз-таки костыль, частично устраняющий главную проблему теневых карт - неравномерное заполнение и как следствие экспоненциально падающую точность теней вдали (чего кстати лишён рейтрейсер). На каждый каскад приходится своя теневая карта, отчего равномерность заполнения сильно увеличивается. Но их ещё надо корректно склеивать между собой, да и в шейдере все эти каскады сглаживать как бы не бесплатно.
SSAO к слову можно реализовать через тот же рейтрейсинг. В том же самом шейдере.
LPV не имеет к теням никакого отношения.
VPL - это часть технологии LPV, но не только. Они много где используются.
Про Deep Shadow Maps ранее не слышал. Возможно это для теней от полупрозрачных объектов.