forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Советы по оптимизации (http://forum.boolean.name/showthread.php?t=17056)

SBJoker 15.01.2013 01:34

Ответ: Советы по оптимизации
 
За ксорс не скажу, но можно проверить, делается тест с сокрытием кучи энтатей по альфе и по сокрытию.

burovalex 15.01.2013 07:10

Ответ: Советы по оптимизации
 
Ладно, спс!
Ну списком я иногда подразумеваю записи тайпа.
Сегодня сделаю семпл по этой теме. И альфу с хайдом сравню.

Удачи тебе МрФ! Билетов попроще! )

burovalex 15.01.2013 07:30

Ответ: Советы по оптимизации
 
А у меня еще один вопрос родился. У меня при работе в ксорсе иногда зависает бук, похоже на ошибку обращения к памяти (синий экран смерти). Замечаю такую тенденцию, что в основном косяк происходит при нескольких MAV'ах.
Как думаете, может ли это быть связано с тем, что в корявом коде я обращаюсь на несуществующую ссылку в память, которая в своё время уже занята другим процессом - что приводит к краху системы?

burovalex 15.01.2013 10:50

Ответ: Советы по оптимизации
 
Отчет!!
Ну что, господа булочники)

Начну со слов Джокера
Цитата:

Мудрость предыдущих поколений блитцеров гласит:
не используй HideEntity без крайней нужды ибо тормазит оно, используй EntityAlpha(0) вместо него, да ускорится программа твоя.
Эта легенда не оправдалась.
У меня терпения хватило на 50к кубиков.
Скрытие в Ксорс, что с помощью xHideEntity (fps-60) ,что с помощью xEntityAlpha (fps-60)
Блитц HideEntity (fps-58 ) , EntityAlpha (fps-58 )
Легенда разрушена!! :-D

Зато порадовала производительность Ксорса, она выше блитца на + 20%
Тест на 40к кубиков, результат отдаление с AutoFade
Цитата:

Blitz 4к кубиков - fps(20)
Xors 5к кубиков - fps(20)

Blitz 15к кубиков - fps(6-7)
Xors 15к кубиков - fps(8-9)
семпл блитца
Global n=15000 ;Число кубиков count of cubes
;=========================
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global camera=CreateCamera()
Global camAX#,camAY#
PositionEntity camera,0,0,-10
RotateEntity camera,0,0,0
lit=CreateLight()

Type mesh
Field mesh
Field x#,y#,z#
Field ax,ay,az
Field scale#
Field r,g,b
End Type

For i=1 To n
mesh.mesh=New mesh
mesh\mesh=CreateCube()
dist#=Rnd(10,200)
mesh\x=Rnd(-dist,dist)
mesh\z=dist
mesh\ay=Rand(0,360)
mesh\scale=Rnd(0.2,0.4)
mesh\r=Rand(30,250) : mesh\g=Rand(30,250) : mesh\b=Rand(30,250)
PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
EntityAutoFade mesh\mesh,210,210
Next

Global mode=0
Global time,timeMean#
Global f1=MilliSecs()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
While Not KeyHit(1)
frame=MilliSecs()
CameraControl(camera)
RenderWorld

If KeyHit(57) Then
mode=mode+1
RestoreAllMesh()
If mode=1 Then HideAllMesh()
If mode=3 Then AlphaAllMesh(0)
EndIf

Text 5,10,"Tris: "+TrisRendered()
Text 5,30,"Cubes: "+TrisRendered()/12
If time=0 Then time=17
fps=1000/time
timeMean=(timeMean+time)/2
Text 5,50,"FPS: "+fps+" "+1000/timeMean
Text 5,70,"Mode: "+mode
Text GraphicsWidth()/2,300,"Key SPACE to switch mode 1-hide, 3-alpha(0)"
Flip
time=MilliSecs()-frame
Wend
End

