Как се редактира голямо ниво от няколко души

Дизайн, графика, музика, звукови ефекти, проза.
Ivo
Sometimes here
Sometimes here
Мнения: 34
Регистриран: 01 дек 2003 21:39

Как се редактира голямо ниво от няколко души

Мнение от Ivo » 18 мар 2008 00:14

YE написа:Дайте да сменим темата с една по-интересна лично за мен: как се редактира голямо ниво от няколко души така, че да не си пречат, да се забелязват конфликтите и т.н.
Знам за два начина - или нивото се разделя на файлове, или се ползва база данни.
Аз ползвам файлове, но съм чувал предложения и за база данни. Файловете са текстови (Lua), и е много лесно да се сравняват през Perforc-а. Merge-ването не е толкоз лесно. За момента оставяме потребителите да се оправят, но си имам едно наум че може да се наложи да се пише собствен Merge. Той би бил наясно със структурата на файловете и ще ги смесва като данни, а не като гол текст. Perforce API-то позволява да се вмъкне такъв тул много лесно. За сега поне като се опитваш да редактираш файл който е зает от някой друг, се вади един страшен червен диалог дето те пита дали си сигурен че искаш да пипаш, и дали си наистина сигурен.
Иначе редактора позволява много лесно да се създават нови файлове, и да се прехвърлят обекти от един файл в друг (драг/дроп). Така че нивото почва като 1-2 файла, и постепенно се разраства. Също тия файлове са в йерархия. Примерно корена е "level", в него има "design", "art" и "terrain", а в тях има други файлове. Т.е. ако един дизайнер иска да добави нов файл в "design", и един художник иска нов "art", не се борят и двамата да пипат едновременно "level". Терена пък е разделен на парчета, и няколко души могат да човъркат различни части от нивото.
Хитрото на Lua-та е че парсера идва на готово, и могат да се правят разни трикове с функции (примерно да се ползват като макроси). Също позволява всеки файл след като се прочете, да се запише в кеш като двоичен. Следващия път се чете много по-бързо.

Потребителски аватар
YE
Power User
Power User
Мнения: 1554
Регистриран: 01 дек 2003 21:08
Местоположение: Outer Qwghlm
Контакти:

Re: Как се редактира голямо ниво от няколко души

Мнение от YE » 18 мар 2008 00:30

Аз пропуснах да кажа ние какво (сме опитвали да) правим по въпроса... Картите ни отдавна са текстови, и горе-долу поредови файлове (Lua, разбира се), но това само по себе си не помага много - иска се дисциплина, за да се пишат що-годе сортирано, така че merge да има смисъл - иначе всяка тривиална промяна води до разбъркване на десетки хиляди редове. Опитвахме система на базата на улеснено прехвърляне на големи парчета от картата - примерно 500х500 метра - от една карта в друга, с идеята че всеки от дизайнерите си работи в негово копие, и веднъж дневно се прехвърля на ръка. Това не работи по няколко причини, и досадата е най-малката от тях - има неочевидни проблеми по границите, които отнемат изненадващо много време, и има проблеми с големи служебни обекти, които reference-ват под-обекти и цялата тази йерархия се оказва пръсната в повече от едно парче.

Спряхме разсъжденията (и работата) по въпроса в един момент, в който се оказа, че имаме средно по един level designer на игра и проблема не седи много остро :-) Предполагам, ще се появи пак в бъдеще, и първото нещо, което ще пробваме, е това което Иво разправя - да се визуализира кои области от картата са маркирани, че някой друг ги редактира в момента, и да нацепим на повечко области и слоеве. (Дотук формата на картите е оптимизиран по-скоро за бързо зареждане, размер, бързо записване, и минимални промени в текста при минимални промени на нивото - в този ред - което не предразполага към цепене.)

Базата данни как се връзва с идеята за versioning? Пишем си VCS върху mysql и внимателно синхронизираме с нормалната VCS, или изобщо не пазим стари версии?

gemicha
Site Admin
Site Admin
Мнения: 2930
Регистриран: 20 ное 2003 22:20
Местоположение: USA

Re: Как се редактира голямо ниво от няколко души

Мнение от gemicha » 18 мар 2008 08:23

За да бъде както трябва ще е необходимо да се погледне на играта като на база от данни. Това с текстовите файлове няма как да работи. Причината не е, че са текстови, а в структурата на данните. Данните трябва да са организирани като за база данни.

Помисли си, че данните за играта са банкова система. Различните дизайнери, художници са на гишетата пръснати по клоновете или клиенти с транзакции по Интернет.

Ключовата дума е транзакции. Всяка промяна е транзакция, която се приема или отхвърля изцяло. Всяка потвърдена транзакция се отнася за всички. По всяко време имаш вярна база от данни. Всеки, които се интересува от тези данни (вижда на екрана) получава всички транзакции които се отнасят до данните от които се интересува.

Когато имаш намерение да промениш определена част от играта - модел/скрипт/парче от нивото просто го правиш. Ако някой също го променя това може да се даде като информация, но не е задължително. Ако някой внася пари по сметката ти а ти теглиш в момента това проблем ли е? Ако ти си затвориш сметката, а някой пробва да ти прати пари това до какво води?

Всяка транзакция трябва да актуализира състоянието на другите отворени редактори. Реализацията на това е сравнително лесно с тригери и разни други хитрости в базите данни. Всеки един от тези хора може почти веднага да види какво се променя. Ако има по-нова версия това ще се отрази. Има история на промените, но връщането на по-стара версия трябва да се напише или да се остави като възможност на самия редактор. Не е проблем и да бъде в базата, защото всяка транзакция може да създава undo лист.

Имах идея да направя нещо подобно за една от предните компании. И мисля, че ако бях останал още една година щях да го направя, но така и не съм го виждал реализирано. Според мен си струва отношението към данните за играта да бъде като към банкова система - като организация на данните, достъпа, сигурност, скалируемост и всичко, което произтича от професионално управление на данни.

malkia
Power User
Power User
Мнения: 1262
Регистриран: 03 дек 2003 07:45
Местоположение: Santa Monica, CA, US
Контакти:

Re: Как се редактира голямо ниво от няколко души

Мнение от malkia » 18 мар 2008 08:45

Ivo написа:
YE написа:Дайте да сменим темата с една по-интересна лично за мен: как се редактира голямо ниво от няколко души така, че да не си пречат, да се забелязват конфликтите и т.н.
Знам за два начина - или нивото се разделя на файлове, или се ползва база данни.
Аз ползвам файлове, но съм чувал предложения и за база данни. Файловете са текстови (Lua), и е много лесно да се сравняват през Perforc-а. Merge-ването не е толкоз лесно. За момента оставяме потребителите да се оправят, но си имам едно наум че може да се наложи да се пише собствен Merge. Той би бил наясно със структурата на файловете и ще ги смесва като данни, а не като гол текст. Perforce API-то позволява да се вмъкне такъв тул много лесно. За сега поне като се опитваш да редактираш файл който е зает от някой друг, се вади един страшен червен диалог дето те пита дали си сигурен че искаш да пипаш, и дали си наистина сигурен.
Иначе редактора позволява много лесно да се създават нови файлове, и да се прехвърлят обекти от един файл в друг (драг/дроп). Така че нивото почва като 1-2 файла, и постепенно се разраства. Също тия файлове са в йерархия. Примерно корена е "level", в него има "design", "art" и "terrain", а в тях има други файлове. Т.е. ако един дизайнер иска да добави нов файл в "design", и един художник иска нов "art", не се борят и двамата да пипат едновременно "level". Терена пък е разделен на парчета, и няколко души могат да човъркат различни части от нивото.
Хитрото на Lua-та е че парсера идва на готово, и могат да се правят разни трикове с функции (примерно да се ползват като макроси). Също позволява всеки файл след като се прочете, да се запише в кеш като двоичен. Следващия път се чете много по-бързо.
Ето как: Second Life!

SpaceMonkey
Power User
Power User
Мнения: 186
Регистриран: 14 яну 2004 17:17
Местоположение: Malmö, Sweden

Re: Как се редактира голямо ниво от няколко души

Мнение от SpaceMonkey » 18 мар 2008 23:26

При нас нивата са по малко и от двете.

Геометрията както споменах е под формата на custom локатори в Maya, които сочат към отделни файлове. Дизайнерът на нивото block-ва грубо геометрията, оттам нататък художниците работят по отделните части самостоятелно.

Останалата част от функционалността на нивото, като да речем тригери, NPC-та, райони и т.н. може да се редактира в самата игра, и това се пази в текстови файл. Имаме автоматичен merge, diff и прочее глезотии; реално обаче не се налага много често, защото обикновено само един човек работи по такъв setup.

При по-традиционна игра, разделена така на нива не виждам смисъл от нещо много по-сложно... Виж ако е някое ММО е друг въпрос.

Отговори