Jump to content

Better building


You are about to reply to a thread that has been inactive for 2163 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

Better building techniques really should be something that's taught. Not talking about model making or texturing, etc, but the process of assembling premade items into a series of well performing scenes rather than a single solid build. The goal - Higher frame rates and faster loading. I would be interested in hearing other peoples ideas.

--

Build for an avatar walking rather than an avatar standing on the landing point and caming, an avatar caming your build adds nothing to your location. Make them enter your build and move around to explore.

Object occlusion (don't render objects/avatars hidden behind other objects) isn't so great in SL. So taking it for granted or hoping it will work in your favor tends to produce poor results. Your viewer still has to deal with objects you can't see and the region still sends info about those objects to the client - end result; poor rendering performance further kneecapped by the viewer processing stuff that isn't even visible. Poor experience all round.

Knowing this, it makes no sense to construct your entire build on the sim floor, or even on the same level. But that is what were all used to doing.

Placing buildings on the sim floor, and then using experience teleports in doorways to shoot the avatar up to isolated skyboxed interior spaces will have a dramatic improvement on performance all round. Interior and exterior spaces will load faster and present a higher framerate. If the interior space has windows, include those in the skybox and duplicate the parts of the ground level build that can be seen. 

Interior spaces don't have to be the same size as rooms on the ground, if your scene calls for a bit more space or a higher ceiling, then you can easily add it and no one will ever notice. You can even step up the amount of decorative stuff in a room because the client wont be trying to render the bathroom in a house over the road.

This also means you can get away with fewer buildings and rooms overall and you can design for a list of purposes rather than "this house has 8 rooms, so I guess i need to decorate all of them". What is this "scene", what happens here, why does it need to exist, how to people enter and exit. People aren't used to clicking on doors to enter rooms, so whatever you do to denote a door the user can "pass though", be consistent.

As a side effect, interior rooms all become distinct private spaces. The viewer only has to worry about avatars in the same "scene"

 

But I only have a house and my garden?!

Easy, you have 2 scenes. Indoors and outdoors.

1. Place your house, decorate your garden. Then go though the house , unlink and remove as much from the interior as possible. Loose all the opening doors, stairs, everything you can. Place a teleporter in the main front door (experience ones are best as they are one click and instantly bounce you anywhere else on the region). If from the outside your house looks like a broken shell .. tint the windows a bit or toss in a huge dark prim. Optional .. add a greeter script informing people to click on doors to enter buildings. (or just give guided tours, showing off is half the fun)

2. rez a copy of your house and place it 1000M up (basically get it far away from wherever the outdoor scene is located), decorate the interior as usual. Place a teleporter on the door to scoot people back to the outdoor scene. If windows, add a copy of some key landmark details outside the house so it doesn't look like you're in the sky from inside the building - it doesn't have to be perfect, just some floor and a tree etc. Keep this as minimal as possible. If you can, get rid of any exterior details.

3. If you don't have a use for a particular room, close the door and remove the script. Why waste resources on spaces that you aren't going to use.

4. Optionally split off other individual rooms into there own dedicated spaces. Bedrooms are suddenly private.

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

An experience teleport, once granted permissions, can instantly move an avatar anywhere on the region. No menus, no sitting, click - WOOSH!

You do still get the teleport screens, but they only last for a second and can be disabled in firestorm.

 

Edit - to add I have scripted these as portals that you can walk though, and as clickable objects .. such as a telephone or door.

Edited by CoffeeDujour
Link to comment
Share on other sites

So it's a normal teleport except that you don't have to explicitly ask for it. The reason I asked is because it would be very strange to walk through the front door of a house and noticeably teleport to the inside, and vice versa. Imo, it would detract from the smoothness of wandering around a place. Interesting idea though, that could have some uses where an intervening 'episode' wouldn't be so out of place. Using a lift to go upstairs, for instance.

Edited by Phil Deakins
Link to comment
Share on other sites

Oh yes. It totally breaks the continuous open world aspect of Second Life we're used to and have been building for since day one. The problem is and always has been than SL is pretty terrible at providing that kind of open world, and it's been getting progressively worse since mesh. Object Occlusion with prims was somewhat effective, with mesh .. it's borderline junk and won't be getting any better. 

That's not to say people haven't been trying this approach, RP regions and clubs often place the entrance / mall well away from the actual venue.

It seems like a bigger deal that it actually is .. we all already teleport about to get to isolated rooms, skyboxes, dressing areas, naughty boxes, etc. The difference is this approach places the route to locations in world dispensing with the need to find and interact with a teleport pad .. which will always be out of place in most RP environments.

  • Thanks 1
Link to comment
Share on other sites

1 hour ago, CoffeeDujour said:

and then using experience teleports in doorways

Biggest problem with experience based portals is really really simple...

You have to be a Madlands Entitlement Club member to apply for an experience key to make them...

Otherwise, generally, yeah...
 

Link to comment
Share on other sites

10 hours ago, Klytyna said:

Biggest problem with experience based portals is really really simple...

You have to be a Madlands Entitlement Club member to apply for an experience key to make them...
 

Regular sit teleports can be used, experience tools ones just provide an instantaneous port and can be triggered on contact as well as touch.

Link to comment
Share on other sites

I've been using experience based teleporters in all my builds for years, you'd be amazed at how seamless it feels to walk into the open door of a building and into a skybox using this method. I'm not going to pretend it's exactly as seamless as actually having a fully constructed exterior and interior, but it's not as jarring as some people seem to think it might be, and it's well worth it for the performance benefits.

Yeah, you need to have a premium account to set up your own experience, but LL is planning to introduce "Grid Wide Experiences" which I assume means someone would be able to make a door teleporter using an experience and everyone who purchases said door will be able to use it, without having to set up their own experience.

 Another trick to increase performance in your builds is to use masked alpha wherever possible instead of blended alpha. Blended alpha eats up a lot more processing power to render, and it comes with glitches we're all familiar with. Masked alpha is easier to render and has none of said glitches.

 Plants tend to be the big framerate killer. Plants and trees. Change those from blended to masked and you should see a noticeable FPS bump.

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

21 minutes ago, Penny Patton said:

Another trick to increase performance in your builds is to use masked alpha wherever possible instead of blended alpha. Blended alpha eats up a lot more processing power to render, and it comes with glitches we're all familiar with. Masked alpha is easier to render and has none of said glitches.

 Plants tend to be the big framerate killer. Plants and trees. Change those from blended to masked and you should see a noticeable FPS bump.

Did exactly this recently, and yes .. you do get quite the boost.

  • Like 1
Link to comment
Share on other sites

8 hours ago, Marianne Little said:

What do you set mask cutoff to?

I have a database of about 700 plant textures I use or have used in the past. About 50 of the entries there are marked as "Blend" - they simply won't work with alpha masking. (I still use a few of them for some smaller plants and maybe even the occasional shrub but I won't recommend anybody to use them in large quantities and blended alpha textures are definitely not something you want on a big tree, let alone a whole forest.)

For the rest of them, cutoff varies from 5 to 250 - that is practically the entire scale. Most are in the 80--150 range though. You can often adjust the density of the vegetation a lot by tweaking the cutoff and that can be a very good way too add a little bit more variety to a scene without increasing the render or streaming cost.

One problem with alpha masking is that it's all a fairly recent hack to the software and it's not very compatible with windlight. The extremely exaggerated sharp afternoon shadows of the default day cycle are especially problematic here. The code handling alpha masking doesn't seem to be very efficient either and you get that ugly blocky look until the texture ahs been all downloaded and the viewer has managed to sort it out. If it's a high resolution texture, it can take quite some time.

Edited by ChinRey
Link to comment
Share on other sites

SL doesn't have "occlusion culling", where things you can't possibly see because they're behind something don't go out to the graphics card. Sansar has that, or at least they bought a third party product which provides it.

SL could do far better in the level of detail department. Billboard impostors should be automatically generated for everything, and those should be what you see for background objects once the graphics card memory starts to fill up or the frame rate starts to drop.

Here's an example of automatic billboard impostor generation, using the Unity engine.

Impostors are generated by rendering the object all by itself to get a picture of it, including alpha. OpenGL can do that. The picture is pasted on a simple plane. Usually, you use 2 crossed planes; sometimes 4. So impostors are 4 or 8 triangles with low-resolution textured surfaces, very cheap to display. They look OK because they're far away and small. There are better impostor generation techniques, but even this simple one is far ahead of the "discard random triangles" scheme SL uses for level of detail now.

Link to comment
Share on other sites

Yes SL does have "occlusion culling". It's just not that great.

The SL viewer has to do everything in real time. To generate a billboard impostor you have to load the mesh and all its textures, construct and render the billboard. Then either keep the billboard in VRAM along with the original mesh so it can be swapped in and out seamlessly. To actually save VRAM the viewer would have to swap them back and forth as needed (oh god no .. please no).

This would seriously impact loading new objects into a scene, use more VRAM, and only really benefit the user if they stay in one contained area.

They could not be cached as objects can change textures(etc) at any point in time, an object update would force a new billboard to be baked, best case adds expensive per-object hashing to everything, every frame, everywhere.

This is fine for a game engine where the software is presenting a static assortment of models, where none of the models change or are dynamically loaded and all the billboards for the entire game can easily be generated in advance.

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

