Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 25.01.2013, 13:38   #151
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Народ, посматрите пример пожалуйста.
Не могу понять что за косяк.

Смысл такой. Я делаю каждый кадр LinePick на воду в нескольких точках.
А когда появляется новое дерево с параметром EntityPickMode 2 ксорс начинает дико тормозить.
И так с каждым появлением нового пикнутого дерева.

код тормозов:
For i=0 To 50
	xLinePick(0,50,i*3,0,-50,0)
	xCameraProject(camera,xPickedX(),xPickedY(),xPickedZ())
	xText xProjectedX(),xProjectedY(),i
Next
И дело даже не в 50 повторах, и при 5-ти тормозит. Хотя 50 это не много!

Ссылка http://www.sendspace.com/file/hgrgxv
__________________
(Offline)
 
Ответить с цитированием
Старый 25.01.2013, 13:43   #152
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Советы по оптимизации

я не могу его скачать. там тыщи кнопок download(( лотерея, блин
(Offline)
 
Ответить с цитированием
Старый 25.01.2013, 14:01   #153
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Нажми Click here to start download from sendspace
__________________
(Offline)
 
Ответить с цитированием
Старый 25.01.2013, 14:15   #154
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

делаю каждый кадр LinePick на воду
дерево с параметром EntityPickMode 2
тебе надо пикать воду? но ты создаёшь деревья тоже с возможностью их пикать? тебе только воду надо пикать 50 раз, а деревья не надо? попробуй может пробежаться по деревьям и выключить им пикмод перед большой чередой пиков.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (25.01.2013)
Старый 25.01.2013, 14:27   #155
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Советы по оптимизации

1,2,4 - на границе всинка - 60 фпс
0,3 - 30 фпс

выключение в драйверах синхроимпульса не помогло.
(Offline)
 
Ответить с цитированием
Старый 25.01.2013, 16:50   #156
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Сообщение от Mr_F_ Посмотреть сообщение
тебе надо пикать воду? но ты создаёшь деревья тоже с возможностью их пикать? тебе только воду надо пикать 50 раз, а деревья не надо? попробуй может пробежаться по деревьям и выключить им пикмод перед большой чередой пиков.
Нет, мне воду надо пикать один раз, чтобы правильно расположить "подводный" слой.
Но даже один раз падает гдето на 5-10, но чувствуется - не приятно

Проблема решается, если пик деревьев определять как бокс или сфера, но это не решение. У меня должно быть взаимодействие с деревьями

1,2,4 - на границе всинка - 60 фпс
0,3 - 30 фпс
Не понял что эти цифры означают.. Номер кадров чтоли?
__________________
(Offline)
 
Ответить с цитированием
Старый 25.01.2013, 17:30   #157
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

Проблема решается, если пик деревьев определять как бокс или сфера, но это не решение. У меня должно быть взаимодействие с деревьями
что если сделать деревья сферами, а когда тебе действительно нужно пикать деревья, то после нахождения сферы дерева, включаешь только ему одному (и вероятно нескольким ближайшим) полигональную проверку и пикаешь повторно уже с большой точностью.
(Offline)
 
Ответить с цитированием
Старый 25.01.2013, 19:50   #158
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Спс конечно за совет, но для меня пока это слишком замороченно )
Да меня эта тема зацепила, потому что я думал что Пик функции быстрые...
Я подумал сделать так - если игрок в воде (позиция У ниже уровня воды), тогда пикать воду.
Слой "под водой" хочу сделать изобычного плоского меша, расположенным прямо перед камерой, как думаете, Какой размер делать слоя и на каком расстоянии от камеры?
Чтобы не было артефактов от будущих пузырей
__________________
(Offline)
 
Ответить с цитированием
Старый 25.01.2013, 22:12   #159
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

ВСЁ!! Сделал тест, и был удивлён!

Тест проведён на 1000 сфер, с разным количеством вызовов CameraPick в 3-х возможных режимах

Режим       кол-во вызовов          FPS
Sphere          15                   60
Mesh            15                    3
Box             15                   30

Mesh             1                   40
Честно, не ожидал что такая большая нагрузка будет.

Ссылка http://www.sendspace.com/file/ha9vz2
Жмём Click here to start download from sendspace

Исходник

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

Global PCount
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=CreateSphere(10)
Global sp=CreateSphere()
	ScaleEntity sp,0.2,0.3,0.2

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.8,1.2)
	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
		EntityBox mesh\mesh,0,0,0,mesh\scale,mesh\scale,mesh\scale
		EntityRadius mesh\mesh,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)
For i=1 To PCount
	CameraPick camera,GraphicsWidth()/2,GraphicsHeight()/2
Next
	PositionEntity sp,PickedX(),PickedY(),PickedZ()
	EntityColor sp,120+120*Sin(frame/2),120+120*Sin(frame/3),120+120*Sin(frame/4)
RenderWorld

If KeyHit(57) Then 
	mode=mode+1
	PickModeAllMesh()
	If mode>3 Then mode=0
EndIf
PCount=PCount+KeyHit(13)-KeyHit(12)

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,"Pick Lines count: "+PCount
Select mode
	Case 0 : modeStr$="no pick"
	Case 1 : modeStr$="sphere pick"
	Case 2 : modeStr$="mesh pick"
	Case 3 : modeStr$="box pick"
End Select
Text 5,90,"Pick Mode: "+modeStr
Color 200,100,100 : Text GraphicsWidth()/2,300,"Key SPACE to switch mode!" : Color 255,255,255
Color 200,100,100 : Text GraphicsWidth()/2,330,"Key '+' and '-' to count pick line" : 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 PickModeAllMesh()
For mesh.mesh=Each mesh
	EntityPickMode mesh\mesh,mode
Next
End Function
__________________
(Offline)
 
Ответить с цитированием
Старый 26.01.2013, 08:31   #160
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Ответ: Советы по оптимизации

Сообщение от burovalex Посмотреть сообщение
Честно, не ожидал что такая большая нагрузка будет.
А чего удивляться-то, в режиме пика по треугольникам происходит тупой перебор треугольников, без каких-либо оптимизаций. Т.е. сначала происходит проверка по боксу, потом уже по треугольникам. Причем все эти проверки написаны неоптимально судя по sdk.
PS
А нет, там не тупой перебор, там бинарное дерево.
(Offline)
 
Ответить с цитированием
Старый 26.01.2013, 09:27   #161
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Ну один хер работает убого.
И если бы сначала пикалось по боксу, то не было бы такого!

Mesh            15                    3
Box             15                   30
__________________
(Offline)
 
Ответить с цитированием
Старый 26.01.2013, 09:34   #162
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Ответ: Советы по оптимизации

Сообщение от burovalex Посмотреть сообщение
Ну один хер работает убого.
А я и говорю что там неоптимально сделано ( сама проверка луч-треугольник + куча оверхеда от говнокода, коего там 99% ), несмотря на проверку по бинарному дереву.

Сообщение от burovalex Посмотреть сообщение
И если бы сначала пикалось по боксу, то не было бы такого!
Во-первых там есть проверка по боксу по-умолчанию так сказать. Только потом, если тест по боксу прошел, происходит проверка по треугольникам ( если это меш и они есть в нем ). Инфа 100%, ибо это логично, да и в исходнике sdk это есть.
Во-вторых
Сообщение от burovalex Посмотреть сообщение
"не было бы такого!"
такого это какого? Приведенные цифры как-то противоречат вышеописанному?
(Offline)
 
Ответить с цитированием
Старый 26.01.2013, 11:47   #163
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

такого это какого? Приведенные цифры как-то противоречат вышеописанному?
Я тебе об этом и толкую!!
Запусти екзешник, сам посмотри

Ссылка http://www.sendspace.com/file/ha9vz2
Жмём Click here to start download from sendspace
__________________
(Offline)
 
Ответить с цитированием
Старый 26.01.2013, 12:51   #164
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Ответ: Советы по оптимизации

Сообщение от burovalex Посмотреть сообщение
Я тебе об этом и толкую!!
Я может чего-то непонимаю, но тебя удивляет что пик по треугольникам медленее чем пик по боксу?
(Offline)
 
Ответить с цитированием
Старый 26.01.2013, 17:06   #165
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Нет, меня это не удивляет. Хотя думал будет работать быстрее.

Но твоё утверждение SDK с твоих слов по поводу перебора ентити по боксу, А уже далее по геометрии - чушь!
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com