Вопрос скорей теоретический, касается скорости обработки геометрии из HLBSP с помощью использования VBO. Меня смущает, что BSP как правило содержит фейсы разного типа (GL_TRIANGLES, GL_QUADS, GL_POLYGON). Т.е. для их рендеринга одним вызовом glDrawArrays или аналогичных функций не обойтись. А с GL_POLYGON и вовсе придётся каждый фейс рендерить отдельно (как например и сделано в программе BSP View).
В связи с этим возникает сложность связать HLBSP с VBO, а точнее, не упадёт ли производительность от того, что фейсы будут рендериться не сразу все (видимые разумеется), а по одному (или небольшими группами до 10 штук)?
Может это и является причиной, что HL начинает тормозить даже с 1000 wpoly?
axer писал: не упадёт ли производительность от того, что фейсы будут рендериться не сразу все (видимые разумеется), а по одному
Разумеется, упадет, причем сильно.
Сразу все и так не получится - на них ведь разные текстуры. Ну разве что если ты используешь texture arrays...
Лучше преобразовать все типы фейсов в GL_TRIANGLES при загрузке, это в общем-то простая процедура.
Цитата:
axer писал: Может это и является причиной, что HL больше начинает тормозить даже с 1000 wpoly?
Маловероятно. Скорее всего, HL тоже делает преобразование всего в треугольники. А тормоза - из-за расчетов на ЦПУ (по крайней мере я уже очень давно не видел видеокарту, на которой халфа тормозит при 1000 вполи).
XaeroX писал:
Сразу все и так не получится - на них ведь разные текстуры. Ну разве что если ты используешь texture arrays...
Можно отсортировать фейсы по одинаковым текстурам и рендерить за относительно небольшое количество вызовов glBindTexture + glDrawArrays. Всё равно это будет быстрее, чем каждый фейс отдельно.
Цитата:
XaeroX писал:
Лучше преобразовать все типы фейсов в GL_TRIANGLES при загрузке, это в общем-то простая процедура.
А вот это уже интересно. Получается, увеличение количества полигонов засчёт разбиения на треугольники менее критично, чем описаная мной проблема?
Цитата:
XaeroX писал:
(по крайней мере я уже очень давно не видел видеокарту, на которой халфа тормозит при 1000 вполи).
Может разные представления про "тормозит". У меня 1000 wpoly - примерно 60 фпс, и мне этого мало Ну это не столь важно в данном случае...
axer писал: Можно отсортировать фейсы по одинаковым текстурам и рендерить за относительно небольшое количество вызовов glBindTexture + glDrawArrays
Да, разумеется, так все и делают
Цитата:
axer писал: Получается, увеличение количества полигонов засчёт разбиения на треугольники менее критично, чем описаная мной проблема?
Никакого увеличения не происходит. Видеокарта ведь оперирует только с треугольниками, поэтому рисуя примитив QUAD или, не дай Бог, POLYGON, ты заставляешь драйвер выполнять триангуляцию (хотя и простую, но все же - в реальном времени).
Цитата:
axer писал: У меня 1000 wpoly - примерно 60 фпс, и мне этого мало
Может быть, когда прикрутишь шейдеры и динамический свет, ты изменишь свое представление о низком фпс... И "мало" будет 9-10
XaeroX писал: Никакого увеличения не происходит. Видеокарта ведь оперирует только с треугольниками, поэтому рисуя примитив QUAD или, не дай Бог, POLYGON, ты заставляешь драйвер выполнять триангуляцию (хотя и простую, но все же - в реальном времени).
Спасибо, не знал. Это вобщем-то снимает проблему. Я боялся, что увеличение количества полигонов негативно скажется на производительности...
Цитата:
XaeroX писал: Может быть, когда прикрутишь шейдеры и динамический свет, ты изменишь свое представление о низком фпс... И "мало" будет 9-10
Может быть. Но я это говорю скорей с точки зрения пользователя, а не разработчика. Да и динамический свет для моей видеокарты - убийство...
Почему ты так думаешь?
Халфа на самом деле юзает многие расширения, например, EXT_paletted_texture, просто не пишет ничего об этом в консоли, в отличие от квак.
axer
EXT_paletted_texture тогда тоже не было, между прочим
Посмотри на дату изменения hw.dll. У меня, например, он датируется 2003 годом.
Добавлено 05-06-2009 в 18:44:
Хотя, EXT_paletted_texture возможно уже и был на каком-нибудь Voodoo3.
Ну, скажем, 3-TMU мультитекстурирования не было, а детальные текстуры работают, по ходу, именно так.
Добавлено 05-06-2009 в 18:45:
Цитата:
Дядя Миша писал: Вообще на большинстве халфовских карт, отрисованных при помощи VBO фпс должен быть порядка 500-600.
Мы, вероятно, должны догадываться, какую видеокарту ты имеешь в виду, когда называешь конкретные цифры?
XaeroX то что сейчас некоторыми товарищами относится к low-end:
Radeon 9800, geForce 6600GT и им подобные, у которых отличие только в поддержке третьей модели шойдеров.
Дядя Миша
Я с тобой не соглашусь. Волатила2 на радеоне Х1600 с вбо, драв_ранже_елементс и прочими оптимизациями на более или менее сложной карте (без бампа и теней, разумеется - чисто уровень хл1) выдаст не более 400 фпс. И это - без студиомоделек (которые я еще не прикрутил )