Three.js — Какой самый эффективный способ рендеринга текстуры WebGLRenderTarget?

Проблема

Я дошел до того, что в своем проекте я выполняю рендеринг в WebGLRenderTargets и использую их в качестве текстур в моей основной сцене. Это работает, но кажется, что я заставляю его делать гораздо больше работы, чем нужно. Мои сгенерированные текстуры должны быть только 64x64, но поскольку я использую свой основной рендерер (ширина окна по высоте окна) для обоих, он излишне отображает WebGLRenderTargets с гораздо большим разрешением.

Я могу ошибаться, но я считаю, что это увеличивает как обработку, необходимую для отрисовки каждой RenderTarget, так и обработку, необходимую для последующего отрисовки этой большой текстуры в сетку.

Я пытался использовать второй рендерер, но, кажется, получаю эту ошибку при попытке использовать WebGLRenderTarget в рендерере A после рисования на нем из рендерера B:

WebGL: INVALID_OPERATION: bindTexture: object not from this context

Пример

Для справки вы можете увидеть мою абстрактную страницу здесь ( Предупреждение: из-за той самой проблемы, о которой я спрашиваю, эта страница может отставать для вас). Я запускаю симплексную функцию на плоскости в моей вторичной сцене и разбиваю ее на секции, используя размещение камеры, а затем применяю сегменты к частям плитки через WebGLRenderTarget, чтобы они были плавными, но отдельными частями.

Вопрос

Прав ли я в своем предположении, что использование одного и того же размера рендерера гораздо менее эффективно, чем рендеринг на меньший рендерер? И если да, то какое, на ваш взгляд, лучшее решение для этого? Есть ли в настоящее время способ добиться этой оптимизации?


person rrowland    schedule 06.10.2012    source источник


Ответы (1)


Параметры размера в renderer.setSize() используются модулем рендеринга для установки области просмотра при рендеринге только на экране.

Когда модуль рендеринга выполняет рендеринг в цель рендеринга вне экрана, размер визуализируемой текстуры задается параметрами renderTarget.width и renderTarget.height.

Таким образом, ответ на ваш вопрос заключается в том, что можно использовать один и тот же рендерер для обоих; неэффективности нет.

person WestLangley    schedule 06.10.2012