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=7448)

Yanez 15.12.2008 07:04

Реализация леса.
 
Привет! ;)

Хочу реализовать лес с наименьшими фпс потерями. Подскажите, как выполнить инстансинг стандартными блитц-средствами?

BlackDragon 15.12.2008 20:17

Ответ: Реализация леса.
 
Вложений: 1
Я думаю, что можно сделать примерно так:

Damp 16.12.2008 16:00

Ответ: Реализация леса.
 
Лес из 5-10 тыс. не сложных деревьев можно сделать. Только нужна определенная плотность леса, так чтобы в камеру не попадало больше скажем 100-200 штук, для чего нужен хороший менеджер, идти нужно в направлении HideEntity/ShowEntity

Mr_F_ 16.12.2008 21:00

Ответ: Реализация леса.
 
Цитата:

для чего нужен хороший менеджер, идти нужно в направлении HideEntity/ShowEntity
угу, только хайд/шоу не спасёт от наличия в сцене смертельного количества ентитей.

об чём я и говорил.
не сделать нормальный лес на блице.

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

IGR 16.12.2008 21:19

Ответ: Реализация леса.
 
в лыбе BlitzGrass трава так генерится !! т.е. идеш и она пред тобой выростает !! что бы небыло "предтобой" нужно увеличить радиус т.е. количество кустиков травы что в свою очередь влеяет на скорость генирации !! при том что кустик травы это около 4-16 поликов !!
а нормальное дерево вблизи это около 1000 !! если взять их 100 то получим 100К полигонов что в принципе позволяют многие современные системы !!

ABTOMAT 16.12.2008 23:02

Ответ: Реализация леса.
 
Цитата:

Сообщение от Mr_F_ (Сообщение 92210)
угу, только хайд/шоу не спасёт от наличия в сцене смертельного количества ентитей.

об чём я и говорил.
не сделать нормальный лес на блице.

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

С кривыми руками - не сделать.
А с сингл-сурфейсом сделать и ещё как.
З.Ы. кстати Hide/ShowEntity спасает от кол-ва ентити.

Цитата:

можно в приницпе генерить, т.е. копировать деревья вокруг игрока при его передвижении. вблизи детальные, вдалеке плотную завесу спрайтов,
А в твоём Обливионе - что, по-другому?

jimon 16.12.2008 23:33

Ответ: Реализация леса.
 
ну дык, а толку то ? всё равно все деревья будут гонятся по шине, а это в любом случае медленее когда деревья берутся из видеопамяти

Damp 17.12.2008 20:25

Ответ: Реализация леса.
 
Не, хайд как раз и есть спасение от числа энтити )) , только приходится дистанцию обзора уменьшать и прятать работу менеджера сцены туманом.
Ок, завтра покажу, что имею ввиду, лес из 10 тыс. объектов.

Damp 18.12.2008 09:19

Ответ: Реализация леса.
 
Вложений: 1
Вот пример леса из 10К объектов и как вариант менеджера.
Смысл в том чтобы скрыть все что далеко и сзади камеры + отсрочка проверки расстояния и отслеживание перемещения камеры.
На моем симпроне 2000 без менеджера фпс = 7...13 , с ним 50...60.

Yanez 18.12.2008 11:09

Я не лесник, но, вроде, удалось вырастить рощу. Создал несколько групп мешей, в каждую группу кучу деревьев. ФПС держит хорошо(100-200 кадров) , поликов около 50к-100к.

По поводу HideEntity/ShowEntity. Заметил очень помогает при ограниченном обзоре камеры, в камерах от первого или третьего лица( РПГ или шутер). Лучше чем в один меш.

При камере сверху (аля РТС), помогает в один меш больше.

Мои наблюдения, :mda:

Цитата:

Сообщение от Damp (Сообщение 92308)
Вот пример леса из 10К объектов

что там, посмотрим...

SBJoker 18.12.2008 11:47

Ответ: Реализация леса.
 
Давно извесно что HideEntity/ShowEntity безбожно тормозят, юзайте EntityAlpha 0, эффект тотже, а скорости больше.

Damp 18.12.2008 13:06

Ответ: Реализация леса.
 
Не, альфа=0 не прокатит. Только хайд\шоу, хайд полностью выводит из рендера, не видно, не пикается, нет коллизий. Если схайдить все 10К деревьев, фпс будет как будь-то и нет ни каких деревьев.
Если лес, то просто по одному скрывать, если помещения, то эффективнее секторами.

Dream 19.12.2008 08:23

Re: Реализация леса.
 
Вобщем, расскрываю секрет как сделать всё просто и быстро:))
PHP код:

;-------------- В начале программы-----------------
Global 
idd=9000
Dim arrpalm
(idd,3)
Global 
palm=LoadMesh ("tree.b3d")
ScaleEntity palm,5,5,5
For 1 To idd
arrpalm
(i,0)=CopyEntity (palm)
.
tray
c_x
=Rnd(25000)
c_z=Rnd(25000)
c_y=TerrainY(terrain,c_x,100,c_z)
If 
c_y<90 Then Goto tray
arrpalm
(i,1)=Float(c_x)
arrpalm(i,2)=Float(c_y)-3
arrpalm
(i,3)=Float(c_z)
PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1
RotateEntity arrpalm
(i,0),0,Rnd(360),0
EntityAutoFade arrpalm
(i,0),1000,1001
Next
HideEntity palm
;----------------------Вызывать в теле игрыи желательно не каждый цыкл--------
Function 
updata_palm()
xf=Rnd(1,5)
Select xf
Case 1
For =1 To idd Step 1
distx
=arrpalm(i,1)-EntityX(plr,1)
distz=arrpalm(i,3)-EntityZ(plr,1)
If 
arrpalm(i,0)=0
If distx>-1100 And distx<1100
If distz>-1100 And distz<1100
arrpalm
(i,0)=CopyEntity (palm)
PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1
RotateEntity arrpalm
(i,0),0,Rnd(360),0
EntityAutoFade arrpalm
(i,0),1000,1400
EndIf 
EndIf
ElseIf 
arrpalm(i,0)<>0
If EntityDistance (arrpalm(i,0),plr)>1400
FreeEntity arrpalm
(i,0)
 
arrpalm(i,0)=0
Goto nexs
EndIf
EndIf
.
nexs
Next
Case 2
For =1 To idd Step 2
distx
=arrpalm(i,1)-EntityX(plr,1)
distz=arrpalm(i,3)-EntityZ(plr,1)
If 
arrpalm(i,0)=0
If distx>-1100 And distx<1100
If distz>-1100 And distz<1100
arrpalm
(i,0)=CopyEntity (palm)
PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1
RotateEntity arrpalm
(i,0),0,Rnd(360),0
EntityAutoFade arrpalm
(i,0),1000,1400
EndIf 
EndIf
ElseIf 
arrpalm(i,0)<>0
If EntityDistance (arrpalm(i,0),plr)>1400
FreeEntity arrpalm
(i,0)
 
arrpalm(i,0)=0
Goto nexs1
EndIf
EndIf
.
nexs1
Next
Case 3
For =1 To idd Step 2
distx
=arrpalm(i,1)-EntityX(plr,1)
distz=arrpalm(i,3)-EntityZ(plr,1)
If 
arrpalm(i,0)=0
If distx>-1100 And distx<1100
If distz>-1100 And distz<1100
arrpalm
(i,0)=CopyEntity (palm)
PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1
RotateEntity arrpalm
(i,0),0,Rnd(360),0
EntityAutoFade arrpalm
(i,0),1000,1400
EndIf 
EndIf
ElseIf 
arrpalm(i,0)<>0
If EntityDistance (arrpalm(i,0),plr)>1400
FreeEntity arrpalm
(i,0)
 
arrpalm(i,0)=0
Goto nexs2
EndIf
EndIf
.
nexs2
Next
Default
For 
=1 To idd Step 5
distx
=arrpalm(i,1)-EntityX(plr,1)
distz=arrpalm(i,3)-EntityZ(plr,1)
If 
arrpalm(i,0)=0
If distx>-1100 And distx<1100
If distz>-1100 And distz<1100
arrpalm
(i,0)=CopyEntity (palm)
PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1
RotateEntity arrpalm
(i,0),0,Rnd(360),0
EntityAutoFade arrpalm
(i,0),1000,1400
EndIf 
EndIf
ElseIf 
arrpalm(i,0)<>0
If EntityDistance (arrpalm(i,0),plr)>1400
FreeEntity arrpalm
(i,0)
 
arrpalm(i,0)=0
Goto nexs3
EndIf
EndIf
.
nexs3
Next
End Select
End 
Function 

Воть) у меня нормально тянет 30к (idd)деревьев на карту) можно сделать там коечто типами и ещё немного ускорить алгоритм, но это уже сами думайте:)

SBJoker 19.12.2008 10:44

Ответ: Реализация леса.
 
Цитата:

Сообщение от Damp (Сообщение 92321)
Не, альфа=0 не прокатит. Только хайд\шоу, хайд полностью выводит из рендера, не видно, не пикается, нет коллизий. Если схайдить все 10К деревьев, фпс будет как будь-то и нет ни каких деревьев.
Если лес, то просто по одному скрывать, если помещения, то эффективнее секторами.

А ты бы сначала проверил ;) чем вот так безапелляционно утверждать.

HolyDel 19.12.2008 13:13

Ответ: Реализация леса.
 
ну что вы. нужно скывать "рощи", имхо, чем поодному дереву. т.е. парентить скажем сотню деревьев к одному пивоту и скрывать\показывать его. еще лучше сделать ету "рощу" одним сюрфейсом.


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

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