Giter Club home page Giter Club logo

scenery's Introduction

scenery logo

Maven Central DOI Join the scenery+sciview Zulip chat

Gitlab CI Status Github Actions Status Codacy Badge

scenery // Flexible VR Visualisation for Volumetric and Geometric Data on the Java VM

Blood Cells Example, scenery running on a CAVE with a scientist exploring a Drosophila melanogaster microscopy dataset, APR representation of Zebrafish head vasculature, Rendering multiple volumes in a single scene, Interacting with microscopy data in realtime

BloodCellsExample / scenery running on a CAVE with a scientist exploring a Drosophila melanogaster microscopy dataset / Adaptive Particle Representation rendering of Zebrafish head vasculature / Rendering six different out-of-core volumes from two datasets in a single scene / VR interaction with microscopy data in realtime

Synopsis

scenery is a scenegraphing and rendering library. It allows you to quickly create high-quality 3D visualisations based on mesh data. scenery contains both a OpenGL 4.1 and Vulkan renderer. The rendering pipelines of both renderers are configurable using YAML files, so it's easy to switch between e.g. Forward Shading and Deferred Shading, as well as stereo rendering. Rendering pipelines can be switched on-the-fly.

Both renderers support rendering to head-mounted VR goggles like the HTC Vive or Oculus Rift via OpenVR/SteamVR.

Examples

Have a look in the src/test/kotlin/graphics/scenery/tests/examples directory, there you'll find plenty of examples how to use scenery in Kotlin, and a few Java examples.

Some of the examples need additional meshes, which are not part of the repository due to their size. These meshes can be downloaded here and extracted to a directory of choice. When running the examples, the environment variable SCENERY_DEMO_FILES should point to this directory, otherwise the models will not be loaded and scenery will complain.

Contributed examples

Documentation

Documentation for scenery is published at docs.scenery.graphics/scenery/, but is in a very minimal state at the moment. Contributions are very welcome! The documentation is created using Gitbook, and the corresponding repository can be found at github.com/scenerygraphics/scenery-docs/.

Citation

In case you use scenery in a scientific publication, please cite this paper:

  • Ulrik Günther, Tobias Pietzsch, Aryaman Gupta, Kyle I.S. Harrington, Pavel Tomancak, Stefan Gumhold, and Ivo F. Sbalzarini: scenery — Flexible Virtual Reality Visualisation on the Java VM. IEEE VIS 2019 (DOI: 10.1109/VISUAL.2019.8933605, Preprint: arXiv:1906.06726).

If you want to refer to a specific scenery version, e.g. for reproducibility, also can additionally cite the DOI of the scenery version you used.

Default Key bindings

Most of the demos use the following key bindings:

Movement

Key Action
Mouse drag Look-around
W, A, S, D Move forward, left, back, right
Shift - W, A, S, D Move forward, left, back, right fast
K, Shift+K Move upwards, move upwards fast
J, Shift+J Move downwards, move downwards fast
C Switch between FPS and Arcball camera control modes (only used in some examples)

If a gamepad is connected (such as a PlayStation 3 or 4 controller), the hats can be used for movement and look-around.

Rendering

Key Action
F Toggle fullscreen
Q Toggle rendering quality (low, medium, high, ultra), if supported by the current rendering pipeline
Shift-V Toggle stereo rendering and rendering to VR headsets, if supported by the current rendering pipeline
Shift-Q Toggle buffer debug view
P Save screenshot to Desktop as PNG
Shift-P Record a H264-encoded video to the Desktop

All keybindings are also listed in the InputHandler class.

Building

Into a directory of your choice, clone the Git repository of scenery:

git clone https://github.com/scenerygraphics/scenery

Then, change to the newly created scenery directory, and run mvn clean install to build and install both packages into your local Maven repository.

Alternatively, scenery's Gradle project can be imported into IntelliJ or Eclipse. Please note that Eclipse needs the Kotlin plugin from JetBrains to work correctly.

If you want to compile the provided shader files offline on your own, please make sure you have the latest Vulkan SDK from LunarG installed. At least version 1.1.70 is required.

Using scenery in a project

Maven artifacts

Release artifacts are currently published to the Sonatype OSS repository, and synchronised with Maven Central.

The recommended way to use non-release (unstable) builds is to use jitpack. jitpack provides better build reproducibility than using SNAPSHOT builds, as they may change at any point in time or might become unavailable. With jitpack, you can use any commit from the repository as package version.

Using scenery in a Maven project

Add scenery to your project's pom.xml:

<dependencies>
  <dependency>
    <groupId>graphics.scenery</groupId>
    <artifactId>scenery</artifactId>
    <version>0.11.2</version>
  </dependency>
</dependencies>

Non-release builds / jitpack

To use jitpack, add jitpack.io to your repositories in pom.xml:

<repositories>
  <repository>
      <id>jitpack</id>
      <url>https://jitpack.io</url>
  </repository>
</repositories>

You can then use any commit from the repository as scenery version, e.g.:

<dependency>
  <groupId>graphics.scenery</groupId>
  <artifactId>scenery</artifactId>
  <version>ff4c8ddd</version>
</dependency>

Using scenery in a Gradle project

Add scenery to your project's build.gradle:

dependencies {
    // ...
    api("graphics.scenery:scenery:0.11.2")
}

Non-release builds / jitpack

To use jitpack, add jitpack.io to your repositories in build.gradle:

repositories {
    // ...
    maven("https://jitpack.io")
}

You can then use any commit from the repository as scenery version, e.g.:

dependencies {
    // ...
    api("com.github.scenerygraphics:scenery:ff4c8ddd")
}

Logging

scenery uses slf4j for logging. If you use scenery in your own library and want to see scenery's messages, you need to have a logger (e.g. slf4j-simple) configured in your project. Check this page on how to do that.

To configure the logging level that scenery uses, set the system property scenery.LogLevel to info (default), warn, debug or trace. Be advised that both debug and trace produce a lot of output and thereby negatively affect performance.

GPU compatibility

scenery has been tested with a number of different systems and GPUs. It should in general work with any current GPU with up-to-date, Vulkan-compatible drivers and installed Vulkan runtime. On macOS, scenery makes use of MoltenVK to translate between scenery's Vulkan renderer and macOS' Metal API.

scenery's People

Contributors

aryaman-gupta avatar ctrueden avatar cvi-unige avatar dependabot[bot] avatar domino2357 avatar elect86 avatar frauzufall avatar hanslovsky avatar imagejan avatar kephale avatar marcinaman avatar maweigert avatar moreapi avatar powerofnames avatar randomdefaultuser avatar royerloic avatar skalarproduktraum avatar smlpt avatar ssinhaleite avatar tpietzsch avatar wbueschel avatar wissal-salhi avatar xulman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scenery's Issues

Shadows

axtimwalde brought this up, but I also vote for this one on the longer term for simulation renders.

Implement graphics quality options

The rendering quality in scenery should be adjustable. This could be achieved by e.g.

  • using different texture resolutions
  • using less/more samples for SSAO/SSDO
  • upscaling?
  • limiting the number of lights, giving them an importance weight

Add basic statistics

scenery should be able to inform the user about which operations take how much time.

GPU stats for AMD and Intel chips, and not Windows-only

