Как и в случае с другим вопросом о переполнении стека, инструмент раздела в Forge Viewer использует пользовательскую логику шейдера, которая включена только в собственные материалы Viewer. Попробуйте включить следующие фрагменты в ваши шейдеры материала:
В вершинном шейдере:
...
#if NUM_CUTPLANES > 0
varying vec3 vWorldPosition;
#endif
...
void main() {
...
#if NUM_CUTPLANES > 0
vWorldPosition = vec3(/* include your own vertex world position here */);
#endif
...
}
...
В фрагментном шейдере:
...
#if NUM_CUTPLANES > 0
varying highp vec3 vWorldPosition;
#endif
#include<cutplanes>
...
void main() {
...
#if NUM_CUTPLANES > 0
checkCutPlanes(vWorldPosition);
#endif
...
}
...
И при определении нового THREE.ShaderMaterial
вам также необходимо включить пару специфичных для секций форм:
const uniforms = {
...
"cutplanes": { type: "v4v", value: [] },
"hatchParams": { type: "v2", value: new THREE.Vector2(1.0, 10.0) },
"hatchTintColor": { type: "c", value: new THREE.Color( 0xFFFFFF ) },
"hatchTintIntensity": { type: "f", value: 1.0 },
...
}
См. Этот gist для полного примера добавления поддержки секционирования в THREE.ShaderMaterial
.