Да, вам нужно использовать несколько огней для достижения этого, притворяя отраженный свет. Вычисление реального отраженного света не строится (и вычислительно очень сложно/дорого). У вас есть множество вариантов.
Второй направленный свет, который всегда может находиться в противоположном положении и направлении вашего солнца.
Свет полусферы, который остается постоянным. Освещение в полушарии приобретает цвет неба и основной цвет и интенсивность и добавляет приятный дополнительный бит глубины вашему освещению.
// sky color ground color intensity
hemiLight = new THREE.HemisphereLight(0x0000ff, 0x00ff00, 0.6);
вот рабочий пример http://mrdoob.github.com/three.js/examples/webgl_lights_hemisphere.html
вы можете использовать любую комбинацию различных огней, но будьте осторожны, есть динамика торговли прочь.
Также стоит упомянуть полу-ламберт-затенение, которое включено, установив для свойства wrapAround значение true в вашем материале. Это дает более приятный спад черным, что приводит к менее резкому освещению. Более средние тона и меньше черных.
Спасибо! Исправлена установка wrapAround в true. Теперь нет черных, и цвета все еще видны даже тогда, когда они не были непосредственно на свету, чего я хотел. Я обновил исходную ссылку :) Просто нужно выяснить, как исправить мою проблему с тенью сейчас. –
wrapAround, похоже, был удален с момента публикации комментария. Как этот эффект может быть достигнут сейчас? –