Function CameraControl(cam)
camAX=camAX-MouseXSpeed()*0.3
camAY=camAY+MouseYSpeed()*0.3
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity cam,camAY,camAX,0
MoveEntity cam,(KeyDown(205)-KeyDown(203))*3,0,(KeyDown(200)-KeyDown(208))*3
End Function

Function HideAllMesh()
For mesh.mesh=Each mesh
HideEntity mesh\mesh
Next
End Function

Function AlphaAllMesh(alp#)
For mesh.mesh=Each mesh
EntityAlpha mesh\mesh,alp
Next
End Function

Function RestoreAllMesh()
For mesh.mesh=Each mesh
ShowEntity mesh\mesh
EntityAlpha mesh\mesh,1
Next
End Function

семпл ксорса

Global n=15000 ;Число кубиков count of cubes
;=========================
xGraphics3D 1024,768,32,1,0
xCreateLog(1,1,"xors_log.html")
Include "./incl/maxMode3d.bb"
xSetTextureFiltering TF_ANISOTROPIC
xSetBuffer xBackBuffer()

Global camera=xCreateCamera()
Global camAX#,camAY#
xPositionEntity camera,0,2,-10
lit=xCreateLight()

Type mesh
Field mesh
Field x#,y#,z#
Field ax,ay,az
Field scale#
Field r,g,b
End Type

For i=1 To n
mesh.mesh=New mesh
mesh\mesh=xCreateCube();xCreateSphere(4)
dist#=Rnd(10,200)
mesh\x=Rnd(-dist,dist)
mesh\z=dist
mesh\ay=Rand(0,360)
mesh\scale=Rnd(0.2,0.4)
mesh\r=Rand(30,250) : mesh\g=Rand(30,250) : mesh\b=Rand(30,250)
xPositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
xScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
xRotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
xEntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
xEntityAutoFade mesh\mesh,200,200
Next

Global mode=0
Global time,timeMean#
While Not xKeyHit(1)
frame=xMillisecs()
CameraControl(camera)
xRenderWorld

If xKeyHit(KEY_SPACE) Then
mode=mode+1
RestoreAllMesh()
If mode=1 Then HideAllMesh()
If mode=3 Then AlphaAllMesh(0)
EndIf

xText 5,10,"Tris: "+xTrisRendered()
xText 5,30,"Cubes: "+xDIPCounter()
xText 5,50,"FPS: "+xGetFPS()
If time=0 Then time=17
timeMean=(timeMean+time)/2
xText 5,70,"Mode: "+mode
xText xGraphicsWidth()/2,300,"Key SPACE to switch mode 1-hide, 3-alpha(0)"
xFlip
time=frame
Wend
End

Function CameraControl(cam)
camAX=camAX-xMouseXSpeed()*0.3
camAY=camAY+xMouseYSpeed()*0.3
xRotateEntity cam,camAY,camAX,0
xMoveEntity cam,xKeyDown(KEY_RIGHT)-xKeyDown(KEY_LEFT),0,xKeyDown(KEY_UP)-xKeyDown(KEY_DOWN)
End Function

Function HideAllMesh()
For mesh.mesh=Each mesh
xHideEntity mesh\mesh
Next
End Function

Function AlphaAllMesh(alp#)
For mesh.mesh=Each mesh
xEntityAlpha mesh\mesh,alp
Next
End Function

Function RestoreAllMesh()
For mesh.mesh=Each mesh
xShowEntity mesh\mesh
xEntityAlpha mesh\mesh,1
Next
End Function


Щас попробовал написать такую функцию:
Код:

Function AutoHFade(n)
For i=1 To n
        mesh.mesh=First mesh
        If EntityDistance(camera,mesh\mesh)>200 Then
                HideEntity(mesh\mesh)
                Else
                ShowEntity(mesh\mesh)
        EndIf
        Insert mesh.mesh After Last mesh
Next
End Function


Прироста нет! Даже небольшое падение на общёте

Щас попробовал еще одну функцию, с которой вся тема и завелась в моей голове.
Функция с растоянием удаляет ентити и восстанавливает из данных полей.
Function AutoHFade(n)
For i=1 To n
mesh.mesh=First mesh
dx=mesh\x-EntityX(camera)
dy=mesh\y-EntityY(camera)
dz=mesh\z-EntityZ(camera)
dist=Sqr(dx*dx+dy*dy+dz*dz)
If dist>200 Then
FreeEntity(mesh\mesh) : mesh\mesh=0
Else
If mesh\mesh=0 Then
mesh\mesh=CreateCube()
PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
EndIf
EndIf
Insert mesh.mesh After Last mesh
Next
End Function


сам семпл bb

Код:

Global n=15000                        ;Число кубиков  count of cubes
;=========================
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global camera=CreateCamera()
Global camAX#,camAY#
PositionEntity camera,0,0,-10
RotateEntity camera,0,0,0
lit=CreateLight()

Type mesh
        Field mesh
        Field x#,y#,z#
        Field ax,ay,az
        Field scale#
        Field r,g,b
End Type

For i=1 To n
        mesh.mesh=New mesh
        mesh\mesh=CreateCube()
        dist#=Rnd(10,200)
        mesh\x=Rnd(-dist,dist)
        mesh\z=dist
        mesh\ay=Rand(0,360)
        mesh\scale=Rnd(0.2,0.4)
        mesh\r=Rand(30,250) : mesh\g=Rand(30,250) : mesh\b=Rand(30,250)
                PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
                ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
                RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
                EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
Next

Global distPivot=CreatePivot()

Global mode=0
Global time,timeMean#,timeHAF
Global f1=MilliSecs()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
While Not KeyHit(1)
frame=MilliSecs()
CameraControl(camera)
AutoHFade(500)
timeHAF=xMillisecs()-frame
RenderWorld

If KeyHit(57) Then
        mode=mode+1
        RestoreAllMesh()
        If mode=1 Then HideAllMesh()
        If mode=3 Then AlphaAllMesh(0)
EndIf

Text 5,10,"Tris: "+TrisRendered()
Text 5,30,"Cubes: "+TrisRendered()/12
If time=0 Then time=17
fps=1000/time
timeMean=(timeMean+time)/2
Text 5,50,"FPS: "+fps+"    "+1000/timeMean
Text 5,70,"Mode: "+mode
Text 5,120,"AutoHFade time: "+timeHAF
Text GraphicsWidth()/2,300,"Key SPACE to switch mode 1-hide, 3-alpha(0)"
Flip
time=MilliSecs()-frame
Wend
End

Function CameraControl(cam)
        camAX=camAX-MouseXSpeed()*0.3
        camAY=camAY+MouseYSpeed()*0.3
        MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
        RotateEntity cam,camAY,camAX,0
        MoveEntity cam,(KeyDown(205)-KeyDown(203))*3,0,(KeyDown(200)-KeyDown(208))*3
End Function

Function HideAllMesh()
For mesh.mesh=Each mesh
        HideEntity mesh\mesh
Next
End Function

Function AlphaAllMesh(alp#)
For mesh.mesh=Each mesh
        EntityAlpha mesh\mesh,alp
Next
End Function

Function RestoreAllMesh()
For mesh.mesh=Each mesh
        ShowEntity mesh\mesh
        EntityAlpha mesh\mesh,1
Next
End Function

Function AutoHFade(n)
For i=1 To n
        mesh.mesh=First mesh
        dx=mesh\x-EntityX(camera)
        dy=mesh\y-EntityY(camera)
        dz=mesh\z-EntityZ(camera)
        dist=Sqr(dx*dx+dy*dy+dz*dz)
        If dist>200 Then
                        FreeEntity(mesh\mesh) : mesh\mesh=0
                Else
                        If mesh\mesh=0 Then
                                mesh\mesh=CreateCube()
                                PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
                                ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
                                RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
                                EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b       
                        EndIf               
        EndIf
        Insert mesh.mesh After Last mesh
Next
End Function


Я выполняю xFreeEntity(), а в диспечере смотрю за оперативкой и за процессором, там ничего не меняется!!
Че за фигня?!
У меня только один вывод, не придумывайте себе геморой, как это делаю я. Используйте меньше ентити и ЛОДы. Ибудет счастье!!

SBJoker 15.01.2013 11:22

Ответ: Советы по оптимизации
 
Объявление не моё, я просто разместил объяву ;)

Wegox 15.01.2013 15:42

Ответ: Советы по оптимизации
 
HideEntity - EntityAlpha
Цитата:

Скрывает объект так, что он становится невидимым и больше не участвует в столкновения.
Основное применение - позволяет Вам создавать все объекты в начале программы, скрывать их, а затем копировать их и показывать по мере необходимости в основном игра. Это более эффективно, чем создание объектов в процессе игры.
Если Вы желаете скрыть объект так, чтобы он стал невидим, но все еще участвовал в столкновениях, то используйте команду EntityAlpha 0 вместо HideEntity. Это сделает объект полностью прозрачным.
HideEntity действует на указанный объект и все его дочерние(привязанные к нему) объекты, если такие существуют.
Как видим, две совершено разные функции, выполняющие разные задачи
что их и отличает!
То-есть на мой взгляд, тест с кубиками без учёта коллизии не пруф, давай по честному тесты проводить, а то получается что функция работает процентов на 50% а с учётом коллизии будет на все 100%
Я же могу скрывать объект для оптимизации, но не трогать коллизию:)

burovalex 15.01.2013 16:26

Ответ: Советы по оптимизации
 
Вот к примеру, я не пользуюсь коллизиями вообще, для это я пользуюсь физ движком.
И тест не для проверки коллизий, а что быстрее робит.
Да и вообще Хайд и Альфа я тестил только из интереса слов Джокера
Цитата:

Мудрость предыдущих поколений блитцеров гласит:
не используй HideEntity без крайней нужды ибо тормазит оно, используй EntityAlpha(0) вместо него, да ускорится программа твоя.
Цитата:

А Джокер услышал это от кого то...
Цитата:

Объявление не моё, я просто разместил объяву


Ну вот я решил и развеять легенду.

А суть теста вообще в другом. За место автоФейда удалять ентити. Короче надо будет, сам прочитаешь отчет :)

HolyDel 15.01.2013 17:00

Ответ: Советы по оптимизации
 
Цитата:

Щас попробовал написать такую функцию:
они внутри движка итак отрежутся по фрустуму.

попробуй на 1кк кубиков. и скомпиль оба ексешника пожалуйста, а то не у всех есть блиц, а потестить охота))

еще бы померить время самого скрытия с помощью альфы и хайдом. у меня в движке есть два варианта скрытия Hide / Show - которое удаляет ссылку на енити из сценграфа. оно работает долго, но зато скрытая таким образом ентити вообще никак не участвует в расчетах. так можно и миллион скрыть - и все равно ничего не изменится. и есть SetVisible - которое просто устанавливает флаг. Сам вызов SetVisible очень быстр, но скрытая таким образом ентити все равно участвует в расчетах (пусть и всего лишь проверка булевой переменной).

burovalex 15.01.2013 18:29

Ответ: Советы по оптимизации
 
Цитата:

и скомпиль оба ексешника пожалуйста, а то не у всех есть блиц
Да у меня тут инет тупой, на вахте. Завтра домой приеду, скомпилирую.
Цитата:

попробуй на 1кк кубиков
Ты чтооо??!?!? Какой миллион, у меня комп повис на 200к кубиков у меня комп реагировал со скоростью 1 кадр секунд 10...

