Using boolean vector instead of "if ( expression && expression )".
This helps for hard shadows code path. There are still some problems with soft shadows code path, which still don't want to compile.
This exists also in Blender, useful for when you want to add shadows independent of lighting (it's cheaper to turn off SpotLight than to have it with 0 intensity).
Added Python script for file concatenation with keeping track of file start offsets.
This single file way is a bit slower, but should be easier on server / workers (before every part spawned own worker, now all parts for a single model are handled by a single worker).
CTM pipeline produces very small and efficient models, just it's quite involved.
Models with multiple materials need to be split into separate files. For this there "split_obj.py" helper script.
Also, as CTM format uses indexed shared vertices, with more complex UV unwrapping mesh may need to get preprocessed to create extra vertices for faces which have different UVs for the same vertices (MeshLab can do this).
Work in progress. For the moment works just with CTMLoader. Still not sure where some pieces of code would go.
Upsides:
- initialization time cut down significantly (1.8 seconds => 0.7 seconds for CTM example)
- much smaller GL buffers thanks to fully used indexing (Walt has 6x less vertices)
- consequently much smaller memory footprint all around, both for main and GPU memories,
which means less swapping and better vertex caching
Downsides:
- can't have anymore sharp per-face effects like flat shading (at least if mesh is not constructed in a way where each face has own vertices)
- can't have multiple materials per mesh
- no more easy manipulation of anything (for the moment actually no runtime manipulation at all, typed arrays are just thrown away, dynamic geometries code path not yet implemented)
OpenCTM mesh format looks quite promising, smaller than UTF8 and more robust, just geometry creation time is slower (decompression is done in JavaScript as opposed to piggybacking on built-in http gzip).
UV mapping of extruded geometry was miscalculated.
- ExtrudeGeometry was documented to take a Three.Material for the
"material" and "extrudeMaterial" parameters, but the examples and
usage in TextGeometry showed that these were in fact indices into
the materials array. This meant that the tests such as "if (material)"
would evaluate to false if the index passed in was 0 (a very typical
index to choose :). Simply have the tests check against undefined and
update the documentation.
- Also, the code that converted a shape into a set of triangles was
miscalculating the UV offsets. It was correctly dividing the UV by
the bounding box of the old shape, but was forgetting to offset the
value from the minimum (which potentially led to negative UVs).
Doing normalization of normals / binormals / tangents in fragment shader instead of vertex shader. This seems to help with artefacts appearing in certain models with OpenGL rendering backend.
Also added modulating environment reflection by specular map.
Turns out it may be useful after all, seems some GPUs may have troubles dealing with texture coordinates outside of <0,1> (need to be tested if normalization helps there).