text:
How to make a custom tree view similar to Outliner?
I want to create a custom tree view similar to Outliner.
How can I parent the Sub Group to Group and Item to Sub Group?
So the hierarchy should be like this: Group > Sub Group > Item
Also, I want to expand and collapse the view.

import bpy
from bpy.types import Operator, UIList, PropertyGroup
from bpy.props import *
import uuid

class XX_PG_item(PropertyGroup):
    use_hide: BoolProperty(
        name="Hide",
        default=False,
    )

    type: EnumProperty(
        name="Item Type",
        items=(
            ("ITEM", "Item", ""),
            ("GROUP", "Group", ""),
            ("SUB_GROUP", "Sub Group", ""),
        ),
    )

    label: StringProperty()

    parent: StringProperty()

    use_expand: BoolProperty(
        name="Expand",
        default=False,
    )

class SCENE_PG_prop(PropertyGroup):

    items: CollectionProperty(type=XX_PG_item)
    active_item_index: IntProperty(name="Active item index")

class XX_UL_item(UIList):
    def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
        row = layout.row(align=True)

        if item.parent:
            row.label(text="", icon="BLANK1")

        row.prop(item, "use_hide", text="", icon="HIDE_ON" if item.use_hide else "HIDE_OFF", emboss=False)

        if item.type == "GROUP":
            row.prop(item, "label", text="", icon="OUTLINER_COLLECTION", emboss=False)
            row.prop(item, "use_expand", text="", icon="DOWNARROW_HLT" if item.use_expand else "RIGHTARROW", emboss=False)
        elif item.type == "SUB_GROUP":
            row.prop(item, "label", text="", icon="GROUP", emboss=False)
            row.prop(item, "use_expand", text="", icon="DOWNARROW_HLT" if item.use_expand else "RIGHTARROW", emboss=False)
        else:
            row.prop(item, "label", text="", emboss=False)
            # row.prop(item, "parent", text="parent", emboss=False)

class XX_OT_group_add(Operator):
    """Add a new item group"""

    bl_label = "Add Item Group"
    bl_idname = "xx.group_add"
    bl_options = {"INTERNAL"}

    def execute(self, context):
        prop = context.scene.prop

        item = prop.items.add()
        prop.active_item_index = len(prop.items) - 1

        uid = uuid.uuid4().hex[:7]
        item.name = f"group_{uid}"
        item.label = "Group"
        item.type = "GROUP"
        return {"FINISHED"}

class XX_OT_sub_group_add(Operator):
    """Add a new item sub group"""

    bl_label = "Add Item Sub Group"
    bl_idname = "xx.sub_group_add"
    bl_options = {"INTERNAL"}

    def execute(self, context):
        prop = context.scene.prop

        item = prop.items.add()
        prop.active_item_index = len(prop.items) - 1

        uid = uuid.uuid4().hex[:7]
        item.name = f"sub_group_{uid}"
        item.label = "Sub Group"
        item.type = "SUB_GROUP"
        return {"FINISHED"}

class XX_OT_item_add(Operator):
    """Add a new item"""

    bl_label = "Add Item"
    bl_idname = "xx.item_add"
    bl_options = {"INTERNAL"}

    def execute(self, context):
        prop = context.scene.prop

        item = prop.items.add()
        uid = uuid.uuid4().hex[:7]
        item.name = f"item_{uid}"
        item.label = "Item"
        item.type = "ITEM"

        if prop.items and (active_item := prop.items[prop.active_item_index]):
            if active_item.type == "GROUP":
                item.parent = active_item.name
            elif active_item.parent:
                item.parent = active_item.parent

        prop.active_item_index = len(prop.items) - 1
        return {"FINISHED"}

class XX_OT_item_remove(Operator):
    """Remove the active item"""

    bl_label = "Remove Item"
    bl_idname = "xx.item_remove"
    bl_options = {"INTERNAL"}

    @classmethod
    def poll(cls, context):
        prop = context.scene.prop
        return prop.items

    def execute(self, context):
        prop = context.scene.prop

        prop.items.remove(prop.active_item_index)
        prop.active_item_index = min(max(0, prop.active_item_index - 1), len(prop.items) - 1)
        return {"FINISHED"}

# And now we can use this list everywhere in Blender. Here is a small example panel.
class UIListPanelExample(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""

    bl_label = "UIList Panel"
    bl_idname = "OBJECT_PT_ui_list_example"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "Test"

    def draw(self, context):
        layout = self.layout
        prop = context.scene.prop

        row = layout.row()
        row.template_list(
            "XX_UL_item",
            "",
            dataptr=prop,
            propname="items",
            active_dataptr=prop,
            active_propname="active_item_index",
            rows=5,
        )
        col = row.column(align=True)
        col.operator("xx.group_add", text="", icon="OUTLINER_COLLECTION", emboss=True)
        col.operator("xx.sub_group_add", text="", icon="GROUP", emboss=True)
        col.operator("xx.item_add", text="", icon="COLLAPSEMENU", emboss=True)

        col.separator()
        col.operator("xx.item_remove", text="", icon="TRASH", emboss=True)

classes = (
    XX_PG_item,
    SCENE_PG_prop,
    XX_UL_item,
    XX_OT_group_add,
    XX_OT_sub_group_add,
    XX_OT_item_add,
    XX_OT_item_remove,
    UIListPanelExample,
)

def register():
    for cls in classes:
        bpy.utils.register_class(cls)

    bpy.types.Scene.prop = bpy.props.PointerProperty(type=SCENE_PG_prop)

def unregister():
    for cls in classes:
        bpy.utils.unregister_class(cls)

    del bpy.types.Scene.prop

if __name__ == "__main__":
    register()

I do not think? there is native support for nested tree views in the current phyton api. You could do something like Conjure SDF and just fake it by offsetting icons/text depending on the current place in the hierarchy.

Offical support for tree views with nesting might come after greasy pencil 3.0, since it has a new tree view interface that could perhaps be exposde in the phyton api, if enought people request it.
Edit - Also, I think the new bone collections is using the new tree UI as well, so I hope one day that they add it to python.


text:
How to align the arc with the coords?
I want to align the arc with the coords. It should follow the angle when I change the middle point.

import bpy
import gpu
from gpu_extras.batch import batch_for_shader
from mathutils import Vector
from math import cos, sin, radians, degrees, atan2, acos

coords = [Vector((-1, -1, 1)), Vector((1, -1, -1)), Vector((1, 1, 1))]
colors = [(0, 0, 0, 1)] * len(coords)

def draw():
    shader = gpu.shader.from_builtin("POLYLINE_SMOOTH_COLOR")
    batch = batch_for_shader(shader, "LINE_STRIP", {"pos": coords, "color": colors})
    shader.uniform_float("lineWidth", 0.8)
    batch.draw(shader)

    # Draw arc
    line = coords[2] - coords[0]
    start_vec = (coords[0] - coords[1]).normalized()
    end_vec = (coords[2] - coords[1]).normalized()
    angle = degrees(acos(max(min(start_vec.dot(end_vec), 1.0), -1.0)))
    radius = min(bpy.context.space_data.region_3d.view_distance / (angle / 10), 1)

    if 0 < angle != 180:
        start_angle = degrees(atan2(end_vec.y, end_vec.x))
        end_angle = degrees(atan2(start_vec.y, start_vec.x))
        draw_arc(coords[1], radius, start_angle, end_angle)

def draw_arc(center, radius, start_angle, end_angle, color=(0, 0, 0, 1), line_width=0.8):
    coords = [(center.x + radius * cos(radians(angle % 360)), center.y + radius * sin(radians(angle % 360)), center.z)
              for angle in (range(int(start_angle), int(end_angle)) if start_angle < end_angle else range(int(start_angle), int(end_angle) + 360))]

    shader = gpu.shader.from_builtin("POLYLINE_SMOOTH_COLOR")
    colors = [color] * len(coords)
    batch = batch_for_shader(shader, "LINE_STRIP", {"pos": coords, "color": colors})
    shader.bind()
    shader.uniform_float("lineWidth", line_width)
    batch.draw(shader)

bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')

After running the example and refreshing the viewport, nothing is displayed (it does not work, old preference import to 4.3). But the factory settings is work, I think this is a internal bugs.

The main issue is that you need to treat it as a 3d arc, not a 2d arc.
So you need to find a local coordinate system (in my code, given by localX, localY, localZ unit, orthogonal and right-hand-ruled vectors) where Z is the normal of the arc's plane.
Work the angles in the local 2d system and convert back:
import bpy
import gpu
from gpu_extras.batch import batch_for_shader
from mathutils import Vector, Matrix
import math
from math import cos, sin, radians, degrees, atan2, acos
import numpy as np

coords = [Vector((1, -1, -1)), Vector((0, 0, 1)), Vector((-1, 1, -1))]
colors = [(0, 0, 0, 1)] * len(coords)

def draw():

    shader = gpu.shader.from_builtin("POLYLINE_SMOOTH_COLOR")
    batch = batch_for_shader(shader, "LINE_STRIP", {"pos": coords, "color": colors})
    shader.uniform_float("lineWidth", 0.8)
    batch.draw(shader)

    #draw arc

    #angle steps of 1 degree
    angleStep = math.pi / 180.0

    #gets center, radius and local coordinate system vectors
    cx, cy, cz, r, startAngle, endAngle, localX, localY, localZ = getArcLocalParams(*coords)

    #gets coordinates in the local system
    arcCoords = getArcLocalCoords(cx, cy, cz, r, startAngle, endAngle, angleStep)

    #converts coordinates to global
    arcCoords = convertLocalToGlobal(arcCoords, localX, localY, localZ)

    # Draw arc
    draw_arc(arcCoords)

def draw_arc(coords, color=(0, 0, 0, 1), line_width=0.8):

    coords = list([(x,y,z) for x,y,z in coords])

    shader = gpu.shader.from_builtin("POLYLINE_SMOOTH_COLOR")
    colors = [color] * len(coords)
    batch = batch_for_shader(shader, "LINE_STRIP", {"pos": coords, "color": colors})
    shader.bind()
    shader.uniform_float("lineWidth", line_width)
    batch.draw(shader)

bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')

def getArcLocalParams(p1, p2, p3):

    #helpers
    v1 = p2 - p1
    v2 = p3 - p1 #full cord of the arc

    #local axes (where Z is normal to the arc's plane)
    localX = v2.normalized() #local X is aligned with the cord
    localZ = v1.cross(v2).normalized()
    localY = localZ.cross(localX)

    # arc points in local coordinates
    l1x = localX.dot(p1)
    l1y = localY.dot(p1)

    l2x = localX.dot(p2)
    l2y = localY.dot(p2)

    l3x = localX.dot(p3)
    l3y = localY.dot(p3)

    # in theses local coordinates, all points have the same localZ
    # including the center Z
    cz = localZ.dot(p1)

    #center X is in the center of the cord
    cx = (l1x + l3x) / 2.0

    #this commented section is just equation solving for creating the code
    #center Y given by len(p-center)² = r² for all points
    #(l1x - cx)**2 + (l1y - cy)**2 = r**2
    #(l2x - cx)**2 + (l2y - cy)**2 = r**2
    #no need for a third equation since we already have centerX = cx

    #expanding the equations
    #l1x ** 2 - 2*l1x * cx  + l1y**2 - 2*l1y*cy =
    #l2x ** 2 - 2*l2x * cx  + l2y**2 - 2*l2y*cy

    #isolating cy
    #l1x**2 - l2x**2 - 2*cx*(l1x-l2x) +l1y**2 - l2y**2  = 2*cy*(l1y-l2y)

    xDiff = l1x - l2x #helper

    cy = (0.5 * (l1x + l2x) * xDiff - cx*xDiff) / (l1y-l2y) + 0.5*(l1y+l2y)
    r = math.sqrt((l1x - cx)**2 + (l1y - cy)**2)

    #angles
    startAngle, endAngle = getAngleSpan(l1x, l1y, l3x, l3y, cx, cy)

    return cx, cy, cz, r, startAngle, endAngle, localX, localY, localZ

def getAngleSpan(localX1, localY1, localX3, localY3, centerX, centerY):
    startAngle = math.atan2(localY1 - centerY, localX1 - centerX)
    endAngle = math.atan2(localY3 - centerY, localX3 - centerX)

    # we are working counterclockwise (math standard),
    #if end < start, instead of flipping we adjust the end
    # (or we may get the wrong portion of the arc)
    if endAngle < startAngle:
        endAngle += 2 * math.pi

    return startAngle, endAngle

#creates an array of local coordinates
#very similar to your list of coordinates, but with an optimized library
#returns an array with shape (point_count, 3)
def getArcLocalCoords(cx, cy, cz, r, start_angle, end_angle, angleStep):

    angles = np.arange(start_angle, end_angle + angleStep, angleStep)
    sins = np.sin(angles)
    coss = np.cos(angles)

    xs = r * coss + cx
    ys = r * sins + cy
    zs = np.full(xs.shape, cz)

    coords = np.stack([xs, ys, zs], axis=1)

    return coords

# converts local coordinates into global coordinates
# a coordinate conversion without scaling and translation is just
# a 3d matrix multiplication
def convertLocalToGlobal(coords, localX, localY, localZ):

    converter = np.stack([localX, localY, localZ], axis=1)
    converter = converter.reshape((1,3,3))

    #for matrix multiplication, vectors are [3,1] matrices
    coords = coords.reshape((-1,3,1))

    result = np.matmul(converter, coords)
    result = result.reshape((-1,3)) #remove the dimension we added before

    return result

draw()

Special thanks to the first answer here: https://math.stackexchange.com/questions/1076177/3d-coordinates-of-circle-center-given-three-point-on-the-circle

Geometry nodes version
Just for fun

The code could probably be much simpler if you looked at the C++ code implementation of the "Arc" node :D

@MarkusvonBroady, don't give me ideas hahaha. How do you see that?

I think the questioner wants to draw an included angle.

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

sort: votes


text:
How to update a property based on Object.location?
I want to update the co property value when the object property's location changes.
Can I use bpy.msgbus and how to use it?
class XX_PG_point(PropertyGroup):

    object: PointerProperty(type=bpy.types.Object)

    co: FloatVectorProperty(
        name="Coordinates",
        subtype="XYZ",
        size=3,
    )

class XX_PG_location(PropertyGroup):

    points: CollectionProperty(type=XX_PG_point)
    active_point_index: IntProperty(name="Active Point Index")

bpy.msgbus wont work for this.  see here

The following updates do not trigger message bus notifications:

Moving objects in the 3D Viewport.

Changes performed by the animation system.

But you can use a bpy.app.handlers.depsgraph_update_post
Every time the depsgraph updates, depsgraph_update_handler will run:
def depsgraph_update_handler(scene, depsgraph):
    for update in depsgraph.updates:
        if isinstance(update.id, Object):
            obj = update.id
            scene.your_props.co = obj.location.x

def register():
   Scene.your_props = PointerProperty(type=your_props)
   bpy.app.handlers.depsgraph_update_post.append(depsgraph_update_handler)

def unregister():
    bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update_handler)
    del Scene.your_props