Вообще тут тупой сценограф
Freeentity не освобождает ентити со сценографа. КАК ТАК!?!?! >:(
При 100к ентити, скрываешь или удаляешь ентити, оперативка не высвобождается, проц также в напряге, и нормально становится только при 2 к кубиков.
А это фуфло! У меня в проекте уже вырастает 750 растений и 4000 плоских мешей для дебага скрытых, плюс парочках пост-эффектов с дополнительным рендером - фпс стабильное. :dontknow:

HolyDel 16.01.2013 13:26

Ответ: Советы по оптимизации
 
FreeEntity в блице должен удалять ентити и из сценграфа и из памяти. Т.е. это полное очищение)))

память по диспетчеру небось смотришь? там она может не сразу снизиться.

Цитата:

У меня в проекте уже вырастает 750 растений и 4000 плоских мешей для дебага скрытых, плюс парочках пост-эффектов с дополнительным рендером - фпс стабильное.
синглсюрфейс? у меня 4 кубиков на блице работает на 180 фпс на i7/2770K / 460GT.

burovalex 16.01.2013 23:30

Ответ: Советы по оптимизации
 
Цитата:

Сообщение от HolyDel (Сообщение 249631)
FreeEntity в блице должен удалять ентити и из сценграфа и из памяти. Т.е. это полное очищение)))

