Caveats

Note:
Transformation information from the vtkActor is lost during translation. This means that any scaling, rotating, or translating of the geometry should be done on the Performer side (in the scenegraph).

Note:
VTK doesn't necessarily provide normals... If you want shading to work properly, you will probably want to put a vtkPolyDataNormals filter in your vtk pipeline.

Important: do not use vtkDataSetMapper!
vtkActorToPF will fail if the vtkActor uses a vtkDataSetMapper. Well, what is a vtkDataSetMapper? A vtkDataSetMapper is simply a combination of a vtkGeometryFilter and a vtkPolyDataMapper. The reason why this crashes vtkActorToPF is that the vtkPolyDataMapper is not created until it is needed (the first call to Render()). Since vtk is not doing the rendering, Render() is never called. In order to get around this problem, whenever you have a vtkDataSetMapper in your pipeline, simply replace it with a vtkGeometryFilter followed by a vtkPolyDataMapper.

Example: consider the UGrid.cxx example from the vtk2.0 distribution:
  vtkDataSetMapper *ugridMapper = vtkDataSetMapper::New();
  ugridMapper->SetInput(ugrid);
  vtkActor *wireActor = vtkActor::New();
  wireActor->SetMapper(ugridMapper);
this would be changed to:
  vtkGeometryFilter *gf = vtkGeometryFilter::New();
  gf->SetInput(ugrid);

  vtkPolyDataMapper *pm = vtkPolyDataMapper::New();
  pm->SetInput(gf->GetOutput());

  vtkActor *wireActor = vtkActor::New();
  wireActor->SetMapper(pm);
Thanks to Charlie Chang for discovering this problem.