- visible为false就不drawcall了
if ( object.visible === false ) return;
复制代码
- layers设置不在就不drwcall了
const visible = object.layers.test( camera.layers );
复制代码
- 判断是否为多材质
if ( Array.isArray( material ) ) {}
复制代码
- 多材质计算
const geometry = _objects.update( object );
const material = object.material;
if ( Array.isArray( material ) ) {
const groups = geometry.groups;
for ( let k = 0, kl = groups.length; k < kl; k ++ ) {
const group = groups[ k ];
const groupMaterial = material[ group.materialIndex ];
复制代码
function renderObject( object, camera, shadowCamera, light, type ) {
if ( object.visible === false ) return;
const visible = object.layers.test( camera.layers );
if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {
if (
( object.castShadow ||
( object.receiveShadow && type === VSMShadowMap ) ) &&
( ! object.frustumCulled || _frustum.intersectsObject( object ) )
) {
object.modelViewMatrix.multiplyMatrices(
shadowCamera.matrixWorldInverse,
object.matrixWorld
);
const geometry = _objects.update( object );
const material = object.material;
if ( Array.isArray( material ) ) {
const groups = geometry.groups;
for ( let k = 0, kl = groups.length; k < kl; k ++ ) {
const group = groups[ k ];
const groupMaterial = material[ group.materialIndex ];
if ( groupMaterial && groupMaterial.visible ) {
const depthMaterial = getDepthMaterial(
object,
geometry,
groupMaterial,
light,
shadowCamera.near,
shadowCamera.far,
type
);
_renderer.renderBufferDirect(
shadowCamera,
null,
geometry,
depthMaterial,
object,
group
);
}
}
} else if ( material.visible ) {
const depthMaterial = getDepthMaterial(
object,
geometry,
material,
light,
shadowCamera.near,
shadowCamera.far,
type
);
_renderer.renderBufferDirect(
shadowCamera,
null,
geometry,
depthMaterial,
object,
null
);
}
}
}
const children = object.children;
for ( let i = 0, l = children.length; i < l; i ++ ) {
renderObject( children[ i ], camera, shadowCamera, light, type );
}
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END