Jump to content
CoffeeDujour

This is why we can't have nice things.

Recommended Posts

13 hours ago, Gabriele Graves said:

I don't believe it is possible for your average shopper to identify the "done right" items even if the item is rezzed and/or demo-able and there are many things which use textures and mesh that are not rezzed and not demo-able.  We can talk about the technical aspects until we are blue in the face but unless shoppers are able to identify and start to favour those who do it properly and still provide attractive items to buy, there will be no impetus to change for the creators who don't do things the right way.

For rezzed items, Wire Frame view (ctrl shift R maybe and if i recall correctly the offical viewer doesn't have it) and Edit will let you check out the density of the triangles. Even if it's not the particular thing you want, a spate of Edit viewing or a wire frame tour can be useful to get a general feel for how poly conscious the store owner is. If this doesn't make sense, start examining various things next time you're inworld and you'll get a sense of how much it can vary and what sort of range you might expect for a type of object. Generally speaking, the more coloured in it appears in wire frame, the higher the poly density and the harder it will be to render.

There's a tiny wee underlined More Info link in the Edit window too. It brings up another window with things like Download Weight. Sometimes that can help you get a better idea of what's going on with it.

Better tools are needed, but these can help.

2 hours ago, LittleMe Jewell said:

Yet, but roughly 99% of all jewelry sold is simply via vendor picture.  Almost nothing is actually rezzed other than a few samples here and there shown on a model or mannequin. 

Would it be worth it to you to start a conversation with the creator asking to see a copy or something? The rezzed LI can give an idea of how complex it is and that's easy enough for a creator to check out. If nothing else, it would let them know their customers care about how demanding things are to render.

Edited by Bitsy Buccaneer
  • Like 3
  • Thanks 1

Share this post


Link to post
Share on other sites

@Bitsy Buccaneer I appreciate the tips but just like Lil' alluded to, I have no idea of what a professional mesh creator looking at content in that way would consider optimized and correct for that type of content in a real-time environment such as SL.

If there isn't a way to make it simpler for the average spender to easily check and know whether what they are looking at is optimized content or not then they cannot really make an informed decision.  It really needs to be as simple as looking for a quality mark for either each product or for each vendor.  However, this doesn't sound even remotely feasible to implement.  I am thinking of how hard it is to educate people (in general) about how to avoid bad food choices at the supermarkets.  Some places have considered a traffic light system on food packaging to help people choose.  For food though a government body decides what the classification should be for each food and there is no real evidence that this kind of system even works.  I liken the mesh situation to that level of complexity condensing.  Condensing really complex information down into a easily verifiable mark is extremely difficult because it is so lossy and just like with the food, there is no evidence it would really make much difference anyway overall.

Share this post


Link to post
Share on other sites

@Gabriele Graves

Right. I'll do some of the work for you cause what I described really doesn't need the knowledge of a pro to check out. I was doing it ages before I started making my own.

Here are two chairs (purchased full perm), seen in wire frame (ctrl-shift-R). The arm chair on the left does quite a lot for the triangle count. Can you see how the triangles are large and the whole thing is very see through, including the legs? The chair on the right isn't horrible, but the simple shape of it could be done with many fewer triangles. Can you see how there are more triangles in it with a higher density than the arm chair on the left?

This is what you're looking for. Anyone can do it, no special knowledge required, just a viewer with wire frame capability.

The cushion and top of the arms aren't as bad as they look from this angle, they're just like the rest of the piece. But notice how it doesn't happen with the chair on the left. Its cushion has a much lower number of triangles.

You can find mesh which looks almost solid from every angle. That will be a monster to render. I don't have an example to hand but if you go investigating inworld you can probably find some.

661545397_Chairsinwireframe512.png.48041cb1ec75b11a24459f7703ed3501.png

Click on the object to Edit and look for the small More info link. It will bring up the box on the left below. The numbers you're most interested in are Download and Display. Display here is a measure of the render weight, or how difficult something is to draw on the screen. Lower is more efficient. Texture size and number of textures will affect this significantly, so very similar pieces can have quite different display weights. You don't need to understand the details, just that lower means more efficient.

2013318292_retrochairrenderweight.thumb.png.25eabdf356b781871f31e7919fff8955.png

So here are two simple tests anyone can do on any rezzed object to start to assess its efficiency. Lower display weight and less density of triangles. It's not difficult. Give it a go next time you're inworld and see for yourself. The more you explore, the more sense it will make. :) 

Edited by Bitsy Buccaneer
  • Like 2
  • Thanks 3

Share this post


Link to post
Share on other sites

I'd still like to find a good leather jacket and biker boots without insane mesh complexity. The boots have so much detail that the rivets are 3D modeled.

  • Like 1

Share this post


Link to post
Share on other sites

@Bitsy Buccaneer  Thanks Bitsy, I wasn't aware of those numbers hidden away there, that is definitely very useful and I shall be using this a lot in the future.

This is a hypothetical question but if this item wasn't a chair at all but an intricate necklace set and let's say (unrealistically) that all vendors had a representative copy rezzed or give out as a demo.  You checked using this method and it didn't seem to make any difference, that they all looked like a similarly densely packed mass of triangles and the numbers were roughly the same, are we saying that a) they are all doing it wrong for intricate necklace sets or b) it cannot be done efficiently for that type of thing and the type of item is just too complex to consider buying and using in SL? or c) this scenario just would not happen?

Edited by Gabriele Graves
Added scenario c)

Share this post


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

...

it cannot be done efficiently for that type of thing and the type of item is just too complex to consider buying and using in SL?

Only if it's fitted mesh. If it's reasonably well made regular mesh and/or prims and/or sculpts all those countless triangles should be culled out by the LoD system and only be displayed when you cam in really, really close. The LoD system is broken for fitted mesh though so yes, it can be a serious problem for that.

  • Thanks 3

Share this post


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

 a) they are all doing it wrong for intricate necklace sets or b) it cannot be done efficiently for that type of thing and the type of item is just too complex to consider buying and using in SL? or c) this scenario just would not happen?

another is d) How does a non-specialist person approach measurement complexity in areas where their own knowledge is limited and are face with a barrage of information which without specialist knowledge to parse it, is pretty much unintelligible

most people faced with this use the "close enough is good enough" approach - using the simplified standards guidelines where provided. And by personal observation of the product guided by their senses, and also by their desires

in the absence of personal detailed understanding of food ingredients for example then we go by sight (what it looks like) and by taste. And by the informational claims of the manufacturer as listed on the packaging and/or advertising. When the food looks and tastes ok and the ingredients are as listed then we tend to buy other products from the same manufacturer. When not then we tend not too

in SL, Land Impact and Complexity are the equivalent of government general standards guidelines against which we can measure products. Being generalised to cover a wide range of products they are simplified - crude yet informative. Close enough is good enough for the layperson generally

also too I think that most people do take the close enough is good enough approach to measurement and make compromises based on the sum total. We have some total measurement number in our minds that is acceptable to us personally

like with our Complexity for example. A piece of jewellery may be expensive by the measure but we want to wear it, so we compensate in our choice of what else we wear at the same time, keeping us within the total number we have decided for ourselves

is the same with furnishings that we place on our parcels. A thing may be 10 LI and we only have 8 LI available in the pool we have set aside for this type of object. But we love it and want it, so we remove something else of 2 LI from our parcel so that we can have it

  

 

 

 

  • Like 3
  • Thanks 1

Share this post


Link to post
Share on other sites
19 minutes ago, ellestones said:

also too I think that most people do take the close enough is good enough approach to measurement and make compromises based on the sum total. We have some total measurement number in our minds that is acceptable to us personally

like with our Complexity for example. A piece of jewellery may be expensive by the measure but we want to wear it, so we compensate in our choice of what else we wear at the same time, keeping us within the total number we have decided for ourselves

is the same with furnishings that we place on our parcels. A thing may be 10 LI and we only have 8 LI available in the pool we have set aside for this type of object. But we love it and want it, so we remove something else of 2 LI from our parcel so that we can have it

What you, I and other people find acceptable may be vastly different though.  I see people around wearing over 0.5 million in avatar complexity at events for example.

Thank you all for the responses, I have learned a lot here and it has given me a lot to ponder.

  • Like 2

Share this post


Link to post
Share on other sites

@Gabriele Graves

yes is true that we all have our own measure of what is acceptable to us. True also about a few who have super computers and don't care about other people. Based on my observations of complexity numbers above people's heads overall, I think though that most people do care and do try as best they can to be reasonable toward others in general areas

you right as well tho about shopping events

fashionista blingeratti is a whole other special experience in itself,  but the same people showing themselves off at these events to the nth degree are I find more concious of their impact in other areas, like at concerts, clubs, etc, and tone it down accordingly.  Dressing up for fashion events kinda comes with the territory I think. Almost to the point where if we not getting lagged to pieces at a fashion event then I often wonder what is the event organiser doing wrong :)

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites
11 hours ago, Gabriele Graves said:

@Bitsy Buccaneer  Thanks Bitsy, I wasn't aware of those numbers hidden away there, that is definitely very useful and I shall be using this a lot in the future.

This is a hypothetical question but if this item wasn't a chair at all but an intricate necklace set and let's say (unrealistically) that all vendors had a representative copy rezzed or give out as a demo.  You checked using this method and it didn't seem to make any difference, that they all looked like a similarly densely packed mass of triangles and the numbers were roughly the same, are we saying that a) they are all doing it wrong for intricate necklace sets or b) it cannot be done efficiently for that type of thing and the type of item is just too complex to consider buying and using in SL? or c) this scenario just would not happen?

Have you been inworld to rez items you already own or do some exploring in wire frame? Getting some experience will help immeasurably.

The hypothetical you've laid out is confusing but I think it comes down to wondering if all jewelers might be producing the same results. Texture size and number impacts display weight. That alone pretty much guarantees c), your scenario won't happen. There may be a glut of those who are using overly complex geometry (too many triangles in their mesh) and slathering the largest possible textures over every surface, but there will always be a few who are more sensible. This is true for chairs, jewelery, clothing, everything.

re b) Density will vary between categories of items. Hair will probably be more dense than trousers when viewed at the same distance. That's ok because an excellent rule of thumb for creating is put the detail where it matters most. Jewelery tends to be on the heavy side, triangle-wise, for the amount of screen space it takes up. You can still cam in close to your jewels to see how they fare and how they compare to others.

You can force changes of LOD from an intermediate camera position by changing your LOD graphics setting. I used to do this when I was wire-framing full perm mesh to assess quality before I bought it (or not), but I haven't used it to look at the fitmesh LOD problem. Worth investigating.

Perhaps a way forward for something like jewelery would be asking creators what the display weights are for specific items. A group of you working together could build up a body of data to do some real comparisons with, from numbers provided by creators and from examining things you already own. Put that in a blog and it could be very useful for teaching other consumers and letting creators know that these things matter and some of their customers care.

In writing all of this, I'm wondering if the overall solution isn't just to change the way jewelery is made for SL, but also the fashion approach to wearing it. I've seen people talk about how much they wear and I've seen sets sold with several intricate pieces. What if there was a trend towards a single statement piece with simpler companions, like a fabulous necklace with diamond stud earrings? Could Less is More ever catch on?

Edited by Bitsy Buccaneer
  • Like 2

Share this post


Link to post
Share on other sites

A general rule of thumb for efficient modeling is that you don't waste more polygons than necessary on flat surfaces. In the chair pictures that @Bitsy Buccaneer posted you can see that the left chair use a minimal amount of polygons on flat/low curvature areas and increases it when the object curves sharply (the corners of the wooden parts makes it very obvious)

The right chair on the other hand seem to have a "constant density" where no matter how much or how little surface details are requires, they creator kept a constant density. This is the typical look of a mesh "designed" using nurbs or subdivision modeling (nothing inherently wrong there), where the creator did not rebuild their final model and just used their design "as is".

Here is another example of a pointless amount of geometry (easily 90% of the geometry serves no purpose). Note that the sole, heel and toenails are so densely packed that you can barely see the gap in the wireframe view.

xnview_2018-10-28_23-46-37.png.bc1bc3af5542524e36877484c66b5173.png

Different style I know but neither of those shoes where made by me. You can see that the geometry is a lot less dense and is concentrated where it matters the most. In addition, the inside is only modeled as far as required before the foot will cover it.

