[Plugin] Dff_Andreas (Release Development)
#1

Многие местные форумчане, наверно, знакомы с такими разработками, как MapAndreas и ColAndreas ( https://sampforum.blast.hk/showthread.php?tid=560218 ) и, если вы являетесь таковым, то вам и расписывать здесь особо ничего не нужно.

Как вы уже поняли из названия темы, в качестве объектов для проведения расчётов будут использоваться не модели коллизий (.col), а визуальные модели (.dff и без текстур).
Основная ставка в этом проекте была поставлена на мощную самооптимизационную способность, причём именно за счёт неё достигается высокая производительность и малое потребление оперативной памяти.

На данный момент (15.02.15) достигнуты следующие показатели:
* Потребление ОЗУ в штатном/базовом режиме: 65 МБт.
* Потребление ОЗУ в оптимизированном режиме: 20-70 и до 150 МБт (в зависимости от выбранных параметров).
* Производительность: 390 мс уходит на обсчёт 1000 рэйкастингов (против 300мс на 1000 у Поттуса(это на винде), однако, этот результат можно ещё улучшить, было бы время на это).
** [Данные получены при тестировании на винде поэтому результаты на линуксоидах также могут быть получше.]

Задание для себя
Превзойти colandreas по производительности (в рамках тестирований на лине)
Quote:
Originally Posted by Pottus
Quote:
Originally Posted by Mutha_X
...
I just wanted to ask you for a data for stresstest (or speedtest) like starting position of camera, it`s direction, number of iteration and time of computing (ray-casting) that all , ... to compare performance.
...
We tried to make a MapAndreas ultra 12000x12000 = 144,000,000 raycasts that took 15 minutes.
160,000 Raycasts per second.
Текущие native`ы:
PHP код:
native DA_ResetWorldData();
native DA_LoadWorldData();
native DA_UnloadAllModels();
native DA_SendCommand(cmdtxt[]);
DA_RaycastSimple(Float:StartXFloat:StartYFloat:StartZFloat:EndXFloat:EndYFloat:EndZ,&Float:distresult,&result,&Float:x,&Float:y, &Float:z);
DA_RaycastSimpleGetDist(Float:StartXFloat:StartYFloat:StartZFloat:EndXFloat:EndYFloat:EndZ,&Float:distresult,&result);
DA_RaycastADV(Float:StartXFloat:StartYFloat:StartZFloat:EndXFloat:EndYFloat:EndZ, &Float:distresult,&result,ignorematerialsmask,&ressurface,&itemid,&modelid,&Float:x,&Float:y, &Float:z);
DA_GetModelFramesNum(...);
DA_GetModelVerticlesNum(...);
DA_GetModelPolygonesNum(...);
DA_GetModelVerticlePos(...);
DA_GetObjVerticlePos(...);
DA_GetModelPolygoneInfo(...);
DA_GetMaxVerticles(...);
DA_GetMaxFrames(...);
DA_GetMaxPolygones(...);
DA_GetStaticObjectsNum(...);
DA_GetModelSurfaceType(...);
DA_GetObjNormalVector(...);
DA_RaycADV2(...);
DA_CheckModelExistence(...); 
Пока без исходников, как у коллеги по ColAndreas.

Используемые в DA_SendCommand(cmdtxt[]); команды (для работы в режиме консоли):
pawn Код:
helpswe //- список комманд плагина.
loadpack //- //загрузить все модели объектов из архива.
savepack //- сохранить все модели объектов в архив.
archall //- сохранить все загруженные файлы в объединённые по типу архивы.
ldffall //- произвести загрузку всех моделей объектов из оригинальных .dff файлов (не использовать)
unloadall //- отгрузить все загруженные модели объектов.
homecomp //- составление бинарного древа объектов.
rcmpobjs //- обработка моделей объектов на предмет чистки их избыточной информации.
mostusedmodels //- выводит количество использованных на карте повторяющихся объектов в файл SWE_files/most_used_models.txt.
Reply
#2

Плагин проверки наличия коллизии между двумя точками?) Я просто не в курсе коландреаса.
Reply
#3

Quote:
Originally Posted by Makar93
Посмотреть сообщение
Плагин проверки наличия коллизии между двумя точками?) Я просто не в курсе коландреаса.
Да, так же можно получить расстояние до столкновения и ещё кучу всего.
Reply
#4

Sorry for speaking english here but do you will post it on english section? I would like to try this...

Ya lublu guys xD
Reply
#5

Круто. Он будет учитывать динамические объекты мира (игроков, машин)?
Reply
#6

Игроков и машин - по желанию, но разрушаемые объекты (фонарные столбы, коробки) нет, хотя можно изменить - так как нет смысла в этом из-за рассинхрона.
Reply
#7

Будет репозиторий на Github или что-то подобное?
Reply
#8

Для передвижения NPC'юх можно использовать вместо MapAndreas'a?
Reply
#9

Quote:
Originally Posted by lost13
Посмотреть сообщение
Для передвижения NPC'юх можно использовать вместо MapAndreas'a?
Конечно можно, она точнее мап андреас, так же для нпс можно сделать видимость врагов, обработка выстрелов, нахождение стен, вплоть до того, что нпс могу забираться на стены.
Reply
#10

Пример можно? Как узнать что под нпс есть пол? Или препядствие перед ним?
Reply
#11

Пол - "стреляешь" 1 вектором вниз от координаты нпс, препятствие - вектор по направлению facingangle от нпс, во всех случаях проверяешь расстояние до пересечения и факт пересечения (result=1), во втором ещё придётся брать нормаль поверхности и проверять что она почти или совсем параллельна горизонтальной плоскости мира (с нормалями попозже, в colandreas уже есть, поэтому во избежание путаницы функция будет похожей).
С гитхабом - не знаю(не обитал на проектах подобного типа). Сначала нужно добиться юзабельности и производительности, а времени не очень много.
Reply
#12

Спасибо, я понимаю что нужно "стрелять", я не понимаю как)
Reply
#13

Первый раз с такими плагинами сталкиваюсь, можно ли с помощью него определить расстояние от игрока до объекта, в той стороне, куда смотрит игрок?
Reply
#14

Quote:
Originally Posted by lost13
View Post
Спасибо, я понимаю что нужно "стрелять", я не понимаю как)
Quote:
Originally Posted by vampir9763
View Post
Первый раз с такими плагинами сталкиваюсь, можно ли с помощью него определить расстояние от игрока до объекта, в той стороне, куда смотрит игрок?
Code:
...
new string[64];
new Float:px, Float:py, Float:pz;// playerpos
new Float:cx, Float:cy, Float:cz;// camera dir
new Float:returndistance, iscollisionfound;
GetPlayerPosition(playerid,px,py,pz);
GetPlayerCameraFrontVector(playerid, cx, cy, cz);// End* - нормированный вектор направления

DA_RaycastSimpleGetDist(px, py, pz, cx, cy, cz, 10.0,returndistance,iscollisionfound); // в десяти метрах от игрока по направлению камеры ищет "стену"
if(iscollisionfound)// ==true -> 
{
    format(string,64,"Коллизия найдена на расстоянии %.1f метров.",returndistance);
    SendClientMessage(playerid, -1, string);
}
else
{
    SendClientMessage(playerid, -1, "Коллизия не найдена");
}
...
Reply
#15

А будут ли вычисления достаточно быстрыми, чтоб без проблем обрабатывать стрельбу из оружия? И примерно когда релиз?
Reply
#16

Quote:
Originally Posted by stabker
View Post
А будут ли вычисления достаточно быстрыми, чтоб без проблем обрабатывать стрельбу из оружия? И примерно когда релиз?
Для небольшого ТДМ хватит, но в потоках было бы вообще шикарно.
Reply
#17

Quote:
Originally Posted by n0minal
Посмотреть сообщение
Sorry for speaking english here but do you will post it on english section? I would like to try this...

Ya lublu guys xD
Same here.

What is the point of this plugin?
Reply
#18

Так его уже скачать то можно или нет?
Reply
#19

Ну что же, поставленной цели в виде большей производительности в аналогичном тесте (смотрите видео из первого сообщения темы ColAndreas) добились:
Теперь 1000 итераций "рей-кастингов" выполняются за 430 тиков против 300~310.

Дабы уточнить (но всё же этого будет мало для полной картины дела) на чём у кого тестировалось по ЦПУ (из тех данных что доступны).
У Поттуса: i5 (Lynnfield) 2.4 ГГц
У меня: Core Duo E6120 2.14 ГГц

В связи с этим объявляю, что можно будет в скорое время будет поиграться с тестовой версией (напишите в ЛС). А также здесь или также в ЛС отпишитесь, если хотите видеть какой-либо дополнительный функционал и с прочими пожеланиями) (доступный скриптам очень сильно ограничен).

For outsiders(not rus lang):
The point of this plugin is the same point of ColAndreas, but it is uses dff-modelsdata for some reasons i need in future. The reason of location this plugin in this section is early development status.
Reply
#20

А где плагин взять-то? Мне нужно движение по параболе с отскоками =)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)