At the moment, GPU stats are only collected on Windows, with Nvidia cards (see https://github.com/scenerygraphics/scenery/blob/master/src/main/kotlin/graphics/scenery/utils/NvidiaGPUStats.kt)

This should be expanded to:

  • support AMD cards
  • support Intel integrated GPUs
  • work on Linux and Mac as well

For OSX, ioreg could be used to query performance data, see http://stackoverflow.com/questions/10110658/programmatically-get-gpu-percent-usage-in-os-x

Multi-threaded texture loading

Texture loading is currently only single-threaded, which lengthens loading times. This should be done in multiple parallel threads.

VectorField style PointCloud

This would be pretty useful for overlaying flow outputs, cell tracking trajectories, and such! Might be easier to do with 3D primitives like cones, but I leave it for consideration.

landing page link is dead

The link to "src/test/kotlin/scenery/examples" in the README is not correct, which makes it harder to find the examples.

Implement Vulkan renderer

A Vulkan renderer might be beneficial for the following reasons:

  • no state machine, might lend itself much better to interfacing with e.g. Clojure
  • several threads can feed the renderer, making distributed data sources easier
  • ... to be extended

Upgrade to non-snapshot dependencies

Current offenders are:

  • LWJGL (currently at version 3.1.1-SNAPSHOT, 3.1.1 release should arrive in the week before Xmas) moved to 3.1.1
  • spirvcrossj (currently at version 0.1-SNAPSHOT, release in preparation) moved to 0.2.4 with e63e3df
  • script-editor (at 0.1.1-SNAPSHOT) moved to 0.1.1
  • scripting-javascript (at 0.4.4-SNAPSHOT) moved to 0.4.3
  • ClearGL (currently at 2.0.0-SNAPSHOT, release in preparation) moved to 2.0.1

X3D file I/O

It would be nice to be able to read/write entire scenes with the X3D standard (or another standard if more convenient). @kmader might want this one too.

The majority of the examples don't run or show nothing

The landing page suggests to run the examples to dive into scenery. However the majority of the examples listed under src/test/tests/graphics/scenery/tests/examples don't run, lack resources or show nothing.

Imho the cave specific stuff is not so well suited as a beginner example, because most users are unlikely to own a cave. Some of the demos should have more documentation to indicate what is actually

  • ArcballTargetExample

Black window without any object

  • BileExample

Does not work. Relies on local resources like M:/meshes/adult_mouse_bile_canaliculi_network_2.stl

Unable to load native library: /private/var/folders/cl/j57y4y2504n1nnlyd4q41fj40000gp/T/vrpn-natives-tmp1381526963179001382/libjava_vrpn.dylib: dlopen(/private/var/folders/cl/j57y4y2504n1nnlyd4q41fj40000gp/T/vrpn-natives-tmp1381526963179001382/libjava_vrpn.dylib, 1): Library not loaded: /usr/local/opt/libusb/lib/libusb-1.0.0.dylib
  Referenced from: /private/var/folders/cl/j57y4y2504n1nnlyd4q41fj40000gp/T/vrpn-natives-tmp1381526963179001382/libjava_vrpn.dylib
  Reason: image not found
Did you include jvrpn-natives-mac in your dependencies?
[main] INFO VRPNTrackerInput - Initializing VRPN device DTrack at 10.1.2.201
/private/var/folders/cl/j57y4y2504n1nnlyd4q41fj40000gp/T/vrpn-natives-tmp1381526963179001382/libjava_vrpn.dylib: dlopen(/private/var/folders/cl/j57y4y2504n1nnlyd4q41fj40000gp/T/vrpn-natives-tmp1381526963179001382/libjava_vrpn.dylib, 1): Library not loaded: /usr/local/opt/libusb/lib/libusb-1.0.0.dylib
  Referenced from: /private/var/folders/cl/j57y4y2504n1nnlyd4q41fj40000gp/T/vrpn-natives-tmp1381526963179001382/libjava_vrpn.dylib
  Reason: image not found
Error initializing java_vrpn.
 -- Unable to find native library.
Error initializing remote device [email protected].
 -- Unable to find the right functions.  This may be a version problem.

java.lang.InstantiationException: vrpn.TrackerRemote.init(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z

	at vrpn.VRPNDevice.<init>(VRPNDevice.java:61)
	at vrpn.TrackerRemote.<init>(TrackerRemote.java:80)
	at graphics.scenery.controls.VRPNTrackerInput.initializeTracker(VRPNTrackerInput.kt:62)
	at graphics.scenery.controls.VRPNTrackerInput.setTrackerAddress(VRPNTrackerInput.kt:32)
	at graphics.scenery.controls.VRPNTrackerInput.<init>(VRPNTrackerInput.kt:49)
	at graphics.scenery.controls.TrackedStereoGlasses.<init>(TrackedStereoGlasses.kt:24)
	at graphics.scenery.tests.examples.BileExample.init(BileExample.kt:33)
	at graphics.scenery.SceneryDefaultApplication.main(SceneryDefaultApplication.kt:123)
	at graphics.scenery.tests.examples.BileExample.main(BileExample.kt:99)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

  • BloodCellsExample

works just great

  • BoxedProteinExample

odd output without visible protein, maybe because ORC6.obj is not part of demo data?

  • ClusterExample

does not work. same error as bile

  • CubeExample

works great

  • DemoReelExample

does not work. same error as bile

  • FontRenderingExample

works great

  • LineExample

works great

  • MultiBoxExample

just gray frame is shown

  • MultiBoxInstancedExample

just light source without any box

  • OpenVRExample

just black scene without objects
Edit: Has been removed

  • OrientationBoxesExample

does not work. same error as bile

  • PowerplantExample

Does not work because powerplant.obj is not part of scenery-demo-models

  • RungholtExample

Does not work because rungholt.obj is not part of scenery-demo-models

  • SponzaExample

does not work. same error as bile.

Also used path to sponza.obj is not the same as in scenery-demo-models
Edit: Fixed path.

  • TexturedArrowExample

Does look more like a Galgen, but fine otherwise
Edit: Has been removed

  • TexturedCubeExample

works great

  • TexturedCubeJavaExample

works great

  • TexturedCubeJavaJPanelExample

throws NPE

kotlin.KotlinNullPointerException
	at graphics.scenery.SceneryDefaultJPanelApplication.main(SceneryDefaultJPanelApplication.kt:82)
	at graphics.scenery.tests.examples.TexturedCubeJavaJPanelExample.testExample(TexturedCubeJavaJPanelExample.java:17)

Edit: Has been removed

  • VertexUpdateExample

just black frame

  • VolumeBoxExample

does not work. same error as bile
Edit: Will be removed

  • VolumeDrosoExample

does not work. same error as bile
Edit: Will be removed

  • VolumeExample

does not work. same error as bile
Edit: Updated in #74, example data will be added

  • VolumeHistoneExample

does not work. same error as bile
Edit: Will be removed

  • VRControllerExample

gray scene with light source. It's unclear what the demo is actually about.

My system is a 2016 macbook pro with "Radeon Pro 460 4096 MB + Intel HD Graphics 530 1536 MB"

Edit by @skalarproduktraum: Converted to task list

Screenshots!

Ability to write screenshots to file (and hopefully to ImageJ/ImgLib2 data structures)

Creating too many nodes leads to potentially silent failure to allocate memory

Resulting in crashes like:

Caused by: com.jogamp.opengl.GLException: Caught GLException: GL_INVALID_OPERATION: Buffer for target 0x8892 not bound on thread main-FPSAWTAnimator#00-Timer0 at com.jogamp.opengl.GLException.newGLException(GLException.java:76) at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1327) at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147) at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759) at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81) ... 4 more Caused by: com.jogamp.opengl.GLException: GL_INVALID_OPERATION: Buffer for target 0x8892 not bound at jogamp.opengl.GLBufferObjectTracker.createBufferStorage(GLBufferObjectTracker.java:164) at jogamp.opengl.gl4.GL4bcImpl.glBufferData(GL4bcImpl.java:40258) at scenery.backends.opengl.OpenGLRenderer.updateVertices(OpenGLRenderer.kt:1389) at scenery.backends.opengl.OpenGLRenderer.preDrawAndUpdateGeometryForNode(OpenGLRenderer.kt:582) at scenery.backends.opengl.OpenGLRenderer.render(OpenGLRenderer.kt:790) at scenery.backends.opengl.OpenGLRenderer.display(OpenGLRenderer.kt:245) at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692) at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674) at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443) at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)

This is just a hypothesis though

Prepare demo model download package

A package (zip file, or similar) including the models for the examples of scenery has to be created. For this, the licenses of the models have to be checked, and the models replaced if necessary. A suitable host for the file has to be found.

AWT Canvas

If SceneryDefaultApplication is used and the target application is trying to embed within a JPanel, then Scenery needs to hand off a newtCanvasAWT.

ClearVolume has snippets for it already:

  • something like this is needed in SceneryDefaultApplication.main()

and i think a little more stuff is needed, but I'm still poking. I currently chopped main() up and made a separate function to begin the sleep thread at the end of main().

Windowing update is delayed

Sometimes the render dimensions do not match the window dimensions after a window resize event. This happens on both linux and osx

Context menus

For 3D viewer functionality, customizable context menus are needed. This might not need to be within scenery, but it is related (also dependent on the object picker). We need to be able to add menu entries that bind to ops which may modify the selected object.

Primitive cylinders

Primitive cylinders (and somewhat implicitly, cones) were a primitive type used in the old 3D viewer. Should be an easy addition, and it does provide a way of making arrows for 3D indicators (with a < and = ).

Object picker

It would be great to have the ability to take a screen coordinate corresponding to a mouse click and return the closest object that it hits (or possibly all objects along the line, which might be relevant if the user is rendering with transparency or wireframe).

Fix non-renderloop leaks in VulkanRenderer

By virtue of lwjgl's DebugAllocator, these leaks are

	at graphics.scenery.backends.vulkan.VU$VU.setImageLayout(VU.kt:206)
	at graphics.scenery.backends.vulkan.VU$VU.setImageLayout(VU.kt:264)
	at graphics.scenery.backends.vulkan.VulkanBuffer.<init>(VulkanBuffer.kt:16)
	at graphics.scenery.backends.vulkan.VulkanBuffer.<init>(VulkanBuffer.kt:9)
	at graphics.scenery.backends.vulkan.VulkanCommandBuffer.<init>(VulkanCommandBuffer.kt:13)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer$VulkanFramebufferAttachment.<init>(VulkanFramebuffer.kt:39)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer$VulkanFramebufferAttachment.<init>(VulkanFramebuffer.kt:40)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer$VulkanFramebufferAttachment.<init>(VulkanFramebuffer.kt:44)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.<init>(VulkanFramebuffer.kt:25)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.<init>(VulkanFramebuffer.kt:26)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.<init>(VulkanFramebuffer.kt:27)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.addSwapchainAttachment(VulkanFramebuffer.kt:276)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.createAttachment(VulkanFramebuffer.kt:50)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.createRenderpassAndFramebuffer(VulkanFramebuffer.kt:314)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.createRenderpassAndFramebuffer(VulkanFramebuffer.kt:323)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.createRenderpassAndFramebuffer(VulkanFramebuffer.kt:333)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.createRenderpassAndFramebuffer(VulkanFramebuffer.kt:343)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.createRenderpassAndFramebuffer(VulkanFramebuffer.kt:363)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.createRenderpassAndFramebuffer(VulkanFramebuffer.kt:377)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.getAttachmentDescBuffer(VulkanFramebuffer.kt:298)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.getAttachmentImageViews(VulkanFramebuffer.kt:305)
	at graphics.scenery.backends.vulkan.VulkanFramebuffer.getBestDepthFormat(VulkanFramebuffer.kt:441)
	at graphics.scenery.backends.vulkan.VulkanObjectState$texturesToDescriptorSet$1.accept(VulkanObjectState.kt:71)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:26)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:31)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:42)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:46)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:51)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:57)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:62)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:67)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:85)
	at graphics.scenery.backends.vulkan.VulkanPipeline.<init>(VulkanPipeline.kt:91)
	at graphics.scenery.backends.vulkan.VulkanPipeline.addShaderStages(VulkanPipeline.kt:94)
	at graphics.scenery.backends.vulkan.VulkanRenderer$debugCallback$1.<init>(VulkanRenderer.kt:151)
	at graphics.scenery.backends.vulkan.VulkanRenderer$PresentHelpers.<init>(VulkanRenderer.kt:50)
	at graphics.scenery.backends.vulkan.VulkanRenderer$PresentHelpers.<init>(VulkanRenderer.kt:51)
	at graphics.scenery.backends.vulkan.VulkanRenderer$PresentHelpers.<init>(VulkanRenderer.kt:52)
	at graphics.scenery.backends.vulkan.VulkanRenderer$PresentHelpers.<init>(VulkanRenderer.kt:53)
	at graphics.scenery.backends.vulkan.VulkanRenderer$updateDefaultUBOs$1.accept(VulkanRenderer.kt:2348)
	at graphics.scenery.backends.vulkan.VulkanRenderer$updateDefaultUBOs$1.accept(VulkanRenderer.kt:45)
	at graphics.scenery.backends.vulkan.VulkanRenderer$windowSizeCallback$1.<init>(VulkanRenderer.kt:358)
	at graphics.scenery.backends.vulkan.VulkanRenderer.<init>(VulkanRenderer.kt:207)
	at graphics.scenery.backends.vulkan.VulkanRenderer.<init>(VulkanRenderer.kt:219)
	at graphics.scenery.backends.vulkan.VulkanRenderer.<init>(VulkanRenderer.kt:244)
	at graphics.scenery.backends.vulkan.VulkanRenderer.<init>(VulkanRenderer.kt:245)
	at graphics.scenery.backends.vulkan.VulkanRenderer.<init>(VulkanRenderer.kt:270)
	at graphics.scenery.backends.vulkan.VulkanRenderer.<init>(VulkanRenderer.kt:380)
	at graphics.scenery.backends.vulkan.VulkanRenderer.<init>(VulkanRenderer.kt:383)
	at graphics.scenery.backends.vulkan.VulkanRenderer.createDeviceAndGetGraphicsQueueFamily(VulkanRenderer.kt:1449)
	at graphics.scenery.backends.vulkan.VulkanRenderer.createDeviceAndGetGraphicsQueueFamily(VulkanRenderer.kt:1485)
	at graphics.scenery.backends.vulkan.VulkanRenderer.createVertexBuffers(VulkanRenderer.kt:1777)
	at graphics.scenery.backends.vulkan.VulkanRenderer.createVertexBuffers(VulkanRenderer.kt:1834)
	at graphics.scenery.backends.vulkan.VulkanRenderer.getPhysicalDevice(VulkanRenderer.kt:1412)
	at graphics.scenery.backends.vulkan.VulkanRenderer.initializeNode(VulkanRenderer.kt:544)
	at graphics.scenery.backends.vulkan.VulkanRenderer.prepareRenderpassesFromConfig(VulkanRenderer.kt:1009)
	at graphics.scenery.backends.vulkan.VulkanRenderer.prepareRenderpassesFromConfig(VulkanRenderer.kt:1020)
	at graphics.scenery.backends.vulkan.VulkanRenderer.prepareRenderpassesFromConfig(VulkanRenderer.kt:972)
	at graphics.scenery.backends.vulkan.VulkanRenderer.prepareStandardVertexDescriptors(VulkanRenderer.kt:788)
	at graphics.scenery.backends.vulkan.VulkanRenderer.prepareStandardVertexDescriptors(VulkanRenderer.kt:799)
	at graphics.scenery.backends.vulkan.VulkanRenderer.prepareStandardVertexDescriptors(VulkanRenderer.kt:816)
	at graphics.scenery.backends.vulkan.VulkanRenderer.prepareStandardVertexDescriptors(VulkanRenderer.kt:835)
	at graphics.scenery.backends.vulkan.VulkanRenderer.prepareStandardVertexDescriptors(VulkanRenderer.kt:843)
	at graphics.scenery.backends.vulkan.VulkanRenderer.recordPostprocessRenderCommands(VulkanRenderer.kt:2263)
	at graphics.scenery.backends.vulkan.VulkanRenderer.render(VulkanRenderer.kt:1266)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$commandBufferBacking$1.invoke(VulkanRenderpass.kt:50)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$commandBufferCount$1.invoke(VulkanRenderpass.kt:63)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:68)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:69)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:70)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:71)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:72)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:73)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:74)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:75)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:76)
	at graphics.scenery.backends.vulkan.VulkanRenderpass$VulkanMetadata.<init>(VulkanRenderpass.kt:77)
	at graphics.scenery.backends.vulkan.VulkanRenderpass.<init>(VulkanRenderpass.kt:79)
	at graphics.scenery.backends.vulkan.VulkanRenderpass.initializeDefaultPipeline(VulkanRenderpass.kt:181)
	at graphics.scenery.backends.vulkan.VulkanRenderpass.initializePipeline(VulkanRenderpass.kt:187)
	at graphics.scenery.backends.vulkan.VulkanRenderpass.initializePipeline(VulkanRenderpass.kt:198)
	at graphics.scenery.backends.vulkan.VulkanShaderModule.<init>(VulkanShaderModule.kt:69)
	at graphics.scenery.backends.vulkan.VulkanShaderModule.<init>(VulkanShaderModule.kt:80)
	at graphics.scenery.backends.vulkan.VulkanShaderModule.<init>(VulkanShaderModule.kt:83)
	at graphics.scenery.backends.vulkan.VulkanTexture$VulkanImage.copyFrom(VulkanTexture.kt:79)
	at graphics.scenery.backends.vulkan.VulkanTexture$VulkanImage.copyFrom(VulkanTexture.kt:85)
	at graphics.scenery.backends.vulkan.VulkanTexture$VulkanImage.copyFrom(VulkanTexture.kt:87)
	at graphics.scenery.backends.vulkan.VulkanTexture$VulkanImage.copyFrom(VulkanTexture.kt:88)
	at graphics.scenery.backends.vulkan.VulkanTexture$VulkanImage.copyFrom(VulkanTexture.kt:89)
	at graphics.scenery.backends.vulkan.VulkanTexture$VulkanImage.transitionLayout(VulkanTexture.kt:46)
	at graphics.scenery.backends.vulkan.VulkanTexture$VulkanImage.transitionLayout(VulkanTexture.kt:53)
	at graphics.scenery.backends.vulkan.VulkanTexture.createImage(VulkanTexture.kt:110)
	at graphics.scenery.backends.vulkan.VulkanTexture.createImageView(VulkanTexture.kt:212)
	at graphics.scenery.backends.vulkan.VulkanTexture.createImageView(VulkanTexture.kt:221)
	at graphics.scenery.backends.vulkan.VulkanTexture.createSampler(VulkanTexture.kt:231)
	at graphics.scenery.controls.GLFWMouseAndKeyHandler$cursorCallback$1.<init>(GLFWMouseAndKeyHandler.kt:34)
	at graphics.scenery.controls.GLFWMouseAndKeyHandler$keyCallback$1.<init>(GLFWMouseAndKeyHandler.kt:47)
	at graphics.scenery.controls.GLFWMouseAndKeyHandler$mouseCallback$1.<init>(GLFWMouseAndKeyHandler.kt:75)
	at graphics.scenery.controls.GLFWMouseAndKeyHandler$scrollCallback$1.<init>(GLFWMouseAndKeyHandler.kt:99)

Some of these are however related to #42, as the debug allocator simply tracks allocs/deallocs within the same scope.

Custom colormaps

We have access to a bunch of colormaps as LUTs in ImageJ. It would be awesome if they could be loaded into Volumes.

Enable VR for scenery

In current master branch change true -> false in VulkanRenderer.kt and possibly OpenGLRenderer.kt in line:
ds.set("vr.Active", false)

However, in latter one it seems to be some problem - OpenGL renderer starts and allows to play with it a few seconds and then app crashes (in my case SponzaExample.kt test) or it still works on PC screen but not anymore on VR headset.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.