Войти
ПрограммированиеФорумГрафика

Рендер как в Minecraft-е - кто нибудь знает основные "секреты"? (96 стр)

Страницы: 195 96 97 98101 Следующая »
#1425
13:26, 18 дек. 2017

СерыйМыш
> Кстати, если отдавать клиенту только видимые поверхности
Да, но высчитать только видимые чанки тоже непростая задача, и ресурсы железа кушает хорошо.


#1426
13:59, 18 дек. 2017

Programmer777
> Да, но высчитать только видимые чанки тоже непростая задача, и ресурсы железа
> кушает хорошо
Так вам всё равно дельту присылают на сихронизацию. Через неё и высчитывать. Не обязательно делать какую-то хитрую, достаточно просто смотреть прозрачность кубика сверху.

#1427
18:44, 18 дек. 2017

fornetjob
> Так вам всё равно дельту присылают на сихронизацию.
Что за дельта?

#1428
10:16, 19 дек. 2017

Programmer777
> Что за дельта?
Смысла гонять все чанки нет, а только изменяемые игроками кубики.

#1429
13:47, 19 дек. 2017

fornetjob
> Смысла гонять все чанки нет, а только изменяемые игроками кубики.
Значит это так называется) Ну это логично.

#1430
16:42, 19 дек. 2017

fornetjob
> Programmer777
> > Что за дельта?
> Смысла гонять все чанки нет, а только изменяемые игроками кубики.

Говоря человечьим языком: дельта (в данном контксте) - разница между тем, что было, и тем, что стало.
Прислал сначала только верхний слой чанка. Игрок копает куб, сервер присылает инфу о том/тех кубах, которые становится видимыми. Экономия огромная, особенно на этапе первичной загрузки. Одно дело прокачать весь чанк целиком, а другое дело - только оптимизированную видимую часть. Если при этом остальные кубы забиты нулями, то любой алгоритм сжатия превращает чанк в маленький пакет. Соответственно можно быстро прогрузить значительные площади. А если добавить к этому технологию "фанерных задников", то и визуальная часть будет очень прилично выглядеть.
А чтобы каждый раз не высчитывать, что видно, а что нет, достаточно сохранить битовую маску, показывающую какие блоки видимые. Один раз обсчитал при генерации, и потом подправляй по мере изменения мира.

Играл я как-то на детских серверах, где стоит радиус видимости в 3 чанка. Очень неприятно, когда идёшь, и тут над тобой мгновенно проявляется часть здания, висящая в воздухе. Балкон какой-нибудь. А потом через десяток шагов бац, и стена. Зато ничего не тормозит.
Чем дальше игрок видит, тем ему комфортнее играть, и тем лучше впечатление от игры, но тем больше данных приходится прокачивать. Если сделано всё дубово, как в майне, то даже по локалке начинает лагать при подгрузке.

#1431
12:15, 23 дек. 2017

>, но тем больше данных приходится прокачивать.
Если мир генерируется по формуле, то передавать надо только изменения относительно этой формулы, так ведь?
Причём, "изменениями" могут быть как действия игроков, так и месторождения, о которых знает только сервер, и всё рудное тело передаётся целиком когда клиент до него докопается.

>я приводил расчёты по размерам карт.
Согласен на 150%.
Добавлю, что можно сделать мир островами в глубоком океане с некопаемым дном, где дальние острова отображаются фанерным задником.
А размер каждого острова ограничен, скажем, 512х512 блоков.
Видимость - честно безграничная. Мир может быть честной сферой (если в океане строить нельзя, и вода и рендер основаны не на блоках) - т.к. система координат острова может быть повёрнута под любым углом в глобальной ск.
Для исследования мира надо крафтить кораблики (иначе акулы съедят).
Можно сделать волны и прибой (тупо 2d картой, куда море доплёскивает).

>, как в оригинальном майне.
Оригинальный майн - это паровоз Стивенсона. Легенда, пробившая человечеству путь вперёд, место которой - в музее.

>Бедрок, магма - это всё костыли.
Ну, не скажите. Я оченно впечатлился Террарией, и идея предсказуемой структуры мира мне нравится. Если начинаются лавовые пещеры и прочие вулканические бяки - это хороший индикатор задуматься, а не слишком ли глубоко ты докопался.
Опять же, самые ценные руды - в глубинах, но нужны артефакты для защиты от лавы. Хорошо ложится на идею прокачки.

И если ты будешь знать, что мир внизу всегда кончается лавой - это добавляет ему цельности и реалистичности.

З.Ы. Можно тупо сделать так, что бедрок срёт лавой если у него сосед - воздух. Тогда даже лавоупорные/в режиме бога никуда не вывалятся.

>10 тысяч блоков (10*10км). [...] При этом несжатый объём при двухбайтовой кодировке и высоте мира 256 блоков выходит всего-навсего около 50 терабайт.
Я всё больше облизываюсь в сторону представления чанка в виде микро-октри или микро-bsp деревьев. Чтобы послать блоки глубоко и надолго, и при этом поиметь нехилый такой выигрых по компактности данных.
Ну... представьте себе не кубы, а мир с угловатостью на уровне Quake 2 или Unreal 1.
Причём, чанк ещё побит по вертикали на субчанки, доводя доступный диапазон высот до километров, а распределение минералов в толще породы (гранит/глинозём/песчаник) - фрактальная функция и вообще никогда не хранится, а просчитывается на лету при генерации мешей и при копании - т.е. толща породы тоже имеет вес пера, как и воздух.

>Какие серьезные утверждения. А чем штатные не подошли?
Я потом расскажу, когда выгребу сугробы опилок с ковра и закончу паять самодельный хтонический блок питания, ок?

#1432
17:25, 23 дек. 2017

Cheb
> Если мир генерируется по формуле, то передавать надо только изменения
> относительно этой формулы, так ведь?
Если это сессионная игра, когда мир генерируется снова каждый раз. Если не так - нужно исходить из самого плохого - они перекопали весь мир и тогда загрузка всех чанков займёт непотребное количество времени.

#1433
18:50, 23 дек. 2017

Cheb
> Ну... представьте себе не кубы, а мир с угловатостью на уровне Quake 2 или
> Unreal 1.
Вместо кубов можно представить шестигранники :-), у которых каждая вершина может двигаться по трем координатам в некоторых пределах. Например, каждый блок хранит значение одной своей вершины (скажем, правая-верхняя-дальняя), а из информации хранимой в соседних трех семи блоках можно получить данные о форме данного блока. Дискретность смещения может быть 1/8 - 1/16 блока (метра), а максимальное смещение - плюс-минус половина блока. С точки зрения производительности - у нас осталось тоже число граней. А вот с "физической" частью сложнее, ведь надо как-то считать объем блока при копании, да и хранить "землю" в инвентаре придется не в блоках, а единицах поменьше. Зато можно получить некубический ландшафт, да и с жидкостями работать будет веселее.
Если сложно - ограничиться вертикальной координатой и хранить слои материала. Пласты ископаемых и под/надземные воды получатся неплохо.

Правка: посчитал вершины для двухмерного случая, а надо для трехмерного.
#1434
22:16, 24 дек. 2017

Cheb
> доступный диапазон высот до километров
У меня один вопрос - нахрена? Что за гигантомания? Чтобы игрок смог за месяц непрерывного онанизма игрового процесса построить столб высотой в километр и спрыгнуть?
Тут основная проблема, мучающая всех - как сделать вменяемую дальность обзора, и при этом чтобы всё летало.

Cheb
> Я всё больше облизываюсь в сторону представления чанка в виде микро-октри или
> микро-bsp деревьев. Чтобы послать блоки глубоко и надолго, и при этом поиметь
> нехилый такой выигрых по компактности данных.

Это только на этапе хранения/передачи данных. Как только встаёт вопрос поиска пути или обсчёта коллизий, тут и начинается взрыв мозга. И либо переводи всё в единичную сетку, либо изобретай что-то на грани фантастики.

Есть уже куча движков на разных типах деревьев, позволяющие даже копать/строить, есть демки на этих движках. Некоторые весьма красивые. Но вся засада начинается, когда встаёт необходимость взаимодействовать с этими полями/лесами/горами не для рендеринга, а на сервере. И тут у разработчиков обычно энтузиазм сходит на нет. Потому как одно дело отобразить пейзаж, и совсем другое дело, ворочать этот пейзаж в памяти сервера, чтобы мобы нормально гуляли по поверхности и занимались своими делами.

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

В общем, хоть и хают все майн за его кривизну, а сделан он весьма хитро. Хоть и тупо "в лоб". Можно очень многое оптимизировать, и даже заставить всё работать более-менее шустро. Был такой самописный (переделка оригинального майна) сервер - GreenCubes. Написан девочками, что уже само по себе доставляет. Они умудрялись держать толпу до 500 тушек игроков хоть в одной локации, хоть распределённо по миру, и при этом сервер у них не лагал. И работало на этом сервере почти всё. И мобы бегали, и схемы на редстоуне что-то там шевелили, и вагонетки катались. Понятно дело, что 500 тел для ММО - несерьёзно, но тем не менее. Потом они решили написать свою игру, не на кубиках, но со строительством а ля майнкрафт, и хз чем там всё закончилось, я давно перестал следить.

В общем, дело в следующем: так-то тема тут у нас про рендер, но скатились на внутренности движка, ибо без них никуда. Рендер по кубам хоть и достаточно тривиален, но если его пытаться делать с наскока, то ничего путного не выходит. Поэтому тут периодически появляются идеи, как кубический мир оптимизировать, чтобы и красиво, и далеко видать, и не жрало память как гугл хром. У некоторых даже что-то приличное получается, но всё почему-то остаётся на уровне экспериментов, и никто не довёл работу до ума, в смысле до конечного продукта в виде игры. Может надо как-то коллективно этим заняться? А то бросают все на полдороги, пропадают, не оставляя ни исходников, ни алгоритмов, ни идей, а новички потом то же самое пытаются делать с нуля, на полпути устают, и тоже бросают.

#1435
0:33, 25 дек. 2017

>так-то тема тут у нас про рендер, но скатились на внутренности движка, ибо без них никуда.
Вестимо дело, никуда. Я даже больше скажу: структура мира должна быть заточена под ИИ и физику, а рендер любой дурак напишет (у не-дурака просто получится быстрее и качественнее).

>нахрена? Что за гигантомания? Чтобы игрок смог за месяц непрерывного онанизма игрового процесса построить столб высотой в километр и спрыгнуть?
Чтобы был возможен пейзаж на уровне хотя бы того же (ой, фууу) Скайрима.
Основная идея: для "безграничной" видимости (кою дают только лоды) мир должен генерироваться на основе красиво выглядящей двумерной карты высот, с горами, реками, эрозией и прочим - и только на уровне ~100 метров обретать истинную трёхмерность - нависающие козырьки, пещеры и прочая.
Всякая мелочь типа мобов и мелких построек дальше 200 метров должна быть не видна (а хотя бы и мыла добавить) - кроме отдельных особо выдающихся художества игроков, которые чтобы рисовались импосторами с глубиной.

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

>Но вся засада начинается, когда встаёт необходимость взаимодействовать с этими полями/лесами/горами не для рендеринга, а на сервере.
У меня несколько раз рождались хорошие идеи по поводу этого... А потом хотелось бОльшего, ещё большего... И происходил комбинаторный взрыв.
Хочу море, чтоб катились волны. В ближних к игрокам чанках имеющие физику.
Хочу броненосец - чтобы с физикой качался на волнах, и физично тонул, если в нём наделать дырок. И чтобы ИИ на всё это грамотно реагировал.
Хочу возможность строить под любым углом, из брашей, а не по сетке. Причём, чтобы можно было болванчикам приказать вырыть произвольно ориентированную полость.
Хочу произвольные полигональные деревья, на которые можно залезть, которые бы взаимодействовали с освещением и физично падали. И чтобы текущая вода физично взаимодействовала с ними.
И хочу, чтобы физика всего этого занимала в памяти 100, на крайняк 200 мегабайт, и оно летало на Raspberry Pi 2.

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

Ииии...

То, на чём я остановился прежде чем забросил движок, начав строгать и паять пятнадцатикилограммовую киберпанк-вундервафлю:

- блоки (равно как и чанки) - это треугольные призмы, более-менее близкие к равнобедренным (иначе замаешься это всё натягивать на круглую планету так, чтобы не было особых точек). Плюс, рендер более милым когда 90% горизонтальных поверхностей - это равнобедренные треугольники.
- чанки по высоте побиты на субчанки высотой 16 блоков - для высокоэффективного не-хранения пустого воздуха и монолитной породы.
- субчанк организован в виде мини-октри, с жёстко фиксированной структурой. От 16х16х16 (однородный) вниз до одного блока. Главная хитрость: разные виды информации расслоены по разным октри. Воздух (освещённость) / монолит не зависит от материалов, материалы не зависят от того, есть они там, или половина описываемого объёма - дырки с воздухом, и т. п., что резко сокращает дробность, экономя память.
- блок, в свою очередь, представлен в виде нано-bsp-дерева, побитый плоскостями на два, редко на больше кусков. Причём, все координаты в этих структурах утрамбованы в один байт (шаг полсантиметра при размере стороны блока 1.28 метра ). Это позволяет делать тонкие стены, не выровненные по сетке строения и прочие вкусности в то время, как подавляющая часть мира остаётся простой и дешёвой.

