JohnB
JohnB

Reputation: 59

Render heavy model / mesh on three.js

I know this is a well known question but I was not able to find a good answer.

My usage

I use three.js to display 3D models created through drone pictures (here an example).

The problem

I can't render heavy models (1M vertices, 2M faces) : Chrome or WebGl crashed.

What I tried

I used Threejs.org examples for all my tests to be sure that it was not my code that didn't work. I made my test on a x64 Chrome with --max_old_space_size=6144 flag.

Possible solutions

How to reproduce

For the code, I use basics examples on Threejs.org. For models :

Any ideas to load the big one ? Thanks !

EDIT 1 :

I tried to put a breakpoint in the SuccessCallback to see if the overload of RAM is during the load or after. I was not able to hit the breakpoint, so the overload of RAM is before the SuccessCallback.

Then I went step by step in the ColladaLoader to find what is using so much RAM. Here is the "callstack" :

Could I do any other tests to find the reason of this problem ? Thanks

Upvotes: 0

Views: 2033

Answers (1)

WestLangley
WestLangley

Reputation: 104833

Your textures are waaaay to big, and besides, you don't need them because your model has baked vertex colors, which includes baked lighting. Your model therefore does not require UVs eiher.

Use ColladaLoader2, and this pattern. It should work.

var loader = new THREE.ColladaLoader();

loader.load( 'BigModel.dae', function ( collada ) {

        var dae = collada.scene;

        dae.traverse( function( child ) {

            if ( child instanceof THREE.Mesh ) {

                child.geometry.removeAttribute( 'uv' ); // you don't need it

                child.material = new THREE.MeshBasicMaterial( { // scene lights not required

                    vertexColors: THREE.VertexColors // you have them, use them

                } );

                scene.add( child );
            }

        } );

} );

three.js r.86

Upvotes: 1

Related Questions