If you have a larger, multi-file addon, put this in your __init__.py file.

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
My objects/planes aren't selectable anymore
Firstly i apologize if this has been answered over and over again, but i've recently gotten into blender in the past week so i'm still new to everything, but when i opened my blender file that i've been working on; my objects/planes aren't selectable at all.
I'm able to select the cube, but not my bigger plane/object i've been working on.

You are in Edit Mode. Press Tab to leave Edit Mode and return to Object Mode.


text:
Remove "Preferences:" label from AddonPreferences, no bl_label to " "?
I see no "bl_label" in "AddonPreferences" in the Blender API. One of the buttons in my AddonPreferences is "Preferences" and it would be nice to remove the default "Preferences" bl_label. Please, tell me there is a simple, python way, to remove this, that I can add to my addon scripting.
I've tried adding:
bl_label = ""

To no avail, it still shows as seen below.

It's hardcoded in user prefs UI.
Agree it is a wasted line of space and have also looked into removing it.
Unfortunately the label is hardcoded in the user preferences space UI  and used in the USERPREF_PT_addons panel which displays the addons in the user preferences.
Snippet from scripts/startup/bl_ui/space_userprefs.py
# Show addon user preferences
if is_enabled:
    addon_preferences = prefs.addons[module_name].preferences
    if addon_preferences is not None:
        draw = getattr(addon_preferences, "draw", None)
        if draw is not None:
            addon_preferences_class = type(addon_preferences)
            box_prefs = col_box.box()
            box_prefs.label(text="Preferences:")  ## <<------ HERE
            addon_preferences_class.layout = box_prefs
            try:
                draw(context)
            except:
                import traceback
                traceback.print_exc()
                box_prefs.label(text="Error (see console)", icon='ERROR')
            del addon_preferences_class.layout

which shows how the label is added to the UI layout box to draw into, using the draw method of your addon preferences class.
Options,
can edit it out in code above, and save over the original. Wouldn't recommend changing the UI code this way.  Although in this case searching  for box_prefs.label(text="Preferences:") in script to insert a hash comment character could be offered up to the user, who like us would like it gone.
Override with changes.

Make a class based on this one, with desired edits,  and override by unregistering old, registering new, to override the old.
Silly example, image above. Re-write the draw method and reregister new class using it.
import bpy
from bl_ui.space_userpref import USERPREF_PT_addons

# unregister
if USERPREF_PT_addons.is_registered:
    bpy.utils.unregister_class(USERPREF_PT_addons)

def draw(self, context):
    self.layout.label(text="My New Addons Draw")

cls = type(
        "MyNewAddonsPrefs",
        (USERPREF_PT_addons, bpy.types.Panel),
        {
            "bl_idname" :  "USERPREF_PT_addons",
            "draw" :  draw,
            },
        )

bpy.utils.register_class(cls)

Related
How to re-register a built-in operator?
Note.
One very handy little "trick" shown in snippet above is how the layout of the userprefs is "monkey patched" onto your addon prefs class, so within your addon prefs draw self.layout is the UI layout box.

Added a basic example, using old with own draw method. ie  can re-use any or all of the original panel class.  There are other ways to programmatically get  the code string of the original draw method, make changes, compile the snippet.  There is an old answer floating around re similar to changing the UI.  (Suggestion since you're changing one part would be tempted to make the info area of an addon a panel popover.


text:
How can I change the size of a modal operator popup dialog box?
I have a modal operator that invokes itself and is called from an AddonPreferences PT. I have been trying to scale_x without success. A row.scale_x works within the size of the entire modal, it is 3.35" on my screen. None of the options I've tried, examples below, have changed the width of the modal itself.
def draw(self, context):
    layout = self.layout
    scene = context.scene
    layout.scale_x = 20

    row = layout.box()
    row.scale_x = 20
    layout.label(text="scaled_x_space?")
    row = layout.row()
    row.scale_x = 20
    layout.label(text="scaled_x_space?")
    split = layout.split()
    col1 = split.column()
    col1.scale_x = 20
    layout.label(text="scaled_x_space?")

I'm not really trying to scale by a factor of 20, I was using that number just to be sure it wasn't changing by some amount I wasn't noticing.

Just pass a custom width (integer) when calling invoke_props_dialog(operator, width=300) or invoke_popup(operator, width=300). The height is determined dynamically by the size of elements placed onto the props_dialog and there is no option to set it. From the docs:

Parameters

operator (Operator) – Operator to call
width (int in [0, inf], (optional)) – Width of the popup

Demo based on the code of How to call a confirmation dialog box?

import bpy

class SimplePropConfirmOperator(bpy.types.Operator):
    bl_idname = "my_category.custom_confirm_dialog"
    bl_label = "Do you really want to do that?"

    prop1: bpy.props.BoolProperty()
    prop2: bpy.props.BoolProperty()

    def execute(self, context):
        self.report({'INFO'}, "YES!")
        return {'FINISHED'}

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

    def draw(self, context):
        row = self.layout
        row.prop(self, "prop1", text="Property A")
        row.prop(self, "prop2", text="Property B")

def register():
    bpy.utils.register_class(SimplePropConfirmOperator)

def unregister():
    bpy.utils.unregister_class(SimplePropConfirmOperator)

if __name__ == "__main__":
    register()

    # test call
    bpy.ops.my_category.custom_confirm_dialog('INVOKE_DEFAULT')


text:
Combining 100+ Materials
So I have a mesh model obtained from google maps data and we are using it for large-scale site representation. We typically combine architectural models with this google maps data and put up on sketchfab. However, Sketchfab only takes max 100 materials and my current model is sitting around 300. Is there a way to combine these materials? I dont have to combine all of them into one massive texture as long as i can get the materials number below 100. I saw that people bake these combined materials onto a single map but i tried and have crashed out my computer numerous times. My rig is i9 GTX 3090TI with 128gb ram so i don't think getting a beefier computer is a solution.
Any help or advice is welcome :) See below some images of the project.

This is a bit old but i did find a solution to this question.
Nicko16 made a great tutorial for this exact task that can be found here
https://www.youtube.com/watch?v=XUkMY8Sp_AM&t=202s&ab_channel=Nicko16
Another is to get Eliemichels texture pack which packs all the textures into one single image thus one single material. Literally saved me hours and hours to manually re-map and rebake. Here is the texture pack:
https://eliemichel.gumroad.com/l/DFExj Go and give them a follow/ donate and hope its helpful :)

My only suggestion is you could bake some of these maps to a single texture and apply the same texture to multiple objects. Only issue here is that you would have to UV Unwrap everything, which is a killer task with a scene as dense as this one. If you are interested in the baking process, Grant Abbitt has a pretty straight-forward tutorial for this.


text:
How to smoothly move down in Z-index a curved object

I'm trying to mode down in z-index this part but in a smoothy way, how to achieve this result ? I easily can do it for a straight line but in this case I really don't know how to do it.
Thank you for your responses.

Blender comes with an add-on called Mesh:LoopTools. Enable it in the Preferences then you will see it in the N-panel (N).
Select the first 2 vertices at the beginning of the ramp and move them down to the floor along the Z-axis. Then select the vertices of the edge loop that you want to smooth. Make sure the vertice at the beginning is the active one (selected last, see screenshot). After that, use the Space operation a few times with locked X-axis and Y-axis in the options. Count the number of uses for the other side.

Repeat the steps for the other side of the ramp. One or two uses of the Relax operation can smooth out the transition between the ramp and the flat area.
Example:

very nice!!!!!!

This answer is a slight piggy-back on @Blunder's.. (apologies.) It still uses the shipped add-on Loop Tools, but takes advantage of its Curve operator to make your slope in one move.
The Curve operator depends on selecting vertices in a single, unambiguous, loop of edges. You select the vertices in that loop you would like to remain fixed. The remaining vertices in the loop are then interpolated between them.
Here, the vertices have been selected in Face mode, for speed:

And Curve has been executed on the edge-loop connecting those vertices, interpolating in Z only.

The tool takes a bit of playing with to get used to the way it works, but it's worth it, IMO. It can be very handy.


text:
Baked metal material looks different than material preview
I have tried a lot of different settings, but I'm not sure how to make the material preview to bake the same. I've tried mixed shaders in world settings with diffuse and glossy, but they all turn out pretty dark.
Thank you in advance !
It's a metal material, and I have so far 5 lights.

This is what it looks like in material preview:

Rendered view:

Current Bake settings:

Current World settings:

set metallic to 1.0 and roughness to 0

His roughnesss is already at 0, the Color Ramp has no information how to distribute the black to white range because nothing is plugged in. Which means it uses the value for 0.5 by default - and since the black slider is past 0.5, the output of the Color Ramp is black = 0 for the roughness.

What you're seeing is the reflection of the default HDRI in the scene. If you want to see the same thing in rendered mode, you need to find the same HDRI file and set it up as world background

could you please provide blend file? might be, your lights are just too weak

First of all, the difference between your Material Preview and the Rendered View: the preview uses HDRI images to artificially light up your scene by default, this HDRI can also be seen in reflections. You can change the settings in the dropdown menu, choose a different HDRI or change the strength etc. You can also choose to display the current Scene Lights and Scene World instead of the generated lighting.

If you switch to Scene Lights and Scene World the preview would look much more like the final render. Now the problem with your render... I don't know about your bake settings and if you want/need to bake a texture, but this is definitely not necessary just for rendering an image. And if you're just baking the Color information of the Glossy channel, you only get the color, no reflections etc.
But your object and world materials have several issues. For the object, you've plugged a Color Ramp into the Roughness. Usually the Color Ramp is used to convert some input into a color distribution, where the input values from 0 to 1 reflect the positions on the range, and a slider at 0.2 means, convert the grey value 0.2 into the color which the slider is set to. IF you have no input for the Color Ramp, it's output is the medium value which is found at the position 0.5, and since your black slider is past 0.5, the output is black or 0, which means you have an overall Roughness of 0 which makes the Color Ramp obsolete.
Also the Metallic value: to get more realistic results (a material in reality is either metallic or non-metallic) you should only use 0 or 1, all values inbetween are for artistic reasons but not realistic.
If you would have set it to 1, than your object would look worse, because than it would not only be dark grey but completely black with just some bright spots maybe where your lights are reflected. Because your completely shiny metallic surface would only reflect a black environment.
Which brings me to the issue with your world material: you've put a Glossy BSDF in there. But this doesn't emit any light which means your sky is pitch black. Usually there should be a Background shader plugged in. This has a Strength to determine how much light it will emit from the color or image texture or whatever there is. For example, just using a white color makes it less pitch black:

But of course there is still not much to reflect because it's just a plain color. If you're looking for something that's more like the preview, better use an Environment Texture instead of a color in which you load an HDRI image. You can get many for free on HDRI Haven for example. Usually HDRIs are used to generate more realistic scene lighting and create reflections when you don't have a real environment that could be reflected from your object. Since the HDRI is lighting your scene, you don't have to necessarily put extra lights in there as long as you don't need them for special reasons.

If you don't want the HDRI environment to show up behind your object like in Material Preview, go to Render Settings > Film > Transparent and enable it. By the way, you can set the the Rendered View to show what is seen in Material Preview by disabling Scene Light and Scene World in the options, but beware that an actual rendering of the camera image will show the real world settings, not the preview settings.


text:
UV Tile Ratio other than 1:1?
How do you set UV tile to 2:1 without using UDIM? I UVed objects in RizomUV as 2:1 ratio, but can't figure out how to change UV tile without using UDIM.
Also, can you use different two different UV ratio maps in an object? For example, one is 1:1 and the other is 2:1. Thanks

As far as i know, You can't because the UV map represents points in Texture Space that range from 0.0 to 1.0. But you can resize the Texture that is inside the UV Canvas

I see, it looks that way. Thank you Emir


text:
Scaled object affects bake normal map
I’m trying to understand as why applied scale objects affect baked normal map. Here I’m baking a cone’s normal on to a plane. The cone scale has been applied, but applied scale on the plane produces the wrong cone normal. Why scale applied plane produces the wrong normal map? Thanks

blend file

Your cone is smooth-shaded and has no support edges. This results in a "spherical" shading. When you use the matcap Normal in Solid mode then it looks exactly like the right one in your screenshot (use the drop-down menu for Viewport Shading options for the matcap). This is correct because the normals are smooth. But it's not what you want to bake.
To get a proper bake

apply the scale the to plane and the cone (Ctrl+A Apply > Scale in Object mode)
edit the cone, select the top vertex and bevel it a tiny bit (0.1 mm) with CtrlShift+B
now you can add two or three more support edge loops with Ctrl+R. It's important to place one at the bottom and one at the top. Another can be placed in the middle
Now you should have a clean shading when your cone is smooth-shaded (in Object mode, use the context menu to choose Shaded Smooth)
finally, you can bake it.

For some reason, you will still get a little glitch in the center of the baked normal map no matter how tiny you scale down the top vertices of the cone. I don't know how to fix this with geometry so I've just ended up using the Smudge brush and fixed it carefully in Texture Paint mode.
Zoomed to the tip of the cone with support edge loop (red):

Bottom of the cone with support edge loop:

Baked result (with manually fixed center):

Thank you very much.

Based on Blunder's input, I came up with another solution.

1st started out as a cylinder, then scale 0 on all top vertices (not merged yet) to make a cone shape.
2nd, added a bunch edge loops, including one loop near the tip.
3rd, merged all top vertices by distance and applied smooth shading and auto smooth normal

This will produces the point tip on the normal.


text:
Is there a way to separate all the faces from an object and lay them flat?
I’m working on welding a geometric object and I was wondering if there was any way to separate the faces from the object and lay them flat so I can cut them out on my CNC plasma table.
This is the object in question:

Try the paper folding export add on. It might be just the thing for this :-)

Also UV unwrapping the model without deformation should do the trick


text:
Render textured mesh of multiple materials without light
I have a textured mesh of a house consisting of 94 materials. What I would like to do is render from the inside different sections of the mesh but without the effect of light. I want the rendered equirectangular image to show the actual colors of the texture without shadows or other casts of light which might potentially change the original color of the textures. What I am getting now is just a black rendering as there is no source of light inside the mesh.
Is this possible? I've seen different posts about doing this but only focusing on one material. How should I go about tackling a arbitrary amount of materials?
Thanks!

There are various ways of getting control over your shadow.  Shadows, ambient occlusion, and contrast can be controlled by nodes in the compositing window to to get the look you want.
I think that turning off the shadows cast by lights falling on the objects in your room, and turning on the ambient occlusion on these materials may help.
I am not sure exactly what nodes in the compositing editor you should add in order to control the shadows in the way you want, typical choices are mix nodes, or color ramps.

Thanks. This is helpful


text:
Camera extrinsics matrix blender
The camera object in blender python API has the variable matrix_world. I was hoping it would give the camera pose wrt to the world coordinate system but if you locate a camera in (0,0,0) with (0,0,0) rotation it gives you the 4x4 identity matrix which is not the correct transformation from a point in world coordinates to local camera coordinates as world cs and camera cs are not the same.

Shouldn't the matrix_world reflect the 90º rotation about the x axis from world cs to camera cs?

Every object has a matrix_world. Whether it has a camera/mesh/etc attached doesn't change its matrix_world.

The camera "points" down its local $-Z$ axis.

Yeah the camera view is -Z. But still there needs to be a transformation between world cs and camera cs to define a camera pose no?

In example of camera at identity, and knowing its view is -Z locally, it points Identity @ Vector((0, 0, -1)) or down the global Z axis.  Arbitrary, but logical (& common)  decision to make the image x, y dimension and the depth  z.  Basically I suppose I disagree with "shouldn't" premise of question.


text:
How to handle the light(area)

Now I'm practicing the blender. There is problem when I handle the light

I want fit the plane light to the window, but I can't snap the light vertex. Is any other way to adjust the light to the window exactly?

When I scale up the light using addon(CAD transform), I can't resize the light. It just comes back to original size. What is the problem?

please be aware of the rule here, that you can only ask 1 question. Please open another question for your second question. Thanks.

select all 4 vertices of the window and press SHIFT-S -> Cursor to selection.
Then select your area light.
SHIFT-S -> Selection to cursor.
Then measure your height of the window with the measure tool.

Enter this size to size-y

Same for width + size-x


text:
Fully merge two objects?
I have two objects that I want to fully merge into one object. I have gone through the steps of about 10 posts online and all of them leave the former shared edges visible (when I can get them to work at all). In all cases, the former shared edges are still visible. The program still thinks they are two joined objects instead of one, as can be seen if I delete one of the vertices.
How do I get rid of these visible intermediate vertices/edges?
Two objects (before)
Results of joining faces (with dividing line)
Thanks in advance (since I can't write comments).

I'm using the latest Blender and Windows 10.

So you joined both objects using Ctrl+j? Blender won't know what vertices to merge automatically, so you'll have to edit or use a clean-up function like 'Merge by Distance' or 'Decimate geometry'. Is that what you want?

I tried joining them with several methods, but not control-j, which does nothing for me. I tried both merge by distance and decimate geometry after I had joined them with a union modifier. A copy of the objects can be found at https://u.pcloud.link/publink/show?code=XZKl6eXZhR7MhrluU0fGpxe7h4hhEyCvDvHy  Note that the lower vertices are extruded to the upper ones in that file. I can remove that if someone wants a cleaner version.

In Edge mode, select the edges you want to delete and then press X > Dissolve Edges.

Delete the edges between both objects;
Click one of the vertices of one of the ends of the objects that you want to connect, and use Shift+s → Cursor to selected, so we can use the 3D cursor's location to move the other object to the exact position of its counterpart.
Since for me the 3D cursor snapped to one of the wrong vertices, I quickly separated the object using p, then g and z to grab it along its Z-axis, and it snapped right in place.
Select both objects, use Ctrl+j to join.
Remove the faces that are currently between the vertices you want to get rid of.
Select the vertices surrounding the deleted faces, and navigate to Mesh → Clean Up → Merge by distance, and tweak the value to delete the 14 double vertices (by turning it all the way down).
Now select the vertices that are left, click Del, and select the Edge Loops option.

Both models are now joined and clean:

(Note: I rotated the model so it fits this page better in most cases.)

If any of these steps is unclear, please let me know, and I'll edit my answer. Good luck!

Thanks for the long explanation. I am so newb I couldn't execute the steps properly—so then I tried using the difference modifier to chop both the intermediate ends off in an effort to reset the state of the vertices/edges/faces to something simple. Then I extruded one of the faces in both directions (experimenting) and lastly snapped the two faces together. (I can't move either object, but need to keep the same total length.) Then X->Edge Loops worked for some of the junctions, but not the last. Could you look at https://u.pcloud.link/publink/show?code=XZihEeXZFYkmPSMbT0RL1qu5yBu0VFabkp7V ?

Once that new file is opened, go to Edit Mode, and Wireframe mode (by pressing 'z'). Click 'Face Select' next to the Object Interaction drop-down menu (upper left corner, under File | Edit | Render), and you'll notice there is still a face between the vertices (step 5 in my answer). Press 'Del' → 'Faces'. Go to Vertex Select Mode, select the vertices you want to remove, press 'Del', and select 'Edge Loops'. That should do the trick.

That worked, thank you! So just deleting selected vertices with X -> Edge Loop doesn't work if they are still being used to define a face?

Exactly, because they're not merely a loop at that point :) Glad it worked! Can you accept the answer to mark the matter as solved?


text:
Modify all linked instances
It seems that inherited attributes that can be overridden is needed in Blender for objects considering its complexity. In any event, I thought I read that linked objects only have location and rotations unique to each instance, which would accomplish the same thing for me. But when I change the dimensions of one, the others do not change. I also tried this after having made the two objects reference the same mesh. Is there a way to edit the dimensions of all the linked objects at the same time?

You can select a copy of an object and add a Copy Scale constraint with the original object as a target.

Duplicated objects will have that constraint. To copy this constraint to existing objects, select them, make sure the object with the constraint is active, and press Ctrl + C, then B

Thanks! (Although that key combination doesn't work for me.)


text:
Change all linked objects?
I have tried to understand linking objects (or is it meshes?), but am apparently failing. I want to create a 2nd and 3rd copy of a collection such that if I change any of the objects, they all are changed. It's fine if one has to be a master copy that has to be the one changed. I have tried various approaches including selecting the objects in the collection then use Duplicate Linked, and it always makes copies that are not updated when one is changed. I have been using links to copy modifiers to other objects, but again it copies the modifiers but doesn't link them together in any way I can see. I have only been working with simple cubes.
Can someone recommend a better source for how to do this than I've found so far (or point out what I am misunderstanding)?

Duplicate linked (alt d, or "duplicate objects" operation with "linked" enabled in operator panel)  should work.  I can't say why it's not working for you, not without a file and procedures to follow that don't do what you expect.
However, there is something else that you can do, which is to simply change the geometry that an object refers to.  If you select an object and look at properties/object data, the very first thing on the tab is a drop-down that specifies which geometry is used for the object.  You can assign any (mesh) object any geometry datablock that exists in your scene.  At that point, the geometry is linked:

There's no master object for linked meshes; editing any of them should edit all of them.  Note that some things, like shapekey values, are still per-object, so you can edit a shapekey for the linked mesh data and then choose to use it or not on a per-object basis-- perhaps this is what was giving you trouble?  Editing a shapekey?
Linking modifiers isn't the same thing as linking mesh data.  It's basically a "copy modifiers" operation, and future changes made to one won't affect the others.

I thought I did the same things, but when I tried after reading your post, it worked. There are some decisions that have to be made through the process such as exactly what is selected, so presumably I did something different. I didn't know I could link meshes in the more direct way you described—thanks for all the info!


text:
Apply all Transforms to duplicated objects
I have been copy/pasting objects because when I Duplicate objects, I can no longer "apply all transforms" (control a) to them. I use that feature to reset the rotations to 0 and scaling factors to 1.0, otherwise when I adjust locations and dimensions, sometimes my objects jump around. Whether they do or not, when I look at rotation, dimension, and location values, I want to see what they all are in the world coordinate system, because that is how I think about object locations with respect to each other. If I rotate something it's because I am changing how I am using the object and it is permanent; the object remembering a previous orientation is just confusing, since the dimensions are no longer using the world axes.
Apparently, I do not understand something fundamental about Blender's mindset toward objects and their coordinate systems, locations, dimensions, etc. With the information above, can anyone tell what I need to learn?

Are you using "Duplicate Linked" by any chance? When using Object > Duplicate Object followed by Objects > Apply > All Transforms it seems to behave as expected. On the other hand, trying to apply transforms on a linked object throws an error.


text:
Changing a dimension always immediately resets to 0
I have an object that was originally imported as an .svg, but I converted it to a mesh. However, blender still will not allow me to give it a size for the third dimension. The file can be downloaded from here.
What is it about this object that prevents me from setting a non-zero value for its Y dimension (in the 'n' dialog)?

I don't understand what you mean by 'give it a size'.  What are you trying to do to give it thickness?  Your example file just contains a plane with four vertices, and if I use a solidify modifier, or extrude the plane it works.  The plane is called "Curve.011" but it's not actually a curve.

Dimensions work as a scale multiplier. As your mesh has a Y dimension of 0, you can multiply it by any number, the result will always be 0.
To get thickness you need to enter edit mode, select all and press E to extrude the faces.
Once the object has Y dimension different than 0 you will be able to vary it in the N panel.
Be aware that you have the snap option activated.


text:
How do I add a downloaded texture to an object in 'simple' mode
Firstly I just want to add a downloaded texture image to an object in Blender 2.92 to ALL surfaces, I do not want to apply a different texture/materials to each face.  I have watched a video tutorial which uses version 2.80 which I can follow using 2.80 but in 2.92 I have come to a 'wall'. I select my object, open the material panel, select NEW, click on the small o next to Base Color to select an image instead of a color which in 2.82 opens a window to select a texture type. This does not happen in 2.92 and I can't work out what to do. Help.

Is it because by default 2.92 has a simple material automatically assigned to the object? If you go to Material Properties, and click on the dot next to Base Color, you can select 'Image Texture', and select your image.

In 2.82 the dot was right to the color field, now it's on the left. The dot on the right is for setting animation keyframes.

Thanks to you both. It's always a problem watching video tutorials which use an older version. I didn't know that by default 2.92 has a simple material automatically assigned. Right now my head is swimming with trying to learn all the 'tools', what they are useful for and also hot keys. It's complex for a beginner. Thankfully I now know heaps more than I knew last week when I first started using Blender.

That begs another question. If in the future I find a tutorial using 2.82 and 2.92 is different and I can't work out how to get around it, is it ok to make the change to my (2.92) object using 2.82 and continue later with 2.92. This might save me posting a question here.

Just to provide a quick gif, if anything changed in 2.92.

Click Base Color > Image Texture
Select Open (it will open a new window)
Navigate to your texture

(to have textures visible on your model, you need to be in Material preview)

Thanks again Jachym. I followed your video and still cannot get the texture image to go onto my object. Firstly do I assume correct that you always use 2.92 for these video tutorials? Secondly this is what I do -

Hi :). The process is the same since Blender 2.8 (but probably since 2.6). Keep in mind textures don't show up in solid mode - you need to be in material preview :)

OK now I see it I think. I have to select Texture Paint from the top of screen which divides the screen into two, on the left side shows the 'unwrap' and on the right my object? I tried to add an image of my (Blender) screen and thought someone said that I only needed to drag the image file onto this panel  but that didn't work.     Once again I had googled "Blender material preview" which did NOT disclose anything. It was just a matter of try this and that until I found Texture Paint top of screen which I selected and once again frustration crept in.

Hi :). Not really - just follow my gif, I didn't open any other editor. It might benefit you to watch some beginner tutorials. Related: Blender Manual - Material Preview.

