21
$\begingroup$

Is it possible to render vertices with materials applied on them?

I subdivided a mesh, and deleted all the faces so only the vertices were left.
I could theoretically apply cool effects on them (I think it could be useful in motion graphics), but I could not apply materials on them or paint them in vertex paint mode.

I'm new to blender and i might do something wrong though. I would appreciate any help, thanks.

Why do I need it:
I've tried to replicate some of the trapcodes particle effects, but it was kind of hard to do this with Blender particles, which are really great by the way.

it might has something to do with my lack of experience - anyway I couldn't do it. And I think since blender is 3D software in the first place it could have some other ways to do it.

$\endgroup$

3 Answers 3

20
+50
$\begingroup$

You can use DupliVerts to achieve an effect like this. Compared to other methods for rendering vertices, DupliVerts are going to give you by far the most control over materials, though the procedure for using them is slightly more complicated. They also have the advantage of working regardless of which render engine you are using.

To use DupliVerts to render vertices, follow these steps:

  • Add a new mesh object (I prefer using spheres for this) and scale down to your desired size
  • Using the Transform panel (N), move that object to the exact same location as the object you want to render the vertices of, by manually entering in the coordinates
  • Now hold down Shift and select your target object. Make sure both the target object and your sphere are selected, and that the target was selected last
  • Press Ctrl+P and parent the object
  • Go to the Properties>Object panel, scroll down to "Duplicate", and select "Verts"

Now you will a copy of your sphere positioned at every vertex of your target object. You can now choose which materials to use for each of the objects. If you want to render only the vertices, then assign a Transparent material to the target object, and a visible material to the dupliverts.

My result, using DupliVerts on an Icosphere with and orange diffuse material in Cycles:

enter image description here

$\endgroup$
1
  • 1
    $\begingroup$ i just did( i mean started from scratch ) and it finally worked, great - thank you!! although both answers were very helpful it just what i was looking for $\endgroup$ Jul 15, 2013 at 19:13
9
$\begingroup$

EDIT:

Check out the following Github repository for example code: https://github.com/SBCV/Blender-Import-Point-Cloud-Addon

ORIGINAL ANSWER:

You can use a particle system to render the vertices. I found that this is less memory/computational expensive than using DupliVerts. (A single material can be used to colorize all particles/vertices)

You need two different blender objects for this method (One object with vertices you want to render, one object used for representing the vertices (in this example a cube))

See the settings of the particle system as shown in the image below. (Adjust the emission number as well as the hair length according to your needs.)

Particle Settings To colorize the different vertices set the material of the cube as follows:

Particle Material The image texture node points to a texture which has a dimension of (number_vertices, 1). Each pixel defines the color for a specific vertex.

Here is an excerpt of the code I used to generate the corresponding texture image.

num_points = len(points)
image = bpy.data.images.new('ParticleColor', num_points, 1)
# working on a copy of the pixels results in a MASSIVE gain of performance speed
local_pixels = list(image.pixels[:])
for point_index, point in enumerate(points):
    column_offset = point_index * 4     # (R,G,B,A)
    color = point.color 
    # Order is R,G,B, opacity
    local_pixels[column_offset] = color[0] / 255.0
    local_pixels[column_offset + 1] = color[1] / 255.0
    local_pixels[column_offset + 2] = color[2] / 255.0
    # opacity (0 = transparent, 1 = opaque)
    #local_pixels[column_offset + 3] = 1.0    # already set by default     
image.pixels = local_pixels[:]  
image_texture_node.image = image

Final result: enter image description here

$\endgroup$
1
  • $\begingroup$ Wow this is great! I just built a image mosaic system with it. Thank you so much. $\endgroup$
    – 3pointedit
    Jan 28, 2018 at 13:03
7
$\begingroup$

I'm not 100% sure what you are looking for, but you can have vertices rendered using a halo material:

Halo

This only works with the internal renderer at this time as far as I'm aware (possibly may work with Yafaray but I haven't tested that).

You can animate your mesh using shape keys, modifiers, etc, to achieve various motion graphics effects.

$\endgroup$
3
  • $\begingroup$ it works great! thank you, is there a way to render it in cycles somehow? $\endgroup$ Jul 15, 2013 at 18:44
  • 1
    $\begingroup$ @orustammanapov Cycles does not have a built in halo material (though it might get one soon), but you can use this node setup, combined with a plane-DupliVert to achieve a similar effect. $\endgroup$
    – Gwen
    Jul 15, 2013 at 18:57
  • $\begingroup$ @Gwenn - that is good! Actually solves a problem for something I'm working on, which I hadn't even formulated a question for. Put that info directly in your answer, please. $\endgroup$
    – DarenW
    Jul 16, 2013 at 2:32

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .