|
Replies:
27
-
Last Post:
Nov 27, 2008 7:23 AM
by: morrisford
|
|
|
|
|
|
|
How to resolve poor client performance?
Posted:
Sep 2, 2008 7:48 AM
|
|
|
Apparently, the WL client performs more and more poorly as the world cell count increases and the increase does not appear to be linear. These are the options that I can think of at the moment to try to make a workable world with more than a small structure:
Rearrange the WFS to partition buildings and parts of buildings. Would this make a significant difference, or, any difference at all? Does the client see and use the hierarchical structure of the WFS?
Use the MultiModel cell type to combine many WorldBuilder cells in to a few. Would this actually help? Does the code in the client deal with cells or models?
Reconstruct WorldBuilder structures to combine the small models into much larger models. Would this help?
Abandon the use of WorldBuilder altogether and shift to Blender created buildings such that the cell count is very small for a large structure.
Spend enough time learning how the client operates to be able to optimize the critical paths that are impacting performance as the cell count increases. This option is not real attractive since the transition to jMonkey in .5 and the accompanying restructuring should remove much of the world size problems, I assume. This option would be quite educational for me and I may pursue this even if some other option or combination of options helps the performance problem.
I am looking for whatever information and opinions are available from whatever source. I am going to pursue making my little world larger with reasonable performance but some guidance would be gratly appreciated.
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 2, 2008 8:32 AM
in response to: morrisford
|
|
|
Hi Morris,
From what you describe it sounds like you are using WorldBuilder to create a fairly large model. Unfortunately world builder does not create a world in which resources are shared between the various world builder tiles which results in huge demands on the client graphics card and very low performance.
There are a number of options for addressing the issue
1) Create larger world builder tiles (ie entire rooms). These would be create in Maya or Blender, you can then assemble the larger pieces and position furniture etc
2) Write a compiler that takes a world created by WorldBuilder and correctly organises the data so it can be shared. This mainly involves reducing the graph to a single Cell (or a few large Cells).
3) Use Maya/Blender to create your entire content.
We are working on a new content creation paths as part of 0.5.
Rgds
Paul
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 2, 2008 8:46 AM
in response to: paulby
|
|
|
Thanks for your response.
>> 1) Create larger world builder tiles (ie entire rooms). These would be create in Maya or Blender, >> you can then assemble the larger pieces and position furniture etc
Is the artwork for the models that make up the WorldBuilder cells available in the 'raw' form? I think I can make an entire WorldBuilder structure into one model or a few models if I have those models.
>> 2) Write a compiler that takes a world created by WorldBuilder and correctly organises the data >> so it can be shared. This mainly involves reducing the graph to a single Cell (or a few large Cells).
What would this reorganization look like? Does that involve the use of the MultiModel cell type and the flag (can't remember what the name of the flag is right now ) that indicates that the model/texture is to be shared?
>> 3) Use Maya/Blender to create your entire content.
Always an option or a partial solution.
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 2, 2008 1:14 PM
in response to: morrisford
|
|
|
Hi Morris,
All the original WorldBuilder art is in the lg3d-wonderland-art-src project in the worldbuilder directory.
For the compiler the process would be
1) Load the world 2) Scan the graph gathering all texture objects 3) Compare the file name of the texture objects and remove any duplication, replacing the removed node components with a link to a single texture for the correct image 4) Export the graph as j3s 5) Write a WFS cell to load in the new single j3s model
Rgds
Paul
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 3, 2008 5:04 AM
in response to: paulby
|
|
|
As an attempt to improve the world performance I have merged over a thousand WorldBuilder cells into 6 cells by using the MultiModel. I used DemoFloor-wlc.xml from the demo world as a model. After looking at that cell definition and looking at the java code and creating the new cells, I have a few questions:
Is there a problem with marking a model as instanced if in fact it is unique in the cell?
Why does that cell definition have a number of models specified that have no parameters such as location, rotation or instanced?
Do instanced duplicate models have to be adjacent in the cell definition file?
Thanks in advance
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 3, 2008 7:43 AM
in response to: morrisford
|
|
|
Hi Morris,
I have seen this performance issue too. The problem is that there is no texture sharing on Worldbuilder objects. Unfortunately, this means that multiModel cells won't solve the problem.
The most pragmatic solution is to build larger components in blender or Maya and incorporate them into worldbuilder. For example, a 10x10 floor tile will drop the number of tiles required by 99.
I agree that building entire rooms would be a significant help, but also I like the "construction" flexibility of worldbuilder. Initially, I was thinking of just big floor and wall tiles. If that works, then look at complete rooms & buildings.
As much as I like Maya, my preference is to use blender simply because it's the lowest common denominator.
Let me know if you want to build bigger objects and if it makes sense for us to split up the work.
Cheers, Darren.
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 3, 2008 8:38 AM
in response to: ddfowler
|
|
|
I would very much like to participate in an effort to improve the client performance.
I have written a program that converts a WorldBuilder 'structure' into a few MultiModel cells, for example, I converted 2 buildings of 1000+ cells to 6 cells. It does appear to have improved client performance, in that, the jerkiness of movement has pretty much disappeared and the occasional freezing has gone away. In addition, there are other large improvements because of the reduced cell count like much shorter startup time and that the 'reload world' will actually work. I am still working on that program to make it work better.
The next thing that I had planned to take on was the suggestion of Paul on how to transform a WorldBuilder group of models into one model and one cell. This idea appeals to me because the WorldBuilder with its small granularity of models can still be used but the end result will be much more render-friendly. One issue that concerns me with this approach though is the client/server protocol in 0.4. The protocol apparently consists of moving serialized classes with no implementation of protocol layers such that the payload is divorced from the transport. I already encountered the limitations of size of payload with a MultiModel cell of all of the models for one building. I assume that a sufficiently large single model constructed from all the models for a building would fail to transfer also.
Anyway, back to building bigger objects. I would like to participate. One thing I was thinking about was to take the models from the WorldBuilder and figure out how to merge them together outside of WL. Any ideas?
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 3, 2008 8:22 PM
in response to: morrisford
|
|
|
HI Morris,
It would be great if you could investigate the 'compilation' of the world builder scene. Depending on the actual content the size of the 'compiled' data should be much, smaller than the original because not only can you share the textures but also the Geometry node components.
Rgds
Paul
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 4, 2008 2:37 AM
in response to: morrisford
|
|
|
Morris,
You said 'I have written a program that converts a WorldBuilder 'structure' into a few MultiModel cells, for example, I converted 2 buildings of 1000+ cells to 6 cells.'
Is your programme generic enough to let me have a copy please? I was going to look at doing this myself and urgently need to improve the performance so if you could share the code it would save me a lot of time and effort.
John
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 4, 2008 6:06 AM
in response to: jrscott
|
|
|
I will gladly share the program. I just need to figure out how to do it so that everyone can get to it easily. I could post it here along with instructions but it is kind of long for that. Someone with a better idea of where to post it?
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 4, 2008 6:49 AM
in response to: jrscott
|
|
|
I decided to go ahead and post the program here. Also, here are some instructions for using it.
This is the process for converting a WorldBuilder 'structure' into a few MultiModel cells. The conversion must create small enough cells so that each one can be transmitted from the WL server to the client since there is a size limitation with the server/client protocol.
The process is begun with the directory that contains the finished WorldBuilder cells and a directory for putting the final packed cells.
-> get a list of all the cells into a file grep j3s.gz bldg*xml > model.list
-> sort the list of files into a texture name order new file sort -k2 model.list > model.list.sorted
-> create another file that contains a list of all the unique texture names sort -u -k2 model.list > model.list.unique
-> go through a process of counting the number of occurrances of each texture. this is two examples of the commands. this should be done with each of the -> items in the unique list. this part of the process is to decide which original cells should be clumped together in which final packed cell. -> this deals with the size limitation of the protocol and putting all duplicated textures in the same packed file. I used a -> target of approximately 200 cells per packed cell.
grep lecturehall-cornerwall model.list.sorted | wc -l grep youthroom_chair model.list.sorted | wc -l
-> create the file lists for each final packed cell
grep lecturehall_cornerwall model.list.sorted > model.list.group1 grep youthroom_chair model.list.sorted >> model.list.group1 grep youthroom_floor_carpet model.list.sorted >> model.list.group1 grep lecturehall_floor_carpet model.list.sorted > model.list.group2 grep lecturehall_floor_wood model.list.sorted >> model.list.group2 grep lecturehall_fullwall model.list.sorted > model.list.group3 grep lecturehall_main_podium model.list.sorted >> model.list.group3 grep lecturehall_window model.list.sorted >> model.list.group3 grep modernroom_floortile model.list.sorted >> model.list.group3 grep modernhall_circle_tiles model.list.sorted >> model.list.group3
-> remove everything except the actual filenames
cut -f1 -d: model.list.group1 > model.list.group1.files cut -f1 -d: model.list.group2 > model.list.group2.files cut -f1 -d: model.list.group3 > model.list.group3.files
-> and generate the final packed cells -> the parameters are: -> the directory where the WorldBuilder cells and where the file list file are - /home/morris/test-wfs/test-multi/buildworld-wfs/root-wld/ -> the file list file - model.list.group1.files -> the directory where the packed files will be placed - /home/morris/model/ -> the base name for the packed files - pack-mod1 -> this was going to be a directory where the WorldBuilder cells were placed as they were combined but I did not do this part yet - none
java MultiModelPack /home/morris/test-wfs/test-multi/buildworld-wfs/root-wld/ model.list.group1.files /home/morris/model/ pack-mod1 none java MultiModelPack /home/morris/test-wfs/test-multi/buildworld-wfs/root-wld/ model.list.group2.files /home/morris/model/ pack-mod2 none java MultiModelPack /home/morris/test-wfs/test-multi/buildworld-wfs/root-wld/ model.list.group3.files /home/morris/model/ pack-mod3 none
The program itself shows evidence of changes as I worked through the process of doing this that I never cleaned up.
-------------------------------------------------------------------------------------------------------
import java.io.*; import java.io.IOException;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.*; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*;
public class MultiModelPack {
private static Document domTree = null; private static String worldDir = null; private static String worldFilematch = null; private static String worldOutPath = null; private static String worldOutFile = null; private static String worldSavePath = null; private static String worldModel = null; private static String additionalPrefix = null; private static boolean copyWorld = false; private static String origin1 = null; private static String origin2 = null; private static String origin3 = null; private static String rotation1 = null; private static String rotation2 = null; private static String rotation3 = null; private static String rotation4 = null;
// *************************************************************************************** // MultiModelPack. // *************************************************************************************** public MultiModelPack(String xmlFilename) throws IOException { try { // Convert filename into a DOM tree System.out.println("Entering MultiModelPack with " + xmlFilename);
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); DocumentBuilder builder = domFactory.newDocumentBuilder(); this.domTree = builder.parse(xmlFilename); } catch (SAXException e) { throw new IOException("Error in document parsing: " + e.getMessage()); } catch (ParserConfigurationException e) { throw new IOException("Error in configuring parser: " + e.getMessage()); } }
// *************************************************************************************** // MultiModelPack. // *************************************************************************************** public MultiModelPack() throws IOException { }
// *************************************************************************************** // evaluateXPath. // *************************************************************************************** public NodeList evaluateXPath(String xpathString) throws IOException { try { XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); return (NodeList)xpath.evaluate(xpathString, domTree, XPathConstants.NODESET); } catch (XPathExpressionException e) { throw new IOException("Error evaluating XPath: " + e.getMessage()); } }
// *************************************************************************************** // fixupLocations. // *************************************************************************************** public void fixupLocations() {
String xpathString = null; NodeList results = null; Node node = null; try { xpathString = "//object/void[@property='origin']/void[@index='0']/double/text()"; results = evaluateXPath(xpathString); if(results.getLength() == 0) { System.out.println("Set origin = 0"); this.origin1 = "0.0"; } else { node = results.item(0); this.origin1 = node.getNodeValue(); System.out.println("Set origin = " + origin1); }
xpathString = "//object/void[@property='origin']/void[@index='1']/double/text()"; results = evaluateXPath(xpathString); if(results.getLength() == 0) { origin2 = "0.0"; } else { node = results.item(0); origin2 = node.getNodeValue(); }
xpathString = "//object/void[@property='origin']/void[@index='2']/double/text()"; results = evaluateXPath(xpathString); if(results.getLength() == 0) { origin3 = "0.0"; } else { node = results.item(0); origin3 = node.getNodeValue(); }
xpathString = "//object/void[@property='rotation']/void[@index='0']/double/text()"; results = evaluateXPath(xpathString); if(results.getLength() == 0) { rotation1 = "0.0"; } else { node = results.item(0); rotation1 = node.getNodeValue(); }
xpathString = "//object/void[@property='rotation']/void[@index='1']/double/text()"; results = evaluateXPath(xpathString); if(results.getLength() == 0) { rotation2 = "1.0"; } else { node = results.item(0); rotation2 = node.getNodeValue(); }
xpathString = "//object/void[@property='rotation']/void[@index='2']/double/text()"; results = evaluateXPath(xpathString); if(results.getLength() == 0) { rotation3 = "0.0"; } else { node = results.item(0); rotation3 = node.getNodeValue(); }
xpathString = "//object/void[@property='rotation']/void[@index='3']/double/text()"; results = evaluateXPath(xpathString); if(results.getLength() == 0) { rotation4 = "0.0"; } else { node = results.item(0); rotation4 = node.getNodeValue(); }
xpathString = "//object/void[@property='cellSetup']/object/void[@property='modelFile']/string/text()"; results = evaluateXPath(xpathString); if(results.getLength() == 0) { worldModel = "none"; } else { node = results.item(0); worldModel = node.getNodeValue(); } } catch(Exception e) { System.out.println("Exception caught in fixupLocations"); e.printStackTrace(); } }
// *************************************************************************************** // transformCell. // *************************************************************************************** public void transformCell(String line) { System.out.println("Line = " + line); }
// *************************************************************************************** // handleFileList. // *************************************************************************************** public void handleFileList() throws IOException { String line; StreamResult result = null; String full_path_name = null; String full_file_name = null; FileWriter fw = null; File g = null; File f = null; int i = 0; int j = 0;
full_path_name = worldOutPath; g = new File(full_path_name); try { g.mkdirs(); } catch(Exception e) { System.out.println("Exception e"); } full_file_name = worldOutPath + "/" + worldOutFile + j + "-wlc.xml"; System.out.println("Creating " + full_file_name); f = new File(full_file_name); try { if(f.exists()) f.delete(); if(f.createNewFile()) System.out.println("Creating new file - " + full_file_name); fw = new FileWriter(full_file_name, true); fw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); fw.write("<java version=\"1.6.0-dp\" class=\"java.beans.XMLDecoder\">\n"); fw.write(" <object class=\"org.jdesktop.lg3d.wonderland.darkstar.server.setup.BasicCellGLOSetup\">\n");
fw.write(" <!-- GLO class name -->\n"); fw.write(" <void property=\"cellGLOClassName\">\n"); fw.write(" <string>org.jdesktop.lg3d.wonderland.extracells.server.cell.MultiModelCellGLO</string>\n"); fw.write(" </void>\n"); fw.write("\n"); fw.write("<!-- cell location (x, y, z) -->\n"); fw.write(" <void property=\"origin\">\n"); fw.write(" <void index=\"0\">\n"); fw.write(" <double>0.0</double>\n"); fw.write(" </void>\n"); fw.write(" <void index=\"1\">\n"); fw.write(" <double>0.0</double>\n"); fw.write(" </void>\n"); fw.write(" <void index=\"2\">\n"); fw.write(" <double>0.0</double>\n"); fw.write(" </void>\n"); fw.write(" </void>\n"); fw.write("\n");
fw.write(" <void property=\"boundsRadius\">\n"); fw.write(" <double>100.0</double>\n"); fw.write(" </void>\n"); fw.write("\n");
fw.write(" <void property=\"boundsType\">\n"); fw.write(" <string>BOX</string>\n"); fw.write(" </void>\n"); fw.write("\n");
fw.write("<!-- cell-specific setup -->\n"); fw.write(" <void property=\"cellSetup\">\n"); fw.write(" <object class=\"org.jdesktop.lg3d.wonderland.extracells.common.MultiModelCellSetup\">\n"); fw.write(" <void property=\"models\">\n"); fw.write("\n");
fw.write("<!-- Array of models -->\n"); fw.write(" <array class=\"org.jdesktop.lg3d.wonderland.extracells.common.MultiModelCellModel\">\n"); fw.write("\n"); } catch(Exception e) { System.out.println("Exception " + e); }
// start the ls command running Runtime runtime = Runtime.getRuntime(); String[] my_args = new String[] {"sh", "-c", "cat " + worldDir + worldFilematch}; Process proc = runtime.exec(my_args);
// put a BufferedReader on the ls output try { InputStream inputstream = proc.getInputStream(); InputStreamReader inputstreamreader = new InputStreamReader(inputstream); BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
// read the ls output
while ((line = bufferedreader.readLine()) != null) { if(i > 299) { j++; i = 0; fw.write(" </array>\n"); fw.write(" </void>\n"); fw.write(" </object>\n"); fw.write(" </void>\n"); fw.write(" </object>\n"); fw.write("</java>\n"); fw.close();
full_file_name = worldOutPath + "/" + worldOutFile + j + "-wlc.xml"; System.out.println("Creating " + full_file_name); f = new File(full_file_name); try { if(f.exists()) f.delete(); if(f.createNewFile()) System.out.println("Creating new file - " + full_file_name); fw = new FileWriter(full_file_name, true);
fw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); fw.write("<java version=\"1.6.0-dp\" class=\"java.beans.XMLDecoder\">\n"); fw.write(" <object class=\"org.jdesktop.lg3d.wonderland.darkstar.server.setup.BasicCellGLOSetup\">\n");
fw.write(" <!-- GLO class name -->\n"); fw.write(" <void property=\"cellGLOClassName\">\n"); fw.write(" <string>org.jdesktop.lg3d.wonderland.extracells.server.cell.MultiModelCellGLO</string>\n"); fw.write(" </void>\n"); fw.write("\n"); fw.write("<!-- cell location (x, y, z) -->\n"); fw.write(" <void property=\"origin\">\n"); fw.write(" <void index=\"0\">\n"); fw.write(" <double>0.0</double>\n"); fw.write(" </void>\n"); fw.write(" <void index=\"1\">\n"); fw.write(" <double>0.0</double>\n"); fw.write(" </void>\n"); fw.write(" <void index=\"2\">\n"); fw.write(" <double>0.0</double>\n"); fw.write(" </void>\n"); fw.write(" </void>\n"); fw.write("\n");
fw.write(" <void property=\"boundsRadius\">\n"); fw.write(" <double>100.0</double>\n"); fw.write(" </void>\n"); fw.write("\n");
fw.write(" <void property=\"boundsType\">\n"); fw.write(" <string>BOX</string>\n"); fw.write(" </void>\n"); fw.write("\n");
fw.write("<!-- cell-specific setup -->\n"); fw.write(" <void property=\"cellSetup\">\n"); fw.write(" <object class=\"org.jdesktop.lg3d.wonderland.extracells.common.MultiModelCellSetup\">\n"); fw.write(" <void property=\"models\">\n"); fw.write("\n");
fw.write("<!-- Array of models -->\n"); fw.write(" <array class=\"org.jdesktop.lg3d.wonderland.extracells.common.MultiModelCellModel\">\n"); fw.write("\n"); } catch(Exception e) { System.out.println("Exception " + e); } } else { i++; System.out.println("Line = " + line); MultiModelPack evaluator = new MultiModelPack(worldDir + line); evaluator.fixupLocations(); fw.write(" <object class=\"org.jdesktop.lg3d.wonderland.extracells.common.MultiModelCellModel\">\n"); fw.write("\n"); fw.write(" <void property=\"modelFile\">\n"); fw.write(" <!-- " + line + " -->\n"); fw.write(" <string>" + worldModel + "</string>\n"); fw.write(" </void>"); fw.write("\n"); fw.write(" <void property=\"location\">\n"); fw.write(" <array class=\"double\">\n"); fw.write(" <double>" + origin1 + "</double>\n"); fw.write(" <double>" + origin2 + "</double>\n"); fw.write(" <double>" + origin3 + "</double>\n"); fw.write(" </array>\n"); fw.write(" </void>\n"); fw.write(" <void property=\"rotation\">\n"); fw.write(" <array class=\"double\">\n"); fw.write(" <double>" + rotation1 + "</double>\n"); fw.write(" <double>" + rotation2 + "</double>\n"); fw.write(" <double>" + rotation3 + "</double>\n"); fw.write(" <double>" + rotation4 + "</double>\n"); fw.write(" </array>\n"); fw.write(" </void>\n"); fw.write("\n"); fw.write(" <void property=\"instanced\">\n"); fw.write(" <boolean>true</boolean>\n"); fw.write(" </void>\n"); fw.write(" </object>\n"); } } fw.write(" </array>\n"); fw.write(" </void>\n"); fw.write(" </object>\n"); fw.write(" </void>\n"); fw.write(" </object>\n"); fw.write("</java>\n"); fw.close(); } catch (Exception e) { e.printStackTrace(); } // check for ls failure
try { if (proc.waitFor() != 0) { System.err.println("exit value = " + proc.exitValue()); } } catch (InterruptedException e) { System.err.println(e); } }
// *************************************************************************************** // main. // *************************************************************************************** public static void main(String[] args) { worldDir = args[0]; worldFilematch = args[1]; worldOutPath = args[2]; worldOutFile = args[3]; worldSavePath = args[4];
try { MultiModelPack mmp = new MultiModelPack(); mmp.handleFileList(); } catch (Exception e) { e.printStackTrace(); } } }
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 4, 2008 9:01 AM
in response to: morrisford
|
|
|
HI Morris,
The best place to put this program would be in the wonderland-incubator project (https://wonderland-incubator.dev.java.net/index.html). The only prerequisite for developer (CVS write) access to incubator is a signed SCA, which you have, so I've given you developer access.
I'd suggest creating a top level tools directory and then a subdirectory specifically for your project.
Rgds
Paul
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 4, 2008 10:26 AM
in response to: paulby
|
|
|
Ok. Will do. I thought the module incubator repository was for modules.
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 9, 2008 5:01 AM
in response to: morrisford
|
|
|
Morris
thanks very much for this. We just tried it out on MiRTLE and reduced 531 cells into 3. The result seem to be that the client loads faster but otherwise has no noticeable effect--client performance is still too slow to be usable.
cheers
Bernard
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 9, 2008 5:18 AM
in response to: bernard_horan
|
|
|
The results in terms of responsiveness of the client were marginally improved on my test system as you are seeing on Mirtle. Where I did see a great improvement was in load and reload time. With the two 3 cell buildings that I am using, I am now able to work on the rest of the world and reload at will.
The next thing I am working on is a program to reduce a 'structure' created with WorldBuilder to one cell and one model with all the duplicate textures suppressed as suggested by Paulby. If having all those texture references cleaned up actually helps, then this program should help a lot. I am assuming that the one cell / one model structure should help a lot with collision calculations also. I should have that program ready later this week or early next week.
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 9, 2008 1:49 PM
in response to: morrisford
|
|
|
Well, I have generated a one cell / one model WorldBuilder structure that I am pretty sure has duplicate textures suppressed. I have run it in my test world and it works well. Now, how do I tell if the textures are truly suppressed and how do I tell if there is a performance improvement???????
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 9, 2008 7:54 PM
in response to: morrisford
|
|
|
I now have four of the one cell / one model buildings in my test world which would be the equivalent of over 2000 cells and the client performs quite well. I think that modified model helps the client quite a bit. Anybody that wants one of these buildings to test with (they can be easily replicated to create a whole village by creating a copy of the wfs file with a new x and z offset) just let me know. I will be creating a village of about 20 buildings in my test world tomorrow. That would be the equivalent of about 10,000 cells. If that works ok it should be a pretty good test.
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 10, 2008 10:23 AM
in response to: morrisford
|
|
|
Hi Morris,
The easiest way to tell if the textures are truely being shared is to add log message to the AssetManager and check if there are any duplicate image loads. With the textures combined there should be only a single ImageComponent2DURL created for any given image name.
Rgds
Paul
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 10, 2008 11:47 AM
in response to: paulby
|
|
|
I put messages in the two loadImage methods in AssetManager.java. It seems like there are a lot more messages than I would expect from the first method ('AssetManager.Load image' - messages) with quite a few duplicates. The messages from the second method ( 'My load image - url' - messages) are pretty much what I expected, ie, mostly single references to images with a few duplicates for things like roof panels. Looks to me like I am de-duping ok, since there are 517 cells in the building, but I'm not sure. I have attached the messages.
[java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust3.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust3.jpg [java] Sep 10, 2008 2:12:03 PM org.jdesktop.lg3d.wonderland.scenemanager.AssetManager$ImageLoader loadAsset [java] WARNING: File not found http://127.0.0.1:8080/test/compiled_models/SkyBox/Right.png [java] Sep 10, 2008 2:12:03 PM org.jdesktop.lg3d.wonderland.scenemanager.AssetManager$ImageLoader loadAsset [java] WARNING: File not found http://127.0.0.1:8080/test/compiled_models/SkyBox/Left.png [java] Sep 10, 2008 2:12:03 PM org.jdesktop.lg3d.wonderland.scenemanager.AssetManager$ImageLoader loadAsset [java] WARNING: File not found http://127.0.0.1:8080/test/compiled_models/SkyBox/Top.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust2.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust2.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust1.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust1.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust1.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust1.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / default_building/MountainPicture.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//default_building/MountainPicture.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust2.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust2.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust4.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust4.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust1.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust1.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust4.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust4.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust3.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust3.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust1.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust1.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust2.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust2.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust4.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust4.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust2.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust2.jpg [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_fullwall.jpg yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/collegiate/lecturehall_fullwall.jpg [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/carpet.jpg yUp true [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust3.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/collegiate/carpet.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust3.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / morris/rust3.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//morris/rust3.jpg [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/floor.jpg yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/collegiate/floor.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/collegiate/floor.jpg [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_fullwall.jpg yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/podiumtexture.jpg yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/stage.jpg yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/collegiate/stage.jpg [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/collegiate/podiumtexture.jpg [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/stage.jpg yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_fullwall.jpg yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/collegiate/lecturehall_window.png [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/collegiate/lecturehall_window.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/office-modern/fourtile.jpg yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/office-modern/fourtile.jpg [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/egg_rug.jpg yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/youth/egg_rug.jpg [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/chair_texture.jpg yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/carpet.jpg yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/youth/chair_texture.jpg [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/youth/roof_texture.png [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/youth/carpet.jpg [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/youth/roof_texture.png [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/roof_texture.png yUp true [java] AssetManager.Load image http://192.18.37.42 / textures/worldbuilder/youth/table_youthroom.jpg yUp true [java] My load image - url = file:/home/morris/.wonderland/cache/textures//textures/worldbuilder/youth/table_youthroom.jpg [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/Male_Pants.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/Male_Pants.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/Europe.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/Europe.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/Asia.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/Asia.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/Africa.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/Africa.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/jg_01.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/jg_01.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/Male_Shirt.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/Male_Shirt.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/Male_Sweater.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/Male_Sweater.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/HighResShirtGEEK.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/HighResShirtGEEK.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/Eye_Brown.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/Eye_Brown.png [java] Creating ImpageComponent2DURL http://127.0.0.1:8080/test/compiled_models/textures / avatars/Eye_Blue.png [java] My load image - url = file:/home/morris/.wonderland/cache/textures//avatars/Eye_Blue.png
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 11, 2008 5:59 PM
in response to: morrisford
|
|
|
Hi Morris,
I would not expect to see duplicate ImageComponent2DURL creations, these almost certainly indicate that particular image is in duplicate textures, unless you are using multitextures, are you ?
The fact that frame rates have increased so dramatically means you must be sharing a lot of the data, the unshared things may be ok, but it would be good to know exactly why there are duplicate ImageComponents.
Is this log from the data set you mentioned in your other thread with several thousand nodes ?
Rgds
Paul
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 11, 2008 6:26 PM
in response to: paulby
|
|
|
This log is from the load of a single cell / single model from one WorldBuilder building that I converted with the de-dup program. If by multitexture you mean a model that has more than one texture, there are at least some of those. I assume that all floor tiles have a second texture for the roof segment. In my experimentation I was adding copies of this building one at a time and when I reached eight I started seeing client stuttering and freezing. I think I reached a limit of BranchGraph nodes in the scene graph for the amount of memory on the client computer. I am going to double the memory to 4 gig tomorrow and do some more testing to see if I get the performance back.
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 4, 2008 9:41 AM
in response to: morrisford
|
|
|
One quick clarification here: metadata about the model (the content of the MultiModelCellSetup) is, as you found out, subject to a maximum size due to internal Darkstar limits. The model data itself is downloaded over a different channel, directly from the art web server to the Wonderland client. The upshot of this is that there are no limitations on model size, just limitations on the amount of metadata about a model.
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Sep 9, 2008 9:11 AM
in response to: kaplanj
|
|
|
is there a posibility of improvement in the client performance in the version 0.5 of wonderland because of the use of jme? I ask this, because i have a x3100 card of intel, if i see avatars in movement or textures, the FPS drop until 2 fps and is totally unusable. i proved wonderland 0.3 and 0.4 in windows XP and Linux but the results are the same. By the way could anyone use wonderland with that card? (i know it is not a good card). Thanks.
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Nov 26, 2008 4:21 AM
in response to: npucheta
|
|
|
Hi all,
i run wonderland 0.4 with Mac Osx, Leopard 10.5.5, 2 Ghz Core Duo, 1 Gb Ram, Graphic Chipset Intel GMA X3100. I have problems with slow down navigation (15 frame rate average). My friends run the same custom world with Ubuntu (intel chipset 82Q35) and Win Vista (Geforce chipset) and they have not the same problems (30 frame rate).
Before reading this thread i thought was problems with some models rendering.
Can anyone help me to resolve the problem? Is there any intel chipset update?
Message was edited by: alessandro1564
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Nov 26, 2008 6:41 AM
in response to: alessandro1564
|
|
|
That's a MacBook, right? Does it have an integrated GPU?
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Nov 26, 2008 6:55 AM
in response to: matty_x
|
|
|
Yes, is a MacBook bought in december 2007. The GPU is integrated.
|
|
|
|
|
|
|
|
Re: How to resolve poor client performance?
Posted:
Nov 27, 2008 7:23 AM
in response to: alessandro1564
|
|
|
I would expect you to have slow performance on any system with integrated video and 1 GB of memory. Especially when running the client and servers on the same system.
|
|
|
|
|