- падающие деревья, плывущие броненосцы и т.п. представлены в виде тетроксельных мешей (из тетраэдров) которые взаимодействуют с вышеописанной сеткой, встраивая в ней на ходу своё представление (а освещение у них повершинное). При этом жидкость в блоках, взаимодействующих с тетроксельным мешем, конвертируется в партиклы - точно так же, как при всяких резко динамических плесканиях.
- установившееся течение жидкости - это статичная структура, не потребляющая ресурсов на просчёт (только у меша шейдер изображает скроллинг текстуры)
- всякие крайние по энергетике случаи, типа волн, бьющих в утёс, или водопадов - это партиклы. Большие и толстые.
- текущая лава по фронту - это тоже партиклы.
- листва - это тоже партиклы, уменьшающие количество пропускаемого блоком света. Причём, на разбиение октри листва НЕ влияет (влияет только ствол с сучьями, на которые можно залезть)
- ИИ начинает с нуля (стоят, чешутся), лениво проходит по местности одной волной А* (по одной на типоразмер мобов), затем сокращает полученную сетку, выкидывая близкородственные ноды, чтобы, предпочтительно осталась одна нода на чанк на каждый двумерный участок (коих будет 99%). Потом выполняет просчёт релевантности (тут жратва, тут укрытие), генерируя кратчайшие пути. Получаются рельсы. Остальные ноды сжимаются до маркеров в несколько байт штука. Рельсы кешируются и сохраняются в памяти какое-то время после того, как игрок ушёл. Для накопанного игроком рельсы хранятся пока хватает памяти.


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


>, и хз чем там всё закончилось, я давно перестал следить.
Гугление выводит на https://altirosonline.com/blog/announcing-altiros-online-pb
Интересно.

#1436
7:51, 26 дек. 2017

Можно эффективно трассировать лучи:
Строим проекции на грани куба, с центром в позиции глаза, выравненного по осям
Пускаем 4 луча через вершины квадрата. Если все 4 уперлись в ОДНУ грань - рисуем ее и стоп, иначе - пускаем луч через центр квадрата и рекурсивно продолжаем для 4х квадратов

#1437
7:52, 26 дек. 2017

Cheb
> Это позволяет делать тонкие стены, не выровненные по сетке строения и прочие
> вкусности в то время, как подавляющая часть мира остаётся простой и дешёвой.
Эти вкусности хороши, когда есть редактор контента и шаблоны построек. Как только это переходит в кривенькие лапки игрока, он теряется и не может построить ничего внятного, потому как высчитывать/отмерять толщину стен с шагом 5 мм - это ад и анархия. Все дома, построенные игроками будут кривые, косые и с разной толщиной стен.

> Гугление выводит на
> https://altirosonline.com/blog/announcing-altiros-online-pb
> Интересно.

Раньше мне попадались демки геймплея этого проекта, там достаточно прикольно всё, но в то же время нудновато. Чтобы построить простейшую избу там требовалась уйма времени и куча неочевидных действий.
Нельзя превращать игру в автокад. Основная часть игроков хочет чтобы было "тяп-ляп и готово", и майн в этом плане достаточно удачен. Перфекционистов, которые будут выравнивать стены с шагом полсантиметра - единицы. Другой вопрос, что из кубов сложно построить что-то реалистичное. Тут варианты: либо делать кубическую сетку и блоки разной (заранее прописанной) формы - призмы, панели, цилиндры, конусы и прочие пирамидки/кубики, либо делать произвольные объекты, которые в итоге будут кривые и косые, потому как лень и долго.

Никак не могу вспомнить название движка, там у чувака сделано масштабирование сетки, и можно выкопать поставить блок хоть 2*2 метра, хоть 20*20 см.
Вспомнил. Blockscape называется, оно оказывается уже в стиме в раннем доступе. Вроде бы всё красиво, но примерно год назад ресурсов эта поделка требовала прорву, и играбельность была как у чугунного шара. Наверное стоит посмотреть, что там сейчас вышло.

#1438
7:58, 26 дек. 2017

СерыйМыш
> Наверное стоит посмотреть, что там сейчас вышло.
Глянул мельком. Чувак убрал все красивые деревья, свет и прочие плюшки. Видимо всё-таки современное железо не тащит. То, что осталось надо смотреть более вдумчиво, но прежней красоты нет. Какое-то всё угловатое и неживое.

#1439
8:18, 26 дек. 2017

Посмотрел видосы, чувак походу переоценил возможности современных компов.

Было:
https://www.youtube.com/watch?v=qSmxH3zaOpQ - 2014 год.
Стало:
https://www.youtube.com/watch?v=aHhQaTiHUXo - 2016 год.
https://www.youtube.com/watch?v=MVdwhTCunpE - 2017 год.

Обратите внимание на деревья и траву.
Налицо явная деградация визуальной части.

А за сетку 4*4, прикладываемую рукой к дереву, разраба надо накормить пургеном. Не игра а чёрт-те что. Понятно, что игровые условности там, и якобы игровой интерфейс, но так нельзя. Весь мир какой-то унылый и дохлый, хоть и шевелится.

Страницы: 195 96 97 98101 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.