FreeCAD / FreeCAD-render

The Render workbench
Other
156 stars 33 forks source link

Textures disappear in Cache folder #438

Closed 777Raim closed 1 month ago

777Raim commented 2 months ago

Hello everyone!

An error occurs when trying to re-render or save project with textures after first render: Screenshot from 2024-08-19 14-13-11

Screenshot from 2024-08-19 14-28-17

First image disappeared.

At Cache folder my textures is disappeared all time which leads to errors. And not all textures disappear, only some.

It doesn't depend on the render engine.

OS: KDE Flatpak runtime (GNOME/gnome)
Word size of FreeCAD: 64-bit
Version: 0.21.2.33771 (Git)
Build type: Release
Branch: (HEAD detached at b9bfa5c)
Hash: b9bfa5c5507506e4515816414cd27f4851d00489
Python 3.11.7, Qt 5.15.10, Coin 4.0.0, Vtk 8.2.0, OCC 7.6.3
Locale: English/United States (en_US)
Installed mods: 
  * Render 2024.8.4
  * ocl
  * A2plus 0.4.65
  * opencamlib.libs
  * ArchTextures
  * sheetmetal 0.4.24
  * FeedsAndSpeeds 0.5.0
  * opencamlib-2023.1.11.dist-info
  * Glass
  * fasteners 0.5.26
howetuft commented 2 months ago

Hello, Could you please provide the file(s) you import to get the material that leads to the bug? I need to reproduce on my own system in order to help you... Thanks!

777Raim commented 2 months ago

Hello! Thanks for reply

Interesting thing: when I use this materials at single object at project (like box from Part WB), all works. But if project has several parts (connected with a2plus WB + Fasteners) an error occurs

While Rendering at Log has this:

09:36:51  [Render][Objstrings] /!\ OBJECTS EXPORT ERROR /!\
09:36:51  Traceback (most recent call last):
09:36:51    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/project.py", line 929, in _get_objstrings_worker
    objstrings = list(
                 ^^^^^
09:36:51    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/project.py", line 930, in <genexpr>
    it.chain.from_iterable(f.result() for f in futures)
                           ^^^^^^^^^^
09:36:51    File "/usr/lib/python3.11/concurrent/futures/_base.py", line 449, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
09:36:51    File "/usr/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
09:36:51    File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
09:36:51    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/project.py", line 922, in worker
    return [get_rdr_string(v) for v in chunk if v is not None]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
09:36:51    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/project.py", line 922, in <listcomp>
    return [get_rdr_string(v) for v in chunk if v is not None]
            ^^^^^^^^^^^^^^^^^
09:36:51    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/rdrhandler.py", line 370, in get_rendering_string
    return RendererHandler._render_object(self, name, view)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
09:36:51    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/rdrhandler.py", line 499, in _render_object
    rends = renderables.get_renderables(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
09:36:51    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/renderables.py", line 158, in get_renderables
    renderables = _get_rends_from_a2plus(obj, name, mat, mesher, **kwargs)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
09:36:51    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/renderables.py", line 381, in _get_rends_from_a2plus
    shutil.copyfile(org_path, dst_path)
09:36:51    File "/usr/lib/python3.11/shutil.py", line 256, in copyfile
    with open(src, 'rb') as fsrc:
         ^^^^^^^^^^^^^^^
09:36:51  FileNotFoundError: [Errno 2] No such file or directory: '/home/raim/.var/app/org.freecadweb.FreeCAD/cache/FreeCAD/Cache/FreeCAD_Doc_a5cfb244-8178-4020-a387-bfc88aa722ef_406293_11132/Aluminum_Seamless_LIGHT.jpg'

Here the Test Project with textures (main file is assemble.FCStd)

howetuft commented 2 months ago

Yes, you're right, there was a bug in my code with A2Plus. It should be fixed now (eb89b797da09ad1e591acd51e0a1aa68cd38fbd4), can you confirm?

777Raim commented 2 months ago

Thanks a bunch! All works like a charm!

Now there’s another problem: in projects with a lot of details, when Rendering starts, the FreeCAD freezes (and it doesn’t matter on Linux (Flatpak) or Windows)

howetuft commented 2 months ago

How long does it remain frozen? Aren't there any messages printed in the report view?

777Raim commented 2 months ago

About 2 hours.

Log:

[Render][Objstrings] STARTING OBJECTS EXPORT
[Render][Objstrings] 35 chunks: 0 heavy - 35 light (size: 1)
[Render][Objstrings] 'assemble#b_part_1_001_': Exporting
[Render][Objstrings] 'assemble#b_part_2_001_': Exporting
[Render][Objstrings] 'assemble#Screw': Exporting
Document with the UUID 'a04561f2-bc2b-4bec-8862-06c47dd88e54' already exists, change to 'a080c3c9-147a-4212-a4b9-bf162a582f32'
[Render][Objstrings] 'assemble#b_part_3_001_': Exporting
[Render][Objstrings] 'assemble#Screw001': Exporting
[Render][Objstrings] 'assemble#Screw002': Exporting
Document with the UUID '337f1ee7-9e45-4577-9a50-ceae7a155f65' already exists, change to '78df6a53-799f-43dd-bd28-fe71ed17a3f9'
[Render][Objstrings] 'assemble#Screw003': Exporting
[Render][Object] 'assemble#b_part_1_001_': A2P - Opening '/home/raim/Documents/FreeCAD RENDER TEST/2/part_1.FCStd'
[Render][Objstrings] 'assemble#Screw004': Exporting
[Render][Objstrings] 'assemble#Screw005': Exporting
[Render][Objstrings] 'assemble#Screw006': Exporting
[Render][Objstrings] 'assemble#Screw007': Exporting
[Render][Objstrings] 'assemble#Screw008': Exporting
[Render][Objstrings] 'assemble#Screw009': Exporting
[Render][Objstrings] 'assemble#Screw010': Exporting
[Render][Objstrings] 'assemble#Screw011': Exporting
[Render][Objstrings] 'assemble#Screw012': Exporting
[Render][Objstrings] 'assemble#Screw013': Exporting
[Render][Objstrings] 'assemble#Screw014': Exporting
[Render][Objstrings] 'assemble#Screw015': Exporting
[Render][Objstrings] 'assemble#Screw016': Exporting
[Render][Objstrings] 'assemble#Screw017': Exporting
[Render][Objstrings] 'assemble#Screw018': Exporting
[Render][Objstrings] 'assemble#Screw019': Exporting
[Render][Objstrings] 'assemble#Screw020': Exporting
[Render][Objstrings] 'assemble#Screw021': Exporting
[Render][Objstrings] 'assemble#Screw022': Exporting
[Render][Objstrings] 'assemble#Screw023': Exporting
[Render][Objstrings] 'assemble#Screw024': Exporting
[Render][Objstrings] 'assemble#Screw025': Exporting
[Render][Objstrings] 'assemble#Screw026': Exporting
[Render][Objstrings] 'assemble#Screw027': Exporting
[Render][Objstrings] 'assemble#Screw028': Exporting

Every time stuck at random part:

[Render][Objstrings] STARTING OBJECTS EXPORT
[Render][Objstrings] 35 chunks: 0 heavy - 35 light (size: 1)
[Render][Objstrings] 'assemble#b_part_1_001_': Exporting
[Render][Objstrings] 'assemble#b_part_2_001_': Exporting
[Render][Objstrings] 'assemble#Screw': Exporting
Document with the UUID 'a04561f2-bc2b-4bec-8862-06c47dd88e54' already exists, change to '37e27a5a-5a2b-4904-b6c4-5aec55a4ae7d'
[Render][Objstrings] 'assemble#b_part_3_001_': Exporting
[Render][Objstrings] 'assemble#Screw001': Exporting
[Render][Objstrings] 'assemble#Screw002': Exporting
[Render][Objstrings] 'assemble#Screw003': Exporting
[Render][Object] 'assemble#b_part_1_001_': A2P - Opening '/home/raim/Documents/FreeCAD RENDER TEST/2/part_1.FCStd'
Document with the UUID '337f1ee7-9e45-4577-9a50-ceae7a155f65' already exists, change to '4f3b6b67-ffd1-4e0e-ab63-d3a26eca9b08'
[Render][Objstrings] 'assemble#Screw004': Exporting
[Render][Objstrings] 'assemble#Screw005': Exporting
[Render][Objstrings] 'assemble#Screw006': Exporting
[Render][Objstrings] 'assemble#Screw007': Exporting
[Render][Objstrings] 'assemble#Screw008': Exporting
[Render][Objstrings] 'assemble#Screw009': Exporting
[Render][Objstrings] 'assemble#Screw010': Exporting
[Render][Objstrings] 'assemble#Screw011': Exporting
[Render][Objstrings] 'assemble#Screw012': Exporting
[Render][Objstrings] 'assemble#Screw013': Exporting
[Render][Objstrings] 'assemble#Screw014': Exporting
[Render][Objstrings] 'assemble#Screw015': Exporting
[Render][Objstrings] 'assemble#Screw016': Exporting
[Render][Objstrings] 'assemble#Screw017': Exporting
[Render][Objstrings] 'assemble#Screw018': Exporting
[Render][Objstrings] 'assemble#Screw019': Exporting
[Render][Objstrings] 'assemble#Screw020': Exporting
[Render][Objstrings] 'assemble#Screw021': Exporting
[Render][Objstrings] 'assemble#Screw022': Exporting
[Render][Objstrings] 'assemble#Screw023': Exporting
[Render][Objstrings] 'assemble#Screw024': Exporting
[Render][Objstrings] 'assemble#Screw025': Exporting
[Render][Objstrings] 'assemble#Screw026': Exporting
[Render][Objstrings] 'assemble#Screw027': Exporting
[Render][Objstrings] 'assemble#Screw028': Exporting
[Render][Objstrings] 'assemble#Screw029': Exporting
[Render][Objstrings] 'assemble#Screw030': Exporting
[Render][Objstrings] 'assemble#Camera': Exporting
[Render][Object] 'assemble#b_part_2_001_': A2P - Opening '/home/raim/Documents/FreeCAD RENDER TEST/2/part_2.FCStd'
Document with the UUID '37ae00d8-4009-4358-9832-07ff0e636a9c' already exists, change to 'f3a74d64-61bd-42c6-8fab-e8bc6312a67c'

Updated Project here.

howetuft commented 1 month ago

Hello,

I tried several times but I did not manage to reproduce your issue. I get a result in a few seconds/minutes with no abnormal hang:

image

Would it be a memory problem?

777Raim commented 1 month ago

Hello!

Tried on Windows 10 with last FreeCAD release:

OS: Windows 10 build 19044
Word size of FreeCAD: 64-bit
Version: 0.21.2.33771 (Git)
Build type: Release
Branch: releases/FreeCAD-0-21
Hash: b9bfa5c5507506e4515816414cd27f4851d00489
Python 3.8.10, Qt 5.15.2, Coin 4.0.1, Vtk 8.2.0, OCC 7.6.3
Locale: Russian/Russia (ru_RU)
Installed mods: 
  * A2plus
  * Bit
  * fasteners
  * Library
  * Render 2024.8.4
  * Shape

Same behavior - process doesn't respond. What version do you have?

Screenshot from 2024-09-03 10-33-54

Screenshot from 2024-09-03 10-59-31

Would it be a memory problem?

I have 32Gb of RAM on Linux and 24Gb on Windows PC. I have no problem with RAM overhead while running Render at FreeCAD.

Sometimes Render works fine - all objects are exported and Render works. But if I closed Project and opened it again or create new Render schema at opened Project - I have no guarantees that all be work correct

howetuft commented 1 month ago

Hello, Very puzzling... Are there any other symptoms, like CPU increase?

howetuft commented 1 month ago

Maybe another way: could you please find 'Enable Numpy if available (experimental)' in Render Preferences, check the box and try again to make FreeCAD hang?

777Raim commented 1 month ago

Hello! Enabling Numpy helps. Many thanks to You! But now at log I have this:

......

12:20:25  [Render][Objstrings] 'assemble#Camera': Exporting
12:20:25  [Render][Objstrings] 'assemble#PointLight': Exporting
12:20:30  [Render][Objstrings] /!\ OBJECTS EXPORT ERROR /!\
12:20:30  Traceback (most recent call last):
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/project.py", line 930, in _get_objstrings_worker
    objstrings = list(
                 ^^^^^
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/project.py", line 931, in <genexpr>
    it.chain.from_iterable(f.result() for f in futures)
                           ^^^^^^^^^^
12:20:30    File "/usr/lib/python3.11/concurrent/futures/_base.py", line 449, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
12:20:30    File "/usr/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
12:20:30    File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/project.py", line 923, in worker
    return [get_rdr_string(v) for v in chunk if v is not None]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/project.py", line 923, in <listcomp>
    return [get_rdr_string(v) for v in chunk if v is not None]
            ^^^^^^^^^^^^^^^^^
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/rdrhandler.py", line 370, in get_rendering_string
    return RendererHandler._render_object(self, name, view)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/rdrhandler.py", line 526, in _render_object
    material = get_mat(
               ^^^^^^^^
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/rendermaterial.py", line 234, in get_rendering_material
    res = RenderMaterial.build_standard(shadertype, values, doc)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/rendermaterial.py", line 305, in build_standard
    value = cast_function(val, doc, objcol)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/rendermaterial.py", line 955, in _casttexscalar
    return _make_rendertexture(imageid, doc, scalar)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12:20:30    File "/home/raim/.var/app/org.freecadweb.FreeCAD/data/FreeCAD/Mod/Render/./Render/rendermaterial.py", line 900, in _make_rendertexture
    file = texobject.getPropertyByName(imageid.image)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
12:20:30  AttributeError: 'NoneType' object has no attribute 'getPropertyByName'
12:20:30  Starting rendering...
"/home/raim/Downloads/appleseed-2.0.0-beta-0-g5cff7b96b-linux64-gcc48/appleseed/bin/appleseed.cli" --output "/home/raim/.var/app/org.freecadweb.FreeCAD/cache/FreeCAD/Cache/FreeCAD_Doc_5c61dfa4-1910-4e71-95f6-3b91610c0a54_406293_2/Project_output.png"   "/home/raim/.var/app/org.freecadweb.FreeCAD/cache/FreeCAD/Cache/FreeCAD_Doc_5c61dfa4-1910-4e71-95f6-3b91610c0a54_406293_2/Project.appleseed"

.........

12:20:31  2024-09-04T09:20:31.827310Z <001>   182 MB info    | rendering finished in 1.073 second.
12:20:31  libpng warning: zstream not in use (internal error)
12:20:31  libpng error: stream error
12:20:31  2024-09-04T09:20:31.865933Z <001>   190 MB error   | failed to write image file /home/raim/.var/app/org.freecadweb.FreeCAD/cache/FreeCAD/Cache/FreeCAD_Doc_5c61dfa4-1910-4e71-95f6-3b91610c0a54_406293_2/Project_output.png: PNG library error.
12:20:31  2024-09-04T09:20:31.866109Z <001>   190 MB info    | deleting assembly tree...
12:20:31  Exiting rendering - Return code: 1
howetuft commented 1 month ago

Enabling Numpy helps. Many thanks to You!

I really should enable it by default, actually.

But now at log I have this:

Yes, there is a flaw in your file: Right-click on RenderIron material and select Edit Render Settings Scroll down to Normal section: you have activated Use texture but you haven't selected any texture - that can't do. Either provide a texture or select Don't use. (Well, I admit the error message is neither explicit nor user friendly).

777Raim commented 1 month ago

Yes, you're right. But now everything works! I'm glad! p.s. It would be very helpful to add an Error message dialog to prevent the same issues in a future.

howetuft commented 1 month ago

Hello, Thank you! I've added a warning when there is an error in material definition and Numpy is now enabled by default (on dev branch at the moment...)