internal static void DrawNormalGlare(LightId light, ref MyGlareDesc glare, Vector3 L, float distance) { //if (m_occlusionRatio <= MyMathConstants.EPSILON) // return; var intensity = glare.Intensity; var maxDistance = glare.MaxDistance; //float alpha = m_occlusionRatio * intensity; float alpha = intensity; const float minGlareRadius = 0.2f; const float maxGlareRadius = 10; float radius = MathHelper.Clamp(glare.Range * 20, minGlareRadius, maxGlareRadius); float drawingRadius = radius * glare.Size; if (glare.Type == MyGlareTypeEnum.Directional) { float dot = Vector3.Dot(L, glare.Direction); alpha *= dot; } if (alpha <= MyMathConstants.EPSILON) { return; } if (distance > maxDistance * .5f) { // distance falloff float falloff = (distance - .5f * maxDistance) / (.5f * maxDistance); falloff = (float)Math.Max(0, 1 - falloff); drawingRadius *= falloff; alpha *= falloff; } if (drawingRadius <= float.Epsilon) { return; } var color = glare.Color; color.A = 0; MyBillboardsHelper.AddBillboardOriented(glare.Material.ToString(), color * alpha, light.SpotPosition, MyEnvironment.InvView.Left, MyEnvironment.InvView.Up, drawingRadius); }