def METHOD_NAME(self):
    self.worldNP = render.attach_new_node('World')
    # World
    self.debugNP = self.worldNP.attach_new_node(BulletDebugNode('Debug'))
    self.debugNP.show()
    self.debugNP.node().show_normals(True)
    self.world = BulletWorld()
    self.world.set_gravity((0, 0, -9.81))
    self.world.set_debug_node(self.debugNP.node())
    # Box (dynamic)
    shape = BulletBoxShape((0.5, 0.5, 0.5))
    np = self.worldNP.attach_new_node(BulletRigidBodyNode('Box'))
    np.node().set_mass(1.0)
    np.node().add_shape(shape)
    np.set_pos(0, 0, 4)
    np.set_collide_mask(BitMask32.all_on())
    self.world.attach(np.node())
    self.boxNP = np # For applying force & torque
    visualNP = loader.load_model('models/box.egg')
    visualNP.clear_model_nodes()
    visualNP.reparent_to(self.boxNP)
    # Heightfield (static)
    height = 8.0
    img = PNMImage(Filename('models/elevation.png'))
    shape = BulletHeightfieldShape(img, height, ZUp)
    shape.set_use_diamond_subdivision(True)
    np = self.worldNP.attach_new_node(BulletRigidBodyNode('Heightfield'))
    np.node().add_shape(shape)
    np.set_pos(0, 0, 0)
    np.set_collide_mask(BitMask32.all_on())
    self.world.attach(np.node())
    self.hf = np.node() # To enable/disable debug visualisation
    self.terrain = GeoMipTerrain('terrain')
    self.terrain.set_heightfield(img)
    self.terrain.set_block_size(32)
    self.terrain.set_near(50)
    self.terrain.set_far(100)
    self.terrain.set_focal_point(base.camera)
    rootNP = self.terrain.get_root()
    rootNP.reparent_to(render)
    rootNP.set_sz(8.0)
    offset = img.get_x_size() / 2.0 - 0.5
    rootNP.set_pos(-offset, -offset, -height / 2.0)
    self.terrain.generate()