Довідник

Список змін Three.js r160

Що змінилося в Three.js r160 (грудень 2023): руйнівні зміни, нові можливості, застарілі API та кроки міграції з r158/r159.

Руйнівні зміни

Сфера Зміна
WebGLRenderer Руйнівна renderer.outputEncoding вилучено. Натомість використовуйте renderer.outputColorSpace (THREE.SRGBColorSpace або THREE.LinearSRGBColorSpace)
Textures Руйнівна texture.encoding вилучено. Використовуйте texture.colorSpace (THREE.SRGBColorSpace для sRGB-зображень, THREE.NoColorSpace для карт нормалей/даних)
CubeCamera Руйнівна Порядок параметрів конструктора змінився. Другий аргумент тепер renderTarget замість роздільності. Явно використовуйте new THREE.WebGLCubeRenderTarget(size)
Points / Lines Руйнівна Усталене значення PointsMaterial.sizeAttenuation змінилося — перевірте, що наявні хмари точок рендеряться коректно
PMREMGenerator Руйнівна fromEquirectangular() тепер повертає рендер-ціль напряму, а не обʼєкт. Оновіть: const envMap = pmrem.fromEquirectangular(hdrTexture).textureconst envMap = pmrem.fromEquirectangular(hdrTexture)

Нові можливості

Можливість Опис
Система NodeMaterial Нове Компонована вузлова система матеріалів для бекендів WebGPU та WebGL. MeshStandardNodeMaterial, MeshPhysicalNodeMaterial тощо.
BatchedMesh Нове Як InstancedMesh, але дозволяє різні геометрії в одному виклику відмалювання. Кероване GPU з підтримкою фрустумного відсікання
WebGPURenderer Нове Прев'ю-рендер WebGPU у three/examples/jsm/renderers/webgpu/. Заміна «з коробки» з тим самим API, що й WebGLRenderer
TSL (Three Shading Language) Нове Вбудована в JavaScript мова шейдингу для написання переносних шейдерів, що компілюються в GLSL або WGSL
ColorManagement Нове THREE.ColorManagement.enabled = true (усталено). Замінює ручне гамма-кодування. Усі вхідні кольори вважаються sRGB

Застарілі API

Застаріле Використовуйте натомість
THREE.sRGBEncoding THREE.SRGBColorSpace
THREE.LinearEncoding THREE.LinearSRGBColorSpace
THREE.RGBEEncoding THREE.NoColorSpace (текстура даних)
renderer.outputEncoding renderer.outputColorSpace
texture.encoding texture.colorSpace
Color.convertSRGBToLinear() ColorManagement.toWorkingColorSpace(color, SRGBColorSpace)
Geometry (стара, V1) Повністю вилучено — залишився лише BufferGeometry

Прев'ю бекенду WebGPU

r160 постачає майже завершений рендер WebGPU у three/addons/. Він використовує той самий граф сцени, але WGSL-шейдери, скомпільовані через TSL.

// Using the WebGPU renderer (drop-in API)
import WebGPURenderer from 'three/addons/renderers/common/Renderer.js';

const renderer = new WebGPURenderer({ antialias: true });
await renderer.init();
document.body.appendChild(renderer.domElement);
Рендер WebGPU вимагає Chrome 113+ або Firefox Nightly з увімкненим WebGPU. На момент r160 підтримка Safari часткова. Для продакшну продовжуйте використовувати WebGLRenderer.

Міграція з r158/r159

Найпоширеніші завдання міграції в r160 — це перейменування API простору кольорів:

// BEFORE (r158)
renderer.outputEncoding = THREE.sRGBEncoding;
texture.encoding = THREE.sRGBEncoding;
normalMap.encoding = THREE.LinearEncoding;

// AFTER (r160)
renderer.outputColorSpace = THREE.SRGBColorSpace;
texture.colorSpace = THREE.SRGBColorSpace;
normalMap.colorSpace = THREE.NoColorSpace;  // data textures = no color space
  • Знайдіть у своєму коді Encoding — перейменуйте всі входження на еквівалентні значення ColorSpace
  • Перевірте використання PMREMGenerator — повертане значення змінилося
  • ColorManagement.enabled усталено true починаючи з r152+. Якщо бачите некоректне освітлення, перевірте, чи не кодуєте кольори двічі
  • Запустіть офіційний скрипт міграції: npx three-migrate (опрацьовує більшість перейменувань автоматично)