Да я прекрасно понимаю! ) Но и сам не понимаю как это может тормозить. Завтра выкину екзешники, посмотри плиз, исходники там же будут.

Цитата:

Сообщение от HolyDel (Сообщение 249631)
память по диспетчеру небось смотришь? там она может не сразу снизиться.

Да, по диспечеру, но ни сразу не потом ничего не меняется.
Хотя кубики копейки весят наверное, там то только мб пишет..

Цитата:

Сообщение от HolyDel (Сообщение 249631)
синглсюрфейс? у меня 4 кубиков на блице работает на 180 фпс на i7/2770K / 460GT.

Не понял что 4?? миллиона?
Ну извини, не сравнивай хайтэк с буком ))

HolyDel 17.01.2013 01:52

Ответ: Советы по оптимизации
 
4 тысячи.

burovalex 17.01.2013 11:12

Ответ: Советы по оптимизации
 
Я знаю Холидел, что 4 к кубиков работает без проблем и у меня, но сють в другом, с твоим процом если вывести гдето 200к кубиков и скрыть 196 к кубиков, блитц будет тормозить..

burovalex 24.01.2013 22:47

Ответ: Советы по оптимизации
 
Извиняюсь, что на тему подзабил, выкидываю екзешник и исходник в спойлере.

Мой вывод был правильный, не создавайте геморой. Максимум что можно помудрить - это разбиение на секторы. И то, надо ли это... Вряд ли ктото будет делать Обливион или Фалаут )

Погоняйте пример, мне показалось что Хайд ентити чуть быстрее работает чем Альфа(0). Тестил в углу на 3к кубиках и Хайд выиграл на пару сотен кубиков )


Код:

Global n=30000                        ;Число кубиков  count of cubes
;=========================
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global camera=CreateCamera()
Global camAX#,camAY#
PositionEntity camera,0,0,-10
RotateEntity camera,0,0,0
CameraRange camera,0.1,400
lit=CreateLight()

Type mesh
        Field mesh
        Field x#,y#,z#
        Field ax,ay,az
        Field scale#
        Field r,g,b
End Type

Global cube=CreateCube()

For i=1 To n
        mesh.mesh=New mesh
        mesh\mesh=CopyMesh(cube)
        mesh\x=Rnd(-200,200)
        mesh\z=Rnd(-200,200)
        mesh\ay=Rand(0,360)
        mesh\scale=Rnd(0.2,0.4)
        mesh\r=Rand(30,250) : mesh\g=Rand(30,250) : mesh\b=Rand(30,250)
                PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
                ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
                RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
                EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
        EntityAutoFade mesh\mesh,200,200
Next

Global distPivot=CreatePivot()

