forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Render World и Графический процессор видеокарты (http://forum.boolean.name/showthread.php?t=16603)

Halk-DS 06.04.2012 03:10

Render World и Графический процессор видеокарты
 
Как пишут в всяких статейках графический процессор держит на себе всю графическую обработку включая построение изображения.
Пруф1:
Цитата:

графический процессор — занимается расчётами выводимого изображения, освобождая от этой обязанности центральный процессор, производит расчёты для обработки команд трёхмерной графики.
Пруф2:
Цитата:

Графический процессор (англ. graphics processing unit, GPU) — отдельное устройство персонального компьютера или игровой приставки, выполняющее графический рендеринг. Современные графические процессоры очень эффективно обрабатывают и отображают компьютерную графику
Вот теперь припустим у нас в Blitz3D код главного цикла:
Код:

Repeat
...  ;здесь код жрущий ресурсы центрального процессора
...  ;всякая математика, вычисления и оптимизация
...  ;включая команды HideEntity, EntityTexture и т.п.


;Перед командой RenderWorld центральный процессор завершает все свои
;дела и передает работу для графического процессора:
RenderWorld()  ;И чо, пока графический проц делает изображение ЦП стоит?
;Дальше ЦП опять вступает в работу после простоя и рисует всякие
;изображения как обычно в блице перед Flip`ом бывает.
Flip
Forever
End

Это все действительно так? Или я чтото недопонял...
И вообще, как на блиц влияет работа графического процессора? Работает ли он при операторе RenderWorld?

Mr_F_ 06.04.2012 03:39

Ответ: Render World и Графический процессор видеокарты
 
RenderWorld ещё и отсеивает что рисовать с какой камеры, а что не рисовать, ну и общается с GAPI - в общем, цпу работы у него достаточно.
Цитата:

Работает ли он при операторе RenderWorld?
ну, естественно, рисует то всё видюшка.
она растеризует треугольники, интерполирует текстуры, обрабатывает каждый пиксель на экране. чего там в блице ещё есть? бленды текстур - тоже на гпу.

Halk-DS 06.04.2012 04:30

Ответ: Render World и Графический процессор видеокарты
 
Цитата:

Сообщение от Mr_F_ (Сообщение 224698)
цпу работы у него достаточно.

Ты имеешь в виду, что во время исполнения RenderWorld занят графический процессор всякими прорисовками и в это же время есть дела и для центрального процессора?

п.с. Вопрос не по теме:
HideEntity - освобождает память видеокарты, а
FreeEntity - освобождает память и видеокарты и ОЗУ?

burovalex 06.04.2012 07:16

Ответ: Render World и Графический процессор видеокарты
 
Цитата:

Сообщение от Halk-DS (Сообщение 224699)
Ты имеешь в виду, что во время исполнения RenderWorld занят графический процессор всякими прорисовками и в это же время есть дела и для центрального процессора?

п.с. Вопрос не по теме:
HideEntity - освобождает память видеокарты, а
FreeEntity - освобождает память и видеокарты и ОЗУ?


Я считаю что всё идет по порядку
И когда ты делаешь renderWorld у тебя у тебя вся система занимается именно обработкой графики, но весь цикл в 17 мс - назвать "Простоем" я не могу )

А на счет hideEntity и freeEntity я думаю ты прав!
Сначала я подумал а зачем из видеопамяти удалять hideEntity? а потом подумал а нафига его там держать? )) Так что думаю логично. :-)

HolyDel 06.04.2012 09:53

Ответ: Render World и Графический процессор видеокарты
 
ничего hideentity не убирает из видеопамяти. сами подумайте, вот загрузили мы меш и откопировали его copyentity. один скрыли, что он будет из видопамяти убирать? меш то один.
он просто убирает объект из списка рендерящихся объектов.

SBJoker 06.04.2012 10:37

Ответ: Render World и Графический процессор видеокарты
 
Всё правильно, когда обработана вся логика и выдана команда на формирование кадра, игра не может продолжать дальнейшую обработку пока не будет рассчитан кадр. И процессор в это время обрабатывает другие процессы системы или другие потоки игры если они есть (например музыка обычно играет отдельным потоком).

На самом деле, RenderWorld возвращает управление сразу как отработает его код, а формирование кадра может быть ещё в процессе. Однако Flip1 форсирует ожидание формирования кадра и его вывода на экран.

Аналогично работает видеокарта, когда видеокарта в монопольном режиме (игра в фуллскрин), она рендерит только то что получает от игры. Поэтому, когда CPU считает логику GPU отдыхает.

Именно поэтому чтобы получить максимальный fps в играх надо чтобы CPU и GPU полностью удовлетворяли потребностям друг друга, чтобы взаимные ожидания были наименьшими.

burovalex 06.04.2012 12:14

Ответ: Render World и Графический процессор видеокарты
 
А я считал и пока считаю, что все Entity (будь то Меш или его копия) при загрузке ложатся в оперативную память
А те Entity, которые надо рендерить помещаются в видео-память для максимальной скорости рендера

СКАЖИТЕ ЕСЛИ НЕ ТАК!

SBJoker 06.04.2012 12:16

Ответ: Render World и Графический процессор видеокарты
 
ЕМНИП в видеопамять помещаются только текстуры

Mr_F_ 06.04.2012 12:46

Ответ: Render World и Графический процессор видеокарты
 
геометрия вообще-то тоже - VB/IB.

HolyDel 06.04.2012 14:11

Ответ: Render World и Графический процессор видеокарты
 
Цитата:

СКАЖИТЕ ЕСЛИ НЕ ТАК!
скажу еще раз: ЭТО НЕ ТАК.

Entity занимает совсем немного места в опреативки и никаким образом не касается видеопамяти. Видеопамять занимает меш. Вся проблема в кривоватой блицовой архитектуре. Когда мы создаем ентити LoadMesh-ом или там CreateCube-ом, то кроме ентити создается и меш. Тогда тратится видеопамять. Когда мы создаем чисто ентити для уже существующего меша (CopyEntity) тогда тратится только совсем чуть-чуть оперативки и совсем не тратится видеопамять. В блице понятия меша и ентити разнесены слабо, что неправильно, я считаю. Хотя для новичков, кончено проще.

Halk-DS 06.04.2012 14:36

Ответ: Render World и Графический процессор видеокарты
 
Не слыхал ли кто о библиотеке для обработки некоторых расчетов из главного цикла(те что предназначены для цп) на графическом процессоре для блица? Или возможно наоборот. Подключить свободные ресурсы центрального процессора для помощи в построении графических изображений? п.с. Задело :)

И еще один вопрос не по теме. Есть огромный ландшафт. Его форма хранится в файле и только небольшая часть видимая юзеру сидит в ОЗУ. Как будет рациональнее с точки зрения оптимизации, врубать хайд ентити для всех кусочков что видел юзер (ландшафт аля майнкрафт) или делать полный перерасчет ландшафта в моменты передвижения с чанка на чанк? Просто в блице никак нельзя сделать работу над главным циклом в 2-а потока. Или можно? Была только одна мысль, написать функцию, какая будет подгружать кусочек недогруженного чанка. Что то типа имитации 2-х потоков....

HolyDel 06.04.2012 15:00

Ответ: Render World и Графический процессор видеокарты
 
Цитата:

Просто в блице никак нельзя сделать работу над главным циклом в 2-а потока.
была где то библиотека.

чтобы врубать / вырубать хайдентити надо их все сначала загрузить. По памяти просядите, батенька. если ландшафт на самом деле огромный. Да и неправильно это идеологически, пишите на блице казуалки, он для этого создавался. А то некоторые берутся писать всякие там шутеры на тетрисовом двиге, или 3Д ртс :)

Halk-DS 06.04.2012 15:24

Ответ: Render World и Графический процессор видеокарты
 
Цитата:

Сообщение от HolyDel (Сообщение 224750)
3Д ртс :)

Как ты угадал? :)

L.D.M.T. уже посоветовал насчет многопоточности. А это как ты говоришь 3Д ртс от казуалок (имхо) отличается лишь сложной оптимизацией.

Markova 06.04.2012 15:53

Ответ: 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 удаляет?:4to:

HolyDel 06.04.2012 17:24

Ответ: Render World и Графический процессор видеокарты
 
только Entity удалит. останется ссылка на меш во второй копии.


Часовой пояс GMT +4, время: 10:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot