Передискретизация цезия

Я знаю, что Cesium предлагает несколько различных методов интерполяции, включая линейные (или билинейные в 2D), Эрмита и Лагранжа. Эти методы можно использовать для повторной выборки наборов точек и / или создания кривых, которые аппроксимируют точки выборки и т. Д.

Однако у меня возникает вопрос, какой метод использует Цезий внутри, когда он рендерит 3D-сцену, а пользователь масштабирует / панорамирует повсюду? Это не тот случай, когда программист имеет доступ к растру и т. Д., Поэтому нельзя просто попасть в середину всего этого и напрямую вызвать функции интерполяции. Цезий делает свое дело так быстро, как только может, в ответ на управление пользователя.

Я догадываюсь, что по умолчанию используется билинейный режим, но я этого не знаю и не могу найти никакой документации, в которой явно указано, что используется. Кроме того, есть ли способ заставить Цезий использовать определенный метод передискретизации во время этих действий, например передискретизацию Лагранжа? Фактически, это то, что мне нужно сделать: заставить Цезий использовать передискретизацию Лагранжа во время рендеринга сцены. Мы ценим любые предложения.

РЕДАКТИРОВАТЬ: вот более подробное описание проблемы ...

Предположим, я использую цезий для создания трехмерной модели Земли, включая чип изображения в градациях серого, в его надлежащем месте на поверхности модели Земли, а затем я отображаю результаты в окне цезия. Если точка обзора находится достаточно далеко от поверхности Земли, то количество пикселей, отображаемых в части окна чипа изображения, будет меньше, чем фактическое количество пикселей, доступных в источнике чипа изображения. Произойдет некоторое понижение дискретизации. Аналогичным образом, если пользователь многократно увеличивает масштаб, наступает момент, когда на чипе изображения отображается больше пикселей, чем фактическое количество пикселей в источнике чипа изображения. Произойдет некоторая передискретизация. В общем, каждый раз, когда Цезий рисует кадр, который включает источник данных пикселя, происходит повторная выборка. Это может быть ближайший сосед (сомневаюсь), линейный (вероятно), кубический, Лагранж, Эрмит или любой из множества различных методов передискретизации. В моей компании мы используем цезий как часть большой государственной программы, которая требует использования передискретизации Лагранжа для обеспечения качества изображения. (NGA сочло это лучшим для своих программ и инструментов аналитики, и они сделали это обязательным требованием. Так что у нас нет выбора.)

Итак, вот проблема: пока пользователь взаимодействует с моделью, например увеличивает масштаб, процесс рисования не находится под контролем программиста. Передискретизация происходит либо в самом слое цезия (надеюсь), либо даже в еще более низких уровнях (например, функции WebGL, на которые может полагаться Цезий). Так что я понятия не имею, какой метод используется для этой передискретизации. Хуже того, если это не техника Лагранжа, то я понятия не имею, как ее изменить.

Итак, вопрос (ы) будет следующим: выполняет ли Цезий передискретизацию явно? Если да, то какую технику он использует? Если нет, то какие пакеты и функции для рисования использует Cesium для рендеринга файла изображения на карту? (Я могу попытаться раскопать и определить, какие методы могут использоваться в этих слоях и / или есть в наличии.)


person Randy Thompson    schedule 12.05.2015    source источник


Ответы (1)


ОБНОВЛЕНИЕ. Вау, мой первоначальный ответ был совершенно неправильным в понимании вашего вопроса, поэтому я переписал его с нуля.

С новыми правками ясно, что ваш вопрос заключается в том, как изображения передискретируются для экрана во время рендеринга. Эти изображения представляют собой текстурные карты в WebGL, и процесс их быстрого вывода на экран реализован аппаратно, на самой видеокарте. Программное обеспечение на процессоре недостаточно производительно, чтобы отображать отдельные пиксели на экране по одному, поэтому у нас есть 3D-карты с аппаратным ускорением.

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

Картографирование хорошо описано @gman в его статье 3D-текстуры WebGL. Это длинная статья, но ищите слово «mipmap» и переходите к его описанию. Обычно одно изображение перед рендерингом сокращается до меньшего размера, поэтому во время рендеринга можно выбрать начальную точку подходящего размера. Но всегда будет окончательное отображение на экране, и, как вы можете видеть, выбор - БЛИЖАЙШИЙ или ЛИНЕЙНЫЙ.

Цитата из статьи @gman здесь:

Вы можете выбрать, что делает WebGL, установив фильтрацию текстур для каждой текстуры. Есть 6 режимов

  • NEAREST = выберите 1 пиксель из самого большого mip
  • LINEAR = выберите 4 пикселя из самого большого mip и смешайте их
  • NEAREST_MIPMAP_NEAREST = выберите лучший mip, затем выберите один пиксель из этого mip
  • LINEAR_MIPMAP_NEAREST = выберите лучший mip, затем смешайте 4 пикселя из этого mip
  • NEAREST_MIPMAP_LINEAR = выберите 2 лучших mips, выберите по 1 пикселю от каждого, смешайте их
  • LINEAR_MIPMAP_LINEAR = выберите лучшие 2 мипа. выберите по 4 пикселя от каждого, смешайте их

Думаю, лучшая новость, которую я могу вам сообщить, это то, что использует цезий лучшие из них, LINEAR_MIPMAP_LINEAR, чтобы выполнять рендеринг самостоятельно. Если у вас есть строгие требования к более трудоемкой интерполяции изображений, это означает, что у вас есть требование не использовать 3D-видеокарту с аппаратным ускорением в реальном времени, поскольку нет возможности выполнять интерполяцию изображений Лагранжа во время рендеринга в реальном времени.

person emackey    schedule 12.05.2015
comment
Нет, меня не беспокоит движение объекта или что-то подобное. Гораздо более фундаментальный вопрос о том, как рендерится одиночный кадр. Я отредактирую вопрос, потому что это поле для комментариев слишком короткое ... - person Randy Thompson; 13.05.2015
comment
Спасибо за информацию, emackey. Этого я боялся, но отчасти ожидал. - person Randy Thompson; 14.05.2015
comment
Мне кажется непостижимым, что NGA исключит все приложения для рендеринга в реальном времени на этом основании. Я могу представить себе строгие требования к исходным изображениям, подаваемым в системы рендеринга, но растеризация текстур - это просто факт современного графического оборудования. Вы уверены, что требования, которые вы читаете, включают в себя трехмерную растеризацию как в рамках объема? Поскольку в этом случае вы застряли в использовании только программного рендеринга, это совершенно абсурдно. - person emackey; 14.05.2015
comment
Я немного обобщил это требование, когда сказал, что NGA считает это лучшим для своих программ и аналитических инструментов. Это требование относится к конкретному предложению с конкретными наборами инструментов и сценариями использования, ни один из которых не включает анализ в реальном времени. Представьте себе, что аналитики изображений внимательно изучают содержание изображений, просматривая пиксели. Помимо этих инструментов, мы используем Cesium для одновременного отображения нескольких источников данных для дополнительного контекста. Я полагаю, что до тех пор, пока мы предлагаем Лагранж для инструментов 2D-анализа, то, вероятно, не будет иметь значения, какую интерполяцию мы используем для многоцелевого материала 3D Cesium. - person Randy Thompson; 15.05.2015
comment
Это обнадеживает. Спасибо! - person emackey; 15.05.2015