Global mode=0
Global time,timeMean#,timeHAF
Global f1=MilliSecs()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
While Not KeyHit(1)
frame=MilliSecs()
CameraControl(camera)
If mode=1 Then AutoHFade(500)
timeHAF=MilliSecs()-frame
RenderWorld

If KeyHit(57) Then
        mode=mode+1
        RestoreAllMesh()
        If mode=2 Then HideAllMesh(n-3000)
        If mode=4 Then AlphaAllMesh(0,n-3000)
        If mode>4 Then mode=0
EndIf

Text 5,10,"Tris: "+TrisRendered()
Text 5,30,"Cubes: "+TrisRendered()/12
If time=0 Then time=17
fps=1000/time
timeMean=(timeMean+time)/2
Text 5,50,"FPS: "+fps+"    "+1000/timeMean
Text 5,70,"Mode: "+mode
Select mode
        Case 0 : modeStr$="normal auto fade"
        Case 1 : modeStr$="delete auto fade"
        Case 2 : modeStr$="hide entity"
        Case 3 : modeStr$="normal auto fade"
        Case 4 : modeStr$="Alpha = 0"
End Select
Text 5,90,"Mode: "+modeStr
Text 5,140,"AutoHFade time: "+timeHAF
Color 200,100,100 : Text GraphicsWidth()/2,300,"Key SPACE to switch mode!" : Color 255,255,255
Flip
time=MilliSecs()-frame
Wend
End

Function CameraControl(cam)
        camAX=camAX-MouseXSpeed()*0.3
        camAY=camAY+MouseYSpeed()*0.3
        MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
        RotateEntity cam,camAY,camAX,0
        MoveEntity cam,(KeyDown(205)-KeyDown(203))*3,0,(KeyDown(200)-KeyDown(208))*3
End Function

Function HideAllMesh(n)
m=0
For mesh.mesh=Each mesh
        m=m+1
        If m<n Then HideEntity mesh\mesh
Next
End Function

Function AlphaAllMesh(alp#,n)
m=0
For mesh.mesh=Each mesh
        m=m+1
        If m<n Then EntityAlpha mesh\mesh,alp
Next
End Function

Function RestoreAllMesh()
For mesh.mesh=Each mesh
        If mesh\mesh=0 Then
                mesh\mesh=CreateCube()
                PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
                ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
                RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
                EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b       
        EndIf
        ShowEntity mesh\mesh
        EntityAlpha mesh\mesh,1
        EntityAutoFade mesh\mesh,200,200
        If mode<>0 Then EntityAutoFade mesh\mesh,1000,1000       
Next
End Function

Function AutoHFade(n)
For i=1 To n
        mesh.mesh=First mesh
        dx=mesh\x-EntityX(camera)
        dy=mesh\y-EntityY(camera)
        dz=mesh\z-EntityZ(camera)
        dist=Sqr(dx*dx+dy*dy+dz*dz)
        If dist>200 Then
                        FreeEntity(mesh\mesh) : mesh\mesh=0
                Else
                        If mesh\mesh=0 Then
                                mesh\mesh=CreateCube()
                                PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
                                ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
                                RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
                                EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b       
                        EndIf               
        EndIf
        Insert mesh.mesh After Last mesh
Next
End Function



Компиль http://www.sendspace.com/file/ia8zkw

Arton 24.01.2013 23:17

Ответ: Советы по оптимизации
 
Цитата:

Сообщение от burovalex (Сообщение 250592)
Извиняюсь, что на тему подзабил, выкидываю екзешник и исходник в спойлере.

Мой вывод был правильный, не создавайте геморой. Максимум что можно помудрить - это разбиение на секторы. И то, надо ли это... Вряд ли ктото будет делать Обливион или Фалаут )

Погоняйте пример, мне показалось что Хайд ентити чуть быстрее работает чем Альфа(0). Тестил в углу на 3к кубиках и Хайд выиграл на пару сотен кубиков )

ХайдЭнтити самое оно, остальное выдавало FPS от 1 до 16 максимум.


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

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