FirestormOS-TestBuild_2018-10-28_23-59-36.png.3e9822a1a375cbe4ab83549a1f73ac96.png

While it might be difficult to differenciate the good from the very good, the difference between the bad and the good is very, very obvious.

 

A very important point that people don't appear to know is that making a high poly model (with nurbs or subdivision modeling) is easier than a low polygon model. With those methods you only have to model a basic outline to control the "flow" of the smoothed object.

blender_2018-10-29_00-09-03.png.5c5be1234ff7e97ca2eca4437ae25e27.png

This is a (terrible) vase i just made, and on the right, what i actually modeled to get this result, it took me maybe 20 seconds. Of course it's not a shoe, but that gives you an idea of the work involved (or not involved) in making those "dense" models.

And for the sake of argument, here is a (crudely) optimized version. 53248 triangles vs 544

blender_2018-10-29_00-17-09.png.bcb6ea9de16c8de50e7916887f3a86de.png

Edited by Kyrah Abattoir
  • Like 3
  • Thanks 3

Share this post


Link to post
Share on other sites
On 10/27/2018 at 11:27 PM, Bitsy Buccaneer said:

Have you been inworld to rez items you already own or do some exploring in wire frame? Getting some experience will help immeasurably.

No, I was away this weekend and haven't had much time to login this week so far.  Needless to say, I will be playing around with it when I can to try to make sense of it.

You have all been very helpful and pictures help a lot.  Thanks.

Edited by Gabriele Graves
  • Thanks 1

Share this post


Link to post
Share on other sites
On 10/25/2018 at 6:24 PM, Gabriele Graves said:

"Where are the places we can shop so that we can buy the things that have everything described here done right for SL?".

Chin Rey's OPQ garden center is a good place to get low-prim flowerbeds, greenery, and other garden accessories.

Anna Erotica has large low-prim trees for boundary use.

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

@animats  Thanks and I hope I don't cause offence to anyone but the focus of my concern is wearables.  Mesh body parts, clothing, jewellery, accessories, etc. and not being a graphics card hog when going around SL.  I generally don't do a great deal of landscaping or furnishing by comparison.

Share this post


Link to post
Share on other sites
5 hours ago, Gabriele Graves said:

@animats  Thanks and I hope I don't cause offence to anyone but the focus of my concern is wearables.  Mesh body parts, clothing, jewellery, accessories, etc. and not being a graphics card hog when going around SL.  I generally don't do a great deal of landscaping or furnishing by comparison.

For what it's worth, I grabbed chairs because I had useful examples readily to hand and they were easy to photograph from the same angle. The principles are still the same. If it had mattered for this, I would have taken the time to mount an archaeological expedition into my inventory for complicated mesh necklaces. :D

@Kyrah Abattoir did a great job picking up with her shoe wireframes, info on types of modeling and what to look out for. Her post is worth reading carefully.

Anyway, don't get caught up in how the item is categorised in your mind. Rigged wearables have some odd behaviours which result from being rigged, but triangles and mesh geometry are still triangles and mesh geometry - and that's why tools like wire frame are useful.

  • Like 2

Share this post


Link to post
Share on other sites
9 hours ago, Gabriele Graves said:

@animats  Thanks and I hope I don't cause offence to anyone but the focus of my concern is wearables.

Me: "I don't really understand the clothing system".

Female friend: "Of course not. You're a guy."

  • Like 1
  • Haha 1

Share this post


Link to post
Share on other sites
14 hours ago, Bitsy Buccaneer said:

For what it's worth, I grabbed chairs because I had useful examples readily to hand and they were easy to photograph from the same angle. The principles are still the same. If it had mattered for this, I would have taken the time to mount an archaeological expedition into my inventory for complicated mesh necklaces. :D

@Kyrah Abattoir did a great job picking up with her shoe wireframes, info on types of modeling and what to look out for. Her post is worth reading carefully.

Anyway, don't get caught up in how the item is categorised in your mind. Rigged wearables have some odd behaviours which result from being rigged, but triangles and mesh geometry are still triangles and mesh geometry - and that's why tools like wire frame are useful.

I understood this, I wasn't referring to your chairs in my previous comment, I am definitely aware that the advice on mesh applies to both worn and non-worn variants and believe me I am reading all posts carefully.  :) 

