|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.01.2012, 13:37 | #51 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Глянь вот эту статью
http://www.gamedev.ru/code/articles/..._object_system И для конкретных манипуляций объектами стоит подумать в сторону использования скриптов. Т.е. разрабатывать двиг отдельно, а приложение скриптами. |
16.01.2012, 19:05 | #52 |
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
Kostia похоже, что у меня первый вариант получился, т.е. - God game object.
Код:
Ну да и ладно, меня это пока не особо заботит, главное то что я таки написал простецкий граф сцены) Ну а дальше буду совершенствовать его, рефакторить). В главном цикле Отсекаю по фрустуму в список для рендеринга попадают отбьекты которые в пирамиде видимости камеры. Далее этот список сортирую, для solid – front- to – back, а для прочих c альфой – back – to - front И вывожу в цикле. Код:
Сейчас думаю, как бы мне батчи собирать на прорисовку? А не в лоб в цикле рисовать, как выше показано. Последний раз редактировалось Warn; 17.01.2012 в 10:15. |
17.01.2012, 07:30 | #53 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
По прежнему точно также отсылай на прорисовку объекты, у которох желательно чтобы были данных о их сложности(кол-во треугольников например) и если сложность сцены переваливает определенный порог, то делать glFlush, сбрасывать счетчик сложности и продолжать цикл дальше.(Хотя думаю не лучший вариант)
Еще как вариант построить программу следующим образом. Сначала делать вывод графики, потом glFlush(); и пока видеокарта будет строить кадр можно заняться расчетом физики, выполнением скриптов и т.д. |
17.01.2012, 10:40 | #54 | ||
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
Kostia
Цитата:
У меня пока в сцене около ~60 коробок. нагрузка не такая большая. И потом читал где-то что отправка буфера команд на прорисовку в конце кадра не имеет большого смысла. Т.е. Код:
Но про glFlush в середине прорисовки ничего не видел, может это и действенно. Kostia Цитата:
Сделал небольшую оптимизацию по установке шейдеров и геометрии и это существенно подняло скорость прорисовки, поскольку минимизировало переключение шейдеров, геометрии и текстур если в списке подряд идут одинаковые объекты. Код:
Тут у меня кроме того возникает дилемма сортировать ли объекты по удаленности от камеры или же первоочередное действие - это сортировка по геометрии и материалам шейдерам в пачки для рендеринга - батчи? В первом случае мы так сказать экономим на филрейте получаем меньшую нагрузку на пиксельный конвеер, поскольку рисуем ближайшую геометрию, а все последующие если они не проходят теста Z буфера т.е. находятся за уже отрисованной геометрией отбрасываются и не проходят вычислений в тяжелых пиксельных шейдерах. Во втором случае мы получаем список практически отсортированный для быстрого вывода пачками – батчами, что несомненный плюс. Однако геометрия из таких батчей может находиться на разном удалении от камеры, - лишние вычисления в пиксельных шейдерах если составляющие батча не отсортирован в пределах своей группы. Суммируя выше описанное. Можно предположить, что нужно сортировать геометрию по пачкам – батчам для быстрого рендеринга, сортировать как порядок прорисовки самих групп батчей, так и внутренний порядок прорисовки каждого из батчей. Так ли это? Последний раз редактировалось Warn; 17.01.2012 в 13:27. |
||
17.01.2012, 15:48 | #55 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Тут нужны тесты. Хотя смею предположить, что сортировка по удаленности в приоритет, а затем текстуры и шейдеры. А про батчи забыть, от них толк появится только при отрисовки данных пересылаемых между оперативкой и видеокартой. Т.е. пока мы формируем новый массив вершин, другой успевает попасть в видеокарту и нарисоваться. А если данные геометрии уже лежат на видеокарте(VBO, VAO, текстуры...) то толку не будет.
Поэтому лучше делать как я писал выше, сначала сформировать очередь для рисования, выполнить glFlush() после чего делать дургие расчеты, пока строится кадр в видеокарте и в конце swap. Так асинхронно будут работать и процессор и видеокарта. Последний раз редактировалось Kostia; 17.01.2012 в 15:55. |
17.01.2012, 16:45 | #56 | |||
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
Цитата:
По крайней мере, в классическом Forward Render рендере(ни DS) может оказаться полезным, экономим на филрейте и тяжелых шейдерах, отсекая ненужные расчеты. Цитата:
А, вызывать 100500 раз, все ту же Код:
Цитата:
1. Очистка экрана 2. Рисуем сцену 3. glFlush () //тут мы озадачиваем видеокарту и она начинает рисовать // тем временем мы… 4. Обновляем логику приложения. 5. И выполняем другие действия с нагрузкой только на ЦПУ. 6. SwapBuffers() |
|||
18.01.2012, 17:23 | #57 | ||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Цитата:
Правда статичные объекта, как ваш островок например, можно засунуть в список отображения. В принципе оптимизация есть игры есть процесс решения многокритериальной задачи. И тут есть 2 основных критерия, это нижний и верхний FPS. Как я понял вы гонитесь за верхним, что есть не правильно, важно стабилизация минимально FSP до тех пор, пока максимальный выше какого либо заданного предела. Почему это важно, понять просто, минимальные FPS это есть лаги(тормоза), даже если у вас в сцене в основном 1000 FSP, но время от времени он падает до 10 а потом опять 1000, в помойку такую игру. Приятнее играть в стабильную игру, пусть и с не очень большим FPS ~30-50 вполне достаточно. А все этих ухищрения с объединениями в батчи как раз могут время от времени просаживать минимальный фпс. Цитата:
|
||
18.01.2012, 21:52 | #58 | ||
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
Kostia
Цитата:
Цитата:
Так или иначе ФПСом я пока доволен как нижним так и вышним, сцена то пустая практически) Сейчас взялся за загрузку DDS Текстур. Поскольку TGA несмотря на свою простоту довольно таки толстые. А DDS дают компрессию в размере от оригинала RGB в 4-е раза (DXT5) и (DXT1) в 8-мь раз. С небольшим шумом в изображении, которым можно пренебречь. Ну и поскольку они меньше нагрузка при выборке пикселей на видеопамять меньше = больше fps)) И пока все плохо. Вроде все грузится, но вижу черный цвет на объектах, бида( Загрузку DDS Текстур разбираю по этим докам и примерам. |
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа для проверки (правильности кода). Контекст. | AmbaQ | Софт | 4 | 14.11.2010 16:50 |
Контекст устройства. Основы работы с изображением | Claster | Win Api | 1 | 03.04.2010 00:26 |
BitBlt на контекст DC и его альтернатива | notHaker | Мультимедиа в Delphi | 7 | 03.12.2009 01:04 |
Контекст воспроизведения OpenGL | Gerzs | Мультимедиа в Delphi | 5 | 23.11.2009 11:33 |
Контекст воспроизведения OpenGL | Sergeevich | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 6 | 08.11.2009 21:50 |