WebGLRenderer — это ключевой компонент библиотеки
Three.js, отвечающий за отображение сцены на экране с
использованием API WebGL. Он преобразует объекты сцены, камеры и
источники света в пиксели на канвасе браузера, обеспечивая аппаратное
ускорение графики и высокую производительность.
Создание рендерера происходит следующим образом:
const renderer = new THREE.WebGLRenderer({
antialias: true,
alpha: false,
powerPreference: "high-performance"
});
"high-performance", "low-power",
"default".После создания необходимо привязать рендерер к DOM-элементу и задать размеры:
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
WebGLRenderer поддерживает настройку цвета фона сцены и прозрачности.
Это осуществляется через методы setClearColor и
setClearAlpha:
renderer.setClearColor(0x1e1e1e, 1); // тёмный серый фон
renderer.setClearAlpha(0.5); // прозрачность фона
setClearColor принимает числовое значение цвета в
формате 0xRRGGBB или экземпляр THREE.Color.
Параметр alpha задаёт непрозрачность фона (0 — полностью
прозрачный, 1 — полностью непрозрачный).
Правильное отображение на разных экранах достигается настройкой размера рендерера и device pixel ratio:
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setPixelRatio(window.devicePixelRatio);
setSize(width, height) — задаёт ширину и высоту канваса
в пикселях.setPixelRatio(ratio) — учитывает плотность пикселей на
дисплеях Retina и HiDPI, предотвращая размытость.WebGLRenderer позволяет управлять буферами глубины
(depth) и трафарета (stencil):
const renderer = new THREE.WebGLRenderer({
depth: true,
stencil: true
});
Методы управления буферами:
renderer.clearDepth();
renderer.clearStencil();
renderer.clearColor();
Современные сцены требуют корректной обработки цветов для реалистичной визуализации:
renderer.outputEncoding = THREE.sRGBEncoding;
renderer.toneMapping = THREE.ACESFilmicToneMapping;
renderer.toneMappingExposure = 1.0;
LinearEncoding, sRGBEncoding).LinearToneMapping, ReinhardToneMapping,
ACESFilmicToneMapping).Для реалистичного освещения следует включить физически корректные расчёты:
renderer.physicallyCorrectLights = true;
Это влияет на интенсивность света и отражение материалов, делая сцену более естественной.
Прозрачность объектов и сцены настраивается через:
renderer.autoClear = true;
renderer.sortObjects = true;
shadowMap для тенейWebGLRenderer поддерживает динамические тени:
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
BasicShadowMap, PCFShadowMap,
PCFSoftShadowMap, VSMShadowMap).Объекты сцены должны иметь castShadow и
receiveShadow:
light.castShadow = true;
mesh.castShadow = true;
mesh.receiveShadow = true;
Основной метод рендерера — render(scene, camera):
function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
animate();
Для оптимизации можно использовать
renderer.setAnimationLoop(), особенно в
WebXR-приложениях:
renderer.setAnimationLoop(() => {
renderer.render(scene, camera);
});
"high-performance" для игр и тяжёлой графики,
"low-power" для экономии батареи.Эти параметры задаются при создании рендерера и существенно влияют на визуальное качество и производительность.
setPixelRatio(window.devicePixelRatio) для корректного
отображения на Retina-дисплеях.antialias: true при необходимости сглаживания,
но учитывать влияние на производительность.shadowMap только для объектов и сцен, где
требуется реалистичное освещение.toneMapping и outputEncoding
для правильного отображения HDR и sRGB-контента.physicallyCorrectLights = true при работе
с PBR-материалами.Эти настройки обеспечивают баланс между визуальным качеством и производительностью при работе с Three.js.