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 удалит. останется ссылка на меш во второй копии.

Halk-DS 07.04.2012 01:56

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

Сообщение от HolyDel (Сообщение 224710)
ничего hideentity не убирает из видеопамяти. сами подумайте, вот загрузили мы меш и откопировали его copyentity. один скрыли, что он будет из видопамяти убирать? меш то один.
он просто убирает объект из списка рендерящихся объектов.

Исходя из этого, есть ли смысл делать HideEntity на объекты:
1. Те что стоят у тебя за спиной(не попадают в область зрения камеры)
2. Те что стоят за любыми преградами(попадают в область зрения камеры, но например они стоят за стеной.)

Mr_F_ 07.04.2012 02:20

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

1. Те что стоят у тебя за спиной(не попадают в область зрения камеры)
нет, их блиц должен сам отсеять.
Цитата:

2. Те что стоят за любыми преградами(попадают в область зрения камеры, но например они стоят за стеной.)
да, о загорождениях блиц не знает.

SBJoker 07.04.2012 11:31

Ответ: Render World и Графический процессор видеокарты
 
Как то проводились исследования, и было выяснено что HideEntity тормозит сильнее чем EntityAlpha(0)

burovalex 07.04.2012 22:33

Ответ: Render World и Графический процессор видеокарты
 
В разве у них не разный эффект?
Могу ошибаться, но как помню HideEntity убирает объект из списка коллизий а AlphaEntity нет :rolleyes:

Wegox 07.04.2012 22:36

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

Сообщение от burovalex (Сообщение 224864)
В разве у них не разный эффект?
Могу ошибаться, но как помню HideEntity убирает объект из списка коллизий а AlphaEntity нет :rolleyes:

Это только в том случие если ты используеш коллизию при тестировании о котором пишет SBJoker коллизии не было

Halk-DS 07.04.2012 23:28

Ответ: Render World и Графический процессор видеокарты
 
ИМХО блицевские коллизии полная лажа. Лучше самому что то накидать.

burovalex 08.04.2012 09:46

Render World и Графический процессор видеокарты
 
Согласен с твоим ИМХО )
Но зачем изобретать велосипед?! Я сейчас изучаю PhysX, мне пока этого более чем достаточно
Есть маленкие косячки, но терпимые :)

Цитата:

Сообщение от Wegox (Сообщение 224865)
Это только в том случие если ты используеш коллизию при тестировании о котором пишет SBJoker коллизии не было

Я знаю о чем он пишет
Я хочу сказать что их сравнивать теряет смысл
Это равносильно сравнить велосипед и мотоцикл, потому что на них ездят
PS. Опять я про велосипеды :4to: ))

Черный крыс 08.04.2012 15:11

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

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

Насчет дальнейших оптимизаций рендера - Блиц держит Quake 3 *.BSP
Вводить свою систему оптимизации считаю нецелесообразным.

Насчет ХайдЕнтити и разницы между ЕнтитиАльфой.
У Блица внутри есть список всех ентити, которые нужно отрисовать, так вот - функция HideEntity() - физически удаляет ентити из всех списков (из списка коллизии и рендера), поэтому он ресурсоемок, в EntityAlpha() ничего подобного не происходит, а при переборе ренднр-листа ентити с нулевой альфой просто пропускается.

Mr_F_ 08.04.2012 15:53

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

Насчет дальнейших оптимизаций рендера - Блиц держит Quake 3 *.BSP
хм, он разве их не просто как тупо меш загружает?

Платон Александрович 09.04.2012 08:29

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

Сообщение от Halk-DS (Сообщение 224868)
ИМХО блицевские коллизии полная лажа. Лучше самому что то накидать.

Правда что-ль? И в чем же там лажа, просвяти, будь так любезен.

Цитата:

Сообщение от Diablo1909 (Сообщение 224892)
функция HideEntity() - физически удаляет ентити из всех списков (из списка коллизии и рендера), поэтому он ресурсоемок

Нет, HideEntity устанавливает флажок, и рендер пропускает его при переборе списка, так-же как и с EntityAlpha.

Цитата:

Сообщение от Mr_F_ (Сообщение 224899)
хм, он разве их не просто как тупо меш загружает?

Нет, юзает BSP для куллинга и для коллизий.

Halk-DS 09.04.2012 23:16

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

Сообщение от Платон Александрович (Сообщение 224958)
Правда что-ль? И в чем же там лажа, просвяти, будь так любезен.

Среди всех моих зачатков игр :-D можно определить 2 типа. Либо надо кул физика, где на блиц большое разнообразие библиотек. Либо там можно все делать простыми математическими методами, что будет быстрей.
п.с. Я не зря написал что это мое личное мнение...


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

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