The impostor should simply be the lowest level of detail of the object. The LOD display system can handle that now. It's already swapping out models as the view distance changes. The problem with the LOD system is that the poor quality of low-LOD models. The model-swapping system seems to work OK.

The simplest way to try this would be to have a Python program in Blender that generated an impostor layer. Then you could upload that along with the rest of the model. I'm surprised that some Blender enthusiast hasn't done this already. It would look better than the crappy over-decimated models you get by default from the uploader. Far less work for creators. Other than a very few good builders, creators just aren't bothering to generate a low-LOD model by hand. This is something that can be done without LL involvement.

Doing it server side for existing objects is much more effective, because it improves existing objects. It's technically possible, but a lot of work for LL. They could have a viewer-like program, probably running on AWS, which connects to idle sims and starts generating impostors for objects, replacing the "Lowest" level of detail if it was auto-generated by the uploader. (What the uploader auto-generates for lowest LOD is so awful an impostor would be a big step up.) Prim objects can get this treatment, too. Changing an object's color, texture, or geometry would invalidate the impostor, and the object would then have to be rendered as before.

There's already a server component which looks for objects that have changed recently but have been stable for a minute or so; that's used to update the pathfinding mesh. That could also add to the to-do list for the impostor maker. Impostor generation would always run behind updates, maybe hours behind, but that's OK; this is a performance optimization.

If you have good impostors, you can turn them on sooner, and you can draw more of them. One NVidia demo has 250,000 impostors, and that was five years ago. SL could then use a longer draw distance but a shorter switch-to-impostor distance.

I don't expect LL to do this with a shrinking user base.  (I once said to Oz Linden, "I wish I'd been here on the way up instead of on the way down.")

CoffeeDujour points out that this could potentially be done in the viewer, but that has problems. You need to download the good geometry and textures to make the impostor, so impostor building will lag behind viewing. That would only work if you were in a region with lots of background detail, and you were staying there a while, and you had some extra CPUs but not enough VRAM to hold all the models without killing the frame rate, and the scene was mostly static. That describes many good-looking areas in SL. Fashion Week, and many of the nature sims would benefit from this.

I'm still tied up with region crossings for now. Anyone on the Blender side interested in doing this?

 

Link to comment
Share on other sites

Reduce texture use. You'll see massive performance boosts by doing this. You'll also reduce rez times, bandwidth use, and eliminate "texture thrashing" (where textures go blurry then re-rez over and over).

Granted, this is not easy, there's no simple tutorial method I can give for reducing texture load, but there are a few general guidelines I can share:

Avoid using textures that are similar. If you can get away with using the same texture in multiple parts of a build, do it. People typically will not notice slight changes in shading, which is the most common reason you see nearly identical textures covering objects in SL.

Remove hidden textures. You'd be amazed at how many textures people use in SL that are completely hidden. One of the popular mesh head creators out there includes a fully modeled and textured mesh brain hidden inside their heads. Just...just no.  Most attachment creators feel the need to put a hidden store banner inside of their creations, usually on the root prim of the attachment. If the item is modifiable you can get rid of it easily enough, but so much content these days is no-mod and therefor cannot be optimized. I've seen this on some furniture and other in-world items, find the hidden textures and just get rid of them.

Avoid decorating using small items with lots of textures. I once bought a tavern set to decorate a fantasy RP sim I was building. It was full of great looking content but after I'd finished decorating, I realized how bad my framerates where. I was already using the skybox trick CoffeeDuhour recommended to kick off this thread, so there was really no reason for the bad performance and lag I was experiencing. It turns out that every item in the set was slathered in multiple textures. Even a simple drinking cup from the set had five 1024x1024 textures. Nothing in the set had enough detail to justify anything more than a single 1024x1024 texture (and even that would be excessive for most of these items). I retextured what I could, got rid of the rest, and managed to bring my fps back up to acceptable levels as a result.

If you're a content creator, be smart about your mesh UV wraps. Don't create a UV which leaves most of the texture area unused, you're just wasting everyone's VRAM when you do that. I once bought a set of mesh buildings. The smallest, one room building had about a dozen 1024x1024 textures, but if took all of the textures and combined them so there was no unused space, it probably would have been half that. You could probably even get it down to three textures if you got rid of the similar/redundant textures and the building would have remained virtually identical.

  • Like 3
Link to comment
Share on other sites

I'd also add that if you're a content creator making your own mesh, look closely at the habits of game modelers. I know a lot of us are very quick to say "SL isn't a videogame!" but it has all the same bottlenecks, plus a few more, that videogames have, so utilizing the optimization habits of videogame artists will help a lot in producing content that doesn't kill people's framerates.

  • Like 1
Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 2163 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...