Халфовский CSG, как мы помним разбивал не просто проникающие, но соприкасающиеся брашы. Это было нужно для того дерева. Для кутришного, понятное дело, ни к чему. CSG для соприкасающихся брашей я оставил только для водички, естественно. Вообще там какой-то баг похоже, или невнимательность моя, в плане фильтрации контентсов. Ведь после работы брашевого CSG этот не должен продуцировать ничего лишнего.
Ну я еще поставлю тесты на специальных картах.
Кстати говоря, может у Тхамбса есть такие примеры фейла CSG, я жы знаю как он его любит.
Добавлено 15-01-2020 в 17:33:
Так, ну Сипульчер и Грендель с этим CSG собираются правильно, но там непонятно. В халфе из-за ограничений формата китаец ввёл иные правила, Eric W. в своих TyrUtils не смог с одной стороны добиться такой же эффективности, как китаец, но и правила у него слегка отличались. К примеру в VHLT запрещена вода детайлами. В TyrUtils - можно.
У китайца было понятие детайллевелов - т.е. более низкий левел жрёт те что левелом повыше. В TyrUtils вместо левелов было просто несколько энтить, func_detail, func_detail_wall и func_detail_illusionary, которые условно соответствуют левелам 1, 2, 3. То есть получается что detail_wall кромсает таких же и illusionary, но не трогает просто func_detail. В ку2, если не путаю, там наоборот было - структуральные брашы вообще не затрагивали детальные, а детальные соответственно структуральные, т.е. было как две непересекающихся группы. Поправьте меня, если я неправ.
Я могу просто завести приоритет детального уровня, если это востребовано.
Я тут еще подумал, что можно вывести глобальную настройку для регулировки степени агрессивности CSG.
Нулевой уровень - bypass
Первый уровень - взаимодействие только воды с водой и воды с солидами
Второй уровень - солиды с солидами, солиды с водой, вода с водой, но если брашы просто касаются друг друга (не пересекаются), то вычитания не происходит.
Третий уровень - поведение как в халфе, максимально агрессивное.
Ну и CSGBrush можно будет по желанию включать и выключать отдельно.
Надо еще приделать мержинг фейсов. Слава богу эти фейсы не влияют на построение дерева, а значит их можно объединять и разъединять как угодно - дырок не будет.
Добавлено 16-01-2020 в 19:32:
Ну товарищи, теперь наступила полная красота!
Есть два регулятора - агрессивность CSG и агрессивность объединителя сурфейсов. Так что теперь можно настроить любой уровень разбиения-склеивания, и что особенно приятно - это не будет влиять на качество дерева. Хотя я посмотрю, может и такую опцыю тоже введу.
Ну кстати говоря CSG очень сильно помогает увеличить фпс. Практически вдвое ему это удаётся. Но только в паре с мержилкой сурфейсов, разумеется.
Добавлено 17-01-2020 в 15:23:
На неотвиженном сипульчере на дохлой GT640 средний фпс в раёне 50.
Очуметь можно! На халфовском формате о такой оптимизации можно было только мечтать.
Добавлено 17-01-2020 в 15:25:
Для понимания пикантности ситуации - сипульчер, собранный ericw-тулзами, на QSpasm на этой же GT640 примерно и выдавал аналогичные 40-50 фпс.
С визом, разумеется И естественно там геометрия была в статичном VBO.
Добавлено 17-01-2020 в 16:51:
Становится всё интереснее. Пользуясь особенностями формата, я просто пропускал результаты работы CSG и merge на генерацию видимых фейсов, а дерево строил из оригинальных брашей. Но конечно жы мне, как и вам наверняка пришёл в голову простой вопрос, а что если построить оптимизированное дерево из того, что нам нарезал CSG? Построил. Размер дерева сократился на четверть! И это для кутри где дерево и так не великое. Я предполагаю, что карта скомпиленная с такими оптимизациями, даже в ванильной кутри будет рисоваться гораздо быстрее.
Наконец-то дошли руки и до встраиваемых в карту моделей.
Здесь я хочу уделить особое внимание их колоизации. В параное, как вы помните, я просто генерил микробраш из каждого треугольника в целом это работало. Примерно той же чертовщиной занимается и q3map2. Но это дополнительная нагрузка на код коллизии. Я планирую после генерации этих брашей объединять их вместе, до тех пор, пока они остаются конвексными. Так же вероятно пропущу через симплифкатор геометрии, но это попозже.