Информация об изменениях

Сообщение Re: Как рендерят огромные карты? от 02.07.2020 5:38

Изменено 02.07.2020 6:09 swame

Re: Как рендерят огромные карты?
Здравствуйте, Homunculus, Вы писали:

H>У меня есть гигантская детализированная SVG карта города. Размером около 1.5 гигов.

H>Ясно, что и загрузка и рендеринг занимает кучу времени. Надо оптимизировать.

H>Как рендерят большие карты?


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

H>Но есть минусы, которые не нравятся. Во-первых, эти самые разные растры под разные зумы. Что-то дизайнерски некрасивое в этом есть. Во-вторых, перевод в растр сжирает преимущество наличия вектора.

H>Есть еще другая мысль. Мне собственно все преимущества SVG и не нужны. Нужны только контуры и на некоторых контурах заливка сплошным цветом. Все. То есть мысль перевести SVG в какой-то свой формат контуров и уже эти объекты раскидать по разным файлам и подгружать по мере необходимости.


H>Как делается обычно рендеринг карт или если не знаете, то как бы сделали вы?


В памяти набор примитивов (линия, точка, текст)+ нужные графические атрибуты.
Примитивы отсортированы по координатам, чтобы быстро отсортировывать те,что находятся в текущей области отрисовки.
Если карта занимает 1,Гб в SVG то ее легко поместить в несколько сотен метров оперативки.
Отрисовывать в графическом движке с аппаратным ускорением, если нужна быстрая отрисовка с антиалиасингом.
Файл 1,5 Гб можно грузить и парсить за десятки секунд, в зависимости от скорости диска.
Но если нужно грузить быстро и часто, лучше переложить в что то более компактное, чем XML, и легко парсящееся.
Самое трудоемкое реализовать качественную отрисовку картинки.
Re: Как рендерят огромные карты?
Здравствуйте, Homunculus, Вы писали:

H>У меня есть гигантская детализированная SVG карта города. Размером около 1.5 гигов.

H>Ясно, что и загрузка и рендеринг занимает кучу времени. Надо оптимизировать.

H>Как рендерят большие карты?


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

H>Но есть минусы, которые не нравятся. Во-первых, эти самые разные растры под разные зумы. Что-то дизайнерски некрасивое в этом есть. Во-вторых, перевод в растр сжирает преимущество наличия вектора.

H>Есть еще другая мысль. Мне собственно все преимущества SVG и не нужны. Нужны только контуры и на некоторых контурах заливка сплошным цветом. Все. То есть мысль перевести SVG в какой-то свой формат контуров и уже эти объекты раскидать по разным файлам и подгружать по мере необходимости.


H>Как делается обычно рендеринг карт или если не знаете, то как бы сделали вы?


В памяти набор примитивов (линия, точка, текст)+ нужные графические атрибуты.
Примитивы отсортированы по координатам, чтобы быстро отсортировывать те,что находятся в текущей области отрисовки.
Если карта занимает 1,Гб в SVG то ее легко поместить в несколько сотен метров оперативки.
Использовать языки, где не создается по объекту на каждый чих. И без этих ваших сборщиков мусора.
Отрисовывать в графическом движке с аппаратным ускорением, если нужна быстрая отрисовка с антиалиасингом.
Файл 1,5 Гб можно грузить и парсить за десятки секунд, в зависимости от скорости диска.
Но если нужно грузить быстро и часто, лучше переложить в что то более компактное, чем XML, и легко парсящееся.
Самое трудоемкое реализовать качественную отрисовку картинки.