10 – Point Cloud & 3D Scanning / Recording of January 14th, 2025

Course Files


Lesson Overview

During today’s module we will further explore the manipulation of point clouds inside Touchdesigner. 

Starting with masking (threshold TOP)  to select points, colouring them (using a lookup TOP and source colours)  and finally transforming their position using 2 methods.


We will start changing their position by using a simple Noise TOP to temporarily modify their original position randomly by increasing the Amplitude. We will then dive deeper in the transformation by using the Feedback Loop technique which will give us the possibility to store their new position for each frame and modify it through time.

First of all let’s import a PLY from our sample folder and start to set up the masking by using a Threshold TOP, which is set to select points based on the Red channel (horizontal axes).


We can colour the selected points in white so that we can visualise the selection in our Render scene. Meanwhile let’s build a slider to control from the UI the position of the threshold.


To translate away the group of selected points from the model of the banana we can set up a Feedback Loop using an Add TOP which is going to add colours to the existing group of pixels selected with the Threshold TOP. To move them horizontally we will use a Constant TOP, placing it after the Feedback TOP and adding some tiny value only for the Red channel.


Note: Always double check the pixel format of the Constant TOP and set it at 32 bit float RGBA.

Once the transformation has started the only way to set back the original position of the cloud of points is to Reset the Feedback TOP. That’s why having a button on the UI could be useful through the next steps.

The selection of points with the Threshold TOP can be tweaked with the Soften parameter so that the line of selection is less sharp and more blurred. This will enable us to create a smoother separation between the group of selected points and the original model.


Now let’s substitute the Constant TOP with a Noise TOP so that we can apply and Add a random colour to the evolving position inside the feedback loop.

Please notice that the Noise TOP has 2 inputs: the first one is to use the result of the Feedback as a background image to modify, while the second input is giving us the new coordinate map of the new points position. Both inputs need to be connected to the Feedback TOP.

The Output page of Noise is set to Multiply with the input (Input * Noise), while setting the Offset to zero and Amplitude to a tiny number which will then run at 60 FPS inside the feedback loop.


Now the points are moving randomly and continuously from their original position, but it’s difficult to drive them in a certain direction only by using the Noise TOP. 

To add some wind effect on the vertical axes we have to place a Math TOP after the Noise and act only on the Green channel (vertical) by setting the Channel Mask exclusively to “G” in the Common page of the Math TOP.


Now back to the Math TOP parameters, let’s go to the Multi-Add page and set the Pre-Add parameter with a tiny number like 0.01 or even less. This parameter will affect the “wind speed” applied to the group of points that are already moving with a Turbulence given by the Noise TOP.


Let’s now introduce Particle GPU, a very useful Tool from the Palette that you can now use to generate particles from the point position of the PLY model. We will have to edit some parameters for example the Material, changing it from Constant to Line, so that we can render dots rather than the default leaf textures.


We can also define other parameters easily, such as the number of Particles generated per second, their life expect, the minimum and max size of the particles; together with other parameters present in the Force page, like Wind or Turbulence effect. The goal is to obtain a flock of particles flying upwards in the same direction, together with some random movement.


Something very useful and simple we could edit is the position of the camera inside the Particle GPU container. We can use and match the Camera Viewport we are using for our Render inside the parameter CAM used in the Particle GPU.

Just dive inside the container and find the Render TOP, split your Pane and drag the Camera Viewport in the Render TOP parameter Cam.


Now we can composite the Particle GPU over the Render of the point cloud with a simple Over TOP.


We can also remove or skip the white colouring of the selected points that we were using mostly to understand visually the position of the Threshold TOP.

Please remember that generally colours coming from a .ply file are expressed with a value range from 0 to 255. That’s why we are using a Math TOP to reduce the range and normalise it between 0 and 1.


In this second exercise we want to mask/select the group of points using the “proximity to a point” method, so that we can act on the point cloud manipulation from anywhere in the 3D space, rather than just selecting points by following one of the 3 axes (x,y,z).