I did watch your gi maybe 30 times - I am NOT kidding. I even captured it as a video and then watched it in slow motion to ensure I didn't miss something. I did EXACTLY as I saw in the gif. The only thing I am having trouble with is how to get to Material Preview and so assume that is all that is preventing success for me.

Oh, right :). It's those four circle icons in top right. They switch viewport shading, one of them is material preview :).

At last I see the light. There also is a preview selection in the materials panel which had me rattled. I have learned something. Do I assume correctly that when I select an image for the material it is wrapped around my object? I have watched so many tutorials including many put out by Blender and the ones for adding a material all seem to be about adding roughness, occlusion, displacement etc and unwrapping the object to apply them to each face. My project does not require any of this just the image.

Let us continue this discussion in chat.


text:
When using Blender to modify the Pharah model, how do you make simple bodymorph changes using Shapekeys?
I'm new to Blender, but hopefully this question won't require complex program functions. The model's creator says I can alter her body using shapekeys, but I don't know how.
Can someone point me to the right tutorial or explain in simplest terms how to, say, make her thigh less thick or her chest larger. I know this might mess us up her clothing, but I'd just like to make simple/small edits to this fantastic model.

Go to the object data properties (the green triangle) and find the shape keys menu. You can click a shape key, and then drag its Value bar to use it.


text:
Help with rigging
When I rotate or move my rig, it does this weird thing where it looks all weird. I have already made the object merged by distance. Does anyone know how to fix this or make it look more natural?
Thanks

Thanks alot, but now for some reason I can see the edges I made in object mode and in edit mode they are kinda weird...

can you show some images in edit mode

@SHikhaMittal I'm not sure if that's clear enough but...

unless you have reasons to keep tris, maybe you should try to transform your tris into quads? In Edit mode select all and ctrl F > Tris to Quads, then give your object a Subdivision Surface modifier?

@moonboots changed them to quads and even tried to subdivide but still same problem :|

try Sculpting or remesh or decimate in the modifiers

please share your file (keep only the important part): https://blend-exchange.giantcowfilms.com/

@moonboots

try to keep quads instead of tris, give your object a Subdivision Surface modifier, correct the weight in Weight Paint mode and it will work fine

@moonboots how do I weight paint it so that there will be none of this?

your problem is essentially a problem of topology and you need to give it a Subdivision Surface, but the weight is bad too so you need to give it a correction

Try to keep quads instead of tris (you can even simplify your topology with some edge dissolve), give your object a Subdivision Surface modifier, correct the weight in Weight Paint mode and it will work fine:

When you work your topology, if you have enabled the Subdivision Surface modifier, deactivate the 2 last display options:

Thanks alot, but now for some reason I can see the edges I made in object mode and in edit mode they are kinda weird...

I've edited my answer, it's because of the Subdivision Surface modifier


text:
Can a scaling factor be entered from keyboard
When scaling a material in uv editing (press S key and drag using LMB down) is it possible to enter a particular value using the keyboard rather than simply try to drag the mouse to a value and try and get a particular value?
I am using a material of a wooden plank which has 7 planks on it and would like to try and end up with 45 full planks on the model which is 9 metres long.

Hi :). There's a small menu bottom left, that allows to enter precise values

Thanks Jachym. What is the name of the small menu bottom left? I am using 2.92, assume you mean in the uv editing 'panel' but I don't see any menu bottom left.    I can simply enter a value after pressing S (key) to rescale on both X and Y which is what I want.

Hi :). It only pops-up once you scale something, so you can adjust the values.

Thanks Jachym (Resize - I see it)

Just press S and enter the scaling number instead of dragging the mouse.
If you just want to scale x direction - press: S X 2 (would scale only x axis by 2)

For completeness, Y or Z could allow you to scale on those axes too. This also works with grabbing and rotation, and in fact a lot of operations.

Thanks Krolton. I will add that to my ever growing list (document) of tips.


text:
How to import fbx image to an existing project
I have a 'project' consisting of a number of smaller objects which will eventually be integrated into a single object. I have found a great 3D (fbx) object and when I import it I have noticed that when I drag it around over my existing objects it appears on top of some and behind others.
How do I 'mark' this imported object so that appears 'above all my existing objects? See following screen shot (imported object is the car tire/tyre)where the tire is hidden by the large object but not by the smaller ones. I eventually want to use the tire in an array to be added to the edge face of the large object. Also I can use the 'rotate' tool to orient the tire to face 90 degrees from where it currently is but what is the method to 'snap' it 90 degrees rather than try and manually do that?

This is two questions, but I will answer both.
First, your description sounded like you are thinking of the tire as a 2D rendering of a 3D object, being moved about in a 2D space. It is in a 3D space. If you already understood that, I am sorry. But anyway, to fake it and make the tire render in front of everything all the time even if it is positionally behind it, you can use the render engine specific solution, or a permanent one that works with all engines. I will describe the latter.

Place the tire in its own collection, and place everything else except the lights and camera in their own collection together.
Create a new View Layer.
In that new layer, uncheck the collection without the tire.
If you do not want the tire to cast shadows on anything, uncheck its collection from the first view layer.
In Properties editor -> Rendering tab -> Film panel, enable Transparent.
In the Compositing screen, enable Use Nodes, then add both view layers, and use Alpha Over to put the tire over the other view layer.

About the rotation transform question, look at the top of the 3D view for a magnet icon. Check that the setting next to it is “Increment” and not something like “Vertex,” and enable Rotation and Scale (Location is enabled by default). Then, click the magnet to turn on snapping. Rotation will now snap to 5 degree increments.

Thanks. What had me puzzled was that the tire will appear in front of all my objects except one, the largest one regardless where I place the other objects.  Something else I have learned.  Also thanks for advising about the 'increment' setting.   I first started using Blender (and a 3D modelling application of any type) just 6 days ago and have learned a lot mostly from people at this 'forum' like yourself. Maybe I should invest in the purchase of Blender For Idiots (book) although the latest edition is for v2.8 and I use 2.92 as I hate reading documents on screen?

@JohnArnold well, there is an ePub version of the manual, which could then be put on an Amazon Kindle, which has a non-emissive screen kind of like an old calculator. But anyway…

@JohnArnold Just to clarify, the tire is not an image. It is 3D, and by the looks of it, it is vertically under the table along with those beams, which it actually intersects.

@JohnArnold try dragging your mouse around with the middle button pressed (usually hidden in the scroll wheel: press that down).

@JohnArnold I’m thinking of deleting my answer since it sounds like the first half is not what you needed.

Thanks Zacgui. On reflection I was starting to think that some of the objects had been moved on the Z axis and so other objects like the imported tire would pass under (or over).  PROBLEM is how can I snap an object back to the original plane (x, y and z) as well as not have it rotated? I can of course delete the object and recreate it.

@JohnArnold that’s yet another question, and should probably be asked separately, although I will answer it if you do.

Thanks again. I have now learned that the imported object was disappearing behind some objects and not others because many objects were on a different 'plane' eg Z axis. I discovered this when I was 'assembling' all my objects together and viewed them along a different axis. Wow I have learned a lot in the last week. My model is now complete.


text:
How to use Snap to assemble objects together
Firstly I am using v2.92 and have viewed the suggestions listed after I entered the title in which I could not find an answer.
I have now, at last, created all the parts to my VERY FIRST 3D object (floating dock) together with UV mapping of my preferred texture and am now ready to 'assemble' all parts into a single object. I did receive information before about 'snapping' and was advised to use Snap > Increment  with Absolute Grid Snap 'ticked' which I can't find anywhere to even attempt to try.
Refer to the separate objects in my image below. All objects have a scale of 1 for each axis.
A is the dock created with an array of 2 so that I could offset textures to simulate 2 separate planks along the side.
B is an array of narrow planks which is for the walkway on top of the dock
C is an array of supports which will go on top of the walkway to support a timber rail. Before I position these I will add another array on the X axis so that there are arrays on both sides of the dock rather than duplicate and have to position 2 separate arrays.
D is the timber rail - I will also add an array on the X axis for reasons explained above. I left those array out of the image for simplicity for the image.
I seem to have successfully moved B on top of A with a bit of difficulty but want to ensure there is no 'gap' between each.
I cannot get C positioned to be on top of B - it just disappears when positioned over the dock
Is there an easy method to achieve what I am trying to do and/or suggestions as how to best do what I am trying to do.

This is no solution how this all will completely come together, just some hints how things work to maybe achieve it.
First of all, Absolute Grid Snap, you can find it in the Snapping dropdown menu.

To use snapping, you have to enable Snap (the magnet to the left of the Snapping options. This way snapping is used whenever you move the object (or rotate or scale if you checked that, too). If you don't want permanent snapping, disable the magnet and hold Ctrl when moving objects for temporary snapping.
Now, in Object Mode the origin point is snapping to the grid (if Absolute Grid Snapping is enabled), for example X=1, X=2, X=3 etc. or to to full increments of Blender units relative to the starting point of the movement (e.g. move 1m, 2m, 3m).
Now to position your elements where you want them with Grid Snapping you have to make sure that their origin points are positioned so that this might work and that the objects' dimensions are maybe full increments of the grid as well.
Another way would be setting the Snapping to vertices, edges or faces and try if this works better for you. With vertices enabled, one corner vertex of a cube snaps to another corner vertex of a cube, no matter where their origins are or how they are positioned on the grid.
The only problem with this is that (at least I) sometimes don't know how to tell Blender which vertex I like to snap to which other. By the way, if you limit movement say to X direction, you can make vertices snap to line up with another on X, but not fall together in the exact same position.

Thanks Gordon.  I will try to use your suggestions a bit later and then accept the answer.

Thanks again Gordon. With your tuition plus watching a video tutorial I got the deck of planks snapped to the body of the dock (A and B)  but was unable to snap C to that. It would not snap above rather 'inside' the deck planks. It seemed that C was snapping to A instead of B. Anyway I decided to manually place C on B and then D onto C carefully manually aligning and checked the x, Y and Z axis. I now have at last my timber dock


text:
How to center 3D cursor on object
I have a complex object (see image below of multiple docks at Vancouver Harbour) and wondering is there a way to center the 3D cursor with relation to the extremities on the x and Y axis (leaving Z axis alone). Is this possible. Note that the 3D cursor appears to be dead center but it's not.

you can s<use the 3D cursor: Select the vertices you want in Edit mode, press Shift S > Cursor to Selected, then back to Object mode, right click > Origin to 3D Cursor

Thanks moonboots. Another tip for my growing text file of tips. It worked perfectly although it did also center on the Z axis which I didn't want although that was easy to remedy. Thanks again.

If it centered on the Z axis then maybe because the vertices you chose were distributed on the Z axis as well. So to explain with an easy example: if you have a cube and you want the 3D cursor to be centered on X and Y, but the Z should stay on the bottom face of the cube, then you should select only those four vertices of the bottom face. If you want the cursor centered on X and Y and the top face of the cube, select the vertices on top. Same goes for other axes.

Thanks Gordon (for both replies). Actually I want the 3D cursor to remain at around 0.150 metres from the bottom (all the docks are floating and in MSFS the position of where the 3D cursor is on the Z axis results in where the object is placed and so 0.150m results in the docks having the bottom 0.150 under water).  I think I understand from what you state that the 3D cursor on the Z axis can only be placed either at the top or bottom? Anyway it is dead easy to zoom in and 'grab Z' to an approximate 0.150 metres from the base (doesn't have to be exact).

@JohnArnold No, top and bottom were examples. The cursor can be centered around all vertices you select. In my simple example of course the cube only has top and bottom vertices in Z direction. If you want the cursor at a specific level above or below the selected vertices and there are none at the exact level you need, than choose the bottom ones and add 0.15 m to the cursor's Z location. Press N in the viewport to bring up the sidebar, go to View tab, there you can enter values for the cursor. By the way, if you begin comments with my username I get notified and can answer quicker ;)

@Gordon Brinkmann Thanks Gordon. At present positioning the 3D cursor 0.15 m above bottom isn't having the desired result in MSFS and my entire object (floating floatplane docks) 'float' above the water. I have to position my object so that the 3D cursor is about 0.8m above the bottom which is annoying as I'm sure it used to be ok set at 0.15. Anyway that is a problem for me in MSFS. BTW when adding your name is that done manually (like I just did) by typing @ plus your name?

@JohnArnold If you do it manually, you have to take the @ and the username without spaces inbetween. But in a thread like this if you type the first letters after @ there's usually a small pop-up window appearing above the name to suggest a user that's featured in the thread. Note that if you comment on a question or answer you cannot link the author of said question / answer, since they will be notified by default of comments. And you can only link one single user in your comment, no more.

Thanks Gordon I will try to remember all of that. Where can I go online here to read all about these things? I have had to be advised/reminded about all sorts of thing such as clicking 'this answer is useful' etc most of which I have never seen on any other forum web site. BTW what do I need to do to receive emails when answers to me questions are posted as at present I am making a shortcut (of the url to my question) on my benchtop which I click on from time to time to check.

Of course there is a way to do exactly what you want:

Open the sidebar (shortcut n)
go to the View tab
hover over 3D Cursor -> Location: -> Z value field
copy the Z value (shortcut CTRL c)
go to the 3D window and select the X and Y extremes.
Snap the 3D Cursor to the selection (shortcut SHIFT S and click "Cursor to Selected" or type 2)
hover over 3D Cursor -> Location: -> Z value field
paste the Z value (shortcut CTRL v)

Here's the sidebar showing the appropriate Z value:
This will move the 3D Cursor twice.  First to the exact center, which may mean changing the Z value; and then resetting Z to its previous value.

Thanks Marty I've learned something new (distance of cursor from the X Y and Z axis). What is the intersection of all axis called? Also how is the position of the 3D cursor relevant? The position relevant on the Z axis appears to control the height of the base of the object is in relation to ground (or water) level when the object is placed in Microsoft Flight Simulator ie if the position on the Z axis is too high or too low then the object appears either floating in mid air or buried.

The intersection of all axis, (0, 0, 0) is called the origin.  The 3D cursor is where new objects are added in object mode, or new geometry in edit mode. It can also be used as a pivot point so that the rotation command rotates around it.

Thanks for that. I have seen 'origin' elsewhere and now know more. I see that an object can be dragged below the origin (Z axis only) and hadn't considered that before - I have created an object for Microsoft Flight Simulator (a floating seaplane dock) which I want to display (in MSFS) partly submerged (to allow for the troughs between waves and not show the base of the dock) and was trying to achieve that with where the 3D cursor is. Is it possible to drag a model so that the base is a set/fixed distance below the origin point (on the Z axis only)?

Yes, you do this in object mode by selecting the object and tapping the g (for "go") key to move it.  You can make it move along only the Z axis by tapping z.  I don't know if this will move the object when you export it to FlightSim, though.

Thanks for that. Something stored in the model must 'tell' MSFS where to place the object in relation to is base and ground level. I will try that.

You could first set the Origin to Center of Mass, then snap the 3D Cursor to Object. Then set Z to 0 again.

Thanks for another method to achieve what I wanted. I had already used moonboots method before your reply appeared and it worked apart from the fact that it also centered the 3D cursor on the Z axis which I didn't want although that was easy to fix. Will your method center on X and Y axis only or all all axis? Oh I don't have Z at 0 as the object is floating docks and the 3D cursor position places the object at water level so need to be just above the 'bottom' of the object to allow for wave height.

@JohnArnold This method also centers on all axes. To have the cursor at a certain Z location other than 0, use the method I described in the comment under your question or simply enter a different Z value for the cursor instead of 0.

FYI   I feel that I now believe that the 'origin point' is used (must be written to the output file(s)  within MSFS to orient the object in relation to ground and water level. Using information above to position 'origin point' to the base of the object and then moving everything (All Grab Z -0.15m) exporting to my MSFS application to build the scenery, my floating docks object now appears with the bottom 0.15m (approx) under the water.  I did not move the 3D cursor and don't know if it is necessary apart from within Blender to 'spin' the object around. Thanks for your help.


text:
How to snap object back to its original position
After moving some objects particularly along the Z axis I would like to be able to snap them back to their original position. I have found a previous thread for 'snapping' an object back to it's original after using the rotate tool but cannot work out how to bring an object back to its original position especially on the Z axis.

Hello :). If the original position was 0 (center of all axis), simply type zero in the transform panel

Thanks Jachym. That's a very easy way to do it.

Resetting all Transform values to 0 is Alt+G for location, Alt+R for rotation and resetting scale to 1 is Alt+S. After performing these three steps Transform location will be (0, 0, 0), rotation (0, 0, 0) and scale (1, 1, 1).
To set it back to a different location/rotation/scale, these differing values should be set in the Delta Transform properties of the object. Delta or Δ stands for (among other things) "difference" in mathematics and means in this case the divergence from the "normal" Transform properties.
Looking at this cube, it has a Transform location and a Delta Transform location. They have to be added together to get the actual world location of the cube (or multiplied for scale):

In case your object has Delta Transforms, then resetting the Transform values will result in (0, 0, 0) + Δ(x, y, z). So this way your object resets to a location different from the world origin.
Now, moving an object by hitting G only changes the Transform location, not the Delta Transform. If you moved an object to a location which should be its new "original" location, then you can apply these transforms with Ctrl+A > Apply > All Transforms to Deltas. In the options you can then also choose if you want to apply all transforms or just Location, Rotation or Scale and if you want to reset the normal transforms.
After doing it you can see that now the Transform location of the cube is reset to (0, 0, 0) while the new Delta Transform location is (7, 2, 1). This is its new "original" location. When you move the cube with G, resetting the transform with Alt+G moves it back to (7, 2, 1).

Thanks heaps. The method I found in another thread for setting rotation is Object > Transform > Align to Transform Orientation.     I used it and it seemed to work.  How is that different from  Alt + R?

@JohnArnold Well, Alt + R is resetting values to (global) 0, aligning to a transform orientation can set it to any transform orientation you choose. If it's set to Global than it's usually the same as Alt + R, but in Blender you can define custom orientations, e.g. setting it to the normal of a face which is rotated randomly. In this case aligning it to the custom orientation can set it to a very different rotation than Alt + R.

@JohnArnold You might consider accepting the answer. Or is there more help I can give you with this?

@JohnArnold Please read here: What should I do when someone answers my question?

Thanks Gordon. It was nice to find that out (accepting an answer) as I had never noticed that before. I looked for a method to CLOSE the thread as most forums around seem to have but didn't find it. I am now informed and will look at my other threads and do the same where appropriate. Looking back on other threads some had an 'answer' (with screen shots etc)  and some 'comments' (just text yet still an answer as far as I was concerned). I am now 'educated' and will be more careful.

@JohnArnold Well, many people don't know... nobody ever takes the tour, right?  ;)  But anyway, telling people to accept an answer sometimes feels inept because it looks like one only wants to get the reputation points. But it's often better and rather the goal of this site to show people who might have the same problem that there has been found a solution. And the algorithms here keep bumping up older questions if there is still no accepted answer, which is a bit frustrating sometimes if you going to help with some problem and see the best solutions has actually already been found long ago.

@JohnArnold Now the problem is only who asked can accept the answer, usually he's the only one to decide if it helped. But a lot of people ask and maybe stay around for the answer but are then gone so those answers will never be accepted, I guess. Comments are supposed to be informative, maybe give hints or ask for details to clarify questions - not for long discussions (what I'm doing now, sorry) and not for full acceptable answers because this site is meant to be clear and straight forward - there are questions and answers. Of course sometimes comments can provide or point to answers.

@JohnArnold What you can do now like this case with the UV faces - one way is to ask the respondent Jachym to put this as a full-fledged answer so you can accept it, or, let's say you have a comment which showed you the right direction but doesn't qualify as the real answer, you can even answer your own question to show how you found the solution. This still helps others who might come across the same problem. And after some time ( I think 48 hours) you can accept your own answer. You don't get reputation points for answering your own, but at least people see there is a solution.


text:
What are the small orange dots which appear next to a selected object
I have noticed ever since I first used Blender (mostly) when I select an object a small orange dot appears near to it and when I select All there are many of those small dots displayed (see image below - dots arrowed). Just wondering what they are called (so I can research it) and/or what they are used for.
Thanks

They appear to be the Object Origins for objects that are Selected but not the Active Object: https://docs.blender.org/manual/en/latest/scene_layout/object/origin.html

Thanks for the information. I will research 'object origin' point.

They are object origins.  Blender will show you only the origin of the currently selected objects. The sphere is the only selected object in this example:

If you select multiple objects, then you'll see multiple origins

By default the origin of the object is at the center of its geometry, but if you manipulate an object in edit mode, or you use commands to specifically move the origin, it can be anywhere.  Here I've moved the sphere in edit mode, leaving the origin in its original position:

There should be one dot for each object you have selected.  The color has to do with whether they're the active object or not.  Red means they're not.  Orange, as in my sphere example means they are.  If you look closely at the middle example, the origin of the cube is red, like your objects.

Thanks Marty. I have since found a video tutorial link which demonstrates how to move the origin which can be a great help if you say want to scale in one direction only on a particular axis which I think was also pointed out to me in a question I asked on how to move a face in one direction only (or something like that).


text:
how to separate an object joined by animation
I am trying to pull apart an object which is 'linked' to a 'parent' via animation.
I cannot seem to select the 'dotted black line' joining the object to it's 'parent' and when I select the animation in the node and delete it the object is also removed.
I have also tried 'separation' (press P) which I cannot get to work.
Is there a way and if so how do I do it?
Refer screen image below - red arrow is pointing to the dotted black line (hard to see).
Thanks

'P' is to Parent. ALT-P to unparent. The dotted black line is purely a gizmo showing the link, not something you can click on to select!

Thanks John. Silly me never gave it a thought to look up 'parent' (in the manual) I just thought of the word (parent) to ensure the reader understood what I mean. And I used 'clear and keep transformation' so that the objects didn't 'jump' to another position. Can't remember how to close this as 'solved'

P parents an object. Alt-P unparents it.
You can remove the dotted relationship lines from the viewport by unchecking the option in the Overlays menu if you wish:


text:
Are there any cloth settings to enable all sides of plane/cloth to fall to base
I am completely new to using this modifier and have created a simple object and plane (cloth) and using animation got the plane to 'fall over' my object.
The problem I have is that the corners do not fall to the base as the middle of the sides do as if the cloth has no 'stiffness'.
Are there any settings in the cloth modifier so that all the length of each edge falls to the base. I have tried each of the preset settings (cotton, denim etc) without success.
OR is the only method to select vertices and drag them?
Here is an image with red arrows pointing to the corners which do not fall far enough for my preference (I am trying to create an object which is covered by a tarpaulin.

You don't have enough subdivisions on the plane. Suggest you add a Subdiv Surface modifier to it in Object mode with the Level set to 2 and drag it above the cloth modifier on the modifiers panel. Watch this tutorial for the details. He uses loop cuts rather than subdividing the plane, but that's only really needed to get square faces if your plane isn't square.

Thanks John.  I tend to try and keep subdivisions to a minimum as usually my objects are only 'viewed' from a distance and total number of faces/triangles or whatever can affect fps (frames per second) in MSFS however in this case as you advise they affect the outcome in Blender. I hope I am assuming that square faces are preferred in Blender - maybe only for appearance? I have never used Subdiv Surface modifier so that is something new for me to know about. Thanks again.

@JohnArnold It is always good to keep the polycount low if you want to save resources, of course a higher polycount affects the performance. But as John said, you need a higher resolution if you want the cloth to look more natural. In the end, the "cloth" mesh can only bend where vertices are - edges are always a straight connection between vertices. So no vertex, no bending. Imagine a plane with only four corner vertices - it behaves like a board. You can try to make it bend more by lowering the values in the Stiffness parameters - but most likely it will not look very realistic.

As mentioned in the comments, to make a better looking cloth you need a higher resolution of the mesh. But when you do not need the cloth animated but only in its end state and to be seen from afar, you do not have to keep the resolution so high after you have created the cloth.
As an example, this is how a cloth looks like simulated with a plane consisting of 256 faces or 289 vertices - I've set it to Shade Smooth, but still not awesome:

So next up, I put a Subdivision Surface modifier on the plane, with Level = 2 and set to Simple (because I only want the resolution without smoothing) and place it above the Cloth modifier. Then I simulate it again, now with a plane of 4096 faces or 4225 vertices.
After the Cloth modifier I put another Subdivision Surface modifier, this time set to Catmull Clark and Level = 1. I put it after the cloth because I do not need that high resolution for the simulation to look good enough and it also simulates faster of course with less resolution. I just use it afterwards to smoothen the simulated cloth. Now I have a cloth mesh with 16,384 faces / 16,641 vertices and the result looks like this:

Much better in my opinion. But of course this mesh has a very high polycount. So after all previous modifiers I put another one, the Decimate modifier with the default Collapse option and set the Ratio quite low (which of course depends on how much you want to reduce the polycount while still being satisfied with the appearance of the mesh). In this example it is 0.1 or 10% of the original mesh, which results in 2843 faces or 1768 vertices. And I think it still looks quite good:

So these are the settings of all the modifiers used (apart from the Cloth modifier):

When you are happy with how it looks and do not want to make changes anymore, you can apply all the modifiers and change the mesh permanently. Just select the cloth in the 3D Viewport, press Ctrl+A > Apply > Visual Geometry to Mesh.
Of course this is still a higher polycount than a 256 faces mesh, but thanks to a higher resolution simulation and smoothing afterwards you (almost) get the look of a more than 16,000 faces cloth with less than 3,000 faces. And this is just my example, of course you could try it with different resolutions as well.

An absolutely fantastic tutorial. If I could have ticked 'answer is useful' more times I would have. I was also thinking before I read your tutorial that maybe to reduce the resolution I could use the decimate modifier but had not yet had time to try that out. Your tutorial goes into my 'Blender hints and tips' document. Thanks again.

I meant to mention that 3000 faces is very acceptable to me. I have to take into account that in MSFS I have quite a few other objects which will be 'on screen' at the same time and that is why I like to keep the polys as low as possible for each object I create while still maintaining a 'good look'. I use decimate quite a lot reducing the ratio until I loose detail and then 'backoff' a little.


text:
How to use loop cut on an irregular shaped mesh
I am modelling a 'shed' which has a sloping flat roof.
I want to add 'timber panels' around the top of the walls but want the bottom edge of those panels to be horizontal.
I tried loop cuts and moved the cut to near the top of the walls however as I move the cut towards the top the loop cut 'follows' the top of the wall instead of remaining horizontal.
Please advise how I can 'model' this.
Here is the image in blender - note the roof is sloping and so the look cut at the top is also 'sloping' which I don't want.

If you want to add an horizontal edge loop you can either cut with the Knife tool (K to activate, A to cut orthogonally, C to cut through) or loop cut with CtrlR then slide with GG and press E to align with the edge, F to switch from an edge to another.

Perfect. Thanks heaps. I also learned to use Ctrl R and G G (I used to drag with the mouse).


text:
Is it possible the extrude some faces with correct geometry?
Back to my (infamous) mesh of a shed which has a great number of edges produced using loop cuts and the knife tool.
I tried extruding (by 0.025m so that they stand out from the adjacent faces) all the faces you see (in the image below) which I have applied a brown timber material to but some of the 'geometry' went wrong especially at the corners which were then not 'square' to the other faces.
I thought that I would give up as it's not all that important as the modelo will never be viewed up close BUT thought I would post the question just for the learning experience (it in fact it is possible).

Hello could you please highlight or zoom in the problem you're talking about? Extrusion seems to work fine...

Hi moonboots. I am only extruding (all) those faces which have had the brown wood material applied.  If I choose all those faces on one side at a time the corners don't look good. If I only choose the two faces which are at say one corner then the faces created on the side of them (intersecting with the face with the 'corrugated' face) is not at 90 degrees.    Please advise how you extruded all the faces with the brown wood material? Did you choose all of them together and the extrude or one at a time?   Forget about the tall vertical separate mesh which is the side door.

Oh. Maybe I should have selected 'offset even'. Is that what is required?

Is this just a question of holding Alt while extruding, or checking the 'Even Thickness' box in the operator? Does that make the difference you're looking for? Oops, overlapping comments..

AltE then Extrude Faces Along Normals and enable the Offset Even option in the Operator Box? But it won't give a good topology because the roof stick to the walls. You can do the opposite, select all the walls between the beams and extrude inwards with an Extrude Faces Along Normals as well:

Thanks moonboots. Yes it was the bad topology between the roof and the walls. The thought had occurred to me to extrude the walls between the beams inwards but I hadn't tried tha5t. Thanks again.


text:
How to make a vessel appear half filled with stones
I have a 3d object of barge which I would like to look as if it is say half filled with gravel/small stones and with a 'peak' to simulate a pile of gravel created by a conveyor which is filling the barge from above.
I need some tuition if someone can give me some clues especially at this time when I am grieving (sorry) a loss and can't think straight and trying to keep busy.
I will attach a blender file (I have yet to apply suitable texture images for the sides and hull).
Thanks

I'm very sorry for your loss, John. For the question: is it just going to be a fixed mesh? You do not need any kind of filling animation/simulation?

@GordonBrinkmann word for word.... snap.

Thanks Gordon and Robin. Sorry I should have stated I just want a fixed mesh not an animated one eg assume that barge has been filled as far as required and no more gravel will be coming.

As others have said, sorry for your loss. I'd suggest using a plane subdivided quite a few times set at the level of your 'gravel', selecting a vertex where you want the centre of the 'peak' to be and moving it up on the Z-axis with Proportional Editing enabled (O-key).

I guess one way could be to add a plane that fills the inside of the barge. Subdivide it a few times in Edit Mode, best way maybe to use loop cuts Ctrl+R here to create a different amount of subdivisions in length and width to keep the faces mostly square.

Then with Proportional Editing enabled by either pressing O or using the button in the menu bar, select a few vertices here and there and move them slightly up or down with GZ to make the surface not look so perfectly flat (unless you want it like that).

Choose one spot where you want the pile to be and move it slightly more upwards. Depending on how you want it to look like you might need a higher resolution than my example. Or maybe change the falloff in the menu next to the Proportional Editing button.

To make it look smoother you can also add a Subdivision Surface modifier afterwards, just make sure you have Boundary Smooth set to Keep Corners to make sure the edges do not get rounded and no longer fill the barge completely.

Now there are two possible ways:
First, you could add a Displace modifier to your plane. Give it a new texture by clicking the New button.

On the Texture Properties tab I chose a Voronoi texture with a very small size. But note, how fine the details look like is determined by the resolution of the mesh - I have set the Subdivision Surface modifier to viewport and render levels 5 for this.

Another way would be to do it with Geometry Nodes. While the plane is selected, open a window with the Geometry Nodes Editor and click New to get a new nodetree. Since you are not yet very familiar with Geometry Nodes, I just give you an overview which nodes you need and in which submenu of the Add menu you will find them after pressing Shift+A (of course you can also search for them):

Group Input and Group Output are there by default after creating a new nodetree
Distribute Points on Faces under Add > Point
Instance on Points under Add > Instances (important: not Instances to Points!)
Ico Sphere (or other object as gravel): Add > Mesh > Primitives
Random Value under Add > Utilities
Join Geometry under Add > Geometry

Now you plug the Group Input into the Distribute Points on Faces, that output into Instance on Points > Points where you also plug the Ico Sphere into the Instance socket. The Random Value node set to Vector gets plugged into the Scale input. Now the Instances output gets plugged into the Join Geometry node as well as the Group Input and then connect the joined mesh to the Group Output.
And this is how it looks like, the values you might adjust to your liking. In the Ico Sphere node you can set the base radius of the gravel objects, the Random Value node's Min and Max values are the scaling range for varying the size of the gravel.

As mentioned above in the list of nodes, you can also use a different object than the Ico Sphere, for example a Cube (or even a collection of custom gravel objects, but for simplicity we use primitives). The advantage is it has less vertices and maybe you want less "rounded" gravel. To place the cubes more randomly you can add random values for the Rotation on the Instance on Points node as well:

In the file there are two planes: one with the Geometry Nodes version, the other with the Displacement modifier (the latter is hidden).

Curses! Too slow again! . :^) (Just used a procedural material rather than fiddling around with particles...)

@JohnEason I skipped the simple texture part because I thought from how the question was phrased he was going for something with more real displacement/geometry instead of just having some bump. But at least my Displacement modifier is using a procedural texture, too  ;)  But taiyo was even quicker...

I forgot that I already had a procedural gravel material setup in my assets or I'd have been a lot quicker! :^)

Everything from scratch :) Always amazes me what approaches people come up with, nice setups!

Thanks Gordon and John. You have ALL been so kind to show me different methods to use. Not sure what I will use yet and so won't accept any answer as the 'solution'. Having an emotional day and may leave this a bit.  I should also have advised that my (gravel) barge will most likely only ever be view from as far away as 1000 feet oe more (aircraft flying over). Later I will reread ALL solutions and maybe work each one just for the learning. Thanks HEAPS to ALL again. I consider you to be my 'mate'.

I chose your solution Gordon but could have easily also chose the solution by  tayio. Problem is that I can't choose both.

@JohnArnold You're welcome, mate.

@JohnArnold no worries. If your barge is only seen from far away, then a particle system consisting of thousands of instances is overshooting the mark.

@JohnArnold taiyo is right, for that distance probably the simplest and most resource-friendly solution will be the one from John. But it is always a good idea to try out the others for learning Blender.

Sounds like a use case for a Particle System. First you need to prepare the surface where all the stones should be. Create a plane and subdivide it appropiately:

Now lets shape the conveyer pile. Select some vertices to be the peak, enable Soft Selection and adjust the radius of influence:

I think it looks a bit more realistic if it's not flat everywhere else, but that is artistic freedom:

Now lets prepare some stones. I just beveled some cubes for demonstration. Create some versions of them and group them under a new collection:

Now the Particle System comes into play. Select the plane and add the Particle System modifier to it. Head over to the Particle Properties Tab and make some basic settings:

select Hair mode
tick Advanced (this causes the Rotation option to pop up)
tick Rotation and set Orientation Axis to Normal (other options work too)
under Render > Render As, select Collection
now the Collection option pops up where you can finally select the prepared stones collection in Instance Collection
also tick Pick Random

You should see now something like this:

Tweak the particle settings until you're satisfied. I changed the number of spawned stones under Emission, the Randomize value under Rotation and the Scale and Scale Randomness values under Render and achieved this result:

Oh and.. i wish you all the best.

I really like this answer because it looks so lame in the first stages, and then all of a sudden bam, perfect gravel

@pipe Haha thx, i tried my best to bring the tension to the point^^


text:
What is the easiest method to add a half circle cut out
Just wondering what is the easiest method to achieve half circle cutouts on the side of a 'cube' OR a link to a suitable video tutorial. See image. The cutouts can be the entire height on the sides (not as per the image) as the object will not be viewed closeup. Just a very simple object.
Thanks

Step 1: Add a cylinder, then size and move it to where you want it to be.
Step 2: Add a boolean modifier onto the box, and select the cylinder as the object.
Optional step 3: apply the modifier by selecting the modifier, and pressing Ctrl+a, or pressing apply on the modifier

Thanks. Worked like a dream and now that I know to add the Boolean Modifier I have learned something else.

Glad to help :)


text:
Can a single object in an array be exported?
Just wondering if a single object which is part of an array can be easily selected for export. I have tried in edit mode pressing the P key but can't work out how to quickly select every face in the object (I can hold down the shift key and LMB on each face but there are heaps of them).

To avoid unexpected behaviours, it's better to duplicate the object (Shift D) and apply the array modifier.
Then in edit mode there are several ways of fast selecting, some of them:
B to box select, C to paint select, L to select all the area where the mouse is hovering, Ctrl L to select all the geometry linked to the selected area, H to hide every unwanted or occluding geometry, Ctrl I to invert the selection, vertex groups select/unselect buttons (if there are vertex groups), Alt left click to select loops, ....
When all the desired area is selected you can press P to separate it into a new object and delete the duplicate.


text:
How to add text to model
I want to add signs including text to my model.
I ADDed MESH > PLANE for the sign board resized and scaled and then ADDed TEXT changed font size then moved (Grab) both only the side of my model. THe model in Blender looks ok to me (but obviously wrong) but the exported extended glTF used in MSFS shows the boards but no text - see images. What is the correct way of adding a 'sign' to an object?

The easy way of adding it would be through textures. Did u try making a material -> adding texture?

What did u mean when you said "Added Text", did u mean the 2D Text mesh? If so, did u try adding some 3D height to it as a 2D mesh would overlap with the surface u r trying to put on

Thanks Suhas. When I added the 'plane' I applied a Material to it and chose a Base Color to it. Should it be done a different way?  I have only ever so far added an Image Texture to objects. What is the correct method when I only want it to be white?          I When I created the text for the sign I did it via ADD > TEXT object and then simply changed the font size and of course the actual text (from Text to Public etc).

If you use a text object with zero thickness, i.e. no extrusion to give it some height, and you have it sitting directly in the same location as the plane used as the sign background, then the intersecting geometry can cause strange artifacts or maybe even hide the text completely. So if you want a text object you need to give it some height - or place it a little bit in front of the sign (but that would actually make the text float in the air).

Thanks Gordon. That makes perfect sense. I have added Geometry > Extrude  (0.01) and will see what happens. What about the actual sign ( I created via Add > Mesh > Plane)? Should have I used Add > Mesh >Cube to give it some 'depth'? What is 'plane' normally used for? In MSFS the actual 'sign' is displayed with a strange texture even though I only left a Base Color on it?

What "plane" is normally used for? Well, many things... starting point for lots of meshes. Emitter of particles. Floor for rigid body simulations. Lots of things. You don't have to add depth to use it as a sign, a cube instead of a plane of course has more geometry (= more information to be calculated or stored), but it depends on how realistic you want to model something. If your sign is just a sheet of paper, than zero thickness is acceptable (although of course even paper has a thickness), but if it's a more "robust" sign made from e.g. wood, it's usually a lot thicker than paper.

However, if you're not zooming in too much you might get away with a completely thin sign. Then the question is, why use a Text object for the text? As long as you don't have some kind of billboard with replaceable letters, usually signs have the text printed or painted in thin layers of color on them, so an image texture with the words on it would be fine. You can even use one material with one image with all words on it and put them on different objects, as long as their UV maps fit the correct text areas they should display. For MSFS question: I'm sorry, I don't know anything about MSFS...

Add Mesh -> Plane -> scale it in edit mode on y as needed

add solidify modifier + bevel modifier

add text -> under geometry: give text some extrude value

add materials to text + plane

Well I followed these instructions and even 'extruded' the text for the middle sign to 0.1 and so in Blender the text is easily seen protruding from the plane yet in MSFS it is still not seen. Strangely there also is a problem with the boat bumpers/fenders which have blue ends and easily seen in Blender as blue but are white in MSFS.  Any ideas. what to check/change?

Sorry, but what is MSFS?

Sorry  Microsoft Flight Simulator 2020

ok, i tested it. Looks like solidify modifier + bevel modifier must be applied so that gltf can export/import it. Please try this out and let me know whether this helped. I could successfully export/import my text with applied modifiers.

Thanks again for trying to work this out for me. Not sure what you mean by "applied" but if you mean that 'apply modifiers' in 'geometry must be ticked I already have it ticked. Should I be converting the text and plane to mesh?

Ok, please try this: just export your sign+text to gltf. Then start new blender file and import it. Does this work? If not, please provide your blend file. Then I will check it out.

I am now thinking that MSFS is causing the problem as during the compilation (of all my scenery glTFs) it displays the following -   Compiling glTF data for ..... (name of file)  then displays  Material for this name already exists Material.001 renaming to  Material.001x  it also displays the same message for Material.002 (renaming to Material.002x)    and also Material (renaming to Materialx).  I can't see all these materials in the materials panel in Blender.   Maybe I should delete the plane and text and start again.  Should the (default names) material be renamed?

Only if other materials have the same name and this seems to be the case here. But I don‘t know whether this causes the problem but I would rename it if I were you

I just had a break from this and thought of two possibilities but it is late and so will try it out tomorrow and report back.

I think I have found the reason why the signs don't display in MSFS even after making changes suggested above. I believe (yet to be confirmed) that Airport Design Editor is the culprit as I removed 2 of the signs, exported and built into my MSFS scenery and yet the three signs are still displayed and found old versions of the files in another folder which I know nothing about. I have placed a query on the Airport Design Editor forum to seek answers.

Let us continue this discussion in chat.