|
06.04.2012, 03:10
|
#1
|
Разработчик
Регистрация: 09.08.2006
Адрес: Украина
Сообщений: 431
Написано 65 полезных сообщений (для 53 пользователей)
|
Render World и Графический процессор видеокарты
Как пишут в всяких статейках графический процессор держит на себе всю графическую обработку включая построение изображения.
Пруф1:
графический процессор — занимается расчётами выводимого изображения, освобождая от этой обязанности центральный процессор, производит расчёты для обработки команд трёхмерной графики.
|
Пруф2:
Графический процессор (англ. graphics processing unit, GPU) — отдельное устройство персонального компьютера или игровой приставки, выполняющее графический рендеринг. Современные графические процессоры очень эффективно обрабатывают и отображают компьютерную графику
|
Вот теперь припустим у нас в Blitz3D код главного цикла:
Repeat
... ;здесь код жрущий ресурсы центрального процессора
... ;всякая математика, вычисления и оптимизация
... ;включая команды HideEntity, EntityTexture и т.п.
;Перед командой RenderWorld центральный процессор завершает все свои
;дела и передает работу для графического процессора:
RenderWorld() ;И чо, пока графический проц делает изображение ЦП стоит?
;Дальше ЦП опять вступает в работу после простоя и рисует всякие
;изображения как обычно в блице перед Flip`ом бывает.
Flip
Forever
End
Это все действительно так? Или я чтото недопонял...
И вообще, как на блиц влияет работа графического процессора? Работает ли он при операторе RenderWorld?
|
(Offline)
|
|
06.04.2012, 03:39
|
#2
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
RenderWorld ещё и отсеивает что рисовать с какой камеры, а что не рисовать, ну и общается с GAPI - в общем, цпу работы у него достаточно.
Работает ли он при операторе RenderWorld?
|
ну, естественно, рисует то всё видюшка.
она растеризует треугольники, интерполирует текстуры, обрабатывает каждый пиксель на экране. чего там в блице ещё есть? бленды текстур - тоже на гпу.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.04.2012, 04:30
|
#3
|
Разработчик
Регистрация: 09.08.2006
Адрес: Украина
Сообщений: 431
Написано 65 полезных сообщений (для 53 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
Сообщение от Mr_F_
цпу работы у него достаточно.
|
Ты имеешь в виду, что во время исполнения RenderWorld занят графический процессор всякими прорисовками и в это же время есть дела и для центрального процессора?
п.с. Вопрос не по теме:
HideEntity - освобождает память видеокарты, а
FreeEntity - освобождает память и видеокарты и ОЗУ?
|
(Offline)
|
|
06.04.2012, 07:16
|
#4
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
Сообщение от Halk-DS
Ты имеешь в виду, что во время исполнения RenderWorld занят графический процессор всякими прорисовками и в это же время есть дела и для центрального процессора?
п.с. Вопрос не по теме:
HideEntity - освобождает память видеокарты, а
FreeEntity - освобождает память и видеокарты и ОЗУ?
|
Я считаю что всё идет по порядку
И когда ты делаешь renderWorld у тебя у тебя вся система занимается именно обработкой графики, но весь цикл в 17 мс - назвать "Простоем" я не могу )
А на счет hideEntity и freeEntity я думаю ты прав!
Сначала я подумал а зачем из видеопамяти удалять hideEntity? а потом подумал а нафига его там держать? )) Так что думаю логично.
__________________
|
(Offline)
|
|
06.04.2012, 09:53
|
#5
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
ничего hideentity не убирает из видеопамяти. сами подумайте, вот загрузили мы меш и откопировали его copyentity. один скрыли, что он будет из видопамяти убирать? меш то один.
он просто убирает объект из списка рендерящихся объектов.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
06.04.2012, 10:37
|
#6
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
Всё правильно, когда обработана вся логика и выдана команда на формирование кадра, игра не может продолжать дальнейшую обработку пока не будет рассчитан кадр. И процессор в это время обрабатывает другие процессы системы или другие потоки игры если они есть (например музыка обычно играет отдельным потоком).
На самом деле, RenderWorld возвращает управление сразу как отработает его код, а формирование кадра может быть ещё в процессе. Однако Flip1 форсирует ожидание формирования кадра и его вывода на экран.
Аналогично работает видеокарта, когда видеокарта в монопольном режиме (игра в фуллскрин), она рендерит только то что получает от игры. Поэтому, когда CPU считает логику GPU отдыхает.
Именно поэтому чтобы получить максимальный fps в играх надо чтобы CPU и GPU полностью удовлетворяли потребностям друг друга, чтобы взаимные ожидания были наименьшими.
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
|
|
06.04.2012, 12:14
|
#7
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
А я считал и пока считаю, что все Entity (будь то Меш или его копия) при загрузке ложатся в оперативную память
А те Entity, которые надо рендерить помещаются в видео-память для максимальной скорости рендера
СКАЖИТЕ ЕСЛИ НЕ ТАК!
__________________
|
(Offline)
|
|
06.04.2012, 12:16
|
#8
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
ЕМНИП в видеопамять помещаются только текстуры
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
|
|
06.04.2012, 12:46
|
#9
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
геометрия вообще-то тоже - VB/IB.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
|
|
06.04.2012, 14:11
|
#10
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
скажу еще раз: ЭТО НЕ ТАК.
Entity занимает совсем немного места в опреативки и никаким образом не касается видеопамяти. Видеопамять занимает меш. Вся проблема в кривоватой блицовой архитектуре. Когда мы создаем ентити LoadMesh-ом или там CreateCube-ом, то кроме ентити создается и меш. Тогда тратится видеопамять. Когда мы создаем чисто ентити для уже существующего меша (CopyEntity) тогда тратится только совсем чуть-чуть оперативки и совсем не тратится видеопамять. В блице понятия меша и ентити разнесены слабо, что неправильно, я считаю. Хотя для новичков, кончено проще.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.04.2012, 14:36
|
#11
|
Разработчик
Регистрация: 09.08.2006
Адрес: Украина
Сообщений: 431
Написано 65 полезных сообщений (для 53 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
Не слыхал ли кто о библиотеке для обработки некоторых расчетов из главного цикла(те что предназначены для цп) на графическом процессоре для блица? Или возможно наоборот. Подключить свободные ресурсы центрального процессора для помощи в построении графических изображений? п.с. Задело
И еще один вопрос не по теме. Есть огромный ландшафт. Его форма хранится в файле и только небольшая часть видимая юзеру сидит в ОЗУ. Как будет рациональнее с точки зрения оптимизации, врубать хайд ентити для всех кусочков что видел юзер (ландшафт аля майнкрафт) или делать полный перерасчет ландшафта в моменты передвижения с чанка на чанк? Просто в блице никак нельзя сделать работу над главным циклом в 2-а потока. Или можно? Была только одна мысль, написать функцию, какая будет подгружать кусочек недогруженного чанка. Что то типа имитации 2-х потоков....
|
(Offline)
|
|
06.04.2012, 15:00
|
#12
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
Просто в блице никак нельзя сделать работу над главным циклом в 2-а потока.
|
была где то библиотека.
чтобы врубать / вырубать хайдентити надо их все сначала загрузить. По памяти просядите, батенька. если ландшафт на самом деле огромный. Да и неправильно это идеологически, пишите на блице казуалки, он для этого создавался. А то некоторые берутся писать всякие там шутеры на тетрисовом двиге, или 3Д ртс
|
(Offline)
|
|
06.04.2012, 15:24
|
#13
|
Разработчик
Регистрация: 09.08.2006
Адрес: Украина
Сообщений: 431
Написано 65 полезных сообщений (для 53 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
Сообщение от HolyDel
3Д ртс
|
Как ты угадал?
L.D.M.T. уже посоветовал насчет многопоточности. А это как ты говоришь 3Д ртс от казуалок (имхо) отличается лишь сложной оптимизацией.
|
(Offline)
|
|
06.04.2012, 15:53
|
#14
|
ПроЭктировщик
Регистрация: 11.10.2011
Адрес: Мурманск
Сообщений: 154
Написано 74 полезных сообщений (для 218 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
Слушайте, а если я буду так делать:
;-----------------------------LoadEntity------------------------------
Function LoadEntity(FileMesh$)
Mesh=LoadMesh(FileMesh$)
Local MeshEntity=CopyEntity(Mesh)
FreeEntity Mesh
Return MeshEntity
End Function
;-----------------------------LoadEntity------------------------------
;--------------------------LoadAnimEntity---------------------------
Function iSetAnimKey(mesh,key)
SetAnimKey( mesh, key )
For i = 1 To CountChildren( mesh )
iSetAnimKey( GetChild( mesh, i ), key )
Next
End Function
Function animateAllChilds( mesh )
Local length% = AnimLength( mesh )
For i = 1 To length ;- 1
SetAnimTime( mesh, i, 0 )
iSetAnimKey( mesh, i )
Next
For j = 1 To CountChildren( mesh )
ent = GetChild( mesh, j )
If ent<>0
If CountChildren(ent)>0 Then animateAllChilds(ent )
AddAnimSeq( ent, length )
EndIf
Next
End Function
Function LoadAnimEntity(FileAnimMesh$)
MeshAnim=LoadAnimMesh(FileAnimMesh$)
Local MeshAnimEntity=CopyEntity(MeshAnim)
animateAllChilds(MeshAnimEntity)
FreeEntity MeshAnim
Return MeshAnimEntity
End Function
;------------------------------LoadAnimEntity--------------------------
MeshEntity=LoadAnimEntity("AnimEntity.b3d")
MeshEntity=LoadEntity("Entity.b3d")
Я оптимизирую таким образом? или FreeEntity только Entity удаляет?
__________________
Острый психоз- это когда вы разговариваете с кошкой.
Острый галлюцинаторный психоз - вы говорите с кошкой, которой не существует.
Паранойя - вы боитесь ляпнуть лишнего при кошке.
Шизофрения - иногда у вас появляется кошка, которая разговаривает.
Неврастения - вы жалуетесь кошке, она молчит, игнорирует вас и это для вас невыносимо!!!
Навязчивый невроз - вы уверены, что кошка не одна и они что-то замышляют!
|
(Offline)
|
|
06.04.2012, 17:24
|
#15
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Render World и Графический процессор видеокарты
только Entity удалит. останется ссылка на меш во второй копии.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:43.
|