public static Vector3 Color(ref Ray r, ref Scene world, uint depth) { if (world.Hit(r, 0.001f, float.MaxValue, out HitRecord rec)) { if (depth < 50 && rec.Material.Scatter(ref r, ref rec, out Vector3 attenuation, out Ray scattered)) { return(attenuation * Color(ref scattered, ref world, depth + 1)); } else { return(Vector3.Zero); } }
public Vector3 GetColorValue(Ray ray, Scene scene, int depth) { if (scene.Hit(ray, 0.001f, float.MaxValue, out HitRecord rec)) { if (depth < 50 && rec.material.Scatter(ray, rec, out Vector3 attenuation, out Ray scattered)) { return(attenuation * GetColorValue(scattered, scene, depth + 1)); } else { return(Vector3.Zero); } }
public Vector3 GetColorValue(Ray ray, Scene scene, int depth) { if (scene.Hit(ray, out HitRecord rec)) { if (depth < maxDepth && rec.material.Scatter(scene, ray, rec, out Attenuation attenuation, out Ray scattered)) { if (attenuation.attenuationType != AttenuationType.None && attenuation.forceToDoAnotherPass) { return(attenuation.BlendWith(GetColorValue(scattered, scene, depth + 1))); } else { return(attenuation.color); } } else { return(scene.ambientColor);//Vector3.Zero; } }