Jump to content
Penny Patton

How Much Does Unoptimized Content Actually Affect Us?

Recommended Posts

1 minute ago, ChinRey said:

Yes but that still leaves the question how much is it reasonable to expect the average user or content creator to understand about how a cirtual reality works under the hood?

It doesn't take that much to google it, or even talk to a Linden about how a virtual world works under the hood.

 

Share this post


Link to post
Share on other sites
1 hour ago, CoffeeDujour said:

Pixel packing is not taught and considered bad practice, in the same way that unrolling loops and inline functions in LSL isn't taught. Creating UV maps with minimal face distortion that are meaningful for a human to work on is the industry standard.

From a processing processing perspective bigger textures are better. There are currently threaded decode options available but right now SL textures are too tiny and we only managed to make the CPU run hotter for a slower total decode time, despite the math looking good.

One big texture with multiple parts is significantly better than a dozen tiny 'optimally sized' textures. The drum to beat isn't smaller textures, it's fewer textures.

 

If you're planning on distributing a model for folks to retexture themselves starting with just a UV map, you have to at least make a nod towards making that easier. Hence the minimizing of distortions at the expense of efficient area usage. If you're making all the textures yourself and have the raw model in your 3d prog of choice you can do better. Maybe even - I don't know, what's the word? Oh yeah.. optimize it :) If you're going to make that trade-off to make it practical for other folks to - for example - make skins for your body then that's fine but be honest about it being a trade-off for that rather than bolstering the folks falsely claiming that unoptimized "looks better"

"Badly optimized" always looks like crap, "unoptimized" always runs like crap. Properly optimized does neither.

Share this post


Link to post
Share on other sites
1 hour ago, halebore Aeon said:

Here is the thing, we are responsible for our own avatars, and what we buy to decorate our houses, and decorate our avatars. If you want optimization, you need to do some research and figure out what is the best looking, but best optimized for you. You really can't blame the creators of the objects, as it's us the consumers that buy into this, and ultimately put it on our avatars or land. That all being said, if you want better optimization, and love what you have already. Talk to the your favourite brand creators, and see what they can do to make things better optimized.

If the blame has to be put solely to one side, then it's the other way around. You can very rarely expect the consumer to have even a basic understanding about what they're buying. A large portion of SL users are on low-end computers and are very tech-illiterate to begin with, but you expect them to inspect a product on SL and say "ah yes, this is indeed well optimized" when they don't even understand what mesh is.

In reality the fault falls unto both sides. Creators should optimize, and users should respect other users. However, arguably if every creator knew what they were doing and put in the effort, users wouldn't even have to think about these issues.

Share this post


Link to post
Share on other sites
1 minute ago, Wulfie Reanimator said:

If the blame has to be put solely to one side, then it's the other way around. You can very rarely expect the consumer to have even a basic understanding about what they're buying. A large portion of SL users are on low-end computers and are very tech-illiterate to begin with, but you expect them to inspect a product on SL and say "ah yes, this is indeed well optimized" when they don't even understand what mesh is.

In reality the fault falls unto both sides. Creators should optimize, and users should respect other users. However, arguably if every creator knew what they were doing and put in the effort, users wouldn't even have to think about these issues.

Okay, but look at how many people walk around with their complexity in the 100s of thousands to Millions. Especially in events, they have every piece of bling and crap on. Clearly these people know, that is not very well optimized, when they wear pretty much their whole inventory. What I expect is them to ask questions, join the groups. Talk to the creators and people who understand this, see if this is the best product for optimal use, especially in crowded areas. Like Clubs, or even communities. I am not expecting to inspect the product, but to ask questions. It doesn't hurt to ask a question, if you are unsure. Yes I agree creators should optimize, but customers are also responsible for what they buy. If you buy into a crappily optimized product, the creator will assume that is what they want. Like Real Life, if you don't understand something. You ask questions.

Share this post


Link to post
Share on other sites
26 minutes ago, halebore Aeon said:

Okay, but look at how many people walk around with their complexity in the 100s of thousands to Millions. Especially in events, they have every piece of bling and crap on.

No, they really don't. It's never even a consideration. Even IF people were complexity conscious, the skill set to assess an item is not one most people have.

People dress to look good, for personal values of good, whatever that may be.

Does it look good? Does it go with my other stuff? Do I like it? 

Quote

Clearly these people know, that is not very well optimized,

How well optimized would you say this web page is ?

You're looking it, do you know ? Do you have the skills to open the dev tools and extract meaningful information? Are you able to read the miles of javascript and it's dependencies? Do you know enough about the Javascript Engine to identify poorly written code?

Your web browser could easily be the heaviest application you run and is consuming huge amounts of resources. Do you try and debug the state of modern web development or do you buy a new computer under the misconception that it's the computer that's gotten slower with age?

(No really, people actually believe that it's the physical computer getting slower as it gets older).

Quote

I am not expecting to inspect the product,

Even then it doesn't tell you the whole story.

Quote

Yes I agree creators should optimize, but customers are also responsible for what they buy. If you buy into a crappily optimized product, the creator will assume that is what they want. Like Real Life, if you don't understand something. You ask questions.

But it looks good.

Content optimization is 100% on the heads of creators, in the same way the gearbox of your car is 100% on whoever made the thing.

  • Like 4

Share this post


Link to post
Share on other sites
36 minutes ago, CoffeeDujour said:

No, they really don't. It's never even a consideration. Even IF people were complexity conscious, the skill set to assess an item is not one most people have.

People dress to look good, for personal values of good, whatever that may be.

Does it look good? Does it go with my other stuff? Do I like it? 

How well optimized would you say this web page is ?

You're looking it, do you know ? Do you have the skills to open the dev tools and extract meaningful information? Are you able to read the miles of javascript and it's dependencies? Do you know enough about the Javascript Engine to identify poorly written code?

Your web browser could easily be the heaviest application you run and is consuming huge amounts of resources. Do you try and debug the state of modern web development or do you buy a new computer under the misconception that it's the computer that's gotten slower with age?

(No really, people actually believe that it's the physical computer getting slower as it gets older).

Even then it doesn't tell you the whole story.

But it looks good.

Content optimization is 100% on the heads of creators, in the same way the gearbox of your car is 100% on whoever made the thing.

We haven't always agreed exactly in this discussion, Coffee, but on this you nailed it. I can read the javascript (and OMG what a misbegotten bastard of a language, but that's another discussion) but I don't. Like every other SL resident I just use the page. if it's inefficient to the point that I notice it, I might in a moment of idle curiosity dig in to find out why  but usually I'll just shrug and say "damn, another site that was coded by folks who think 7 layers is a cake"

For the folks who "think it's cake", it's on the baker what they are eating.

  • Like 3

Share this post


Link to post
Share on other sites
1 hour ago, CoffeeDujour said:

Even IF people were complexity conscious, the skill set to assess an item is not one most people have.

People dress to look good, for personal values of good, whatever that may be.

Does it look good? Does it go with my other stuff? Do I like it? 

   This appears strange to me. Surely, they must have noticed other jelly-doll people and seen the complexity tag saying 'this avatar has 234,567 complexity in red text, and thus should have noticed that high-complexity avatars don't render by default.

   Likewise, whenever you attach or detach something from your avatar, you'll be notified of your current complexity. If you go from 20K to 220K when you put on a hair, surely even the most tech-illiterate should get the hint? And yes, it's a pop-up that's easy to miss, but have they missed it every time for all the time this system has been in place?

   And surely, at some point one must realise that okay, this hair bumps my complexity up by 200K, but 'I look pretty' - but if no one else can see you as anything but a jelly doll, what's the point of going out to an event or club trying to look pretty? I have an outfit for Neph that I put on for going shopping and attending events, it's a top, trousers and shoes which are easy to take off and on when I try on demos - and it puts me at 25K complexity and contains virtually no scripts. Expensive? No, apart from the hair and the shoes, the outfit was free. Pretty? Well, that's a matter of opinion.

Snapshot_044.thumb.png.28111ab646a71e89cfe39dd0c3da0396.png

   When I go places, whether it's clubs or events, if there's any inclination of a frame rate drop (which is the vast majority of places in SL - I usually have around 160 FPS at my place with the graphic settings all jacked up) my first instinct isn't to run around manually fully-rendering jellydolls to put a further strain on on it. At events, I draw the line at 50K complexity, at clubs I may go up to 75K depending on how crowded it is.

  • Like 1

Share this post


Link to post
Share on other sites

@Orwar You have to remember that these are the same people who bump their LOD factor to 4 to compensate for bad looking mesh. It's very easy to extrapolate that they would remove the jellydoll limit to hide ugly jellydolls.

Also, Complexity is an arbitrary and inconsistent rating. It's not based on any real metric, so who is to say 100K is too much or too little? Well optimized mesh with 1 texture will have higher Complexity than a raw export from Marvelous Designer with 8 textures. Simple things like flexi prims are a very easy way to reach 1 million, which doesn't reflect reality at all.

  • Like 2

Share this post


Link to post
Share on other sites
10 hours ago, Orwar said:

This appears strange to me. Surely, they must have noticed other jelly-doll people and seen the complexity tag saying 'this avatar has 234,567 complexity in red text, and thus should have noticed that high-complexity avatars don't render by default.

"I just spent L$ 1400 on a fat pack for this"

"It's from a good designer, I don't believe they would make ****"

"My viewer says it's fine"

"I don't understand this complexity thing, I couldn't see people and someone HELPED me to turn it off"

"You're just jealous"

"ARC is wrong and broken, this item just has necessary hidden parts, you can't see them!"

  • Like 1

Share this post


Link to post
Share on other sites

Before anyone keeps beating the optimised horse, I'd like confirmation if triangle stripping actually works in secondlife like it was supposed to since 2005. If it doesn't I don't care for any opinion on triangle counts and optimisation. Triangles are the base unit that all modern cards are made to handle best at great quantity. The industry went to great length to make it that way. They are more concerned about draw calls and memory when it is texture bound issue (but not always). So. Does second life triangle strip effectively and properly including using degenerate triangles for the same material?

  • Like 1

Share this post


Link to post
Share on other sites

Also if I remember from previous readings on complexity and display metrics. There was no mention of it actually representing the work "your" card load is doing. Just that it uses this feature, that feature, and comes up with a "figure". Our rending load changes with the wind of our camera direction. Which is more a level designers direction than an individual asset.

I guess Penny does partially imply that in the OP at least.

  • Like 1

Share this post


Link to post
Share on other sites
33 minutes ago, NaomiLocket said:

Before anyone keeps beating the optimised horse, I'd like confirmation if triangle stripping actually works in secondlife like it was supposed to since 2005.

You're gonna need to define what you mean by "triangle stripping." I can't tell if you're talking about reducing them or this.

33 minutes ago, NaomiLocket said:

Triangles are the base unit that all modern cards are made to handle best at great quantity.

This basic fact has nothing to do with your question, and it doesn't support your skepticism. The very fact that "everything is triangles" means that reducing the amount of them reduces the time it takes to render a frame onto the screen.

Shaving off a couple hundred of them from one of your products isn't going to seem like much, but when lots of copies of that product are appearing on the screen, those ignored optimizations literally multiply. You should always assume the worst-case scenario and the more you (general you) do it, the better SL as a whole will run for everybody.

Just because "a modern graphics card can render millions of triangles on the screen at once," doesn't mean they can do so with high framerate, especially with all of the other factors beyond pure triangle-count. Not to even mention that not all graphics cards are made equal, even modern ones.

33 minutes ago, NaomiLocket said:

They are more concerned about draw calls and memory when it is texture bound issue (but not always).

You're gonna need to get some sources to back that up, if you're implying that triangle count doesn't matter (or even as much). Draw calls and texture memory have also been the subject on these forums many times and they're all important, none of them should be ignored. Draw calls aren't something we can affect much though, so it's talked about the least. The best we can do is use less materials (faces) per object.

  • Like 1

Share this post


Link to post
Share on other sites
1 minute ago, Wulfie Reanimator said:

You're gonna need to define what you mean by "triangle stripping." I can't tell if you're talking about reducing them or this.

The latter, the wiki link.

The basic fact has everything to do with it. The card manufacturers and Nvidia in particular along with the studios over the years have explicitly gone to that direction. That is why crysis boasts 3 million triangles for a scene and handles fine for its target. That is also why the larger ships of star citizen were rumoured to be ~7million on their own. They don't care about the triangle count. They care about how they are used. Which is also why a lot of factors actually cull the amount of triangles processed anyway. Triangle stripping makes the draw calls efficient. It batches the work. The more that exist and are put in the strip for efficiency is where the optimisation is. Not the total number of them.

Shaving off triangles for 4fps is a waste of effort and time, and that is why they go more for things that impact to a greater extent - in code..

  • Like 1

Share this post


Link to post
Share on other sites
6 minutes ago, Wulfie Reanimator said:

Shaving off a couple hundred of them from one of your products isn't going to seem like much, but when lots of copies of that product are appearing on the screen, those ignored optimizations literally multiply. You should always assume the worst-case scenario and the more you (general you) do it, the better SL as a whole will run for everybody.

That matters when the engine works as it should. Bending the work to work for an engine that runs like sand instead of fuel in the tank just means in general we suffer the performance and lack of enjoyment no matter, always. It won't improve for as long as people pretend there isn't a problem with it and bend content to those problems.

As a contrast, Digital Extremes reworked their IP and built their own particle engine from the ground up when they didn't like the direction a vendor went for their purposes. On the same hardware not only did they give twice the graphical goodies but also twice the performance. SL can barely handle thousands of particles, but they can do millions.

On the same hardware. I am just going to double stress that point.

  • Like 1

Share this post


Link to post
Share on other sites
18 minutes ago, Wulfie Reanimator said:

You're gonna need to get some sources to back that up, if you're implying that triangle count doesn't matter (or even as much). Draw calls and texture memory have also been the subject on these forums many times and they're all important, none of them should be ignored. Draw calls aren't something we can affect much though, so it's talked about the least. The best we can do is use less materials (faces) per object.

There is literally no reason why I should have to provide sources in a sea of people feeling to debate optimisation. They should have already researched it and either be able to provide additional information or simply accept it.

But as you wish, here is the opinionated helpful tips of one dude from one studio. That happens to be linked from the Polycount forums. That happen to be an active art community that is industry focused and participated in the old domination war competitions that were to scout up coming talent. That also happen to be among the groups that were into the whole limited sub 150 triangle mini speed competitions as well. IMO small triangle targets are back in fashion mainly for three things. 1) Practice 2) Mobile and ARM 3) Stylisic reasons.

Mr Eric talks drawcalls, texture memory, transform vs fill bound. and blame shifting you should take with a grain of salt but some truth.

artists talk among themselves. Also a link to a nvidia white paper. because industry.

  • Like 1

Share this post


Link to post
Share on other sites
4 minutes ago, NaomiLocket said:

That matters when the engine works as it should. Bending the work to work for an engine that runs like sand instead of fuel in the tank just means in general we suffer the performance and lack of enjoyment no matter, always. It won't improve for as long as people pretend there isn't a problem with it and bend content to those problems.

Can you even demonstrate that there might be a problem? I'm asking this sincerely, because OpenGL (which SL uses) does support this natively. There's no reason to doubt that OpenGL "doesn't work as it should" and I'm not one with the skills or patience to go find out. I was able to find a build of Firestorm from 2010 that included a specific change for prim rendering to switch to triangle-strips though.

34 minutes ago, NaomiLocket said:

This was a good read, thank you. I got through the whole thing, but.. I don't think a single thing I've said has contradicted anything the author says. Especially the "From Fat to Flat and Big to Small" section is something I've beaten my drum about (though not as eloquently). Correct me if I'm wrong.

The whole article does a good job of highlighting SL's biggest problem/struggle; lack of context. Most assets are created in a vacuum, as standalone products. The vast majority of creators on SL are not creating uniform, controlled environments, and they lack the tools to properly figure out what the problem areas are even if they do try make their own original areas like a game developer would.

  • Like 1

Share this post


Link to post
Share on other sites
Posted (edited)

Yeah exactly. I turned that debug setting on from false (which it was defaulted) and my display on both mesh and generated prims became corrupted in terrible ways. Ways that it shouldn't. If you can explain any condition I can adjust myself that could be the cause, that would be appreciated. I don't doubt OpenGL, I know it is a library. I know it supports features and handles some things natively. And I also know that an application vendor actually has to make use of it, not just compile it or just write glsl. They have to actually implement some application level code. (which I know you know)

Seeing as you've just linked a feature in a previous build. I'll just tell you now without a screenshot. I turned on the option and noticed the "problem". So I wanted confirmation. This is suggesting that it did not and favoured lists.

Edited by NaomiLocket
I am a terribly typo'ist I trigger myself even
  • Like 1

Share this post


Link to post
Share on other sites
6 minutes ago, Wulfie Reanimator said:

This was a good read, thank you. I got through the whole thing, but.. I don't think a single thing I've said has contradicted anything the author says. Especially the "From Fat to Flat and Big to Small" section is something I've beaten my drum about (though not as eloquently). Correct me if I'm wrong.

The whole article does a good job of highlighting SL's biggest problem/struggle; lack of context. Most assets are created in a vacuum, as standalone products. The vast majority of creators on SL are not creating uniform, controlled environments, and they lack the tools to properly figure out what the problem areas are even if they do try make their own original areas like a game developer would.

I'm glad you liked it. I liked it too, find it fascinating even. I take it with a grain of salt, though, because every studio team is different on a vast timeline and they all develop differently. Consider sorting algorithms and a google engineer interview. I certainly picked this one because it felt partially dated but still modern enough. And the concepts are fairly solid and concepts age better than some other things.

Yes, historically there was one time I went off the rails on purpose in a particular thread to see how far some usual suspects would go. And I raised that point myself on people creating for the context of the asset not the location. But that is a natural thing here. It doesn't negate the responsibilty the Lab has to us in code. 99% of everything is at the mercy of it. It doesn't change the fact that artists are at the very end of the blame spectrum.

Which Eric subtly pointed out. He was a technical artist in the middle of artists and programmers and told the artists to ask the level designer. Because they outlined the requirements.

The merchants have customers. I imagine from casual observation there is sometimes as much trouble talking to merchants as customers as there are artists talking to programmers. But not always, some of them are actually kinda nice!

Second life is like. Well. A very dysfunctional studio of hybrid level designers and artists.
But if people give up getting the Lab to treat content management, rendering pipelines, and their data structures as an artform itself we will never see it improve as gamers have seen theirs improve constantly. And it isn't like the Lab hasn't done work ever. They talk about it now and then when they have something significant.

But it has been sixteen years. I mean really.

  • Like 1

Share this post


Link to post
Share on other sites
6 minutes ago, NaomiLocket said:

Yeah exactly. I turned that debug setting on from false (which it was defaulted) and my display on both mesh and generated prims became corrupted in terrible ways. Ways that it shouldn't. If you can explain any condition I can adjust myself that could be the cause, that would be appreciated. I don't doubt OpenGL, I know it is a library. I know it supports features and handles some things natively. And I also know that an application vendor actually has to make use of it, not just compile it or just write glsl. They have to actually implement some application level code. (which I know you know)

Seeing as you've just linked a feature in a previous build. I'll just tell you know without a screenshot. I turned on the option and noticed the "problem". So I wanted confirmation. This is suggesting that it did not and favoured lists.

Oh, that's interesting. I didn't know RenderUseTriStrips was a thing and I see what you mean. You got me there, that might indicate a problem, but it could also be just another deprecated function lost to time (and buried with code). I'm not equipped to start tracking the source code to see when that function even gets called so I'll concede that.

11 minutes ago, NaomiLocket said:

It doesn't negate the responsibilty the Lab has to us in code. 99% of everything is at the mercy of it. It doesn't change the fact that artists are at the very end of the blame spectrum.

It's not like Linden Lab is getting a free pass here either. I regularly see the regulars (here and elsewhere) calling out Linden Lab's neglect. Even if we did assume that triangle strips weren't being used, that would only strengthen (for example) my argument that shaving those excess tris and optimizing the heck out of your model is very important. The current state is just not acceptable, no matter who's at fault. Things could be so much better, from LL and the creators' side. Actual games -- modern or old -- have never used assets like the ones you see in SL, even with modern technologies doing a lot of the heavy lifting. I know I made a list here of various games and the reported model stats, but lord knows if I can find it again..

  • Thanks 1

Share this post


Link to post
Share on other sites

Well maybe someone can. I heard a rumour someone supposedly compiled under Vulcan and got twice the rate. But when I saw that happen with that setting I figured, if that rumour was true, chances are they did more than just simply compile with a different library. I speculated maybe they fixed that problem for starters.

Well maybe someone that is familiar with the codebase can sort it or help us understand what is exactly going on and where we are at. Anyway, thanks for at least taking a look at it seriously, Wulfie. :)

Share this post


Link to post
Share on other sites
Posted (edited)

 

13 minutes ago, Wulfie Reanimator said:

It's not like Linden Lab is getting a free pass here either. I regularly see the regulars (here and elsewhere) calling out Linden Lab's neglect. Even if we did assume that triangle strips weren't being used, that would only strengthen (for example) my argument that shaving those excess tris and optimizing the heck out of your model is very important. The current state is just not acceptable, no matter who's at fault. Things could be so much better, from LL and the creators' side. Actual games -- modern or old -- have never used assets like the ones you see in SL, even with modern technologies doing a lot of the heavy lifting. I know I made a list here of various games and the reported model stats, but lord knows if I can find it again..

Game assets are a bit fluid. They don't all suscribe to the same theory. As an aside on lists and stats of figures used. I gave you two figures used in heavier titles that appear in other peoples lists and articles.

In one of the art forums, heaven help me to find it just like you and your list, was a speciliased shader that made use of extensive splits in UV to benefit from critically small memory in the actual texture. Go figure, high splits would normally mean bloated "verticies" but the UV soup actually worked. It was based on a square enix publish of deus ex. But I imagine the thing would be built to handle that. I wouldn't recommend causing splits without a desired reason. But modularity and repeats on custom geometry has a distinct appeal to it.

(eta: of course we could use the technique as a middle part of the workflow and bake down to a publish. but that would lose the small texture size.)

Edited by NaomiLocket
added quote thingy and eta

Share this post


Link to post
Share on other sites
Posted (edited)
58 minutes ago, NaomiLocket said:

Which Eric subtly pointed out. He was a technical artist in the middle of artists and programmers and told the artists to ask the level designer. Because they outlined the requirements.

Unofrtunately LL has changed a bit since then. Eric and Cory worked very closely together as the main designer and programmer/developer respectively and they leaned heavily on each other's expertise. That changed around 2007 though and there seems to have been little communication between the two LL departments since then. There may be a light at the end of the tunnel though. Check out the latest Premium gift. It was made by a brand new Mole and its technical quality is in a completely different league than any official mesh LL has released before. It seems LL finally has somebody at hand who can bridge the gap between the artistic and technical aspect of content creation. Let's hope they use him well.

 

1 hour ago, NaomiLocket said:

Seeing as you've just linked a feature in a previous build. I'll just tell you know without a screenshot. I turned on the option and noticed the "problem". So I wanted confirmation. This is suggesting that it did not and favoured lists.

This is a bit of idle speculation but is it possible SL uses triangle strips for the ground mesh and only the ground mesh? I did some tests on the beta grid and didn't see any difference neither in the looks or performance of a bare patch of ground with triangle strips switched on or off. That was perfectly flat ground so it may not mean anything but the ground mesh is one of the three SL assets where triangle strips would make the most sense.

 

Edited by ChinRey
Typos
  • Like 1

Share this post


Link to post
Share on other sites
Posted (edited)
8 minutes ago, ChinRey said:

This is a bit of idle speculation but is it possible SL uses triangle strips for the ground mesh and only the ground mesh? I did some tests on the beta grid and didn't see any difference neither in the looks or performance of a bare patch of ground with triangle strips switched on or off. That was perfectly flat ground so it may not mean anything but the ground mesh is one of the three SL assets where triangle strips would make the most sense.

 

Yet it might mean something, because the sides of a generated prim are also completely flat. But the setting references the wrong indexes in the list visually for the strip and crosses over a whole row to form a triangle. Causing conflicts, on top of the every second being inverted normal issue. So maybe it is actually a thing.

(also the point of forming degenerate triangle strips is so that submeshes that are normally split are no longer split and form a single triangle strip. Meaning it makes sense to form strips where ever and on what ever it is possible)

Edited by NaomiLocket

Share this post


Link to post
Share on other sites

Now this is how discussions on optimization should be... Respecting each others expertise, acknowledging that we have different "specialities" so we naturally end up with our own particular hobby-horses and areas where others may have greater insight. If this is ever going to be properly addressed it will take all of us, all our respective insights coming together....

We all love to roundly castigate the Lab, of course, but if we continue having a productive and respectful discussion like this I would bet that at least one or two Lindens will be reading it with interest and paying attention to any possibilities we uncover.

  • Like 1
  • Thanks 2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...