10 hours ago, animats said:

Me: "I don't really understand the clothing system".

Female friend: "Of course not. You're a guy."

I am sorry if I sounded ungrateful animats, I am not.

"Where are the places we can shop so that we can buy the things that have everything described here done right for SL?".

This quote was designed more for effect than for being literal, it was to highlight that, in my mind (and I definitely had fashion in mind), the majority of people out there buying clothes are going to want it to be easy to make the right choices.  I should have been more clear and I just didn't want anyone wasting more of their time giving me great suggestions of places to buy items that I don't often buy.  Thank you anyway :)

 

  • Thanks 2

Share this post


Link to post
Share on other sites
On 10/28/2018 at 11:52 PM, Kyrah Abattoir said:

A general rule of thumb for efficient modeling is that you don't waste more polygons than necessary on flat surfaces.

☝️ This should be framed and put up against the wall in every mesh maker's workshop.

Don't waste more polygons than necessary on flat surfaces!

That said. The main reason for the wealth of ridiculously high-poly objects being tossed into this virtual world of ours is money. Making high-poly stuff is less labor-intensive than low-poly that looks similarly detailed. You make things faster, you make more. You earn more L$. It is the lazy way. The make a quick buck way. And the average customer is totally clueless about the negative impact on sims by these shiny pretty high-poly things.

  • Like 3

Share this post


Link to post
Share on other sites
2 hours ago, Arduenn Schwartzman said:

☝️ This should be framed and put up against the wall in every mesh maker's workshop.

Don't waste more polygons than necessary on flat surfaces!

While we're at it, add Sea Warcliffe's texturing rule:

Use your texturing powers for good, not for evil!

  • Like 4

Share this post


Link to post
Share on other sites

I saw a 16k tri flower the other day which was no bigger than .125 meters tall. Also grass completely made from tri-polys, which was weird because from just a meter the tips went into sub-pixel broken black lines that looked terrible. Of course these fine works of mesh came with instructions on how to turn your graphics up to 8 in the debug menu. The attitude of the seller, given that they consider themselves a professional is that linden lab is somehow silly for wanting LOD and optimized mesh. Can you imagine a large installation of this kind of mesh, a field of poly grass would grind most machines into the ground. 

  • Sad 3

Share this post


Link to post
Share on other sites
26 minutes ago, Cube Republic said:

I saw a 16k tri flower the other day which was no bigger than .125 meters tall. Also grass completely made from tri-polys, which was weird because from just a meter the tips went into sub-pixel broken black lines that looked terrible. Of course these fine works of mesh came with instructions on how to turn your graphics up to 8 in the debug menu. The attitude of the seller, given that they consider themselves a professional is that linden lab is somehow silly for wanting LOD and optimized mesh. Can you imagine a large installation of this kind of mesh, a field of poly grass would grind most machines into the ground. 

Thankfully LI keeps those abominations at bay a little.

  • Like 1

Share this post


Link to post
Share on other sites
8 hours ago, Cube Republic said:

I saw a 16k tri flower the other day which was no bigger than .125 meters tall. Also grass completely made from tri-polys, which was weird because from just a meter the tips went into sub-pixel broken black lines that looked terrible. Of course these fine works of mesh came with instructions on how to turn your graphics up to 8 in the debug menu. The attitude of the seller, given that they consider themselves a professional is that linden lab is somehow silly for wanting LOD and optimized mesh. Can you imagine a large installation of this kind of mesh, a field of poly grass would grind most machines into the ground. 

wow!  Thats insane, really insane.  Especially when you consider what can be done with so much less.  Even after optimizing the high lod level by a massive margin, the other LOD levels can be reduced even further, down to nill for something so small on the ground.  Im working on some grasses/groundcovers and experimenting with all the ways and means we have to get the most for the least impact.  Seems to me that person didnt spend even one moment considering optimization.  We need tri count on mesh objects in marketplace, that would be a great number to expose, along with texture count/size, and lod stats/view.

Share this post


Link to post
Share on other sites

It's not really the creators' fault. LL created this problem by adding mesh support, encouraging creators to make high-detail models, and then not providing the tooling to handle it efficiently.

Sinespace, which is mostly the Unity game engine, has the Unity tools. Unreal Engine 4 has good level of detail tools. SL has nothing - whatever the creator uploads is what the viewer has to render. All SL has is the land impact system to keep a lid on things.

Some of the older SL users claim automatic LOD systems are impossible. They're behind the times. All the big players have them now. Check out Simplygon ("Simplygon is the gold standard for automated 3D optimization") and InstaLOD ("Everything you need for the production and automatic optimization of 3D content.). The AAA title game developers use those tools so that their paid artists don't have to spend much time on LOD issues.

Fixing this for new content isn't all that hard. You first need some mesh reduction before uploading. If you don't push them too hard, Blender's tools aren't that bad. An optimization tutorial for creators would help here. I posted a chair model earlier which has almost a million triangles. The seat cushion has 70,000. I just brought that down to 400 with the Limited Dissolve and Decimate tools in Blender. Blender's standard mesh reduction tools aren't that great; but they're better than nothing. They do really well at getting rid of unnecessary vertices in flat areas.

A higher LI cost for Medium models might help encourage this. You can still go overkill on the high level model, but unless it's filling up more than half the screen, the LOD system should drop to Medium.

Mesh reduction for low and lowest levels of detail is inherently going to produce crappy results. For that, you need some kind of impostor system. Given the existing limits of SL, the best we can do is bake textures onto very simplified models. I'm writing a Blender add-on to make that easier. You can do this now with the "bake" feature in Blender, but it's a pain to set up.

Old content? A subject for another time. That requires LL involvement. The stuff above can be done despite LL.

 

  • Thanks 1

Share this post


Link to post
Share on other sites

More impostor testing from my low-LOD generator, Impostor Maker. Not finished yet, but it's free and on Github. Right now I'd suggest this for developers only.. Try it if you like and file issues on Github.

lowlod02.png.fd6195436213cf0f2fff5bb816dedc96.png'

Low-LOD test. On left, over 800,000 triangles. On right, 34 triangles. This is a reasonable low or lowest LOD model.

lowlod02small.png.78083894466e4cf1e900bf867e49f375.png

This is the size for which this model is intended. At this scale, the differences aren't too apparent. Think of this as an alternative to a few triangles hanging in midair from the uploader's simple-minded decimator. It's not fully automatic. The creator has to build a very low detail model, upon which the real model will be rendered. Impostor Maker does the rest.

lowlodmodel.png.77bddec53d7044c538605ef014d58a67.png

Boxing in the chair. The box surrounds the model, fitting as closely as possible.

So that's a way to make low-LOD models without much effort.

The next big problem is Medium LOD. Most of the pressure to use high-LOD models at too great a distance comes from bad medium-LOD models. Blender doesn't really have a great built-in tool for reducing a mesh to medium level. The existing tools can strip out totally unneeded vertices, but smooth reduction is kind of iffy with Blender's tools.

Blender's mesh reduction falls down on some common cases. Limited dissolve tries to flatten shallow angles at edges. So raised or incised carving, like raised letters or embossing, are a bad case - the sharp edges don't get removed. Decimate is a big hammer - that just takes out small triangles, semi-randomly. Decimation tends to trash raised letters. Does anyone have a better approach?

A quartic mesh reducer tries to minimize the difference between the original and reduced mesh, so it does a better looking job. Blender lacks a quartic mesh reducer. Meshlab has one, but you have to go out of Blender and back to use it. Any ideas there?

 

  • Thanks 1

Share this post


Link to post
Share on other sites
6 hours ago, animats said:

More impostor testing from my low-LOD generator, Impostor Maker. Not finished yet, but it's free and on Github. Right now I'd suggest this for developers only.. Try it if you like and file issues on Github.

lowlod02.png.fd6195436213cf0f2fff5bb816dedc96.png'

Low-LOD test. On left, over 800,000 triangles. On right, 34 triangles. This is a reasonable low or lowest LOD model.

lowlod02small.png.78083894466e4cf1e900bf867e49f375.png

 

 

This would be good for lower LODs where folk can't really make out much detail. 2nd LOD is usually easy because it's just dissolving loops which is easy if a neat flow has been kept. 

  • Like 1

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...