Page 1 of 2

D'ni Temple

PostPosted: Sat Aug 29, 2009 6:37 pm
by matthornb
I'm working on a D'ni temple, and you may have noticed my thread on MystOnline.com about it.

Some pics of one of the main areas:
Image

Image

I'm still moving along on this one, expanding and improving it. One thing I'm doing now is dividing all the objects into smaller objects, and redoing the UV maps and UV baking to fit that.

Why? Well, I'm trying to improve the texture resolution without pushing the size of the texture maps any higher than they already are.

I may release two versions - a high-end one with a lot of texture files, 80 or 90 MB, even, including some 2048X2048 maps, aimed at current hardware, and one with more like 30 MB of textures and nothing above 1024x1024, aimed at the lower-end PCs that Uru aimed for in 2003-2004.

I'd like to change the banner textures. The ones there right now are, well, they're pretty shoddy.

I'm going to focus on other parts of the environment first, so if anyone in this forum wants to submit a banner design, I just might use it. Otherwise, I'll just make the new banners on my own.

I've got a few new areas I'm working on right now for this project in addition to the ones I've basically already done. One of them is sort of a cave ruins area at the entrance of the temple, one is a meeting area, one is a gallery, one is a lobby. (I guess you'd call it that. It has a fountain with Realflow-simulated animated water textures and some nice details around it.)

I'm still figuring out how to implement the animated Bink textures.

Re: D'ni Temple

PostPosted: Wed Sep 02, 2009 10:35 pm
by matthornb
Okay, I'm having some issues with PRP export.

I had one early version that made it into Uru fine, but the others have been screwed up.

It's a shame, too, I've fixed some things, like those unintentionally black surfaces, and issues with collision.

Blender exports for a while and then gets stuck after it begins computing checksums while writing a .fni file.
The PRP export says "MemoryError".

I'm trying some of the solutions suggested in the MemoryError thread.

I've also gotten some DDS and other errors. I'll keep working on it.

Re: D'ni Temple

PostPosted: Wed Sep 02, 2009 11:23 pm
by D'Lanor
Several memory errors have been fixed since the initial 1.5.0 release. If you are still using that version I suggest using the nightly build or the 1.6.0 beta.

Re: D'ni Temple

PostPosted: Thu Sep 03, 2009 12:34 pm
by matthornb
I already did that, and the export goes (seemingly) smoothly now, reaching completion with no problems, but in the game when I link to my age I get an error saying "Some files are missing or corrupted, please reinstall Uru."

I don't need to reinstall Uru, of course; everything else in the game still works fine. But I'm trying to figure out what files, exactly, are missing or corrupted.

Do you have any idea what can cause this error in a fan age?

BTW, I have several versions of the environment in Uru, and they have the same sequence number, so maybe multiple ages using the same sequence prefix could explain this. Either that or there's a texture file that wasn't compiled correctly somewhere, or...

Any ideas?

EDIT: Changing the prefix worked. The environment now runs in Uru without any obvious problems. I'll see what I can do to optimize it and increase the framerate now.

Re: D'ni Temple

PostPosted: Thu Sep 03, 2009 1:31 pm
by Corvus
I have several versions of the environment in Uru, and they have the same sequence number, so maybe multiple ages using the same sequence prefix could explain this


Exactly.

Re: D'ni Temple

PostPosted: Sat Nov 14, 2009 6:43 pm
by matthornb
Next question: How to make this level run more efficiently?

I know, I know - modelling efficiency is key. I've been keeping my geometry efficient, but the level still runs slowly.

I'm guessing it has a lot to do with the textures.

Some questions:

A) Does LOD (level-of-detail) texture replacement make levels run significantly faster? Mipmapping?

B) Does compressing the texture image files slightly, make a level run any faster? That is, same image resolution but compressed to reduce the filesize of the image files?

C) Is there any way to implement dynamic loading and unloading of objects/geometry based on proximity? Like was done in Ahra Pahts? Would that help in any way?

D) What, in your experience, is the optimal polygon count for an Uru world? I've guessed that Cyan's levels were about 15,000-100,000 polys, is that close to accurate?

E) Is an object rendered if it's behind something else? I notice that Cyan tends to design their larger ages such that you can only see 10-40% of the age from any one viewpoint. They don't make the whole world visible all at once from a single vantage point; Kadish Tolesa being a perfect example. How much of the speed efficiency of an age is based on how much of the age you see, and how much is based on the size of the age as a whole? Which matters more?

F) Do things run faster with more but smaller texture files? I.e. would four 512X512 textures run faster than a single 1024x1024?

I'm asking all of this because I'd like to make my environment detailed and nice-looking yet not excessive in terms of system requirements.

Also, what advice do you have regarding transparency maps?

I'm wondering how to get rid of the little white edges on my leaves.

Anyway, thanks.

