forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Проблема Blitz3d с большими расстояниями (http://forum.boolean.name/showthread.php?t=2266)

Nunan 02.01.2007 20:25

Проблема Blitz3d с большими расстояниями
 
В процессе разработки своей игры (онлайновая РПГ-Экшен) столкнулся с одной очень плохой проблемой.
Вы сталкивались с тем что на больших расстояниях от центра координат обьекты при перемщении начинают дребезжать, причем степень этого дребезжания прямо пропорционально зависят от расстояния.
Вот простой пример:
Код:

R=500000

Graphics3D 400,300
SetBuffer BackBuffer()
camera=CreateCamera()
CameraRange camera,0.05,10000
PositionEntity camera,R,0,0

light=CreateLight()
RotateEntity light,90,0,0

m=CreateSphere(10,camera)
m2=CreateCube(camera):TurnEntity m2,45,60,0
PositionEntity m,1.5,0,5
PositionEntity m2,-1.5,0,5

While Not KeyDown( 1 )
TurnEntity camera,0,1,0
RenderWorld
Text 0,0,"Range= "+R
Flip
Delay 9
Wend
End

запустите его у себя и посмотрите. Скажите что вы видите?
Попробуйте изменить значение "R" на 10000...10000000.

kortesfil 02.01.2007 20:30

Re: Проблема Blitz3d с большими расстояниями
 
Да дребезжит, чем дальше тем сильней.
Я знаю в чём проблема.Ты знаком с великой теорией относительности? Если знаеш то поймёш, чем дальше обьект тем модуляция фатонов пропорциональна времени и пространству.
ха, шучу) понятия не имею почему у тебя так)

SBJoker 02.01.2007 22:27

Re: Проблема Blitz3d с большими расстояниями
 
Это из-за того что разрядность z-буффера не бесконечная.
Например при 32битном z-буффере глубина объектов изменяется от 0 до 2^32

таким образом за границы этого диапазона берутся самые далеко отстоящие друг от друга вершины всей сцены. И это расстояние делится на 2^32 слоёв (если проводить аналогию с фотошопом). Если же расстояния очень велики то может получиться так что несколько близких вершин будут в одном слое и будут выводится одновременно что приведёт к их неправильному перекрытию и следовательно к дребезгу

Лекарство одно - уменьшиь масштаб моделей и соответственно скорости

jimon 02.01.2007 23:20

Re: Проблема Blitz3d с большими расстояниями
 
ну если брать за масштаб 1 = 1 метр
то растояния в 2 тыс км особо не надо :)

Черный крыс 04.01.2007 03:21

Re: Проблема Blitz3d с большими расстояниями
 
код не запускал...
Это возможно еще и эффект "борьбы полигонов" - просто расставь в редакторе обьекты так чтоб между ними был небольшой зазор.

Nunan 04.01.2007 21:49

Re: Проблема Blitz3d с большими расстояниями
 
SBJoker, почему тогда я такого не видел в играх? Ведь есть много игр в которых уровни имеют большие размеры. Или у них движки лучше сделаны?
В игре мне необходимы расстояния до 5км, тоесть если брать 1м=1, то 5000. И на расстоянии 5000 начинается маленькое дребезжание на один пиксел.

Diplomat 05.01.2007 00:51

Re: Проблема Blitz3d с большими расстояниями
 
2 Nunan : Да, движок Блица очень старый и вообще ацтойный. В нём куча багов. Он тормозит. Всё в кадре мерцает. Он работает на плохом 7-ом Директе. В нет шейдеров. Но есть очень крутое новое двигло: Дарк-Бейсик-ПРО. Все настоящие гуру давно перешли на него. Он держит ДиректХ9 и вообще классный и крутой. Очень рекомендую пока не поздно перейти на ДБПро.
Как вариант- можно очень легко и быстро написать свой настоящий движок: как раз для этого Майкрософт выпустила С#- среду как раз для разработки 3Д-движков.
Обращайся за помощью на форум сайта gamesanatomy.ru . Кстати, при входе на сайт показывают скрин- так вот это всё игры, сделанные на С# и DB-Pro.
Удачи!

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 20 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

pax 08.01.2007 13:35

Re: Проблема Blitz3d с большими расстояниями
 
Дело тут не в Z-буффере, а в том что в блитце используются 4-х байтные числа с плавающей точкой, в следствии чего число может быть либо очень большим с небольшой точностью, либо очень маленьким с большой точночтью, следовательно для блитца необходимо уменьшить масштаб всех моделей до размера, при котором это дрожание незаметно, либо при переходе в определенные зоны менять систему координат (что собственно гемор)

pax 08.01.2007 13:38

Re: Проблема Blitz3d с большими расстояниями
 
и есчо не делай так: CameraRange camera,0.05,10000
Лучше всего работает вот так: CameraRange camera,1,10000

SBJoker 08.01.2007 14:08

Re: Проблема Blitz3d с большими расстояниями
 
