Merge Geografts with <<Full Monty BBQ>> crashes Blender

Issue #1192 resolved
Rob Inters created an issue

Hello, I encountered this strange problem with <<Full Monty BBQ>> if I merge the Geografts and try to render the scene, Blender first friezes and than crashes.

My workflow:

  1. Import character with <<Import DAZ>> (BSDF (Cycles Only) selected)
  2. Merge Rigs. The interesting part here is, that if I render now, everything is fine.

3. Merge Geografts. And after merging, if I try to render now, Blender first friezes and than crashes. (I must also say that it actually kind of crashes my whole computer… )

I will also include the <<blender.crash.txt>> here, in case It could help:

# Blender 3.2.2, Commit date: 2022-08-02 18:15, Hash bcfdb14560e7
bpy.ops.object.delete(use_global=False, confirm=False)  # Operator
Deleted 1 object(s)  # Info
bpy.data.window_managers["WinMan"].(null) = 'BSDF'  # Property
bpy.data.window_managers["WinMan"].(null) = 'BSDF'  # Property
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.modifier_move_up(modifier="Armature SkinBinding")  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.modifier_move_up(modifier="Armature SkinBinding")  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.modifier_move_up(modifier="Armature SkinBinding")  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.modifier_move_up(modifier="Armature SkinBinding")  # Operator
bpy.ops.object.modifier_move_up(modifier="Armature SkinBinding")  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.posemode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.outliner.item_activate(deselect_all=True)  # Operator
bpy.ops.outliner.item_activate(deselect_all=True)  # Operator
bpy.ops.outliner.item_activate(deselect_all=True)  # Operator
bpy.ops.outliner.item_activate(extend=True, deselect_all=True)  # Operator
bpy.ops.outliner.item_activate(extend=True, deselect_all=True)  # Operator
bpy.ops.outliner.item_activate(extend=True, deselect_all=True)  # Operator
bpy.ops.outliner.item_activate(extend=True, deselect_all=True)  # Operator
bpy.data.window_managers["WinMan"].(null) = False  # Property
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.parent_clear(type='CLEAR_KEEP_TRANSFORM')  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.delete(use_global=False)  # Operator
bpy.ops.object.delete(use_global=False)  # Operator
bpy.ops.object.delete(use_global=False)  # Operator
bpy.ops.object.delete(use_global=False)  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)  # Operator
bpy.ops.outliner.item_activate(deselect_all=True)  # Operator
bpy.ops.outliner.item_activate(extend=True, deselect_all=True)  # Operator
bpy.ops.outliner.item_activate(extend=True, deselect_all=True)  # Operator
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.delete(type='VERT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.join()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.remove_doubles(threshold=1e-05)  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.delete(type='VERT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.join()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.remove_doubles(threshold=1e-05)  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.object.editmode_toggle()  # Operator
bpy.ops.mesh.select_all(action='DESELECT')  # Operator
bpy.ops.object.editmode_toggle()  # Operator

# backtrace
Exception Record:

ExceptionCode         : EXCEPTION_ACCESS_VIOLATION
Exception Address     : 0x00007FF6F0505F3E
Exception Module      : blender.exe
Exception Flags       : 0x00000000
Exception Parameters  : 0x2
    Parameters[0] : 0x0000000000000001
    Parameters[1] : 0x0000000000000000


Stack trace:
blender.exe         :0x00007FF6F0505F3E  Symbols not available


Loaded Modules :

# Python backtrace

Comments (26)

  1. Thomas Larsson repo owner

    This is the second recent bug report about crashes, the other is #1189. The plugin frequently uses operators, and it looks like something has changed with them. But what?

    In the crash report, is the most recent entry at the top or the bottom?

    Is this a problem only for Monty, which is a second-order geograft IIRC?

    Does the plugin write anything interesting in the terminal window? If you turn up verbosity to 5?

  2. Rob Inters reporter

    Hello Thomas, I try to answer as good as I can to your questions.

    Q: “In the crash report, is the most recent entry at the top or the bottom?”

    A: I don’t know to be honest, I just opened the Windows Explorer typed <%TEMP%> in to the path bar, found the crash report and copy&pasted it in here.

    Q: “Is this a problem only for Monty, which is a second-order geograft IIRC?”

    A: with the exception of <<Full Monty BBQ>>, I just worked with <<Golden Palace>>, <<Dicktator>>, <<Lickalicious>> and they seem to work just fine, no crashes or anything.

    Q: “Does the plugin write anything interesting in the terminal window? If you turn up verbosity to 5?”

    A: I started Blender from the Command Prompt with <<blender --verbose 5>> and this is what I got as I merged the Geografts and than tried to render:

    C:\Program Files\Blender Foundation\Blender 3.2>blender --verbose 5
    Read prefs: C:\Users\max\AppData\Roaming\Blender Foundation\Blender\3.2\config\userpref.blend
    
    Loading DAZ
    DAZ loaded
    Load settings from C:/Users/max/import-daz-settings-28x.json
    
    Loading MHX RTS
    MHX RTS loaded
    Reloading external rigs...
    Reloading external metarigs...
    Read blend: C:\Users\max\Desktop\Blender\Daz Models\Ann\0.AnnZero.blend
    Merge ['Full Monty BBQ'] to Futalicious Genitalia
    Info: Removed 42 vertice(s)
    Merge ['Futalicious Genitalia'] to E3D Ann Mesh
    Info: Removed 36 vertice(s)
    Calloc returns null: len=3969810432 in CDMLoopUV, total 84353112
    Calloc returns null: len=3969810432 in CDMLoopUV, total 84353112
    Calloc returns null: len=2646540288 in CDMLoop, total 84353112
    Calloc returns null: len=2646540288 in CDMLoop, total 1076806280
    Malloc returns null: len=24 in layerInterp_mdeformvert, total 1325873552
    Error   : EXCEPTION_ACCESS_VIOLATION
    Address : 0x00007FF6F0505F3E
    Module  : blender.exe
    Thread  : 000001f8
    Writing: C:\Users\max\AppData\Local\Temp\0.AnnZero.crash.txt
    Error loading symbols C:\Program Files\Blender Foundation\Blender 3.2\blender.pdb
            error:0x00000002
            size = 125915136
            base=0x00007FF6EF6A0000
    C:\Users\max\AppData\Local\Temp\blender_a08428\ empty directory
    
    C:\Program Files\Blender Foundation\Blender 3.2>
    

  3. Thomas Larsson repo owner

    Hm. Calloc and malloc are C functions that allocate memory, so this sounds like a Blender bug that has to do with memory allocation. Those can be really nasty. When I try the same I don’t get any errors, and the console output ends with the Info line above the first Calloc line. But my machine has lots of memory.

    Does the same thing happen in Blender 3.1? The crash in #1189 only appeared in Blender 3.2 and 3.3.

  4. Alessandro Padovani

    If you google this issue it seems related to the blender configuration files, or the drivers. Update the drivers, delete the blender configuration files and restart. It is a blender bug by the way, python itself is not supposed to handle this kind of errors.

  5. Rob Inters reporter

    So Thomas, I installed Blender 3.1.2 and tested it out and it’s the same, after merging the Geografts, I can not longer render anymore, my computer friezes and than Blender crashes. Basically I tested it now on 3.1, 3.2, 3.3.

    And Alessandro, I updated the Nvidia drivers, deleted the configuration files and the issue remains.

    I just would emphasize, that everything works fine on <<Golden Palace>>, <<Dicktator>>, <<Lickalicious>>, the issue just arises after I merge the <<Full Monty BBQ>> Geografts.

    Also, I noticed that this render issue "excludes" my GPU from the render, because when I open the Win Task Manager, I see that my CPU is at 100% and the GPU is at 0%, which kind of explains for me, why my computer freezes.

  6. Thomas Larsson repo owner

    Looking at the code I notice that it uses operators and context switching for some things that are not necessary. That could be the culprit. I will rewrite some code to avoid that, perhaps it will help. However, some operators are unavoidable and will remain.

  7. Rob Inters reporter

    I have this thread set up for email notifications, so if you make any changes, just let me know here and I'll gladly test everything on my end. Thank you very much for your support.

  8. Thomas Larsson repo owner

    Merge Geografts now uses fewer operators and less context switching. Not sure if it will help, since some operators are unavoidable. Anyway, things work for me as they did before.

  9. Rob Inters reporter

    Thomas, first and foremost, I apologize for not paying enough attention to detail. So I experimented a bit more and I now know what's causing the problem; it's not the <<Full Monty BBQ>> on its own, but the <<Pumping Pole Palette>> that I apply to the <<Futalicious Shell>>.

    My Workflow in Daz:

    1. Load Genesis 8.1 Basic Female
    2. Load <<1-Full Monty BBQ_Smart_GF8_1>> and <<2_Futalicious_Material Copy GF8_1>> on the character.
    3. Load the <<1-Banana Bar_BBQ>> (as seen in the screenshot above) on to the <<Futalicious Shell>>

    I'm very certain that if you replicate my workflow, you will encounter the same <<render issue>> as me.

    So, basically, the <<Full Monty BBQ>> works perfectly on my computer on its own, but when I apply the <<Pumping Pole Palette>> Blender crashes.

  10. Thomas Larsson repo owner

    Sorry, I misread your post. I thought the crash occurred when merging meshes, not when you render afterwards.

    I don’t have exactly the same versions of the assets as you have, but I have experienced render issues before. Eevee in particular can freeze the computer when it compiles the shader tree, if you have many large textures and limited memory. To reduce memory consumption you can turn on simplification in the render properties, or use the plugin’s tool that reduces texture size, cf.

    http://diffeomorphic.blogspot.com/2019/10/resizing-textures.html
    https://diffeomorphic.blogspot.com/p/materials-section-version-16.html

    Or use Cycles for rendering. It rarely hangs the computer.

  11. Rob Inters reporter

    Thomas, I always use Cycles, and <<reducing textures>> and <<simplifying>> did not help in this case, but it was still very useful information that I will use in the future.

    But now for the good news: I'm pretty certain that I've discovered the source of the <<render Issue>> and a solution.

    So basically, the <<Pumping Pole Palette>> adds a <<SubD Displacement>> Modifier to the <<Full Monty BBQ>> (see screenshot below)

    If I render now, everything works fine, because the <<SubD Displacement>> Modifier is just applied to the <<Full Monty BBQ>> (see previous screenshot)

    But after I merge the Geografts, the <<SubD Displacement>> Modifier is now applied to the whole Mesh (see screenshot below) and therefore it crashes Blender, if the scene is rendered in this state.

    So, my solution was, to bring down the <<Render Level>> from <<3>> to <<0>> in the <<SubD Displacement>> Modifier and after this, the <<render issue>> is resolved and everything works nicely.

    Now I have just one problem remaining, to overcome the problem, that the <<SubD Displacement>> Modifier is applied to the whole Mesh, I tried to <<apply>> the <<SubD Displacement>> Modifier with the <<Render Level>> of <<3>> before I merge the Geografts, but I get the following error: <<Modifier is disabled, skipping apply>>. Why do I get this error? I’m a bit confused here, because the Modifier is working, I can see it in my renders, by changing the <<Render Level>> from <<3>> (which adds more details) to <<0>> (which reduces the amount of details) for example.

  12. Thomas Larsson repo owner

    Aha. I added a new option to Merge Geografts that lets you ignore the extra subsurf modifier generated for SubD Displacement.

    The reason why GPU rendering is disabled seems to be that auto smoothing is enabled; at least that’s what the warning in the subsurf modifier says. Auto smoothing is turned on to make objects with hard edges look right, but it doesn’t make much sense if there is a subsurf modifier (of Catmull-Clark type), so in that case auto smoothing is now turned off.

  13. Thomas Larsson repo owner

    Applying the subsurf modifier is a bad idea, because it changes the vertex count. There won’t be any error messages, but only some of the vertices on the edge will be merged with the other mesh, because that doesn’t have enough vertices on the edge to match the subdivided geograft.

    Now, when you apply the subsurf modifier it uses the number of viewport layers, and since that is zero the modifier is disabled. The same thing happens if you turn on simplify in the render settings and set max subdivisions to zero.

  14. Alessandro Padovani

    @Thomas, I agree that autosmooth can be disabled with catmull subdivision. As for displacement, in this case we should use two modifiers, one catmull subd for the smoothed subdivision, and one simple subd for the displacement map that will be used by cycles for rendering, while eevee can’t render displacement. Beware that the simple subd adds up to the catmull subd.

    I believe we already handle the displacement with a separate simple subdivision but I’m not sure about geografts.

  15. Thomas Larsson repo owner

    Yes, the monty mesh looks like that when imported. The problem is that after merging, the simple subsurf modifier was extended to the entire mesh, which apparently caused Rob’s render to hang. The new option makes keeping the simple subsurf optional.

    But it is quite possible that it was the combination of two subsurf modifiers and auto smoothing that was the culprit. So maybe the new option should be disabled by default. Of course, if one is aware of the problem it is just as easy to delete the modifier afterwards.

  16. Rob Inters reporter

    Thomas, I would just emphasize, that it was the <<Pumping Pole Palette>> which added the extra <<SubD Displacement>> Modifier to the <<Full Monty BBQ>> and this was extended to the whole Mesh. But maybe this is what you meant, in your previous post.

    I tested it out now, and if the <<SubD Displacement>> Box is not checked, it renders nicely and everything works.

    But what happens with the <<SubD Displacement>> Render Level, if the Box is not checked, is it applied before it merges the Geografts, or it basically just ignores the impact of <<SubD Displacement>> Render Level in regards to the <<Full Monty BBQ>> and removes it before the merge?

  17. Thomas Larsson repo owner

    The modifier is ignored. As I wrote above, you cannot apply it because geografts can only be merged if the vertex count is correct.

  18. Rob Inters reporter

    I got it now, thank you very much Thomas and Alessandro for helping me to resolve my render issue. Have a wonderful day )

  19. Alessandro Padovani

    Unfortunately I can’t do any testing atm. But ideally the simple subdivision should be kept because it is needed for the displacement details. Then if it causes render issues for any reason it is probably a blender bug.

    note. The fact that the simple subdivision is extended to the whole mesh when merging is just normal. That is, in daz studio the displacement is per material, while in blender it is per object so if any material has displacement it has to be propagated. Or you may try adaptive subdivision instead but it is a experimental feature yet.

  20. Rob Inters reporter

    Alessandro, I tested the rendering with <<Adaptive Subdivision>> enabled (see screenshot below) but the result is the same, if I try to render the scene, with the <<SubD Displacement>> enabled after I merged the Geografts, Blender crashes.

    For now, just Thomas's implemented <<SubD Displacement>> Checkbox, which needs to be unchecked, works in my case. Or if I go the manual route and simple reduce the <<Render Level>> of <<SubD Displacement>> from <<3>> to <<0>> after I merged the Geografts.

  21. Alessandro Padovani

    We recently removed the simple subdivision because it creates artifacts under some conditions. I was able to render monty with pumping pole without any issue, test scene included monty.duf. If you have nothing to add we can mark as resolved.

    note. The displacement subdivision added by pumping pole is very extreme, a level 7, this will be clamped by simplify or the max level in the global options. If you leave it at 7 it is expected that you may go out of memory and freeze your system. Personally I use 3 as max subdivision that’s enough for HD figures and displacement details.

  22. Rob Inters reporter

    Alessandro, I just tested it with SubD Displacement Level “7” and “3” and it renders well in both cases. (see screenshot below)

    “We recently removed the simple subdivision” So, in my case, the <<SubD Displacement>> was the cause of the render-crash; now that it has been removed in the most recent Diffeo version, everything renders properly.

    And thank you very much for pointing out that the <<Pumping Pole Palette>> adds a SubD Displacement Level of “7”, I will also use a lower Level in the future.

  23. Log in to comment