Re: D'ni Temple

PostPosted: Sun Nov 15, 2009 5:47 am
by Trylon
If you have many 1024x1024 textures, that would impact performance.

Cyan usually uses multiple texture layers to emulate a single detailed texture.
I don;t have time to explain now, but here are some interesting articlles from our wiki:

Texturing (Fairly large, but worth a read . It's part of a set of tutorials.)
Detail Texturing (Quick guide about fading mipmaps)

Re: D'ni Temple

PostPosted: Sun Nov 15, 2009 4:54 pm
by Jojon
matthornb wrote:A) Does LOD (level-of-detail) texture replacement make levels run significantly faster? Mipmapping?


I don't know what sort of interpolation Plasma does (probably defineable on a per-object basis, although I don't believe we can set this with pyprp(?)), but using mipmaps, fewer samples are indeed needed to properly represent the texture at a distance - one might say it comes pre-antialiased... If the Blender texture block has its Mipmap button ticked (default), pyprp will create mipmap levels on export, so you're there already.

matthornb wrote:B) Does compressing the texture image files slightly, make a level run any faster? That is, same image resolution but compressed to reduce the filesize of the image files?


My uneducated assumption: Textures are compressed on export. I expect they are, at load time, uncompressed into video memory (probably GPU-side) and used raw - can't imagine the hardware would want to decompress with each texel fetch - that should hit performance hard, if anything.

matthornb wrote:C) Is there any way to implement dynamic loading and unloading of objects/geometry based on proximity? Like was done in Ahra Pahts? Would that help in any way?


No need, unless your age is REALLY large. You can add alcscript to objects, that makes them only render if you are in certain areas (or volumes, rather). This way you can make the interior of a house only be considered for rendering if you are in the house.
Refer to: http://www.guildofwriters.com/wiki/Soft_Volumes specifically "VisRegions"

If you set "soft distance" for the "softvolume" object delimiting the visibility of the visual object, to zero, you can even use it to toggle between different LOD versions of your object.

There are also "occluders", but we haven't got those yet.

matthornb wrote:E) Is an object rendered if it's behind something else? I notice that Cyan tends to design their larger ages such that you can only see 10-40% of the age from any one viewpoint. They don't make the whole world visible all at once from a single vantage point; Kadish Tolesa being a perfect example. How much of the speed efficiency of an age is based on how much of the age you see, and how much is based on the size of the age as a whole? Which matters more?


I *hope* we can be pretty much as big as we want, as long as there is not too much data to evaluate at any given time and everything fits in memory.
I expect any object whose bounding box is outside your (non-occluded) field of vision, is excluded at rendering time, which would give that looking towards the busiest part of the age should make things slow down more than looking away, unless the obects are large enough to all surround you.

So yes; I do believe it doesn't matter that you can't see an object, it is still somewhere ahead of you and considered for rendering. Once we get occluders we should be able to set up non-see-through walls - until then visibility regions should suffice well enough.

Apparently collision detction is quite a performance hog, so it is well worth taking bounds off your visibles and constructing separate, simpler, collider geomery, using convex hull type bounds where possible.

matthornb wrote:Also, what advice do you have regarding transparency maps?

I'm wondering how to get rid of the little white edges on my leaves.


Step 1: Tick ObjectButtons->Draw->Draw Extra->"Transp"

..if that doesn't help:

Step 2: Increase ObjectButtons->ObjectAndLinks->PassIndex

It may well be more complicated, but that's a start. :7

( It's a matter of drawing order: lower passindex objects are drawn first, then higher. If your object is transparent, you will want the stuff behind it drawn first, or it won't be visible. (There are also two higher orders of drawing priority, to complicate thing further. :P))

Drawing a transparent object in front of one that has a larger passindex will result in the texels with Alpha 1-254 mixing not with the object behind, but with whatever is behind *that*.

EDIT: By the way: your materials have the MaterialButtons->LinksAndPipeline->RenderPipeline->"Shadbuf" button unticked, I hope?
It is on by default and makes pyprp export any object, that use the material in question, cast drop shadows, which are very processing intensive.

EDIT2: Unclosed quote...

Re: D'ni Temple

PostPosted: Sun Nov 15, 2009 7:22 pm
by Trylon
One thing I just remembered:
Fog

when the fog occludes something, it isn't rendered any more. You could set the fog to a reasonable distance, and have the skybox be unaffected by it - there is a button for that , I just can't recall what it is at the moment.

Re: D'ni Temple

PostPosted: Mon Nov 16, 2009 1:41 pm
by Jojon
Trylon wrote:One thing I just remembered:
Fog

when the fog occludes something, it isn't rendered any more. You could set the fog to a reasonable distance, and have the skybox be unaffected by it - there is a button for that , I just can't recall what it is at the moment.


Good suggestion!

( The button is MaterialButtons->Material->NoMist )