seung-lab / igneous

Scalable Neuroglancer compatible Downsampling, Meshing, Skeletonizing, Contrast Normalization, Transfers and more.
GNU General Public License v3.0
44 stars 17 forks source link

display skeltons in neuroglancer #77

Closed sommerc closed 4 years ago

sommerc commented 4 years ago

Hi all,

thanks for this cool library.

I am generating skeltons from a local precomputed segmentation layer. And it worked after changing the function name to create_skeletonizing_tasks(). (the doc says create_skeletonization_tasks())

However, in neuroglancer, the skeletons are not recognized / displayed. The info file points to the correct skeletons folder.

Any pointers what I am doing wrong?

Cheers, Chris

sommerc commented 4 years ago

In the source tab of the segmentation channel appears the error msg:

Error parsing "sharding" property: Expected JSON object, but received: null.

I tried to set it to false but then another JSON error pops up...

william-silversmith commented 4 years ago

Hi Sommerc! Thanks for pointing out that problem in the documentation. How are you using Neuroglancer? Another person was using a locally hosted version and had some problems viewing meshes. Have you tried using https://neuroglancer-demo.appspot.com ?

Some older versions of Neuroglancer don't like info files in the skeleton directory when the data are not sharded. You can try deleting the info file there and using https://neuromancer-seung-import.appspot.com/ which we have modified to work with that.

sommerc commented 4 years ago

Thanks for the fast reply!

I am running neuroglancer locally from a very recent checkout. Also my precomputed volumes, I serve locally with the cors_webserver shipped with neuroglancer.

I tried https://neuroglancer-demo.appspot.com with the same error msg Error parsing "sharding" property: Expected JSON object, but received: null

After removing the property sharding from the info file completely, I get Data type not supported by WebGL: UINT8

On https://neuromancer-seung-import.appspot.com/, I can actually load the segmentation layer again, meshes are displayed but the skeletons not. There's an error in the Skeleton shader: 'assign' cannot convert from 'structure' to 'out highp float'

william-silversmith commented 4 years ago

Ah, I am familiar with (at least part of) this problem. I'm not sure what that last error with neuromancer-seung-import.appspot.com is, but the UINT8 issue is that the neuroglancer shaders do not support reading the optional vertex_types attribute that get attached the the skeletons. I think it would prefer float or double types. Many people do nothing with those attributes, so they are all set to zero.

I'll modify the skeletonizing tasks to include a parameter that switches off the vertex_types and that will probably fix it if you rerun it.

sommerc commented 4 years ago

Great, thanks a lot!

william-silversmith commented 4 years ago

Okay! There's a new version on master that should do what you need.

sommerc commented 4 years ago

I tried to create skeltons with the new master, however, I got an error in merge task related with vertex attributes:

sorry, my bad, forgot to delete old folder

sommerc commented 4 years ago

The skeletons are now recognized in my local neuroglancer instance... unfortunately, they are not displayed.

I see this error in the skelton shader:

Clipboard02

nkemnitz commented 4 years ago

That sounds like an ANGLE-related issue converting the GLSL code to HLSL... (ANGLE is activated by default in browsers on Windows) You could try to enforce using the native OpenGL drivers: https://github.com/mrdoob/three.js/wiki/How-to-use-OpenGL-or-ANGLE-rendering-on-Windows

sommerc commented 4 years ago

Just tried with chrome.exe --use-angle=gl, unfortunately same error

nkemnitz commented 4 years ago

Hm, if it is still showing "Failed to create D3D Shaders", ANGLE still seems to be active. You can verify that here: https://browserleaks.com/webgl - look for a row that says ANGLE. Did you close all Chrome instances before restarting with --use-angle=gl?

william-silversmith commented 4 years ago

Are the files decompressed? Maybe your web server isn't handling compression correctly.

sommerc commented 4 years ago

Are the files decompressed? Maybe your web server isn't handling compression correctly. Bingo!

Thanks a lot for your help, would have never managed without.

Is there a local webserver you recommend, which handles transparent gz? The cors_webserver.py from neuroglancer obviously doesn't?

william-silversmith commented 4 years ago

If your needs are very simple, you can use the one embedded in CloudVolume.

cv = CloudVolume(...)
cv.viewer()