Search Unity

[Released] Rove3D: Interactive Pathtraced Global Illumination

Discussion in 'Assets and Asset Store' started by rove3d, Dec 24, 2016.

  1. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    Rove3D for Unity allows developers to use interactive pathtraced rendering in their own applications, as well as render production-quality images and animations with extremely fast results using your own Unity assets.

    Our beta has been released and is available from our website: https://www.rove3d.com

    Follow to get updates: https://www.twitter.com/rove3d

    Discuss on Reddit: https://www.reddit.com/r/rove3d

    * Runs in Unity Indie and Pro.
    * Renders directly to DirectX or OpenGL texture.
    * Integrates with any existing GUI.
    * Works with most image effects and post-processing.
    * Runs on Linux, Windows, and Mac.
    * Supports fully dynamic lights and geometry.
    * Built-in dynamic physical sky environment.
    * Multi-layered materials supporting isotropic/anistropic roughness.
    * Uses OpenCL, running on AMD and Nvidia cards.









     
    Last edited: Jan 14, 2017
  2. arapps3d

    arapps3d

    Joined:
    Jan 13, 2015
    Posts:
    19
    Hi, I am using the latest version, v003, also installed the VC++ 2012 redistributable(x64). My Unity editor is 64bit. Unfortunately still the same error.
    https://img1.picload.org/image/rairgddw/unbenannt-1.jpg

    [EDIT:] make sure you have the latest gpu driver installed, that fixed it for me.
     
    Last edited: Dec 27, 2016
  3. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @arapps3d - What GPU are you using? The only other dependency apart from the VC redistributables is OpenCL, which should come with the latest version of your GPU drivers.
     
  4. arapps3d

    arapps3d

    Joined:
    Jan 13, 2015
    Posts:
    19
    my gpu is GTX 980 Ti
     
  5. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
  6. Berenger

    Berenger

    Joined:
    Jul 11, 2012
    Posts:
    78
    @rove3d I had the dllnotfoundexception on the 003 package so I updated my drivers. I now have the error : "Rove: Failed setup; check 'rove.log' for details". Any idea what's going on ? Here is the content of the log file.

    Rove v.0.0.3
    ---
    CPU threads: 8.
    D3D11: 1157 x 801
    Setting up scene.
    Platforms found: 1.
    --- Platform: 0.
    Vendor: NVIDIA Corporation.
    Name: NVIDIA CUDA.
    Version: OpenCL 1.2 CUDA 8.0.0.
    Devices found: 1.
    Using NV-specific D3D11 extensions.
    Display device index: 0.
    Creating D3D sharing display device context.
    Setting up with a single device.
    --- Device: 0.
    Vendor: NVIDIA Corporation.
    Name: GeForce GTX 460.
    Version: OpenCL 1.1 CUDA.
    Compute units: 7.
    Global memory: 1024 MB.
    Local memory: 48 KB.
    Max image size: 16384 x 16384.
    Max image buffer size: 134217728.
    Creating command queues.
    Creating image program.
    ** Error: CL error code: -30 : ..\..\..\..\src\compute\compute.cpp : 394


    -----

    This error code is :

    -30 / CL_INVALID_VALUE / clGetDeviceIDs, clCreateContext / This depends on the function: two or more coupled parameters had errors.
     
  7. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @Berenger - Rove3D requires OpenCL 1.2, and currently nVidia has added support for this on their 6-series and newer cards (GTX 680 and up). We are adding CUDA support soon (within the next month) which will allow older nVidia cards to run this, so stay tuned for that update. Twitter is the best way to keep up with updates: https://www.twitter.com/rove3d
     
  8. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    Just released v.0.0.4: ~10% performance improvement across all kernels and optimization levels. Use DL link in original e-mail to update.
     
  9. Berenger

    Berenger

    Joined:
    Jul 11, 2012
    Posts:
    78
    @rove3d I'm on a different computer and good to go now.

    How can I create materials at runtime ? I'm downloading them as asset bundles and would like to convert them at runtime but no luck so far. I've tried to mimic the process used by the API's inspector, but without success.
     
  10. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @Berenger - Materials are represented in two places, in the editor inspector window, and internally for the plugin. Do you want to load your materials at runtime in the editor and present them in the inspector, or do you you just want to load them at runtime and control them entirely by script? Let me know and I will write a script for you as an example to show how to do what you need it to do.
     
  11. Berenger

    Berenger

    Joined:
    Jul 11, 2012
    Posts:
    78
    The point would be to load them for the plugin. Have their representation in the inspector would only be a plus for debugging purposes.
     
  12. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    v.0.0.5 released: 5% performance improvement, animation frame capturing with interface, improved API, +more. As always, use the download link from the original email to get newest version.

    @Berenger - You can use the same link in the original e-mail you were sent to download the latest version, v.0.0.5. In this version, we have improved the way materials are handled at runtime. There is a new file, 'Rove/ExampleScripts/RuntimeMaterial.cs' that is a functional example of creating a new material at runtime and assigning it to a mesh. Here are the guts of it:

    Code (CSharp):
    1.  
    2.       RoveAPI.RoveMaterial new_material = new RoveAPI.RoveMaterial();
    3.       new_material.name = "New Material " + rove_api.materials.Length;
    4.       new_material.type = RoveAPI.TYPE_DIFFUSE; // Types defined in 'RoveAPI.cs'.
    5.       new_material.double_sided = false;
    6.       new_material.flip_normals = false;
    7.       new_material.coating_color = Color.white;
    8.       new_material.coating_roughness = new Vector2(0.0f, 0.0f);
    9.       new_material.coating_ior = 1.5f;
    10.       new_material.coating_thickness = 1.0f;
    11.       new_material.color = new Color(Random.Range(0.0f, 1.0f),
    12.                                      Random.Range(0.0f, 1.0f),
    13.                                      Random.Range(0.0f, 1.0f), 1.0f);
    14.       new_material.color_alpha = 1.0f;
    15.       new_material.roughness = new Vector2(0.0f, 0.0f);
    16.       new_material.map_flags = 0x0; // Always initialize to 0x0.
    17.       // (No textures with this material, so no need to set texture properties.)
    18.       //////////////////////////////////////////
    19.       // Create new material using API function.
    20.       uint new_material_id =
    21.         rove_api.AddMaterial(new_material,
    22.                              null, // Coating color Texture2D.
    23.                              null, // Coating roughness Texture2D.
    24.                              null, // Base color Texture2D.
    25.                              null, // Base normals Texture2D.
    26.                              null, // Base roughness Texture2D.
    27.                              true); // Indicate we are creating at runtime.
    28.       // Assign new material to every sub-mesh of this RoveObject.
    29.       if (new_material_id != RoveAPI.ERROR) {
    30.         if (rove_object.mesh_id != RoveAPI.ERROR) {
    31.           for (uint m = 0; m < rove_object.sub_mesh_materials.Length; ++m) {
    32.             rove_object.sub_mesh_materials[m] = new_material_id;
    33.             rove_api.ChangeSubMeshMaterial(rove_object.mesh_id, m,
    34.                                            new_material_id);
    35.           }
    36.         }
    37.       }
     
    Last edited: Jan 5, 2017
  13. Berenger

    Berenger

    Joined:
    Jul 11, 2012
    Posts:
    78
    Thanks, that helped a lot !

    Here is my feedback so far.

    • I would find it more consistent to have a RoveCamera component attached to the camera with the fov / aperture / focal parameters, a separate material editor and the RoveAPI component containing only the settings, capture and whatever you'll add later.
    • It can get difficult to edit the materials once you have many of them, I'd prefer a different method (I'm thinking about 3DSMax materials editor, that's the only one I know)
    • It's hard to tell when the calcul is done. Should I wait 1 second, 10, 100 ? Some callback would help.
    • I'm really eager to see the documentation so I'll understand all the parameters, the material types, how to tweek the environment etc.
    • Having the ability to easily switch rove3D on and off at runtime. It can be done by script already, but I need to edit the RoveXXX scripts (RoveSun specifically, as the light is destroyed). My changes will be lost if I'm not carefull at the next version though.
    Anyway, it's awesome :)
     
    Last edited: Jan 5, 2017
  14. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    Thanks for the feedback, I agree there is some workflow stuff to improve. I will also replace the code that removes Unity's components with disables, and write a runtime enable/disable function into the API so that it's easier to switch back and forth.

    For those wondering, our current roadmap for the next month or so:

    1.) A few rendering features (portals, HDR environment maps, sub-surface scattering material)
    2.) Multi-GPU support
    3.) Noise-reduction filter
    4.) VR integration (starting with Vive)
     
  15. unisip

    unisip

    Joined:
    Sep 15, 2010
    Posts:
    340
    I'm testing Rove3D but I didn't find anything in the API regarding dynamic lights aside from the sun and sky. Is there any plan to support point and spotlights ?

    Rove fails to init in 'linear' color space mode but works fine in 'gamma'. Maybe you want to test that upon start to provide a specific error message
     
    Last edited: Jan 6, 2017
  16. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @unisip - Lights are represented by emissive meshes, like the headlights of the car in the example scene. To create one, you need to assign a material with 'Type: Emissive' to a mesh.

    Thanks for the heads up, I will look into the linear color space issue.

    Edit: The next version supports linear color space, but gamma color space is still recommended for Rove3D (we handle color spaces internally).
     
    Last edited: Jan 6, 2017
  17. unisip

    unisip

    Joined:
    Sep 15, 2010
    Posts:
    340
    Yes I figured emissive meshes might work as some kind of light. I'll experiment with that a bit. Thanks.
     
  18. unisip

    unisip

    Joined:
    Sep 15, 2010
    Posts:
    340
    Could you point to any litterature on the web about the material model (coating, dielectric, conductive, etc) ? I'm not very familiar with that model and would like to figure out how to translate PBR materials to your model as close as possible. I do have the required math and programming background to figure it out with the right papers to lead me on the way I believe. Tried just to play around with settings but it's very much trial and error and a bit of scientific background about what the different parts refer to would help.

    Thanks !
     
  19. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @unisip - We are working on some documentation that will use more familiar terms to describe the materials, but here are the basics:
    • Coating: clear reflective/specular layer on top of the base material. Can be used to give a specular component to less-specular base materials, like diffuse or rough metals (conductors).
    • Diffuse: Rubber, plastic, cloth, wood, etc. Reflects light equally in all directions, so has no reflective or specular aspect. Along with a coating (with various roughness) pretty much accounts for any non-metallic, non-glass materials.
    • Conductor: Metals/mirrors. Use one-dimensional roughness to create something like brushed metal (anistropic), or equal X and Y roughness for regular metals (isotropic).
    • Dielectric: Glass/water. Reflective and refractive properties. Increased roughness creates "frosted" glass.
    The "roughness" maps are greyscale maps that are used to indicate scratches, blemishes, reflectivity. This may be similar to 'metalness' maps, only we map from black (smooth, reflective, shiny) to white (rough, dull, un-reflective). These roughness maps are what give the scratched appearance to the 3 last images in the original post (red(diffse)/gold(conductor)/glass(dielectic)).

    We recently added the 'ExampleScripts/RuntimeMaterial.cs' which is a good starting point if you are trying to convert materials from PRB properties at runtime.
     
    Last edited: Jan 9, 2017
  20. IanStanbridge

    IanStanbridge

    Joined:
    Aug 26, 2013
    Posts:
    334
    Good work so far, this is easily the fastest path tracer I have ever seen. I think noise removal filter is the thing you need to give the most attention. Even as low as 10 samples per pixel this seems to give a pretty good image and yet if you increase the sample rate to 1000 per pixel the noise hasn't been totally removed. That would suggest to me that brute force path tracing will never be feasible for a game or interactive experience on its own without noise.

    Have you thought about combining this path tracers rendering path with a classical ray tracer to remove the noise ? You could for example render the scene with a 2 bounce high resolution raytrace so that you get noiseless direct lighting, hard first bounce reflections and hard shadows. Then you could render the scene at a quarter of the resolution with your pathtracer but only recording the samples after the first bounce so that only the raytrace would contribute to the direct lighting. If you blurred this low res path trace and then combined it with the high res raytrace you would get a noiseless image that could be used at interactive speeds for a game I would have thought. While the path trace image would be blurred and low res I would have thought it might actually help to soften the shadows and most second bounce reflections and global illumination would usually be blurry anyway.

    You could also perhaps provide the option to use your render to bake a lightmap or just the global ilumination from the path tracer for systems that couldn't handle it at realtime speeds or VR where I don't think any high frequency noise would be good for the user so you would be better off having it baked.
     
  21. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @IanStanbridge - You're right, the real breakthrough is going to be with a good noise reduction filter. From our user survey, pretty much everyone wanted a noise reduction filter and VR integration, so that is what we are going to be focusing on over the next 2 months.

    The problem with any kind of hybrid system is when we need something other than diffuse or 100% specular materials. Diffuse can be approximated with direct lighting, and mirror-like materials can be raytraced quite fast, but when we have more advanced materials with isotropic or anistropic roughness, that kind of system breaks down. Every material type in Rove features this kind of roughness, so it's hard to try to blend with a raytraced or even a rasterized pre-image when these materials have complex interactions. The result ends up even uglier than just regular noise, with weird artifacts. This also applies to baking, where we could only really bake diffuse textures, and anything that relies on direction of the viewer (specular/reflections) still has to be pathtraced unless we also bake the lightfield, which takes up large amounts of memory.

    The direction we've taken with our noise reduction filter is going to solve many of these issues, so we'll see where the discussion goes after that release.
     
  22. RockSPb

    RockSPb

    Joined:
    Feb 6, 2015
    Posts:
    112
    Very nice result! But textures gamma looks wrong. Is it possible to fix that?
    Try to disable sRGB but no result(
    upload_2017-1-10_0-13-58.png
    upload_2017-1-10_0-11-55.png
    upload_2017-1-10_0-12-33.png
     
  23. Rockwall33

    Rockwall33

    Joined:
    Mar 4, 2016
    Posts:
    186
    Can this be used for games? That you control, not for viewing like VR has, but like a pc game @rove3d?

    Tha asset looks amazing!!!! Nice job you did on it.
     
  24. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @RockSPb - This is the fault of our tonemapping, which we are improving today and will be in the next update released tomorrow. All of our rendering is in HDR, so the version we release tomorrow with a better tonemapping operator will improve this. The other aspect is that the sky is very blue, which will give a blue-ish tint in an outdoor scene. Try changing the sun color to something with a bit more yellow in it, which should help a bit.

    @zeldalink33 - Yes, this can be used for games. What you see in play mode can be built into an executable so you can use pathtracing directly in your games or architectural walkthroughs. Currently the results are not great for games though due to the noise, but our noise reduction filter coming out next month should fix that.
     
  25. Rockwall33

    Rockwall33

    Joined:
    Mar 4, 2016
    Posts:
    186
    Thank you for answering my question @rove3d!!!!! :D I might end up using it for my game cause it looks AWESOME!!!

    Thank you for the fast response :D
     
    Last edited: Jan 9, 2017
  26. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    v.0.0.6 released: HDR Environment maps (.hdr and .exr) for IBL, better tonemapping with added image adjustment controls, expanded API, and another example script for switching between Unity's render and Rove3D at the touch of a button.

    @RockSPb - this update fixes the gamma issue you encountered.

    Use the download link in the original e-mail to update.

    Here's an example of the new IBL (image-based lighting) in action:

     
    Last edited: Jan 11, 2017
    Detniess likes this.
  27. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    There was a bug we had with mesh emitters in certain conditions, that is now fixed in the latest update (v.0.0.6).

    This next week we will be adding portals (for faster indoor rendering) and multi-gpu support into version 0.0.7, keep an eye out.
     
  28. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    Just submitted to the Asset Store to give you guys another option to purchase, waiting for approval and should go live in a week or so.
     
    Rockwall33 likes this.
  29. xCyborg

    xCyborg

    Joined:
    Oct 4, 2010
    Posts:
    633
    That's awesome, it's great to see offline renderers making their way into Unity.
     
  30. Mr-Oliv

    Mr-Oliv

    Joined:
    Sep 14, 2012
    Posts:
    33
    I remember hearing about a watermarked test version at some point, is it still around?
     
  31. brisingre

    brisingre

    Joined:
    Nov 8, 2009
    Posts:
    277
    I'd also be interested in a demo.
     
  32. StaffanEk

    StaffanEk

    Joined:
    Jul 13, 2012
    Posts:
    380
    Are you using blue noise noise sampling? Blender cycles is getting that in the next update. Makes a huge difference.
     
  33. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @xCyborg @Mr-Oliv @brisingre - the demo was temporarily taken down until the next update. Reason is that the next version has major workflow changes so I didn't want people testing out with the old way of doing things. The new version is close to a PBR workflow and assets are managed similar to regular Unity materials. Follow on Twitter to get the v.0.1.0 announcement first: https://www.twitter.com/rove3d

    @StaffanEk - we don't use blue noise decorrelation yet, but it is on the todo list.
     
    Rockwall33 and brisingre like this.
  34. unisip

    unisip

    Joined:
    Sep 15, 2010
    Posts:
    340
    Can you clarify the OpenCL version requirements?
    I tried running Rove on a Mac Mini (I know, not a great idea) and here is what I get:
    Rove v.0.0.6
    ---
    CPU threads: 4.
    GL: 1280 x 720.
    Setting up scene.
    Platforms found: 1.
    --- Platform: 0.
    Vendor: Apple.
    Name: Apple.
    Version: OpenCL 1.2 (Nov 18 2015 20:45:47).
    Devices found: 1.
    Display device index: 0.
    Creating GL sharing display device context.
    Setting up with a single device.
    --- Device: 0.
    Vendor: Intel.
    Name: Iris.
    Version: OpenCL 1.2 .
    Compute units: 40.
    Global memory: 1536 MB.
    Local memory: 64 KB.
    Max image size: 16384 x 16384.
    Max image buffer size: 25165824.
    Creating command queues.
    Creating image program.
    ** Error: CL error code: -30 : ../src/compute/compute.cpp : 395
     
  35. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @unisip - The minimum requirement is OpenCL 1.2, which that card has, but it looks like the kernel compilation failed. The current version has been mostly tested on discrete GPUs (AMD & NVIDIA), and not much on integrated GPUs like the one from your log. I will look into this and try to fix it before v0.1.0.
     
  36. Galfaroth

    Galfaroth

    Joined:
    Sep 20, 2009
    Posts:
    19
    Interested in non-realtime mobile solution. Will it be ever possible?
     
  37. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @Galfaroth - Yes, Rove3D is capable of running on compatible mobile devices via OpenCL 1.2. I will likely demo this on Android sometime after the release of v.0.1.0.

    To anyone wondering, v.0.1.0 is coming along and will be released in a week or so. Follow the Twitter account for the announcement: https://www.twitter.com/rove3d
     
  38. thejturner

    thejturner

    Joined:
    Jun 14, 2016
    Posts:
    2
    Looks really promising. Hoping it might be an Arnold Renderer alternative for less demanding animations. Blown away by the apparent speed of dielectric example. Looking forward to the VR features.

    Similar to unisip, I'm having issues getting it up and running on a MacPro trashcan (El Capitan).

    Rove v.0.0.6
    ---
    CPU threads: 12.
    GL: 1801 x 861.
    Setting up scene.
    Platforms found: 1.
    --- Platform: 0.
    Vendor: Apple.
    Name: Apple.
    Version: OpenCL 1.2 (Jun 30 2016 20:18:53).
    Devices found: 2.
    Display device index: 0.
    Creating GL sharing display device context.
    Setting up with a single device.
    --- Device: 0.
    Vendor: AMD.
    Name: AMD Radeon HD - FirePro D700 Compute Engine.
    Version: OpenCL 1.2 .
    Compute units: 32.
    Global memory: 6144 MB.
    Local memory: 32 KB.
    Max image size: 16384 x 16384.
    Max image buffer size: 65536.
    Image kernel is not supported; reverting to global kernel.
    Creating command queues.
    Creating non-image program.
    ** Error: Error returned by cvms_element_build_from_source : ../src/compute/compute.cpp : 396
    ** Error: CL error code: -11 : ../src/compute/compute.cpp : 397
     
  39. AndreElijah

    AndreElijah

    Joined:
    Sep 22, 2013
    Posts:
    15
    Is the ONLY way to purchase this through your website? It's currently down.
     
  40. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    Thanks for the heads up, website is back up.
     
  41. AndreElijah

    AndreElijah

    Joined:
    Sep 22, 2013
    Posts:
    15
    Quick question, I managed to have the plugin running for about a day. Now whenever I create a new project, import a mesh, then import Rove the meshes won't render in the Game viewport when running. They disappear. I'm assuming that I pressed something dumb to make this happen since your example project works fine. What am I missing? LOL
     
  42. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Does the project need to fit in VRAM?
     
  43. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @AndreElijah - Make sure to press "Setup Scene" from the Rove interface so that each mesh in your scene gets the 'RoveObject' component attached.

    @Elecman - At the moment yes, it must all fit in GPU memory. We have plans in the future to do swapping between VRAM and RAM, but at the moment it's all on the GPU.
     
  44. AndreElijah

    AndreElijah

    Joined:
    Sep 22, 2013
    Posts:
    15
    Ya I'm doing that. I'm getting an OpenGL ES 2 Warning. It worked the first couple of times I tried, then the third time it just stopped.

    I'll try again with the new build when you post it :)
     
  45. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Which VRAM number do we go for? The total Unity project size, the number reported by GPU-Z when running a compiled executable, The number reported by GPU-Z when running in the editor, VRAM reported by the profiler?
     
  46. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Also, it would be great if Rove would work with Unity materials out of the box. I have almost 1000 materials in my project and there is absolutely no way I will convert those manually. This is a complete showstopper.
     
  47. rove3d

    rove3d

    Joined:
    Sep 12, 2016
    Posts:
    89
    @Elecman - the version about to be released has a brand new material system that closely mimics Unity's material system, and is much simpler to use. There have been some delays as I have been having some discussions with some other companies about the future, but it will be out soon, keep an eye out for it.
     
  48. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Ok, great. Looking forward to it.

    I would like to render my project with it:
     
    AlanMattano and Rockwall33 like this.
  49. Curious

    Curious

    Joined:
    Nov 19, 2009
    Posts:
    334
    Wow, can't believe I missed this forum this long!

    Quick question, would it be possible to run Rove3d on mobile devices (iOS, Android) anytime soon?
    I'd love to use this to render beauty shots for architectural purposes on mobile.
     
  50. Curious

    Curious

    Joined:
    Nov 19, 2009
    Posts:
    334
    I used 0.1.2 with Unity 5.5.0f3 and it worked on windows perfectly.
    I updated to Unity 5.6.0f3 and the image is vertically mirrored for some reason!

    [EDIT] I selected the RoveCamera and set the 'y' scale value to -1 as a quick workaround and it worked!