three.js shadowCascade DirectionalLight


person Doidel    schedule 14.03.2014    source источник
comment
Ошибки, которые я получаю при прямом включении shadowCascade, - это размер массива, который должен быть положительным целым числом для таких вещей, как 136: Variing vec4 vShadowCoord[MAX_SHADOWS]; 137: универсальная матовая4 теневая матрица[MAX_SHADOWS]; или в другом шейдере 114: uniform sampler2D shadowMap[MAX_SHADOWS]; 115: универсальная vec2 shadowMapSize[MAX_SHADOWS]; 116: равномерная плавающая теньDarkness[MAX_SHADOWS]; 117: равномерная плавающая теньBias[MAX_SHADOWS]; 118: переменный vec4 vShadowCoord[MAX_SHADOWS];   -  person Doidel    schedule 15.03.2014
comment
Это означает, что maxShadows равен 0. maxShadows устанавливается с помощью allocateShadows в файле three.js. max_shadows увеличивается только в том случае, если DirectionalLight не имеет shadowCascade. Вот почему он остается 0. Почему это работает в других примерах, я пока не знаю.   -  person Doidel    schedule 15.03.2014
comment
Хорошо, я решил некоторую часть. Удаление shadowCameraVisible = true помогло избавиться от ошибок, вместо этого я включил shadowMapDebug = true;   -  person Doidel    schedule 15.03.2014
comment
Когда я использую shadowMapDebug = true в примере с three.js, ничего не происходит...   -  person Doidel    schedule 15.03.2014
comment
Каким-то образом теневая камера движется, когда я перемещаю камеру...   -  person Doidel    schedule 15.03.2014
comment
Код shadowCascade не был в центре внимания разработки более года. Могут быть проблемы. Если вы хотите заняться этим и отследить возможные ошибки, это было бы здорово. Однако некоторые проблемы могут быть связаны с вашим устройством и/или браузером.   -  person WestLangley    schedule 15.03.2014
comment
Если я хочу создать тени для персонажа от третьего лица, которые должны быть похожи на солнечный свет, порекомендуете ли вы использовать SpotLight, например threejs.org/examples/webgl_shadowmap_performance.html?   -  person Doidel    schedule 15.03.2014
comment
Для этого я бы использовал направленный свет с персонажем в качестве target и плотную теневую коробку.   -  person WestLangley    schedule 16.03.2014


Ответы (1)


Код shadowCascade не был в центре внимания разработки более года. Могут быть проблемы. Если вы хотите заняться этим и отследить возможные ошибки, это было бы здорово. Однако некоторые проблемы могут быть связаны с вашим устройством и/или браузером.

На данный момент я бы посоветовал вам использовать направленный свет с персонажем в качестве target и узкую теневую коробку.

три.js р.66

person WestLangley    schedule 16.03.2014
comment
Кроме того, поскольку я использую вид от 3-го лица, мне не нужна карта теней за камерой. Поэтому я настраиваю положение DirectionalLight в соответствии с положением и вращением игрока. На проигрыватель я установил опорную точку (объект 3D, в моем случае с позицией (0,0,-19)). Затем я соответствующим образом позиционирую свет в методе render/tick: var p2 = new THREE.Vector3(0,45,0).applyMatrix4(sunlightReferencePoint.matrixWorld); light.position.set(p2.x + 20, p2.y + 50, p2.z); - person Doidel; 16.03.2014