To understand better this technique of proximity to a point we will start by modifying a grid of points, later we will substitute the grid with banana.ply or any other point cloud model.

Let’s start building our grid of points using Ramp TOP and a Noise TOP for the Tz position.


Now it’s time to create the Instancing using Add SOP and Convert SOP to create the particle point to instance with our classic Instancing method. Don’t forget to use the PointSprite MAT when you render points. 


Let’s now create a Base COMP where we will calculate the selection of a group of points based on the proximity to another vector/point.


Inside our Base COMP we will receive the coordinates of all the points present in the cloud, and we can now start to create a position with Constant TOP (let’s start from the centre origin 0,0,0) and then we can calculate the vector directions by inputting in a Subtract TOP both the Constant TOP and the coordinates of all the other points.


Now this is the most difficult step to go through, and it is about invoking the Pythagoras theorem and calculating the volume of a sphere based on the vector directions. It is done in TOPs using Math TOP and setting up the OP Page with: 

Channel Pre OP = Square
Combine Channels = Add
Channel Post OP = Root


After creating the core logic using this mathematical method within the parameters of Math TOP we can now use a Threshold TOP to define the radius of the sphere and then soften the edges.


Now we can use the selection to colour the selected points in white, but also to modify their position by feeding the Noise TOP input 1 (background image) from our Base COMP. So that in the feedback loop process only the selected points will be affecting the previous position. Keep in mind that in order to reuse the updated position we need to keep the coordinate Map coming from the Feedback TOP in the second input of the Noise TOP.


The setup of the Noise TOP present in the feedback is very similar to the one we did during our first exercise.

Now we can dedicate some time to pilot the position of the point driven by the previous Constant TOP and add some interactivity by connecting the left click of the mouse to the Threshold TOP. To do this we will use the Panel CHOP and take mouse input rollover coordinates (rollu, rollv) and left click (lselect) channels.


Inside our Base COMP we have the logic created with CHOPs to both control the position of the point (Constant TOP) and the radius of the selection (Threshold TOP).


We can also add a Level TOP (inside or outside the Base COMP) that will enable the selection to pass through by simply changing the opacity parameter with the left click. 

So that when it’s not clicked it will just highlight the area of selection by colouring it, while if you click it will start the transformation.


Finally we can substitute the Grid of points with the banana.ply using the position, but also the colours. Please remember that previously, colours were generated  with a blue Constant TOP. Change the input going to the Over TOP with the new colours coming from the PLY.


This is the Overview of the project file. It looks like a simple project, but at the same time it has a certain complexity, so when you want to add additional logic try to keep the network clean and order the operators to not lose yourself in the complexity. A good practice is to encapsulate your branches inside Base COMPs. It’s up to you to decide which ones.


There is one extra content within the files to download, somehow it should be easier for you to understand because there is no point selection or masking, but only a Feedback loop process applied to all the points that will Reset with the beat of the music. 


The project includes the Audio Analysis tool from the Palette and it’s using sound reactive channels to modify not only the Reset of Feedback TOP, but also the Amplitude of Noise TOP and others flashy FX in the post rendering part of the network.

Have fun exploring this extra content and feel free to start importing your PLY files! A good practice is to always start a new file instead of editing an existing one: in this way you will increase exponentially your learning curve.


Learning Outcomes

  • Point cloud file formats and software to generate them
  • Understanding of the Attributes related to a point cloud (position, colour, normals)
  • Knowing how to manipulate point clouds (masking, colouring, transforming)
  • Understanding of the feedback loop technique applied to point position
  • Leveraging interactive techniques by starting with a mouse input interaction

List of Nodes

  • Point File in, Point Select, Point Transform, Reorder, Math, Noise, Feedback, Add TOP
  • Add, Convert SOP
  • Constant, Speed, Lag, Math CHOP
  • Geo, Base, Cam, Container COMP

Get Support

To get support outside of the live session, please join our discord server with this invite:
https://discord.gg/F7cXRMYUK7