Use your fingers or mouse to control model (hold shift key or use mouse wheel to zoom it).

Ramiform node. Two (semi-ellipse × Bezier curve) tensor product patches are used to make a branch. Branches are C1 continuous at junctions. Procedural bark textures are used.

XY Ramiform node

Two (semi-ellipse × Bezier curve) tensor product patches are used to make a twig. E.g. dark and light- gray patches below. Generating semi-circle ae and semi-ellipsis bO, cO are dashed lines and Bezier curve is the red one on the dark-gray patch. If points b, c, d lie on one line, then twigs are C1 continuous with the ramiform node.
Ramiform is determined by 3 vectors Oe, Og, Oh (they lie in the xOy plane), 3 base circle radiuses r1, r2, r3 (ea, hf, ... ) and minor ellipse radius r0 (rather arbitrary yet). Tne O point is at the center (0,0,0). Oc direction is determined as
    nOe + nOh ,
where e.g. nOe is the unit vector in the Oe direction. Ob direction depends on scalar product (nOe·nOh ).
function ramiform(r0,r1,r2,r3, x1,y1, x2,y2, x3,y3, tex_off){
   patch(r0,r1,r2, x1,y1, x2,y2, 1, tex_off);
   patch(r0,r2,r3, x2,y2, x3,y3, 0, tex_off);
   patch(r0,r3,r1, x3,y3, x1,y1, -1, tex_off);
function patch(r0,r1,r2, b1x,b1y, b2x,b2y, dir_u, tex_off){
The function ramiform() makes two smoothly connected patches (e.g. dark-gray and blue above). We call it 3 times to build the whole ramiform. To combine two B, B' ramiforms C1 continuously df and a'b' points shall lie on one line.
Black forest demo.
Modeling the Mighty Maple for Web     updated 6 Apr 2015