public Color3 illuminate(RayContext rayContext, BRDF brdf) { Color3 finalColor = new Color3(); BRDFTypes brdfType = brdf.getType(); if (brdf.matchTypes(BRDFTypes.Diffuse) || brdf.matchTypes(BRDFTypes.Glossy)) { if (null != m_directLightIntegrator) finalColor += m_directLightIntegrator.illuminate(rayContext, brdf); if (brdf.matchTypes(BRDFTypes.Diffuse) && null != m_diffuseIntegrator) finalColor += m_diffuseIntegrator.illuminate(rayContext, brdf); } if (brdf.matchTypes(BRDFTypes.Specular)) { if (rayContext.traceLevel < m_maxTraceLevel) if (null != m_specularIntegrator) finalColor += m_specularIntegrator.illuminate(rayContext, brdf); } return finalColor; }