Black Dragon is MY Viewer, i decide which feature i want to add and which to remove, i share this Viewer to show the world that user base size is not important, i do rate quality by effort, thought and love put into the project, not some rough estimated numbers. I consider feature requests only if i you can name proper valid reasons i can agree on. It is my (unpaid) time i'm putting into this project, i'm not here to cater to every Joe's desires.

Monday, December 4, 2017

Complexity and its complex complexity.

So apparently Oz has seen my changes to the Avatar Render Complexity changes and put up a warning on the Third Party Viewer Directory about it.

It's time i talk about this.

"Non-standard", yes. "Misleading", you got to be fucking kidding me, aren't you? Why is it that i was yelling at you Oz ever since the introduction of Jellydolls that Jellydolls in their current incarnation are utterly useless as they, and i quote the warning here: are "misleading for avatar complexity". It took me god knows how long to make you even consider reevaluating the complexity calculation. It wasn't until i literally manipulated the entry scene on that one open source meeting and made everyone talk about how shit and completely wrong the calculation is before you arrived, prompting you to ask what all the fuzz is about, to get you to openly state that you are considering looking into it again.

You don't seem to have any idea how infinitely frustrating it is being clockblocked by you over and over again because i'm not going the usual bootlicker approach telling you how almost perfectly fine everything is and suggesting a tiny change so it gets more perfect. You know as well as me that i'm not that kind of person, i don't lick people's boots unless they deserve it and there's only couple of people whose boots i'd lick. I'll tell you straight up honestly whats up and i did so when Jellydolls came around. I remember what you told me, you made it clear that you are not in for shaming bad content creators, you don't want to punish less experienced or outright bad creators for their inability to make better optimized content. From a company standpoint this is somewhat understandable, its derogatory and outright defamatory but from a developer and customer standpoint it is absolutely unacceptable. You constantly appeal to each and every content creators own interest in improving their skills and content optimization, this is an outright bad decision. You will never, ever manage to make content creators show more interest in improving if they didn't do so from the beginning on or had at least some sort of personality that allows thinking like that. Most content creators aren't and you are giving them zero incentive to step up their game, you don't punish them at all, you continue to allow them to game your systems that were meant to limit abuse. Have you any idea how bad the state of current avatars is? I knew it was bad but when i added polygon counts i was shocked at how wasteful each and every avatar is, yes I was shocked, the one that told you from the very beginning, well knowing that each and every avatar is a giant pile of shit. I expected over complex avatars but i didn't expect polygon counts in the range of multi-million for many avatars around me. That is not what triggered me to take this into my own hands, no, not at all. It was this very avatar, standing on a starting help island, laughing at me with its 3,500,000 polygons having roughly 40% less complexity than my own Avatar which i spend many hours and days on continuously optimizing, reducing texture sizes, disabling features where unnecessary, removing unused invisible states and cutting down on prim and polycount wherever possible to make rendering my already very light avatar even faster to render. This giant pile of SHIT of an avatar with poly counts so high, the avatar was basically a solid surface, it was laughing at me, taunting me, making fun of my optimization attempts, showing me what i already knew, complexity is useless, it in no way resembles anything that you could call "complexity", its more like a random number that increases depending on how much stuff you put on and the numbers are hidden, probably randomized each time you attach or detach something.

You always urge me to explain it in a way that it easily makes sense for you, so let me put this into an explanation that will show you that complexity as it stands now (and most likely will after whatever you have been brewing in the background) makes no sense.

A few quick facts before we start:
- More is always worse, no matter what it is, the more work to be done the slower its going to be finished.
- Rendering polygons isn't as slow as we might think but it isn't fast either if you have millions to render, especially if they are deforming.
- Textures seem like a free to render thing, they are not. Large textures can and will quickly have a massive impact on the overall performance, worst case you hit your VRAM limit and then everything goes to shit.

With that being said, let's continue.

Avatar A (Me):
35.5mb texture memory usage, 146.000 polygons (~30.000 of which are rigged), ~68.000 complexity, 30m² surface area, no particles, only a tiny couple of invisible extra objects and decent usage of normal and specular map as well as emissive masking.

Avatar B (Example above)
Unknown memory usage (couldn't see at the time), 3.555.000 polygons (~90% of which were rigged), ~40.000 complexity, 82m² surface area, no particles, most of the entire avatar were extra invisible states and body parts, no normal or specular map used.

146.000 - 3.555.000 total (2435% of me or 24 times me)
30.000 - ~3.200.000 rigged (10666% of me or ~107 times my body)
30 - 82 m² surface (273% of me or 2.7 times me)
1.2x multiplier for invisible surfaces
68.000 - 40.000 complexity (58% of me or two thirds of me??)

HOW? I have less polygons. I have less rigged polygons. I have less invisible states. I have less surface area, i use less VRAM memory (pretty sure), i have less everything, hell i even use less screen space (my avatar is smaller than most others), yet for some reason Avatar B gets only 58% of my complexity, how is this even possible? How can an avatar that clearly has more impact in every aspect that is measurable have less complexity? Explanation: You weight important, impacting features way too less. Instead you focus on punishing invisible objects (which shouldn't even be rendered in the first place) and add huge multipliers on top of features that are basically free, like glow. Given you have post processing glow enabled, which you must if you use Deferred Rendering, it's being rendered at all times anyway, regardless if you can see it or not. I put up a metric fuckton of objects and made them all glow like a Christmas tree, i could not measure a single FPS difference, sure internally it probably has some sort of impact, it needs to be processed and added but its so goddamn fast. The worst offenders however are polygons, 15 polygons for a single arc if i understood correctly, however using my calculator this doesn't add up at all. To go below 40.000 arc with polygon alone (not counting all the multipliers) you'd have to count roughly every 85 polygons as 1 ARC and that's just the minimum. I wonder how you got these values. This is the reason good avatars get high ARC counts and bad ones get better or equal ones. You can shave off too much ARC by simply not using any advanced features that are meant to cut massive amounts of polygons. This gives people a false impression that using these advanced features are much worse in comparison to simply meshing out everything with polygons. In other words, ARC is simply not punishing enough. One light (i use a bunch of them for my avatar) is worth 512 ARC, that's roughly worth 43.000 polygons. One light is worth twice my avatar. Do you see the problem?

Another big problem of your complexity calculation is the fact that you roll in your statement that your calculations were tested on a variety of hardware and the new one is supposed to be tested on a wide variety of them. You are adding variables where none belong. You're trying to make compromises due to different hardware, you shouldn't. You test it on one singular, decently working hardware level, one that is fully capable of running solid 60 FPS with all options enabled and then measure the impact it has, you don't try to find the middle ground between shit hardware that can't even handle vertex shaders and sees no impact because it's only capable of producing single digit framerates and hardware that is capable of running Second Life to its fullest, by doing so you jeopardize the calculation, the only way of making the calculation accurate over a wide variety of hardware would be having a variable complexity calculation which in turn would totally and completely make complexity useless as a global value and would only ever mean something to the person itself, this would not only make optimization harder but would make setting a decent complexity limit impossible because it varies from person to person on top of the variance between Viewers already present. You need one singular test one that takes both experience of the rendering engine, as well as framerate comparisons and test results into account, that is what i'm doing here right now and i'll tell you here and now that my calculation is not misleading, it is not perfect either, perfection in a world like Second Life is impossible but my calculation does its intended job much better than what your original calculation does, it identifies resource hogs and jellydolls them, even if this means 90% of the avatars around you get jellydolled. It's not a bug when everyone gets jellydolled, its the simple fact that they are simply unoptimized and especially to you that shouldn't come at a surprise. If we really want to achieve better optimization of content we need to tighten the screws. Bad content needs to be punished, it needs to be jellydolled or outright derendered, people using said bad content should be notified that something is wrong with their stuff, if they themselves do not care enough to trigger interest in optimization then you'll have to force them by pulling the rug under their feet and unless you come up with something that i deem accurate enough to represent "complexity" that does its goddamn job of derendering resource hog people (which it currently doesn't), i'm not going to pull this custom complexity calculation that is clearly doing a better job than yours out of my Viewer, warning sign or not. I'd even go as far as changing the warning and removing that misleading "misleading" because my complexity calculation is anything but misleading, you should probably put that "misleading" to your own Viewer because it misleads people into thinking that their piles of randomly cobbled together shits is good.


I swear to god Oz, if i see another 3.5 million polygon avatar having less complexity than me in your new calculation i'll be the very first standing on your face and yelling at you in the next meeting. I refuse to accept these stupid compromises any further, either you pull through it with an iron fist or you don't attempt it at all, doing this in-between shit is just going to get your feature disabled, because that's what they are doing already, you've seen the "guides" in clubs telling people to disable it. No?

I'm sorry for the really long rant but i can't help it, this shit is grinding my gears, it has been for years and i watched it long enough to evidently say that nothing has been done to stop the resource-hoggery that is going on right now. It's time someone with the balls tells you the truth.

Now time for me to get off and cooldown for a few days, then sort this mess out that is the update 2.9.4. Snapshots locking up, framerates becoming completely unstable, flexis going haywire and that's only scratching the surface.


  1. You did say "Punish me Oz sempai"

    1. This is not punishment this outright bullshit.

      Punishment would be slapping my ass, saying i must revert the changes.

    2. Also, i'm not mad because of the warning, i'm mad because it's labeled with "misleading", which is misleading to any user that reads the warning (if anyone even goes through the TPVD)

    3. I suppose it may be misleading to people who are used to other viewers unless you say specifically on your setting that it works differently and how exactly it works differently

  2. The notice is just a warning or caution. I think the warning should state "Uses a different ARC calculation" or something to that effect to at least sound a little more fair about it. The current warning makes seem like the calculation is dishonest, which I think is actually more honest than LL's. LL doesn't even know their own "busted calculations" that well and they've even admitted to how "blinged out avatars" and numbers "gaming" of in-world objects can negatively impact. Quoting words from a Linden employee.

    So, Niran... is this the "bad news" you were talking about or is that to come?

    1. No, that's not the bad news. It's to come.

    2. Yea, it should have said something like "Uses a different formula for calculating Complexity". The use of the word "misleading" could be a turn off for people who do go via the TPVD.

  3. There IS one way in which the Black Dragon formula is possibly misleading; it includes any HUDs you are wearing. I thought the main purpose of ARC was to measure your impact on others, and HUDs won't have any.

    1. Complexity does not include HUDs at all.

      The complexity window however (since a few updates) does show HUD complexity because people asked for it, they are not counted towards your actual complexity however.

  4. First paragraph read and I already like you a lot.

  5. How about number of textures and number of meshes on the avatar, and not just the polygon count and overall memory usage?
    And by number of meshes, this would be the number of 'faces' (the things you can select in the edit menu) rather than attachments or even linked objects. The things that the renderer will actually care about. A majority of performance loss in games with community created content comes from the number of drawcalls the CPU has to make to the GPU. Higher number of 'faces' and different textures (as opposed to a texture atlas) compound this issue, contributing much more to the 'complexity'.
    This has been heavily discussed over and over in the VRChat community when the devs were insisting that polygon counts were the one and only problem to performance. Thankfully, they've since changed that to weigh more on other things I've mentioned, along with some things that don't apply to SL.

    1. Can be easily added, though i'll have to see what to do about the complexity information display since its already somewhat overloaded and seeing a million of these onscreen when peeps are around can make it hard to read. I can easily incorporate that into the advanced complexity display though. The complexity calculation itself already accounts for textures and their size, it doesn't count if they are reused over the same attachment, to prevent bloating, i could add facecount as additional complexity impact. Will see that i can get this into the upcoming update.

  6. After reading your rant, I am suddenly worried about my Avatars. like, how much of the avis I'm using are junk data? What pars of my outfits add to the Negative Aspects of this Calculation? I know what My Complexity looks like on Firestorm, but if your Calculations on Black Dragon are more accurate, then I'm scared. I also Have no Idea how to look for those ARC things you mentioned, I don't even know what that is an acronym for, assuming it even is one. As Much As I want to ask you what I should do, As a player, to limit my Complexity, and more so, the junk data, I'm afraid I'll end up finding out hat most of what I have on is useless and is causing issues for those around me. That And you're extremely busy to take a look at some random persons outfits and tell them what all is wrong with it. But yeah, I may not know what Viewer this Oz fellow if manning, but if Black Dragon could be the only Viewer then I doubt we'd have the Issues (or a great many less) that you mentioned in the rant. Also makes me nervous about starting to make stuff. Anyway, I'll go into Black dragon with all of this in mind. I thank you for the warning. I wish you a peaceful, or just a great, day.

    1. If you are using human content (they big bodies such as Maitreya, Belleza etc) you'll most likely end up with a big complexity score depending on if you are using the new BOM version or not.

      The sad truth is that most content in SL is simply bad and this is due to several reasons, one being LL not imposing any hard limits (they say doing so would take away from SL what makes SL so special, i do understand why they say that), also Linden Labs not giving out any content optimization guidelines whatsoever and of course each and every creator for not educating themselves enough to be professional about this and optimizing their content on their own.

      I wouldn't necessarily sweat it too much if your complexity is too high but you should take it into consideration and possibly make attempts to reduce your complexity. Your complexity and its complete breakdown of each and every attachment of yours as well as several other information can be found in the menu (Dragon - My Useful Features - Performance Tools - Advanced Complexity Information).

      ARC simply stands for Avatar Render Complexity, simply shortened to ARC (for older users) or complexity (for newer users).

      The rule of thumb when optimizing is simple, less is more. The less attachments, lights, objects, animesh, projectors, media, layers and so on you wear the better. This goes for parts of objects as well. Avoid wearing things that you do not use such as invisible weapons/items/attachments and if you have the option to do so, remove unnecessary extra parts from your avatar (say prims that you do not need such as different breast sizes for bodies for instance).

  7. I've known something was off about LL's complexity calculation for a while, even if I didn't know why. All my outfits are calcuated at between 35K-55K, but some bog my viewer down way more than others do. I'm reading this in preparation for installing Black Dragon for the first time, and now I'm really interested in seeing what it says about each outfit's complexity. And yeah, the jellydolls don't help much against lag. When I'm somewhere with a lot of avatars around, I have to turn off Avatars in Rendering Types. It's really annoying. Thank you for this post, very helpful and informative.