[Open Source Release] Daz Render Plugin Framework with Yet Another Lux Plugin

2»

Comments

  • gederixgederix Posts: 389
    edited October 2021

    Ok thanks, you are correct that my openCL is now 3.0. I am guessing it was the lates nvidia driver update since thats the only thing updated in the time this happened. 

    /edit: okay that wasn't it, the earlier drivers also install 3.0 so Im not sure thats my particular problem here. 

    Post edited by gederix on
  • danielbui78danielbui78 Posts: 187
    edited October 2021

    gederix said:

    Ok thanks, you are correct that my openCL is now 3.0. I am guessing it was the lates nvidia driver update since thats the only thing updated in the time this happened. 

    /edit: okay that wasn't it, the earlier drivers also install 3.0 so Im not sure thats my particular problem here. 

    Like I said, uninstalling AMD APP SDK didn't fix it for me either: the only fix was to pull the original OpenCL v2 DLL that is installed with Windows off of a hard-drive backup.  I still think that OpenCL v3.x will cause Reality_DS.exe to crash without any error messages, but that's just my opinion.  Best of luck to you.

    Post edited by danielbui78 on
  • gederixgederix Posts: 389

    I understand but uninstalling my drivers did remove the opencl.dll, installing an earlier driver where everything was working also installed 3.0, so reality apparently was working with 3.0 since it did not come from the latest release as I had hoped. But it is academic as I have bought a new machine and learning iray finally. It was worth a shot, and Im still interested to see what happens with your work, a luxrender plugin that actually understands the iray surface would be amazing, something reality couldnt do. Cheers!

  • danielbui78danielbui78 Posts: 187
    edited November 2021

    gederix said:

    I understand but uninstalling my drivers did remove the opencl.dll, installing an earlier driver where everything was working also installed 3.0, so reality apparently was working with 3.0 since it did not come from the latest release as I had hoped. But it is academic as I have bought a new machine and learning iray finally. It was worth a shot, and Im still interested to see what happens with your work, a luxrender plugin that actually understands the iray surface would be amazing, something reality couldnt do. Cheers!

    I can't argue with your logical conclusions there, but if you just want to double-check just for giggles, the following A/B test to see if it is related to opencl.dll will only take you 1 minute or less:

    Test A:
    1) Run Reality.exe and confirm that it crashes instantly without opening any windows.

    Test B:
    1) Create an empty text file in the Reality_DS folder, next to the Reality.exe.
    2) Rename the empty text file to "opencl.dll".
    3) Run Reality.exe.

     

    Anyway, thanks for the kind words!  Feel free to try yaluxplug+LuxCoreRender in its current state: there is already decent Iray Uber and PBR Skin shader support, it's just missing a few more features like Top Coat and Iray's default post-effects for burning highlights and crushing shadows.

    Custom yaluxplug+LuxCore.jpg
    2560 x 1440 - 315K
    Post edited by danielbui78 on
  • gederixgederix Posts: 389

    Well it turns out you were right about opencl, I found 2.0 online (I did this before I saw your reply above), grabbed it and tried it and lo and behold reality launched. Why reality was working until the very latest nvidia driver update is... weird. So thanks for your help, I do plan on checking out your plugin once I get my new system. Cheers!

     

  • Hi,

    Thank You for the new version of Yaluxplug !

    And special thanks for the source code !!!

    This working well on My AMD rig ( CPU, GPU).

    For testing:

    I added a new options for setting the CPU cores number for render. 

    A selectable imagepipeline plugin "CAMERA_RESPONSE_FUNC".

    I modified Your Override saturate options to changeable (scale 0-2 default 1).

    I will add a new Override option for change the skin reflection (some character have a too shiny skin when the normal maps on).

    I will  a new Render mode " Full hybrid" - openCL-CPU + openCL-GPU + CPU, Tested working well with selected CPU-cores.

    And now I need Your help.

    How can I send a command to the Luxcore in realtime to change the imagepipeline like: Film::SetImagePipelines(const u_int index, ImagePipeline *newImagePiepeline).

    I would like to change the "CAMERA_RESPONSE_FUNC" in realtime by enum on logwindow like Luxrender (what using for Reality).

    At the moment I can get a relative quiet and fast render with my amd rig, faster than the Iray-CPU.

    Thank You !

     

  • hcsaba68 said:

    Hi,

    Thank You for the new version of Yaluxplug !

    And special thanks for the source code !!!

    Thanks for the feedback!  I am very happy to hear that you are able to use the plugin and even extend the source code!!  There are a few things that I would like to add in ASAP, but just have not had the time:  Subdivision support to enhance/smooth the rendered geometry, TopCoat support and Burn/Crush support to better match Iray's render output.  I should just block out time to do this, since it would only take me about 2-3 hours of work to hardcode some preliminary settings.  Then I can go back and add in customizability and UI for those features, that usually takes me the longest amount of development time.

     

    How can I send a command to the Luxcore in realtime to change the imagepipeline like: Film::SetImagePipelines(const u_int index, ImagePipeline *newImagePiepeline).

    I would like to change the "CAMERA_RESPONSE_FUNC" in realtime by enum on logwindow like Luxrender (what using for Reality).

    I actually want to do some realtime changes too: add DeNoise as a final exit stage before quitting instead of at the end of each render pass.  Right now, real-time changes require modification of luxcoreconsole.exe.  You can see some of my modifications here: https://github.com/danielbui78/LuxCore/commits/experimental

    luxcoreconsole.exe is actually just a small wrapper that passes CFG and SCN files directly into the main render engine loop for parsing and processing, like a black box.  So it is not very helpful in learning how to manipulate the rendering and image pipeline API.  When I have time, I will study the luxcoreui and pylux source files... maybe they will have some source code that does something similar to what we want ...  or maybe I will just ask Dade or someone on the LuxCoreRender forums.  hehe, that will probably be fastest.

     

  • Hi,

    Thank You for answer !

    I fixed the denoiser problem. We can using the https://github.com/DeclanRussell/IntelOIDenoiser/releases ;    Denoiser_v1.6 by command line. 

    So We can set up the denoiser start on the options panel slider, by the percent of the render proccess. ex: 10 percent - after the render started, 95 percent - nearly end of the rendering...

    This  working with haltspp, halttime, and the haltthreshold too. And We can start or stop, on Your LogWindow.

    We can select 3 Quality level  "BASIC" , "MEDIUM" , "HIGH"

    I added options for Samplers "SOBOL" , "METROPOLIS"

    I added options for Filters "NONE" , "BOX" , "GAUSSIAN" , "MITCHELL" , "MITCHELL_SS" , "BLACKMANHARRIS" and a film.filter.width slider.

    I added options for Light Strategy "UNIFORM" , "POWER" , "LOG_POWER" , "DLS_CACHE"

    I added Contrast, Brightness, Saturation, Hue, Sharpen/Blur sliders to Your LogWindow. This working real time. We can save and load the settings.

    So at the moment We have a very handy plugin.

    You can focus to the material conversion. :)

    And last. I need a little help.

    How can I get the actual(selected) viewport camera dimensions like width height

    Because if I have more different camera, with different setup, this system not realy good. 

    The problem is. The SDK version of DzCamera, do not have a pixelsHeight an pixelWidth parameters. I don not Know why, because the script version have.

    I tried : getViewportMgr()->getActiveViewport()->get3DViewport()->getCamera()  I can get the camera, but no parameters to get the dimensions.

    I tried : DzProperty with findProperty("Pixel Size"); I can get back this parameter by DzIntProperty getValue(), but this is not a separated numbers. this give me a (width+height)/2 value.

    When I can fix this problem I would like to send the .dll for test on Your system. If is not problem for You.

    Thank You !

     

  • danielbui78danielbui78 Posts: 187
    edited November 2021

    hcsaba68 said:

    Hi,

    Thank You for answer !

    I fixed the denoiser problem. We can using the https://github.com/DeclanRussell/IntelOIDenoiser/releases ;    Denoiser_v1.6 by command line. 

    ........

    You can focus to the material conversion. :)

    That's amazing!  I am actually working on a redesign of the plugin which will launch an interactive python interpreter with pyluxcore library instead of luxcoreconsole.  This will then let us make changes in realtime just like Blender's LuxCore plugin.  Currently, I'm having trouble building the pyluxcore library on mac.  Once I get this working, I'll post it here.

     

    And last. I need a little help.

    How can I get the actual(selected) viewport camera dimensions like width height

    Because if I have more different camera, with different setup, this system not realy good. 

    The problem is. The SDK version of DzCamera, do not have a pixelsHeight an pixelWidth parameters. I don not Know why, because the script version have.

    I tried : getViewportMgr()->getActiveViewport()->get3DViewport()->getCamera()  I can get the camera, but no parameters to get the dimensions.

    I tried : DzProperty with findProperty("Pixel Size"); I can get back this parameter by DzIntProperty getValue(), but this is not a separated numbers. this give me a (width+height)/2 value.

    When I can fix this problem I would like to send the .dll for test on Your system. If is not problem for You.

    Thank You !

    I'm confused with what you are trying to do.  As far as I know, there is no pixel Height or pixel Width parameters for the DzCamera because the camera object is just an abstract object in the virtual scene and has no knowledge of any pixel information. 

    Are you trying to get the pixel dimensions of the viewport on your GUI?  I'm not sure why you would want this unless you are trying to render an overlay directly on top of the GUI.  If that's the case, then you can try: ...->get3Dviewport()->getViewport()->getView().  This returns a DzView object, which is a subclass of QWidget, which means you can get the XXXX.width and XXXX.height from the DzView object.  Note, that the DzView's aspect ratio may not be the same as the DzCamera's aspect ratio, so you will have to do more calculations from that. 

    If you are trying to get the specified Height/Width that is specified in the Renderer, then those are passed by DazStudio to the yaluxplug::render() funciton via the "DzRenderOptions &opt" argument.  "opt" is then passed along to the internal yaluxplug functions to process into CFG/SCN data.  DzRenderOptions::getImageSize returns a QSize structure with the exact dimensions that DazStudio wants yaluxplug to render the image.

    If you are trying to find some kind of camera pixel dimension like a real-world digital camera's image sensor, then that is not simulated by the base DzCamera class.

    Let me know if it's something else you want to find out.  You might have to ask the regular Daz forums if the above info doesn't answer it.

     

    Post edited by danielbui78 on
  • Hi,

    Thanks for Your ansver !

    My English is not perfect. Sorry about this.

    But I try to ansver for You.

    "I'm confused with what you are trying to do.  As far as I know, there is no pixel Height or pixel Width parameters for the DzCamera because the camera object is just an abstract object in the virtual scene and has no knowledge of any pixel information. "  

    You are right. And no.

    If You have a look at this link: http://docs.daz3d.com/doku.php/public/software/dazstudio/4/referenceguide/scripting/api_reference/object_index/camera_dz

    You can see the script version of DzCamera have pixelsHeightpixelsWidth parameters. The SDK version do not.

    And I talking about My added cameras, and not the basic cameras like Prespective view.

    The problem is: If You add a camera to the scene, and You set up the dimensions on the properties tab to 1200x2000 for example.

    The options panel dimensions not changeing. And You send a wrong values for the film.width and film.height because You got it from the DzRenderOptions.

    The DzRenderHandler have a correct values.

    DzViewRenderHandler *handler = new DzViewRenderHandler(old_handler->getSize(), old_handler->getStartingTime(), QString(""), true);

    QSize csize = old_handler->getSize();  Have the correct values, when the render button is fired. In the last second. So you can not show the camera dimensions for an Info panel for ex.

    The aspectRatio same. But actualy We can send the correct values from the old_handler.

    What I want to do? I added a small info panel  to the top of the options(Yalux options). And I would like to show the actual Camera name, and dimensions. 

    The Camera name easy to get from DzCamera. But Our added camera dimensions !!! nearly inpossible.

    But Your little snipet helped me thanks again! Realy nice. And working. Five extra line, so not a big something.

    At the moment I can write everything to the panel, what I wanted.

    And now I would like to add a Render queue. When I have a little time for that.

    First of all I want to clean the code. - I have some green patch after the lot of try :)-

    A check everything double. And when I fixed everything  I would like to send the .dll and the source for test on Your Nvidia system. If not problem for You.

    And last I am not a pro coder, this is a hobby for me. I can coding after my work. :) And I have never used c++ and visual studio so I am just learnig now.

    I think We do not realy need something else for this little plugin. Only the good material conversion. What is the most important. Because I bought the Reality plugin two years ago.

    But I just fighting with the materials for days, and I have never got a good result. So I am realy waiting for Your work with the materials, shaders, lights. :) And I know that is a terribile job.

    And thank You for Your help.

  • hcsaba68 said:

    .....

    You can see the script version of DzCamera have pixelsHeightpixelsWidth parameters. The SDK version do not.

    OK, I think I see what you are talking about now: the DzCamera objects have a group of Properties named "Dimensions".  You must enable "Use Local Dimensions" in order to see the sub-properties for Dimensions/PixelSize and Dimensions/AspectRatio.  Is this what you are talking about?  If so, you aren't able to access it with the SDK because the API is too old.  What you can do is use the Qt4.8 QMetaObject/QMetaMethod system (aka RTTI) to query the functions that are exposed to the script interpreter.  You will need to lookup the function name, function return type and arguments return types.  Of course, the script method will work too and sounds like you already have it implemented.  So it's probably unnecessary to use qmetaobject system unless you are having performance issues. 

    However, for your reference:

     

    A check everything double. And when I fixed everything  I would like to send the .dll and the source for test on Your Nvidia system. If not problem for You.

    Sorry, I don't have an Nvidia GPU.

     

    And last I am not a pro coder, this is a hobby for me. I can coding after my work. :) And I have never used c++ and visual studio so I am just learnig now.

    That's no problem.  Every expert must first start out as a beginner.  So far, it sounds like you are making a lot of progress and are learning very very fast!

    I think We do not realy need something else for this little plugin. Only the good material conversion. What is the most important. Because I bought the Reality plugin two years ago.

    But I just fighting with the materials for days, and I have never got a good result. So I am realy waiting for Your work with the materials, shaders, lights. :) And I know that is a terribile job.

    One of the biggest reasons why materials may not render correctly in LuxCoreRender is due to use of a non-Nvidia GPU and corresponding OpenCL driver/compiler.  If you do not have an Nvidia GPU, you should always render a reference image with LuxCoreRender set to PathCPU in addition to the PathOCL renderer.  It doesn't have to be high resolution, just enough resolution to make sure your GPU renderer is producing the same output as the CPU reference.  That way, you can make sure that any "fighting with materails for days" is not actually due to bugs with a non-Nvidia OpenCL driver/compiler.  Good luck.

     

  • Hi,

    I think You missunderstand Me.

    I DO NOT have any problem with Your conversions. I like Your plugin. This little plugin give Me hundred times better mutch to Iray, than Reality.

    I am just waiting for Your other implements like TopCoat support and Burn/Crush support and what You want to add more.

    And one test render comparison. 60 sec.

    Hi,

    Barefoot2-Compare.png
    1920 x 1080 - 1M
  • nonesuch00nonesuch00 Posts: 16,375
    edited December 2021

    OK, so I compiled the YaluxPlugin & the RenderKitReady plugin and the Yax is OK but I had to change the output path for the ReadyKitRenderer because I did not want to edit permissions on any of my system drive.

    I get this message at completion of the compile:

         Linking CXX shared library D:\Users\goat\Documents\Develop!repository\GitHub\ReadyKitRenderer\out\build\x64-Debug\readykitrenderer.dll

    but the file that is actually there is the readykitrenderer.lib which I suppose is actually the readykitrenderer.dll that didn't get renamed from readykitrenderer.lib for some reason. Is that right? I want to rename it & manually copy into the plugin directory so DAZ Studio. Sorry, I've been almost exclusively a UNIX developer.

    I notice the yaluxplug.dll is about 766kb and also has a yaluxplug.lib file that's only 8kb so for that reason I'm pretty sure the linking failed for the readykitrenderer.dll

    Post edited by nonesuch00 on
  • nonesuch00nonesuch00 Posts: 16,375

    yaluxplug: utility_classes.cpp 

    -315      ret_str += QString("\t\%1\n").arg(mixString);
    +315     ret_str += QString("\t\"%1\n").arg(mixString);

  • nonesuch00 said:

    OK, so I compiled the YaluxPlugin & the RenderKitReady plugin and the Yax is OK but I had to change the output path for the ReadyKitRenderer because I did not want to edit permissions on any of my system drive.

    I get this message at completion of the compile:

         Linking CXX shared library D:\Users\goat\Documents\Develop!repository\GitHub\ReadyKitRenderer\out\build\x64-Debug\readykitrenderer.dll

    but the file that is actually there is the readykitrenderer.lib which I suppose is actually the readykitrenderer.dll that didn't get renamed from readykitrenderer.lib for some reason. Is that right? I want to rename it & manually copy into the plugin directory so DAZ Studio. Sorry, I've been almost exclusively a UNIX developer.

    I notice the yaluxplug.dll is about 766kb and also has a yaluxplug.lib file that's only 8kb so for that reason I'm pretty sure the linking failed for the readykitrenderer.dll

    What is you goal?  If it's just to render with Lux or LuxCore, then you just need yaluxplug.dll.  The readykitrenderer is only needed for building new DzRender plugins.  And yes -- it sounds like it failed: lib files are static linked like .a files.  Renaming it won't work.

    BTW, if you are cloning from Github: my latest work is actually not in the main branch (update-2021) but in the experimental branches (currently experimental-4).  I've delayed merging it back into the main branch because I haven't re-implemented LuxRender pathway for legacy rendering support yet.

  • nonesuch00 said:

    yaluxplug: utility_classes.cpp 

    -315      ret_str += QString("\t\%1\n").arg(mixString);
    +315     ret_str += QString("\t\"%1\n").arg(mixString);

    If you are asking what happened, that's a typical Windows newline vs. carriage return vs. newline+carriage return editor behavior.  I try to set my code editors and Github Desktop to intercept and ignore that stuff so it isn't spammed all over the Github commits, but it's almost a lost cause.

  • nonesuch00nonesuch00 Posts: 16,375

    By the way, you may know, but Visual Studio 2022 & .NET 6 have been released to the general public now.

  • nonesuch00nonesuch00 Posts: 16,375
    edited December 2021

    danielbui78 said:

    nonesuch00 said:

    OK, so I compiled the YaluxPlugin & the RenderKitReady plugin and the Yax is OK but I had to change the output path for the ReadyKitRenderer because I did not want to edit permissions on any of my system drive.

    I get this message at completion of the compile:

         Linking CXX shared library D:\Users\goat\Documents\Develop!repository\GitHub\ReadyKitRenderer\out\build\x64-Debug\readykitrenderer.dll

    but the file that is actually there is the readykitrenderer.lib which I suppose is actually the readykitrenderer.dll that didn't get renamed from readykitrenderer.lib for some reason. Is that right? I want to rename it & manually copy into the plugin directory so DAZ Studio. Sorry, I've been almost exclusively a UNIX developer.

    I notice the yaluxplug.dll is about 766kb and also has a yaluxplug.lib file that's only 8kb so for that reason I'm pretty sure the linking failed for the readykitrenderer.dll

    What is you goal?  If it's just to render with Lux or LuxCore, then you just need yaluxplug.dll.  The readykitrenderer is only needed for building new DzRender plugins.  And yes -- it sounds like it failed: lib files are static linked like .a files.  Renaming it won't work.

    BTW, if you are cloning from Github: my latest work is actually not in the main branch (update-2021) but in the experimental branches (currently experimental-4).  I've delayed merging it back into the main branch because I haven't re-implemented LuxRender pathway for legacy rendering support yet.

    I fixed the problem, thanks.

    Post edited by nonesuch00 on
  • wargiswargis Posts: 139
    edited May 16

    Hello! I need your help with YaLux plugin. If the author of the plugin keeps on working, I have a couple of issues with lightning and materials, when exporting scene from Daz Studio. Maybe this little feedback will help to solve similar issues.

    My settings are - DS 4-20 Beta, Yalux v. 0.7, LuxCore 2.5 (I used both experimental pack and base LuxCore 2.5 with necessary files from sdk). Rendered with CPU only (AMD A-8 3510MX with AMD Radeon HD GPU). OpenCL (Hybrid) doesn't work because of the outdated OpenCL 1.1 version, so CPU was my best choice for that moment.

    1) First of all - if the plugin can convert Iray lightning with Environment and Tonemapping settings, which lights should I use - HDRI, EXR, or native Iray lighs (spotlights etc)? I made a series of quick tests with most bugless EXR and HDR lights I have (Click N Render IBL Sets for Iray, Iray Fantasy Lights by GolaM) and with similar single IBLs without additional lights. Here are some images from Iray and LuxCore with a simple vase (Diffuse only, Glossy Plastic shader) and with Genesis 8 Female Base with hair and clothing. The files attached to the post. What I saw right away - LuxCore renders fast and keeps all shadows and highlights but eats diffuse color. It understands the settings for human skin (G8), keeps old 3Delight diffuse texture, but destroys the glossy shader for the hair and ceramic\plastic objects. I did not tested it with metals and glassware yet. How to fix it? Increasing Diffuse Saturation in render options doesn't help at all.

    What about old LuxRender meshlights, sunlight etc (they come with old Reality 4 plugin for DS and I find them very handy). Can I convert old Lux-Reality lxs. scenes for LuxCore 2.5 or render from DS using this meshlights?

    2) At second - is there any native materials for LuxCore, and can it use old LuxRender materials? Before I had deal with LuxRender 1.3 - 1.5, which had the great library of materials, they worked a bit better than Iray ones. As I understand, Yalux is purposed for Iray materials only, so any other (3Delight, custom textures) must be converted to Iray?

    3) How to save the rendered picture from DS? When I cancel the render process, Yalux offers me to save the image in the chosen folder, but it gives me only blank black or unreadable files. The actual images fall into the Temp folder for renders (I named it DAZ_Temp), along with all PLYs and scenefiles and they are much smaller than render dimensions. How to set up the right way for exporting images - or how to export them from the main LuxCore window?  
    The second problem is that the images come too noisy from the start and do not clear much during the rendering (I had not this issue in any old Lux). What settings in LuxCore are responsible for denoising and improving the quality of renders?

    Thanks in advance for help - LuxRender was such a great tool and hope LuxCore will be much better, the more I feel it works much faster for my system and understands at least a half of settings in IRAY IBL lights. The old Luxrender 1.5, for example, couldn't use Click N Render IBL Sets because they are too dark by themselves without Tonemapping and Environment settings. I hope Yalux will be developed, similar to Luxus and Reality.

    Click N Render IBL Set_EXR01 TEST.jpg
    1064 x 1035 - 560K
    Click N Render IBL Set_EXR06 TEST.jpg
    1064 x 1035 - 640K
    FantasyLight10 Test EXR.jpg
    1064 x 1035 - 625K
    G8F_Click N Render IBL Set_EXR01 TEST.jpg
    1800 x 1165 - 1M
    Post edited by wargis on
  • VirgoRivalVirgoRival Posts: 30

    if i had to guess, i'm not sure if the setting for the IBL is the same in LuxCoreRender

    but in the code for LuxRender, when Paolo changed the defult code fro IBL use to
    LightGroup "IBL"
    LightSource "infinitesample"

    it fixed the issue of HDR's just fireflying

    I'm not sure if that is being utlized 

    as for the gloss shader
    in Luxrender
    I think everything works off a exponential scale as far as gloss
    So a gloss value of 50% isn't Half gloss to mirror coat
    its more of a real world respentation of gloss numbers where to even get close to mirror finish you are looking at 95% and above

    I do not know if its just the case that the plug in is taking raw numbers from iray settings
    glossness and roughness are inverted settings

    I'm also unsure if LuxCoreRender's shaders are even use Roughness because Reality only ever used Gloss/Spec rather then Rough/Metalness
    But i am WAY behind the curve

    Basically you have to thinking LuxCore terms and setting and not in Irays 

Sign In or Register to comment.