2
$\begingroup$

I am new to Blender,and I got a problem with animating boolean object with displacement texture.

In some frames it works, it cut the inside of the object and in some frames object is empty. No matter which option of texture I am tweaking - there always would be errors somewhere.

The only way when it’s working as it should is when I use soft textures (clouds eg.) But I need this “brickish” effect.

Things tested:

  • Added and applied more subdivisions to both objects, does not work.

  • Changing texture coordinates from “global” to “object” helps much
    (not completely) to this problem, but I need my surface changing

GIF first shows what’s happening, and then how the cutting mesh looks like.

enter image description here

I would appreciate any help.

$\endgroup$
0
$\begingroup$

Blender 2.8 is not stable right now, I do encounter these kinds of problem when rendering animation. It seems that some of the frame Blender render it with a wrong context.

Usually I will try to manually change the frame and render it as a fixed image. And if image is fine, I will use a script to do the animation rendering rather than ctrlF12.

bl_info = { "name":     "Auto Renderer", 
            "category": "Misc",
            "version":  "0.0.1",
            "Authur":   "hikariztw (Taiwan)",
            "blender":  (2, 80, 53),}

import bpy

class AutoRenderer(bpy.types.Operator):
    bl_idname = 'common.auto_renderer'
    bl_label = 'Auto Renderer'
    bl_options = {"REGISTER"}

    start_f: bpy.props.IntProperty( 
        name="Start Frame",
        default=1)
    end_f: bpy.props.IntProperty(
        name="End Frame",
        default=30)

    def invoke(self, context, event):
        return context.window_manager.invoke_props_dialog(self)

    def execute(self, context):
        self.file_path = context.scene.atrender_folder_path
        for i in range(self.start_f,self.end_f+1):
            bpy.context.scene.frame_set(i)
            bpy.data.scenes['Scene'].render.filepath = self.file_path+str(i)
            bpy.ops.render.render( write_still=True )
        return {'FINISHED'}

class AutoRenderPanel(bpy.types.Panel):
    """AutoRenderPanel"""
    bl_idname = "VIEW3D_PT_autorender"
    bl_label = "Auto Render"
    bl_category = "Render"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"

    def draw(self, context):
        layout = self.layout
        ###### RENDER
        layout.prop(context.scene, "atrender_folder_path")
        layout.operator(AutoRenderer.bl_idname,\
         icon='AUTO', text='Start Render')
        ######

classes = (
    AutoRenderer,
    AutoRenderPanel
)

def register():
    for klass in classes:
        bpy.utils.register_class(klass)
    bpy.types.Scene.atrender_folder_path = bpy.props.StringProperty(
        name="Directory",
        description="Where to render to",
        default="C:/test/where/",
        subtype = 'DIR_PATH')

def unregister():
    del bpy.types.Scene.atrender_folder_path
    for klass in classes:
        bpy.utils.unregister_class(klass)

if __name__ == "__main__":
    register()

the script add a panel in right of 3D-View panel AutoRender

Press the button and set what you want to render. The main window freezes during the rendering process, you can open system console to see the process and status.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.