Jump to content

Why is there so much high-poly mesh in SL?


WingsOfPurity
 Share

Recommended Posts

Yes. We really need better mesh reduction tools.

The better techniques for mesh reduction involve generating textures, bump maps, and normal maps in programs to replace fine detail in mesh. For example, if you have a sign with raised letters, or jewelry with engraving, its medium-distance model would be a flat object with a normal map. Here's a tutorial on how to do that in Blender. Like everything else in Blender, it's possible but clunky.

SL's workflow and upload billing discourages that. Its expensive to change a texture you uploaded with the mesh; you pay the mesh upload fee again. If you have an object that comes in several colors, you may pay the upload fee multiple times for the same mesh. Plus there's the hassle of logging into the beta grid for free upload testing, then having to upload again on the main grid.

A useful feature would be for LL to allow free mesh uploads to a "Sandbox" folder. Items there you could only rez in a sandbox region. Once you had something you wanted to keep, you'd pay the upload fee and move it out of the Sandbox folder. This eliminates the need to use the beta grid and upload everything twice. LL still gets paid. User hassle level goes down.

Link to comment
Share on other sites

impostorgarden1.thumb.png.570641f9ccd0e5483cff602eba3f664b.png

Animats' impostor garden. Visit in world.

Impostors have their uses. This is my in-world demo for impostors. Some of those objects are full 3D models, and some are two triangles with an image. The two triangle impostors rotate and switch images to face the viewer, creating the illusion that there's a real 3D model there. 25 meters out, the impostors often look better than the lower-LOD 3D models. This is how most games do it.

The impostor garden is a proof of concept. The demo is done with LSL, not  a viewer mod, so the illusion only works for one user at a time. To really do this, we'd need code in the mesh uploader to generate the images for the impostor. It only works for textured, colored impostors, since we have to take a picture at upload time. The previous posting about workflow applies.

Texture size is an issue. You need 8 or more images, so the textures for the images can get big. Here each image is 128x512, containing 8 images, each 128x64. We could drop down to 64x32, or even lower for small object impostors. For demo purposes, where you can get close to the impostor, these have more resolution than they would need if they were only used for lowest LOD.

impostorat50m_001.png

Impostor garden at 50 meters. The blue square is a size reference, 64 x 32 pixels.

We could reduce the impostor size to 64x32 and still have more than one texture pixel per screen pixel. The full set of 8 impostor images would then be a 64x256 image, or 66K bytes. Not too bad. If 20% of the typical 1GB of GPU memory was devoted to impostor textures, about 3000 of them could appear on screen. They only have two triangles each, so they draw fast, no matter how complex the original model.

Edited by animats
  • Like 1
Link to comment
Share on other sites

3 hours ago, animats said:

SL's workflow and upload billing discourages that. Its expensive to change a texture you uploaded with the mesh; you pay the mesh upload fee again. If you have an object that comes in several colors, you may pay the upload fee multiple times for the same mesh.

Re-uploading an entire mesh just to replace a texture is a very weird workflow to say the least.  With the introduction of local textures a much more sensible workflow is to upload the mesh with no textures, apply local textures directly from your hard drive, edit the textures as necessary and once you're happy with the finished result, upload the texture to SL and apply it, replacing the local texture version.  That way the only texture uploads you pay for are the textures you end up using in the finished product.

  • Like 3
  • Thanks 2
Link to comment
Share on other sites

For me the revelation of being able to use blender to:

1) model in high poly

2) make a low poly version

3) bake the high poly textures onto the low poly model

clinched it.  Understanding vertex direction and it's effect on smoothing also helps a heap.

Until I understood that how something looks in the 2D window into the 3D SL world is the key, my low poly stuff was just lego.

Link to comment
Share on other sites

12 hours ago, ChinRey said:

One if the "RenderVolumeLODFactor", or just "LodFactor". What it does, is override the default LoD swap distances. By increasing the LoD swap distances, you can reduce the number of triangles in the lwoer LoD models significantly because. That sounds like a good idea but it also means the higher LoD models with more triangles are used more often so in reality you loose more performance than you gain. The weight formula doesn't know about this though. It believes the swap distances are the default ones and calcuates according to that. Many content creators use this to cheat the system, tricking it into believing their builds are far less heavy than they actually are.

The other way to cheat the system is the fitmesh LoD bug and as the name says, it only applies to fitted mesh. It's actually not one bug, it's at least three of them working together to mess things up.

Thank you very much ChinRey for explaining this but i still don't understand, sorry. :$ Let's talk about what all those bugs mean for average fitted mesh creator like me who doesn't know the math behind it and how to use it to cheat the system.

1) If i just rig my fitted meshes to a normal avatar sized skeleton, upload them in SL in normal avatar size and have SL Uploader generate lower LoDs (thus doing absolutely nothing to cheat or exploit these bugs), will they still be affected by these bugs?

2) Is all fitted mesh affected by these LoD bugs?

3) If the LoD system is broken for fitted mesh items anyway, what is the point of optimizing them?

  • Like 1
Link to comment
Share on other sites

I think maybe you miss the point that the lower LoD is never actually used (for fitted mesh). Most of your other questions  should be answered once you get that point. And: since lower LoD is not actually used, the potential benefits (better frame rates, etc.) are lost. 

I only understand from reading many of ChinRey’s threads. I’m not a mesh expert.

Link to comment
Share on other sites

6 hours ago, animats said:

Yes. We really need better mesh reduction tools.

The better techniques for mesh reduction involve generating textures, bump maps, and normal maps in programs to replace fine detail in mesh.

Yes but no.

I do agree with you in principle but Second Life is already overloaded with textures to a far greater extent than it is with geometry. Any solution that requires more surface maps would do more harm than good.  On top of that, you need ALM to see those maps in Second Life and it comes with such a big performance overhead you can't expect everybody to be able to use it at all. What we need for that isn't new tools but a brand new render engine and I do think that's too much to ask for.

 

6 hours ago, animats said:

Impostors have their uses. This is my in-world demo for impostors.

I recommend everybody to go and take a look. What animats has done there is seriously impressive and something liek that streamlined and integrated into the SL software could be immensely valuable as a replacement for lowest LoD models for fairly complex objects.

We do have the tools to make efficient content for SL now, at least far more efficient content than we usually see. The problems are that there is very little information how to use those tools effectively and even less incitement for content creators to do so.

That last tree in my previous post, It does exist in SL so it is perfectly possible to make today. If all content in SL had been made as render/LI efficient as that, we wouldn't have had any performance issues worth mentioning. A general efficiency level a half of that, even a quarter of it, would have been a huge improvement.

I don't think there is more than one person who could have made that tree (and yes, that's me - I am to some extent blowing my own trumpet here). There may be one more. But mesh trees are a specialized branch (sorry abut the pun), there are certainly several makers of other kinds of mesh at that level.

Even more important, there are  lots of people who could easily deliver enough great looking half/quarter efficiency content to fill up the grid twice. Most of them are also people who would be eager and able to improve their skills even further if they were given the opportunity. There are even more such people who tried but couldn't break through.

Has anybody heard of JessieSties1 Resident? I have but only because she used to be a student of mine until she raced past me. A few years ago she made exactly the kind of HG mesh items that are all the rage at events and at gachas even today, only at a far superior quality level in every way. Then she gave up and left. I was so proud the first time I saw one of her builds inworld. It never happened again.

How about MeganBlu Resident or IsisKowalsky Resident? You may have stumbled across them on MP as I did, some of their builds aren't that far down in the search ranking. The furniture they made is exquisite and although not perfectly optimized, certainly far above what you usually get from most of the big brands. MeganBlu's MP store there but she's fled (meaning of course that all the income from her store go straight to LL). I have the impression IsisKowalsky doesn't care much about sales figures so she's probably happy.

But we shouldn't be happy because those people are the kind of builders SL need and I can assure you that anybody who discovers those builders are more than happy to buy their furniture rather than what most of the big popular brands offer.

But SL commerce is so marketing driven. From a commercial point of view, every minute you spend building or improving your building skills is wasted because it is a minute you don't invest in marketing.

Better tools, better technical solutions? Yes please, that will help! But to really solve the problem, SL and LL need to encourage and help the struggling merchants who are already offering better optimized content so they get a fair chance, and they need to encourage and help the already succesful brands so they have a real reason to improve. In other words: we need to do exactly the opposite of what is done now.

Edited by ChinRey
  • Like 1
Link to comment
Share on other sites

24 minutes ago, Elvina Ewing said:

1) If i just rig my fitted meshes to a normal avatar sized skeleton, upload them in SL in normal avatar size and have SL Uploader generate lower LoDs (thus doing absolutely nothing to cheat or exploit these bugs), will they still be affected by these bugs?

There are two answers to that.

When it comes to actual performance, it doesn't matter what size you upload the mesh at.

When it comes to cheating the ARC system, the smaller you make it, the more you can cheat.

 

25 minutes ago, Elvina Ewing said:

2) Is all fitted mesh affected by these LoD bugs?

Yes.

 

25 minutes ago, Elvina Ewing said:

3) If the LoD system is broken for fitted mesh items anyway, what is the point of optimizing them?

What the bug means is that the high LoD model is used where one of the lower ones are supposed to. That means optimizing that model is even more important for performance than it would have been without the bug.

That means:

19 hours ago, Elvina Ewing said:

i disagree. It reminds me of this belly dancer jeweled top i saw recently made by another creator. They used a nicely done texture jewels to decorate their top with. I thought wow that top looks lovely, maybe i should try the same approach - less work, less poly's/lag, still looks great. Until i saw a 1 (or 2?) star review on the same top (a different colour listing), where the customer complained that jewels are only texture and it looks fake and they feel cheated and blabla. I decided to stick with my mesh jewels (imagine the poly count).

If the fitmesh LoD bug hadn't existed, you could have made such a top with the jewels split across several small meshes to control their LoD swap distances. And then you could have added as many triangles as you wanted to the high model. Those triangles would only have been rendered if you cammed in very close anyway so they wouldn't have mattered at all to performance under normal circumstances. But because of the fitmesh LoD bug you can't do it that way.

  • Like 2
Link to comment
Share on other sites

43 minutes ago, ChinRey said:

What the bug means is that the high LoD model is used where one of the lower ones are supposed to. That means optimizing that model is even more important for performance than it would have been without the bug.

So, are you saying that even the Medium LoD is never used? It is always only the highest LoD (original mesh in my case, because i never make LoD models and almost always let the Uploader generate the lower levels)? And it only affects fitted mesh? Because i remembered that back in the pre-fitted mesh days i had this incident happen. Ironically, it is about just that kind of jeweled top i mentioned earlier. I made this top that was decorated with pearls, it was rigged mesh, but not fitted. As usual i let the Uploader generate the lower LoDs, and for some reason i didn't even check what the lower LoDs looked like... So i put this top for sale, and after a few sales i got customers messaging me that the top disappears when they cam away leaving their breasts bare! Apparently, the Uploader generated the Medium LoD degrading the fabric part of the top completely, leaving only pearls! So, this was one of the very few times when i had to make a specific Medium LoD mesh. My question here: so the LoD bug doesn't affect non-fitted rigged mesh? Because apparently back in the day it was working as it should, otherwise i wouldn't have had angry customers with this top... Or it has been changed since then?

Edited to add:

I just pulled out that old top to test it, it does still behave the same way - disappears at only about 10m distance, so i guess it means that only fitted mesh is affected by this LoD bug.

Edited by Elvina Ewing
Link to comment
Share on other sites

39 minutes ago, Elvina Ewing said:

So, are you saying that even the Medium LoD is never used?

Rarely used, not never.

 

39 minutes ago, Elvina Ewing said:

My question here: so the LoD bug doesn't affect non-fitted rigged mesh? Because apparently back in the day it was working as it should, otherwise i wouldn't have had angry customers with this top... Or it has been changed since then?

It has changed. The third bug is the decider for medium LoD and it used to be quite rare.

The first two bugs always apply to fitted mesh and probably rigged mesh too. The third bug is trigged by some special conditions that used to be rare but have become very common recently.

Two comments here:

You may get some pepper for saying you use uploader generated LoD models. It is a very bad idea and some people here can be quite sensitive about it. I certainly am but the more I think about it, the more I think we shold put the blame where blame is due. It is the method Linden Lab in their ignorance officially recommends and I may be wrong but I believe it's also the method LL's own content creators in their ignorance rely on. We can always hope that SL's content creators know better but we have no right to expect them to.

The other comment is, you do realize that I am essentially telling you and others who read this how to cheat? It feels a bit strange but so many people already do cheat and Linden Lab doesn't seem to care, so why should I?

Edited by ChinRey
  • Thanks 1
Link to comment
Share on other sites

@animats it's to late for your imposter idea, mesh is already here and they would have to redo all former content - believe me this is not what's gonna happen ... btw. it won't work with more advanced mesh stuff like texture changing furniture. And how will a fullperm mesh template seller even know how their customers will colour the meshes? The idea might be nice but is not applyable to SL anymore -  or never was.

PS: flat objects with a normal map would appear plain flat to ~70% of the SL userbase (lucky guess but it's huge portion) ...

Edited by Fionalein
  • Like 2
Link to comment
Share on other sites

3 minutes ago, ChinRey said:

You may get some pepper for saying you use uploader generated LoD models. It is a very bad idea and some people here can be quite sensitive about it.

why? what's wrong with it? it does a fair job in just mere seconds what would have costed me days to do by hand. In the rare occasions when i make rezzable items i do make my own LoD models because otherwise it's impossible to keep the LI low... tbh i cannot imagine any fitted mesh creator making their own LoD models... :/ with the speed at which some well-known creators are churning out new content it would be just not possible... And now you are telling us lower LoDs are pretty much useless atm, too, so it doesn't even matter apparently...

13 minutes ago, ChinRey said:

The other comment is, you do realize that I am essentially telling you and others who read this how to cheat? It feels a bit strange but so many people already do cheat and Linden Lab doesn't seem to care, so why should I?

i do, i was thinking exactly that... I dunno about others, but me i am not going to change anything in my workflow. I will not butcher lower LoDs of my meshes, because imagine LL will decide to fix this bug tomorrow, it means my meshes' LoDs will be broken and i will have to redo them. You never know what might happen...

Link to comment
Share on other sites

1 hour ago, ChinRey said:

You may get some pepper for saying you

43 minutes ago, Elvina Ewing said:

why? what's wrong with it? it does a

... Bloody Awful job, with a quality that's comparable to a blind, one armed, compulsive chainsaw juggler, suffering from Delerium Tremens, attempting to perform delicate brain surgery, on a roller coaster...

...

The problem with 3D content creation by, essentially, amateurs, has been around for ages, in all aspects, nit just SL...

The problem starts with the expectation that software makers will have found a way to make 3D "Easy", that there will be some "Make Art" button you can simply push after typing a few keywords about what kind of art you want, and it will just happen, and you can slap your brand name on it, and distribute...

Crud like the clothing generator "Megapoly Designer", or the "Make Human" project is about as close as anyone has got to that so far.

Applications like Blender, have an Auto-Fail button to make really bad "waste most ofthe image map cookie cutter" uv maps, and an Auto-Fail button to apply badly overdone "A flock of flying squid pissed ink on everything" AO bakes, and an Auto-Fail button to apply badly over done "fake highlights applied with a bucket of whitewash and a 4 inch house painters brush" baked speculars...

Easy 3D (tm) with Blunder 3D's Auto-Fail buttons, in SECONDS!

Then people load this rubbish into the Official SL Inferiority Viewer's LoD Butcher Uploader...

And THAT is why you get told when you buy the crap that you MUST have your lodfactor set to 4 or 6 or 8, and why you get texture thrashing because every single tiny piece has its own crappy cookie cutter 1024 x 1024 texture, and your vram is overflowing, and it takes 30 seconds to rez the high poly LoD0, but if you scroll your camera back more than 2 m, it degenerates into twisted mess of deformed triangles...

...

ANYONE who thinks and expects e3D to be "Easy" should go take up another hobby...

And there is the final problem...

"I earn $20 an hour as a night shift reserve store manager 3rd class at Col.Mc Kings...

So...

My Blunder 3D hobbyist outpourings MUST generate at least $25 for every hour I spend on them... So I will NOT learn to do things RIGHT because it's slow and makes my hobby less profitable than my DAY JOB..."

...

If people WANT to earn a living from 3D, realistically, they have to take the time to learn the damn skills, to do things right, then go apply for a job at Pixar or ILM...

...

Me, I'm a hobbyist, but I've been one since the early 90's, I don't do 3D for money, just for fun.



 

  • Like 2
Link to comment
Share on other sites

1 hour ago, Elvina Ewing said:

why? what's wrong with it? it does a fair job in just mere seconds what would have costed me days to do by hand.

If that takes you days, you may want to reconsider your workflow. Making the perfect LoD models might take hours, but not days. Making something better than what the uploader can manage, should only take minutes. Even the straight output from one of Blender's two simplification tools (and I'm sure 3DS Max and Mya have similar tools) will do. Not as good as manual models but certainly better than the uploader.

Link to comment
Share on other sites

2 minutes ago, ChinRey said:

If that takes you days, you may want to reconsider your workflow. Making the perfect LoD models might take hours, but not days. Making something better than what the uploader can manage, should only take minutes. Even the straight output from one of Blender's two simplification tools (and I'm sure 3DS Max and Mya have similar tools) will do. Not as good as manual models but certainly better than the uploader.

still, neither of you offered any evidence as of why you believe the uploader does a bad job. I am supposed to take your word for it. Sorry, but i will just treat it as your personal opinion and disagree. My experience is that medium and even low LoDs generated by the uploader of my meshes look fair. It's only the lowest LoD that often looks like a mess, but sometimes it even doesn't.

The only tools i know of in 3ds max are Optimize and Pro-Optimizer modifiers. There might be others i am not aware of, but i remember reading somewhere that Pro-Optimizer did the best job. Hence, i never tried any other options. Pro-optimizer, for starters, turns everything into triangles. I did use it to optimize some jewelry but that was only exceptional case, as everything else i ever tried it on did a horrible job. Comparing the results Pro-Optimizer gives to the SL Uploader, i will choose the Uploader. Again, i have no idea how Blender does it, i always believed it did a far superior job than 3ds max's Pro-Optimizer. But again, i am not going to learn Blender for that sake.

So, making a decent LoD models in 3ds max will take me a lot of time, because i am not satisfied with the results Pro-Optimizer gives and i would have had to do it manually. Or, learn another program. And again there is this matter of why should i, with this LoD bug apparently making any LoD useless at all... :/

Link to comment
Share on other sites

12 minutes ago, Elvina Ewing said:

neither of you offered any evidence as of why you believe the uploader does a bad job. I am supposed to take your word for it. Sorry, but i will just treat it as your personal opinion and disagree.

This topic has been discussed over and over again at great length in this forum by some of the most accomplished mesh modelers working in SL today, so It's hardly a matter of Chin Rey's personal opinion.   If you are seriously interested in finding answers, begin by doing the research.  Look for posts in this forum with the search term "optimize".  You might begin with 

but don't stop there. There are loads of threads on the topic within the past year alone.  To get suggestions about ways to manage your work flow to create models with better LOD, take a look at Penny Patton's tutorial >>> 

 

  • Thanks 1
Link to comment
Share on other sites

sighs...

26 minutes ago, Elvina Ewing said:

And again there is this matter of why should i, with this LoD bug apparently making any LoD useless at all... :/

no i am not all that interested in finding answers to how i can optimize my meshes' LoDs after i was just told any LoDs other than the highest don't even matter apparently. I'm just fine with the way it is, thank you.

Link to comment
Share on other sites

1 hour ago, Elvina Ewing said:

neither of you offered any evidence as of why you believe the uploader does a bad job. I am supposed to take your word for it. Sorry, but i will just treat it as your personal opinion and disagree.

Hmmm because we've both been involved in 3D for a long time, we both see the effects in SL EVERY time we log in, and are both tech savvy enough to understand whats going on...

1 hour ago, Elvina Ewing said:

Pro-optimizer, for starters, turns everything into triangles.

Heads up... Everything in SL is triangles, it's render engine is old enough that it doesn't handle quads and ngons like say Maya, Max, C4D, or most modern 3d modeling apps...



 

Link to comment
Share on other sites

3 minutes ago, Klytyna said:

Hmmm because we've both been involved in 3D for a long time, we both see the effects in SL EVERY time we log in, and are both tech savvy enough to understand whats going on...

so have i, but on top of it it is me who's been working in 3ds max for 12 years but neither of you seem to know much about it, so you will excuse me if i don't take your word for it. It is easy for you to claim certain things about optimizing when you have no idea what a Pro-optimized mesh even looks like compared to the one that Uploader generates.

9 minutes ago, Klytyna said:

Heads up... Everything in SL is triangles, it's render engine is old enough that it doesn't handle quads and ngons like say Maya, Max, C4D, or most modern 3d modeling apps...

fair enough

Link to comment
Share on other sites

9 hours ago, Fluffy Sharkfin said:

That way the only texture uploads you pay for are the textures you end up using in the finished product.

LL has been talking about more levels of membership. If they offered "Creator-level", with upload charges included, for 50% more than Premium, would you go for it?

(Upload just uses disk space on AWS. It should cost about the same per gigabyte as uploading cat videos.)

Link to comment
Share on other sites

I’m just going to point out, this is what I’ve been saying for the past couple of months. If nobody makes a decent tutorial(s)on how to optimize and a reasonable work flow, the majority of creators are just going to use Marvelous and 3dMax for clothing and call it a day. Just because it’s easy. It’s the path of least resistance....it’s human nature. And pointing to a tutorial on how to make a low poly box isn’t going to cut it.

Look at it this way. There are tutorials on how to go from Marvelous to Blender to SL and they are easy to follow and easy to find. 

Telling someone to learn how to mesh or making fun of them for using a particular pipeline is counter productive and it might even be a little alienating. Leading them to stick with what they know works.

Something to think about.

 

  • Thanks 1
Link to comment
Share on other sites

There's a lot that can be done to improve the tools.

Workflow improvements

  • Bigger and better preview window in the uploader, so you can see what you're doing. (Beq Janus is putting this in Firestorm now.) This make mesh optimization during upload workable. Right now, you have no clue how well you did until you upload.
  • Cheaper mesh uploading on the main grid, either as a Creator-level perk or using a Sandbox folder as described above. No more need to go to the beta grid to test.
  • Single-file uploads from Blender, using level info in the file to distinguish levels of detail and physics. (Blender needs to generate a <level> tag in the DAE file for this, which, due to a bug, it doesn't. That's an accepted and assigned request in the Blender bug system now. Once in Blender, the SL uploader needs to recognize it.)
  • Encourage single-file uploads, with all prims of an object and all textures. A bigger upload preview window will encourage this, because you'll see clearly what you're uploading before the upload. This makes impostors of the whole object possible.

Better mesh reduction

  • Good medium LODs, generated automatically in the uploader At least a quartic mesh reducer rather than the current dumb decimator. A quartic mesh reducer tries to minimize the volume between the reduced mesh and the original mesh.
  • Never try to reduce below six faces. It doesn't help land impact and it looks awful.
  • Offer impostor generation options during uploading. Offer at least "cube" (a painted cube, good for buildings), "8-way" (8 vertical planes), "9-way" (8-way plus top view), and "dodecahedron" (12 views, looks OK from any angle.) These are all standard game impostors.  "Low" and "Lowest" LOD can be impostors for most objects.

Physics model generation

  • Offer an option which has enough smarts to get basic buildings right without any user effort. Close up openings too small for an avatar (most windows), leave large ones open, generate collision planes.

Additional features to consider

  • Objects should have a default color, the "1x1" texture. When rezzing, and still in "blob" mode, they should show in that color. That gets rid of grey blobs. Trees start as greenish translucent blobs. Dirt starts out as a brown area. Roads start out as a blackish area. Buildings start out in roughly the right color. Stuff in the distance won't look as bad, especially if a little blur is added during rendering.
  • Texture loading priority needs a better look. The texture system has an elaborate system for loading textures by priority, but the scheme for setting priorities is suboptimal. Fetch the near stuff in the direction the avatar is looking first. Also, texture loading could probably use more bandwidth than it does. Some of the throttling dates from the UDP era when textures came from the sims.

Most of this can be done with no LL involvement, and some is already happening.

  • Like 1
Link to comment
Share on other sites

4 hours ago, ChinRey said:

If that takes you days, you may want to reconsider your workflow. Making the perfect LoD models might take hours, but not days. Making something better than what the uploader can manage, should only take minutes. Even the straight output from one of Blender's two simplification tools (and I'm sure 3DS Max and Mya have similar tools) will do. Not as good as manual models but certainly better than the uploader.

Thus the religion of Chin. All thou who bow .. I am a simple old school maker of *****. I mesh a bit. I script. My mesh n script has been as low impact for ever. As have my sculpts. And I sell elsewhere. Small congregation?

Link to comment
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.

 Share

×
×
  • Create New...