@Tereverda

Обновление света в three.js?

three.js в обновлении изменил параметры света, не понимаю, как исправить, так, чтобы вернуть прежнее освещение.

Было
6706179391b43001517821.png

Стало
6706179fe64b9715889190.png

// Размеры коробки
// width: "600"
// depth: "400"
// height: "400"
// position 0,0,0, - центр

const ambientLight = new THREE.AmbientLight(0x222222, 1); // без правок

// на сцене несколько светительников с одинаковыми настройками ниже, только расположение разное
const light1 = new THREE.PointLight(0xffffff, 0.4); // было
const light1 = new THREE.PointLight(0xffffff, 1, 0, 0); // стало

// Ориентация одной из камер с 4 сторон
// position: 
// x: -618750
// y: 618750
// z: 618750


new THREE.PointLight(0xffffff, 1, 0, 0); - если в конструкторе менять последние три значения, то коробка становится черной, исчезает освещение.

Не понимаю, как вернуть отображение фактур к прежнему, насыщенному цвету.
Весь остальной код остался прежним при обновлении.

Пишут, что свет стал более реальным, привязанным к размерам, я так понял.
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ответы на вопрос 1
sfi0zy
@sfi0zy
Creative frontend developer
const light1 = new THREE.PointLight(0xffffff, 0.4); // было
const light1 = new THREE.PointLight(0xffffff, 1, 0, 0); // стало

Пишут, что свет стал более реальным, привязанным к размерам, я так понял.

Все ровно наоборот. Но чем гадать, лучше посмотреть документацию PointLight, чтобы понять смысл параметров.

Последний параметр decay, затухание, непосредственно связан как раз с физикой распространения света. Обычно мы стараемся его никогда не трогать, потому что меняя физику мы себе усложняем дальнейшую разработку в 99% случаев. По умолчанию этот параметр равен 2. Не 0.

Предпоследний параметр distance - расстояние, на котором рассчитывается свет. Если оно равно 0, как по умолчанию, то все рассчитывается без ограничений на расстояния, используя физически корректное затухание. Если его поменять, то в каком-то месте свет будет обрезаться. Это иногда полезно для оптимизаций, но физика будет сломана. Поэтому в целом этот параметр имеет смысл трогать только если мы что-то оптимизируем и понимаем, что и зачем. В остальных случаях можно оставить его в покое.

В подавляющем большинстве случаев достаточно менять только второй параметр - интенсивность. Измеряется в канделах. Реалистичные значения для бытовых источников света - от 0 до нескольких сотен.

Если у вас с реалистичными значениями получается что-то не то - стоит уточнить размеры объектов. Чтобы физика работала, у нас 1 условная единица пространства WebGL должна соответствовать 1 метру. Если вы случайно сделали себе размер коробки в 600 метров, а не 0.6, то физика могла дать не тот визуальный эффект, который вы ожидали. Позиция камеры на расстоянии в сотни километров от коробки тоже намекает на то, что нужно проверить размеры.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы