<!-- SAGA2 · part 78 -->
erGeometry().setFromPoints(ptw), mat));
    }
  }
  // HEAD — smooth oval (not dome)
  for(var h=0; h<14; h++){
    var pts=[], hy = 22-h*0.9;
    for(var j=0;j<=20;j++){ var an=j/20*Math.PI*2;
      var hr = 4.2*Math.sin(Math.PI*(h/14));
      if(hr<0.5) hr=0.5;
      pts.push(new THREE.Vector3(Math.cos(an)*hr, hy, 2+Math.sin(an)*hr*0.9));
    }
    edraw(pts, h%5===0?eSilver:eGreen);
  }
  // EYES — emerald
  [-1.6,1.6].forEach(function(ex){
    var eye = new THREE.Mesh(new THREE.SphereGeometry(0.5, 10, 10),
      new THREE.MeshBasicMaterial({color:0x44ff88}));
    eye.position.set(ex, 19, 6.2);
    scoutGrp.add(eye);
  });
  // NECK — slim
  for(var n=0; n<10; n++){
    var pts=[], na=n/10*Math.PI*2;
    for(var ny=0; ny<=5; ny++) pts.push(new THREE.Vector3(Math.cos(na)*2.2, 14-ny*1.0, Math.sin(na)*2.2));
    edraw(pts, eDim);
  }
  // TORSO — slim tapered
  for(var t=0; t<16; t++){
    var pts=[], ty = 12-t*0.9, tr = 6.5-t*0.25;
    for(var j=0;j<=20;j++){ var an=j/20*Math.PI*2;
      pts.push(new THREE.Vector3(Math.cos(an)*tr, ty, Math.sin(an)*tr*0.7));
    }
    edraw(pts, t%5===0?eSilver:eGreen);
  }
  // ARMS — slim
  [-1,1].forEach(function(sd){
    var ax = sd*8;
    for(var a=0; a<14; a++){
      var pts=[], ay = 10-a*1.4;
      for(var j=0;j<=14;j++){ var an=j/14*Math.PI*2;
        pts.push(new THREE.Vector3(ax+Math.cos(an)*2.0, ay, 5+Math.sin(an)*1.8));
      }
      edraw(pts, a%5===0?eSilver:eGreen);
    }
  });
  // LEGS — slim
  [-1,1].forEach(function(sd){
    var lx = sd*3.5;
    for(var l=0; l<16; l++){
      var pts=[], ly = -2-l*1.6;
      for(var j=0;j<=14;j++){ var an=j/14*Math.PI*2;
        pts.push(new THREE.Vector3(lx+Math.cos(an)*2.4, ly, Math.sin(an)*2.0));
      }
      edraw(pts, l%5===0?eSilver:eGreen);
    }
  });
}


var humanGrp = null;
function buildHuman(){
  if(humanGrp) return;
  humanGrp = new THREE.Group();
  humanGrp.position.set(0, 0, 0);
  humanGrp.scale.set(0.5, 0.5, 0.5);
  scene.add(humanGrp);
  var hWarm = new THREE.LineBasicMaterial({color:0xffddaa, transparent:true, opacity:0.75, blending:THREE.AdditiveBlending});
  var hSoft = new THREE.LineBasicMaterial({color:0xddbb99, transparent:true, opacity:0.6, blending:THREE.AdditiveBlending});
  var hDim = new THREE.LineBasicMaterial({color:0x886655, transparent:true, opacity:0.5, blending:THREE.AdditiveBlending});
  function hdraw(pts, mat){
    for(var w=0; w<8; w++){
      var ox=(Math.random()-0.5)*0.2, oy=(Math.random()-0.5)*0.2;
      var ptw = pts.map(function(p){ return new THREE.Vector3(p.x+ox, p.y+oy, p.z); });
      humanGrp.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(ptw), mat));
    }
  }
  for(var h=0; h<16; h++){
    var pts=[], hy = 24-h*1.0, hr = 4.5*Math.sin(Math.PI*(0.15+0.7*h/16));
    if(hr<0.8) hr=0.8;
    for(var j=0;j<=22;j++){ var an=j/22*Math.PI*2;
      pts.push(new THREE.Vector3(Math.cos(an)*hr, hy, 1.5+Math.sin(an)*hr*0.92));
    }
    hdraw(pts, h%5===0?hWarm:hSoft);
  }
  [-1.7,1.7].forEach(function(ex){
    for(var er=0; er<3; er++){
      var pts=[];
      for(var j=0;j<=16;j++){ var an=j/16*Math.PI*2;
        pts.push(new THREE.Vector3(ex+Math.cos(an)*(0.6+er*0.25), 20+Math.sin(an)*(0.5+er*0.2), 5.8));
      }
      hdraw(pts, er===0?hWarm:hDim);
    }
    var pp=[];
    for(var j=0;j<=10;j++){ var an=j/10*Math.PI*2;
      pp.push(new THREE.Vector3(ex+Math.cos(an)*0.2, 20+Math.sin(an)*0.2, 5.9));
    }
    hdraw(pp, hWarm);
  });
  for(var nn=-1; nn<=1; nn++){
    var pts=[];
    for(var i=0;i<=8;i++){ var t=i/8;
      pts.push(new THREE.Vector3(nn*0.3, 19-t*2.5, 6.0+Math.abs(nn)*0.15-t*0.2));
    }
    hdraw(pts, hDim);
  }
  var mp=[];
  for(var j=0;j<=16;j++){ var t=j/16;
    mp.push(new THREE.Vector3(-1.8+t*3.6, 15.5+Math.sin(t*Math.PI)*-0.3, 5.5+Math.sin(t*Math.PI)*0.3));
  }
  hdraw(mp, hWarm);
  [-1,1].forEach(function(sd){
    var pts=[];
    for(var j=0;j<=12;j++){ var an=j/12*Math.PI*2;
      pts.push(new THREE.Vector3(sd*4.6+Math.cos(an)*0.7, 19.5+Math.sin(an)*1.0, 1.5));
    }
    hdraw(pts, hDim);
  });
  for(var n2=0; n2<10; n2++){
    var pts=[], na=n2/10*Math.PI*2;
    for(var ny=0; ny<=5; ny++) pts.push(new THREE.Vector3(Math.cos(na)*2.5, 13-ny*1.0, Math.sin(na)*2.5));
    hdraw(pts, hDim);
  }
  for(var t2=0; t2<18; t2++){
    var pts=[], ty = 11-t2*0.85, tr = 5.5+Math.sin(t2/18*Math.PI)*1.2-t2*0.12;
    for(var j=0;j<=22;j++){ var an=j/22*Math.PI*2;
      pts.push(new THREE.Vector3(Math.cos(an)*tr, ty, Math.sin(an)*tr*0.72));
    }
    hdraw(pts, t2%6===0?hWarm:hSoft);
  }
  [-1,1].forEach(function(sd){
    var ax = sd*7;
    for(var a=0; a<16; a++){
      var pts=[], ay = 9-a*1.5, ar = 2.2-a*0.04;
      for(var j=0;j<=14;j++){ var an=j/14*Math.PI*2;
        pts.push(new THREE.Vector3(ax+Math.cos(an)*ar, ay, 4+Math.sin(an)*ar*0.85));
      }
      hdraw(pts, a%6===0?hWarm:hSoft);
    }
    for(var f=0; f<5; f++){
      var pts=[];
      for(var i=0;i<=4;i++) pts.push(new THREE.Vector3(ax-1+f*0.5, -15-i*1.2, 4.5));
     