Цитата:

Сообщение от PAX
Дело тут не в Z-буффере

да ты шо? вах -вах.
А Z-буффер по твоему это что? Это массив чисел с плавающей точкой с разрядностью видеорежима по дефолту.
т.е. для блитца 32бит=4байт, поэтому когда расстояния между вершинами разных мешей превышает порог точности Z-буффера он меняет масштаб преобрахования координат или если проще точность, а поскольку Z-буффер считает расстояния во "внутренних координатах" то все 3д максовые системы расстояний некатят, т.к. только генерик юнитс совпадают. а всякие метры, миллиметры километры и т.д. наделе оказываются сотнями тысячами и миллионами генерик юнитс. что при водит к переполнению точность буфера уже на 1ой модели.

И все игры это учитывают..вообще все...и проблема это не блитца а ДХ , даже вообще всей игровой индустрии.

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

Кстати борьба полигонов усиливается по отдалению от центра координат также. Т.е. теоритически если двигать не игрока а весь мир относительно игрока то геймплей непострадает а борьбы полигонов небудет вообще (если игрок располоден в 0,0,0 хотя лучше немного сместить игрока от центра т.к. для объектов в центре координат неработают куча функций.

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

т.о. есть следующие способы борьбы с дрожание полигонов:
1. использовать более мелкий масштаб моделей (например 1генерик юнит=1метр)
2. использовать целые числа для CamereRange (и как можно с меньшей разницей)
3. неудалять камеру игрока далеко от центра координат(а если возможно двигать мир вместо игрока)
4. делать одномешевые уровни и/или объхекты (т.к. полигоны в приделах одного меша не борются)
8)

Nunan 08.01.2007 18:42

Re: Проблема Blitz3d с большими расстояниями
 
Я делаю РПГ-Action от первого лица типа типа DeusEx.
Вы советуете сделать 1=1метр, и в то же время советуете ставить CamereRange cam,1,1000, но это не подходит, так как от первого лица необходимо видеть минимум на радиусе 5-10 см, тоесть 0.1-0.05.

Перемещать мир а не героя - почти нереально и очень плохо, так как я уверен что при этом колизия начнёт не работать как надо.

Страшный конечно движок... Разработчики там хоть собираются его доводить до ума и до 9го директ Икса.

ZanoZa 08.01.2007 19:11

Re: Проблема Blitz3d с большими расстояниями
 
это надо осилить....

Diplomat 08.01.2007 20:15

Re: Проблема Blitz3d с большими расстояниями
 
[Evil]
Цитата:

Страшный конечно движок... Разработчики там хоть собираются его доводить до ума и до 9го директ Икса.
Дык и не собираюццо. Я ж говорю- "В БМВ броня ацтой, фаустпатрон не держит!"(с). Тебе, дорогой на gamesanatomy.ru прямая дорога. "Ты б в наСишники пошел, там тебя научат!"(с)
[/Evil]

SBJoker 08.01.2007 20:40

Re: Проблема Blitz3d с большими расстояниями
 
Ндэ...а кто мешает 0, 1000 поставить?

Platon 08.01.2007 21:30

Re: Проблема Blitz3d с большими расстояниями
 
Цитата:

Сообщение от Nunan
Страшный конечно движок...

Дык напиши лучше, чего же ты?

ЗЫ
Насчет движения мира и "дребезжания" - помню AsmLover писал что-то про пивоты на blitz.pp.ru

НУБ 08.01.2007 23:37

Re: Проблема Blitz3d с большими расстояниями
 
Nunan:
Действительно, зачем мучаться и писать такой проект как РПГ-акшен на таком тормозном, глючном и доисторическом двигле как блиц, тебе правильно советуют, возьми качественный инструмент(типа DarkBasic Pro или 3D Game Maker) и иди на форум профессиональных создателей крупных игровых проектов(FPS, RPG, MMORPG): gamesanatomy.ru

jimon 09.01.2007 00:20

Re: Проблема Blitz3d с большими расстояниями
 

Цитата:

Перемещать мир а не героя - почти нереально и очень плохо, так как я уверен что при этом колизия начнёт не работать как надо.
плакалЪ, рыдал и ваще валялся под столом минут десять :)

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

и вообще ... прежде чем обсирать какой нить двиг
и говорить что оо разрабы не юзают всеми блажаный 9 директ икс
ты лутче сам его поюзай на прямую без всяких двигов
может ето в некотором смысле вправит мозги
представь полная возможность доступа ко всему !
к VBO,FBO и другим "BO", возможность юзать шейдеры
но чтобы их юзать надо как минимум владеть двумя специальными языками программирования и иметь хорошо продвинутые мозги
так что учись юный падаван ... а потом уже обсирай все и вся ;)

HolyDel 09.01.2007 01:16

Re: Проблема Blitz3d с большими расстояниями
 
Нечего посылать соучастнега на .......
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 20 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

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

ЛысыЙ_Чук-Иванчук 09.01.2007 10:31

Re: Проблема Blitz3d с большими расстояниями
 
Есть проблема-Дребезжат полигоны-
Надо искать выход:

1- Изменить приоретет игры, допустим ранше игрок мог видеть очень далеко, надо сделать чтобы его большие дистанции не завлекали, по всюду монстры кровь, какието мелочи, продумать строение уровня(холмистая местность, высокие здания и т.д.)
2- Еслеже надо чтобы игрок видел за тридевять земель, можно сделать допустим так- делаеш ты здание, вот ты его доделал прим-1500поликов(красота), затем делаеш есшо одно здание вточноти как это только без мелких деталей(среднечок 800 поликов), ну и уже вообще убогое просто очертание здания 100 поликов, и чем дальше игрок отходет от здания одно сменяется на другое, и когда ты будеш уже совсем далеко дребезжать будет нечему.

А насчет того что такого нету в других играх ты сильно заблуждаешся, во многих крутых играх я видел такое(есле чесно когда видеш ошибки в моделировании сделаные в крутых играх на душе сразу стоновится Так приятно;))

Nunan 09.01.2007 17:27

Re: Проблема Blitz3d с большими расстояниями
 
jimon, а почему ты решил что я ничего не понимаю в этом?
Что тебе не понравилось в том предложении:
Цитата:

Перемещать мир а не героя - почти нереально и очень плохо, так как я уверен что при этом колизия начнёт не работать как надо.
???
При чём тут камера и просчет изображения?

Почему тогда ты не обратил внимание на:
Цитата:

SBJoker писал:
3. неудалять камеру игрока далеко от центра координат(а если возможно двигать мир вместо игрока)
Или ты подумал что я под словом "мир" имел ввиду не карту уровня со всеми моделями а что то другое??

jimon 09.01.2007 18:34

Re: Проблема Blitz3d с большими расстояниями
 
хм я теперь тут думаю кто протупил... :)
значит SBJoker был не прав

Diplomat 09.01.2007 19:32

Re: Проблема Blitz3d с большими расстояниями
 
ПолуОфф:
Двигать мир- в принципе можно и довольно просто. Другое дело, что в данном конкретном случае мы имеем дело не с абстрактным спейс-симом с огромными по игровым меркам космическими пространствами, а более типичную игру, к тому же несуществующую. Потому все описанные проблемы решаются без столь сложных операций, а лишь самораспрямлением рук и самообучением мозгов программиста.

SBJoker 09.01.2007 20:30

Re: Проблема Blitz3d с большими расстояниями
 
Если тут кто считает что расстояние от центра не влияет то флаг в руки, однако это доказано экспериментальным путём и в блитз3д это именно так.

HolyDel 10.01.2007 02:05

Re: Проблема Blitz3d с большими расстояниями
 
г-н Nunan говорил про коллизии, и тут я с ним согласен, ибо будет смешно если мир будет коллидится об игрока, а не игрок об мир.

НУБ 10.01.2007 02:19

Re: Проблема Blitz3d с большими расстояниями
 
HolyDel
А что в этом такого странного? :)

SBJoker 10.01.2007 02:34

Re: Проблема Blitz3d с большими расстояниями
 
всё в мире относительно

tormoz 10.01.2007 03:25

Re: Проблема Blitz3d с большими расстояниями
 
Во всех играх применяется смещение мра при большом удалении .
В некоторых играх даже заметны паузы при этом .
Например когда играешь серьезного сема на слабой машине то там паузы когда далеко зайдешь по полсекунды.
Этакая граница перестройки мира.

В некоторых играх когда падаешь куда-нить еще похлеще баги вылазят.
Так что неча на зеркало пенять, коли рожа крива...

зы. Написать систему перестройки мира не в состоянии ? Начни с тетриса.

Nunan 10.01.2007 20:20

Re: Проблема Blitz3d с большими расстояниями
 
Почему же, я многое в состоянии написать на Блитце.
Да, постоянно двигать мир - одно, а периодически (когда игрок например заходит за 1км от центра) - другое.

Я делаю многопользовательскую игру и если у клиента сделать такую систему перемещения, то у сервера такое не сделаешь, так как игроков много и все они в разных частях. И тут же я подумал... что серверу ведь и не важно дергается обьект при Рендере или нет, ведь он не будет делать Рендер.
Ммм...
(мысли)
Значит проблему можно решить, делая систему перезагрузки позиций только для клиента. Сервер будет прощитывать всё в одних координатах (нормальных, не смещенных), посылать клиенту а клиент уже будет изменять их...

Интересно на каких расстояниях колизия тоже начинает выдавать ненормальные вещи... или она на всём (возможном) протяжении 3д "мира" работает стабильно как и в местах близких к центру?

jimon 10.01.2007 22:20

Re: Проблема Blitz3d с большими расстояниями
 
Nunan
колизия работает нормально зачастую


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

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