From bc400605cab6f353ab4b952a1056c6c22784d4d9 Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" Date: Fri, 19 Aug 2011 16:57:56 -0400 Subject: FIX SH-862 SH-1246 SH-1565 SH-1566 Update render cost algorithm render cost algorithm triangle count is now scaled to be more balanced vs texture/particle count. In addition added factors for light-emitting and media texture primitives. Algorithm should be near "final" at this point. --- indra/newview/llvovolume.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 959bce63b1..5c1694078c 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -2981,6 +2981,9 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const static const U32 ARC_PARTICLE_COST = 1; // determined experimentally static const U32 ARC_PARTICLE_MAX = 2048; // default values static const U32 ARC_TEXTURE_COST = 16; // multiplier for texture resolution - performance tested + static const U32 ARC_LIGHT_COST = 500; // static cost for light-producing prims + static const U32 ARC_MEDIA_FACE_COST = 1500; // static cost per media-enabled face + // per-prim multipliers static const F32 ARC_GLOW_MULT = 1.5f; // tested based on performance @@ -3006,6 +3009,8 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const U32 bump = 0; U32 planar = 0; U32 weighted_mesh = 0; + U32 produces_light = 0; + U32 media_faces = 0; // these multipliers are variable and can be floating point F32 scale = 0.f; @@ -3024,7 +3029,8 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const if (weighted_triangles > 0.0) { - num_triangles = (U32)weighted_triangles; + num_triangles = (U32)(weighted_triangles * 2); // scale weighted triangles to match the recorded scale. + // a complex prim (tortured torus, sculptie) should be 1000-1200 points @ 5 m } } @@ -3080,6 +3086,11 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const particles = 1; } + if (getIsLight()) + { + produces_light = 1; + } + const LLVector3& sc = getScale(); scale += (sc.mV[0] + sc.mV[1] + sc.mV[2]) / 4.f; // scale to 1/4 the sum of the size // enforce scale multiplier to be in the range [1,7] (7 was determined to experimentally be a reasonable max) @@ -3109,6 +3120,10 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const { invisi = 1; } + if (face->hasMedia()) + { + media_faces++; + } if (te) { @@ -3205,6 +3220,16 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const shame += num_particles * part_size * ARC_PARTICLE_COST; } + if (produces_light) + { + shame += ARC_LIGHT_COST; + } + + if (media_faces) + { + shame += media_faces * ARC_MEDIA_FACE_COST; + } + if (shame > mRenderComplexity_current) { mRenderComplexity_current = (S32)shame; -- cgit v1.2.3