Part 2 · Project 01

Basketball court and bouncing ball

File projects/01-basketball/basketball_court.blendOutput 192-frame video, 8 s at 24 fpsEngine Cycles

A regulation-size court with two hoops under arena lights. The ball sits still, is thrown up to the rim, drops and bounces to a stop.

Frame 70 of the court animation: the north hoop, dark arena background, ball on the floor near the baseline
Frame 70 of renders/basketball_cycles_0001-0192.mp4, just before the ball hits the floor.

What's in the scene

CollectionObjects
Basketball Court › CourtCourt_Floor
Basketball Court › BallBasketball (animated)
Basketball Court › Hoop_NorthHoop_North (empty) with Pole, Base, Arm, Backboard, TargetSquare, Bracket, Rim, Net
Basketball Court › Hoop_Souththe same, turned to face the other way at the other end
Arena Lights8 overhead panels, Rim_Left, Rim_Right, Camera_Fill
CollectionCamera, and a Sun named Light (hidden from renders)

Step 1 · Set up the file

  1. Start Blender › General. Click the default cube, press X › Delete. Keep the Camera and the Light.
  2. File › Save As into projects/01-basketball/ as basketball_court.blend.
  3. Copy the two texture folders into 01-basketball/assets/textures/: basketball-wooden-court-sport-game/51439.jpg and basketball-ball/basketball-ball.jpg.
  4. Check the Scene tab › Units: Metric, Unit Scale 1.0, Length Meters (the defaults).
  5. Optional helper: select the Light, in its Data tab change it to Sun, Strength 3.5, and click its camera icon in the Outliner so it doesn't render. It just keeps the Solid view readable while you work.

Step 2 · The court floor

  1. Add › Mesh › Plane. Rename it Court_Floor.
  2. In the Sidebar (N) › Item, set Dimensions X 19.122, Y 30.685. Then Ctrl+A › Scale.
  3. Material tab › New, rename it Court_Wood. Click the dot beside Base Color › Image Texture › Open › 51439.jpg.
  4. Set Roughness 0.35, open Coat and set Weight 0.4, Roughness 0.12.
  5. Press Z › Material Preview to see it.
Top-down picture of a wooden basketball court with white lines
The court texture, used as-is on one plane.

Step 3 · The ball

  1. Press Shift+C to centre the cursor. Add › Mesh › UV Sphere. In Adjust Last Operation set Segments 48, Rings 24, Radius 0.12, Location (0, 6.935, 0.12).
  2. Rename it Basketball. Right-click › Shade Smooth.
  3. New material Basketball_Rubber, Roughness 0.55. Build the nodes below in the Shading workspace.
Nodes: Basketball_Rubber
  • Texture Coordinate › Generated → Separate XYZ
  • Combine XYZ: X ← Separate X, Y ← Separate Z, Z = 0
  • Mapping: Location X 0.167, Scale X 0.667 (Y and Z stay 1) → Image Texture basketball-ball.jpg (sRGB)
  • Image Color → Principled Base Color, and → Bump Height (Strength 0.15, Distance 0.002) → Principled Normal
Close-up photo of orange basketball leather with black seams
The ball photo. A UV-mapped version would also work: connect the image straight to Base Color and compare.

Step 4 · Build one hoop

A hoop is eight simple shapes held together by an empty. Build the north hoop, then copy it. All positions are world positions; type them into the Sidebar.

  1. Add › Empty › Plain Axes at (0, 12.008, 3.05), named Hoop_North. This point is the centre of the rim, which is 3.05 m (10 ft) above the floor.
  2. For each part below: add the primitive, set its settings in Adjust Last Operation, then type its Dimensions or Location, apply the scale for cubes, rename it, and give it its material.
