|
3D-программирование Вопросы, касающиеся программирования 3D мира |
15.12.2008, 07:04
|
#1
|
Нуждающийся
Регистрация: 16.10.2008
Сообщений: 50
Написано 3 полезных сообщений (для 3 пользователей)
|
Реализация леса.
Привет!
Хочу реализовать лес с наименьшими фпс потерями. Подскажите, как выполнить инстансинг стандартными блитц-средствами?
__________________
По следам BASIC
|
(Offline)
|
|
15.12.2008, 20:17
|
#2
|
Проектировщик
Регистрация: 25.03.2007
Сообщений: 536
Написано 252 полезных сообщений (для 715 пользователей)
|
Ответ: Реализация леса.
Я думаю, что можно сделать примерно так:
|
(Offline)
|
|
16.12.2008, 16:00
|
#3
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Реализация леса.
Лес из 5-10 тыс. не сложных деревьев можно сделать. Только нужна определенная плотность леса, так чтобы в камеру не попадало больше скажем 100-200 штук, для чего нужен хороший менеджер, идти нужно в направлении HideEntity/ShowEntity
|
(Offline)
|
|
16.12.2008, 21:00
|
#4
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Реализация леса.
для чего нужен хороший менеджер, идти нужно в направлении HideEntity/ShowEntity
|
угу, только хайд/шоу не спасёт от наличия в сцене смертельного количества ентитей.
об чём я и говорил.
не сделать нормальный лес на блице.
можно в приницпе генерить, т.е. копировать деревья вокруг игрока при его передвижении. вблизи детальные, вдалеке плотную завесу спрайтов, чтоб при малом количестве было ощущение леса.
|
(Offline)
|
|
16.12.2008, 21:19
|
#5
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: Реализация леса.
в лыбе BlitzGrass трава так генерится !! т.е. идеш и она пред тобой выростает !! что бы небыло "предтобой" нужно увеличить радиус т.е. количество кустиков травы что в свою очередь влеяет на скорость генирации !! при том что кустик травы это около 4-16 поликов !!
а нормальное дерево вблизи это около 1000 !! если взять их 100 то получим 100К полигонов что в принципе позволяют многие современные системы !!
|
(Offline)
|
|
16.12.2008, 23:02
|
#6
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Реализация леса.
Сообщение от Mr_F_
угу, только хайд/шоу не спасёт от наличия в сцене смертельного количества ентитей.
об чём я и говорил.
не сделать нормальный лес на блице.
можно в приницпе генерить, т.е. копировать деревья вокруг игрока при его передвижении. вблизи детальные, вдалеке плотную завесу спрайтов, чтоб при малом количестве было ощущение леса.
|
С кривыми руками - не сделать.
А с сингл-сурфейсом сделать и ещё как.
З.Ы. кстати Hide/ShowEntity спасает от кол-ва ентити.
можно в приницпе генерить, т.е. копировать деревья вокруг игрока при его передвижении. вблизи детальные, вдалеке плотную завесу спрайтов,
|
А в твоём Обливионе - что, по-другому?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
16.12.2008, 23:33
|
#7
|
|
Ответ: Реализация леса.
ну дык, а толку то ? всё равно все деревья будут гонятся по шине, а это в любом случае медленее когда деревья берутся из видеопамяти
|
|
|
17.12.2008, 20:25
|
#8
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Реализация леса.
Не, хайд как раз и есть спасение от числа энтити )) , только приходится дистанцию обзора уменьшать и прятать работу менеджера сцены туманом.
Ок, завтра покажу, что имею ввиду, лес из 10 тыс. объектов.
|
(Offline)
|
|
18.12.2008, 09:19
|
#9
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Реализация леса.
Вот пример леса из 10К объектов и как вариант менеджера.
Смысл в том чтобы скрыть все что далеко и сзади камеры + отсрочка проверки расстояния и отслеживание перемещения камеры.
На моем симпроне 2000 без менеджера фпс = 7...13 , с ним 50...60.
|
(Offline)
|
|
18.12.2008, 11:09
|
#10
|
Нуждающийся
Регистрация: 16.10.2008
Сообщений: 50
Написано 3 полезных сообщений (для 3 пользователей)
|
Я не лесник, но, вроде, удалось вырастить рощу. Создал несколько групп мешей, в каждую группу кучу деревьев. ФПС держит хорошо(100-200 кадров) , поликов около 50к-100к.
По поводу HideEntity/ShowEntity. Заметил очень помогает при ограниченном обзоре камеры, в камерах от первого или третьего лица( РПГ или шутер). Лучше чем в один меш.
При камере сверху (аля РТС), помогает в один меш больше.
Мои наблюдения,
Сообщение от Damp
Вот пример леса из 10К объектов
|
что там, посмотрим...
__________________
По следам BASIC
Последний раз редактировалось Yanez, 18.12.2008 в 11:22.
|
(Offline)
|
|
18.12.2008, 11:47
|
#11
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Реализация леса.
Давно извесно что HideEntity/ShowEntity безбожно тормозят, юзайте EntityAlpha 0, эффект тотже, а скорости больше.
__________________
|
(Offline)
|
|
18.12.2008, 13:06
|
#12
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Реализация леса.
Не, альфа=0 не прокатит. Только хайд\шоу, хайд полностью выводит из рендера, не видно, не пикается, нет коллизий. Если схайдить все 10К деревьев, фпс будет как будь-то и нет ни каких деревьев.
Если лес, то просто по одному скрывать, если помещения, то эффективнее секторами.
|
(Offline)
|
|
19.12.2008, 08:23
|
#13
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Re: Реализация леса.
Вобщем, расскрываю секрет как сделать всё просто и быстро )
;-------------- В начале программы----------------- Global idd=9000 Dim arrpalm(idd,3) Global palm=LoadMesh ("tree.b3d") ScaleEntity palm,5,5,5 For i = 1 To idd arrpalm(i,0)=CopyEntity (palm) .tray c_x=Rnd(1 , 25000) c_z=Rnd(1 , 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 i =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 i =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 i =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 i =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)деревьев на карту) можно сделать там коечто типами и ещё немного ускорить алгоритм, но это уже сами думайте
|
(Offline)
|
|
19.12.2008, 10:44
|
#14
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Реализация леса.
Сообщение от Damp
Не, альфа=0 не прокатит. Только хайд\шоу, хайд полностью выводит из рендера, не видно, не пикается, нет коллизий. Если схайдить все 10К деревьев, фпс будет как будь-то и нет ни каких деревьев.
Если лес, то просто по одному скрывать, если помещения, то эффективнее секторами.
|
А ты бы сначала проверил чем вот так безапелляционно утверждать.
__________________
|
(Offline)
|
|
19.12.2008, 13:13
|
#15
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Реализация леса.
ну что вы. нужно скывать "рощи", имхо, чем поодному дереву. т.е. парентить скажем сотню деревьев к одному пивоту и скрывать\показывать его. еще лучше сделать ету "рощу" одним сюрфейсом.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:42.
|