PartPrimitive and settingsSize (m)Centre (m)Material
Hoop_North_PoleCylinder, 24 verticesr 0.1, depth 3.5(0, 14.708, 1.75)Hoop_Pole_Metal
Hoop_North_BaseCube0.6 × 0.6 × 0.05(0, 14.708, 0.025)Hoop_Pole_Metal
Hoop_North_ArmCylinder, 16 vertices, rotation X 90°r 0.06, depth 2.261(0, 13.578, 3.44)Hoop_Pole_Metal
Hoop_North_BackboardCube1.83 × 0.05 × 1.07(0, 12.422, 3.435)Hoop_Backboard
Hoop_North_TargetSquarePlane frame (see below)0.59 × 0.45(0, 12.392, 3.275)Hoop_Rim_Orange
Hoop_North_BracketCube0.12 × 0.17 × 0.03(0, 12.322, 3.04)Hoop_Rim_Orange
Hoop_North_RimTorus: major 48 / minor 12 segmentsmajor r 0.2385, minor r 0.01(0, 12.008, 3.05)Hoop_Rim_Orange
Hoop_North_NetCylinder, 16 vertices, no caps (see below)r 0.232, depth 0.42(0, 12.008, 2.83)Hoop_Net

The target square

  1. Add a Plane, rotate it R X 90 so it stands upright, set Dimensions X 0.59, Z 0.45, and apply rotation and scale (Ctrl+A › All Transforms).
  2. Tab into Edit Mode, face select (3), press I and inset about 0.05. Press X › Faces to delete the inner face, leaving an outline.
  3. Select all (A), E then Y 0.01 to give it 1 cm of thickness. Back in Object Mode, place it at (0, 12.392, 3.275), just in front of the board, with its bottom edge at rim height.

The net

  1. Add a Cylinder: Vertices 16, Radius 0.232, Depth 0.42, Cap Fill Type: Nothing (an open tube). Location (0, 12.008, 2.83).
  2. Tab, hover over a side and press Ctrl+R, scroll up until there are 5 cuts, click twice. You now have 7 rings of 16 points.
  3. Alt+click the bottom ring and scale it in (S 0.6) so the net tapers. Scale the rings above it in a little less each, for a smooth funnel.
  4. For the diamond pattern, select every second ring (Alt+click, then Shift+Alt+click) and rotate it half a segment: R Z 11.25.
  5. Object Mode › Modifiers › Wireframe: Thickness 0.006, Even Thickness on. Every edge becomes a 6 mm cord.

Hoop materials

MaterialBase ColorMetallicRoughness
Hoop_Pole_Metal(0.08, 0.09, 0.10)0.80.4
Hoop_Backboard(0.95, 0.95, 0.95)00.3
Hoop_Rim_Orange(0.9, 0.22, 0.03)0.70.35
Hoop_Net(0.97, 0.97, 0.97)00.8

Make each material once, then on other objects pick it from the material dropdown (the sphere icon left of the name) instead of pressing New.

Group, then copy to the south end

  1. Select all eight parts, then Shift+click the Hoop_North empty last. Ctrl+P › Object (Keep Transform).
  2. With everything still selected, M › New Collection › Hoop_North. In the Outliner, make a Basketball Court collection and drag Hoop_North into it, along with new Court and Ball collections for the floor and ball.
  3. Right-click the empty in the Outliner › Select Hierarchy. Shift+D, then right-click to drop the copy in place.
  4. Set the pivot to the 3D cursor (. pie › 3D Cursor), make sure the cursor is at the centre (Shift+C), and rotate R Z 180. The copy swings to the other end, facing the court, with its empty at (0, −12.008, 3.05).
  5. Rename the copies from .001 to Hoop_South_… (Ctrl+F2 renames many at once with find and replace) and move them into a Hoop_South collection.

Step 5 · The dark arena sky

World tab, then in the Shading workspace switch the Shader Editor's dropdown from Object to World:

Nodes: World
  • Texture Coordinate › Generated → Separate XYZ › Z → Color Ramp
  • Color Ramp stops: position 0 colour (0.033, 0.033, 0.043), position 0.35 colour (0.002, 0.002, 0.003)
  • Color Ramp Color → Background Color, Strength 1 → World Output

The sky is dark grey-blue at the horizon and fades to black above, so the arena seems to disappear into darkness and the lit court stands out.

Step 6 · Arena lights

  1. Add › Light › Area, named Overhead_Panel_01. Data tab: Shape Rectangle, Size X 3.2, Y 2.4, Power 1100 W, Color (1.0, 0.95, 0.88). Location (−5, −11, 11), rotation 0 (pointing straight down).
  2. Duplicate it (Shift+D) until you have eight panels at X = −5 and 5, Y = −11, −3.7, 3.7 and 11, all at Z = 11.
  3. Add the side and fill lights from the table, then put all of them in an Arena Lights collection.
LightSize (m)PowerColorLocationRotation (°)
Overhead_Panel × 83.2 × 2.41100 W(1.0, 0.95, 0.88)(±5, ±11 or ±3.7, 11)(0, 0, 0)
Rim_Left6 × 22100 W(0.85, 0.9, 1.0) cool(−13, 2, 6)(69.2, 0, −81.3)
Rim_Right6 × 21500 W(1.0, 0.9, 0.78) warm(13, −2, 6)(69.2, 0, 98.7)
Camera_Fill2 × 2200 W(1.0, 0.96, 0.9)(5, −1, 2.5)(80.1, 0, 35.5)

Step 7 · The camera

Select the Camera: Location (2.4, 2.0, 1.6), Rotation (85.9°, 0°, 16.7°). Data tab: Focal Length 26 mm, Clip End 200 m, Depth of Field off. Press Numpad 0 to check: you should see the north hoop with the ball in front of it, as in the frame above. The camera sits at eye height, 1.6 m, which makes the hoop feel tall.

Step 8 · Animate the throw and bounces

  1. Output tab: Frame Rate 24 fps. Timeline: Start 1, End 192 (8 seconds).
  2. Select the ball. For each row below: type the frame number into the Timeline's current-frame field, type Y and Z into Location in the Sidebar (X stays 0), hover the Location fields and press I.
  3. Open the Graph Editor in the bottom area. Select the keys and press T to set the interpolation listed in the table (each setting controls the segment that starts at that key).
  4. Press Space to play.
FrameYZ (height)InterpolationWhat happens
16.9350.12Linearball resting on the floor
126.9350.12Linearthe shot starts
4811.6393.05Linearball reaches the rim
769.90.12Quadraticdrops and hits the floor
889.91.02Quadraticfirst bounce top
1009.90.12Quadraticfloor
1099.90.62Quadraticsecond bounce
1189.90.12Quadraticfloor
1259.90.37Quadraticthird bounce
1329.90.12Quadraticfloor
1379.90.22Quadraticfourth bounce
1429.90.12Quadraticfloor
1459.90.15Quadratica last little hop
1489.90.12Linearat rest
1929.90.12Linearholds until the end

Finally, in the Render tab tick Motion Blur. Fast frames get a natural smear, like a real camera.

Step 9 · Render the video

  1. Preview first: Render tab › Engine EEVEE, then Ctrl+F12. Your project did this too; the result is renders/v1_eevee_preview/basketball_preview_0001-0192.mp4. Check the motion before spending time on the slow render.
  2. Switch to Cycles, Device GPU Compute. Sampling › Render: Noise Threshold 0.03, Max Samples 96, Denoise on (OpenImageDenoise). Light Paths › Max Bounces Total 8.
  3. Color Management: View Transform AgX, Look Punchy, Exposure −0.2.
  4. Output tab: Resolution 1920 × 1080, 100%. Output path //renders\. File Format FFmpeg Video, Container MPEG-4, Video Codec H.264.
  5. Render › Render Animation (Ctrl+F12). The video lands in renders/, named with the frame range.

Check your result

  • The court lines are crisp and not stretched.
  • Both hoops face the court, rims at 3.05 m, nets tapering down.
  • The ball's leather grain catches the light.
  • The ball rests, flies up to the rim, falls and bounces five times, then stops by frame 148.
  • The background is near-black and the floor shows soft reflections of the overhead panels.