"Sun Shots"

This project uses three.js. Make your choice and press reset. Or press play button and change settings.

  • a source creates point
  • the point move away from source
  • intersections with ground or buildings are highlighted

code

///////////////////////////////////
// ADD BUILDINGS ////////////

  /* construct buildings */
  var buildings = new THREE.Object3D();
  /* building1 */
  var mGeometry = new THREE.BoxGeometry( bWidth, bHeight, bDepth );
  var mMaterial = new THREE.MeshLambertMaterial( { color: 0xffff00 } );
  var building1 = new THREE.Mesh( mGeometry, mMaterial );
  /* edges */
  var mEdges = new THREE.EdgesGeometry( mGeometry );
  var mLine = new THREE.LineSegments( mEdges, new THREE.LineBasicMaterial( { color: 0x0000ff } ) );
  building1.add ( mLine );
  /* change position */
  building1.position.x = - bWidth * 2 ;
  building1.position.y = bHeight / 2 ;
  building1.position.z = bDepth * 3 ;
  buildings.add ( building1 );

///////////////////////////////////
// SHADOWS //////////////////

  /* 1. tell the renderer that you want shadows */
  renderer.shadowMap.enabled = true;
  renderer.shadowMap.type = THREE.PCFSoftShadowMap;
  renderer.shadowMapSoft = true;
  for (var i = 0; i < buildings.children.length; i++) {
    /* 2. enable objects to cast shadows */
    buildings.children[i].castShadow = true;
    /* 3. enable objects to receive shadows */
    buildings.children[i].receiveShadow = true;
  }
  /* 3. enable objects to receive shadows */
  ground.receiveShadow = true;
  /* 4. enable a light source to cast shadows (directional or spotlight only) */
  light1 = new THREE.PointLight( 0xff0000, 1, 100 );
  light1.position.set( sunSphere.position.x, sunSphere.position.y, sunSphere.position.z );
  light1.castShadow = true;
  scene.add( light1 );

///////////////////////////////////// INTERSECTIONS ///////////

  var numPts = sunPoints.children.length;
  /* move */
  for (var i = 0; i < numPts; i++) {
      sunPoints.children[i].translateX ( sunPoints.children[i].userData.direction.x * step )
      sunPoints.children[i].translateY ( sunPoints.children[i].userData.direction.y * step )
      sunPoints.children[i].translateZ ( sunPoints.children[i].userData.direction.z * step )

      if (( getDistance( sunPoints.children[i], sunSphere ) > maxradius ) || ( sunPoints.children[i].position.y > sunSphere.position.y ) || ( sunPoints.children[i].position.y < (-2 * step) )) {
      sunPoints.children[i].userData.delete = true;
    } else {
      var bounding_sp = new THREE.Box3().setFromObject(sunPoints.children[i]);
      var ground_bounding = new THREE.Box3().setFromObject(ground);
        var intersectGround = ground_bounding.intersectsBox(bounding_sp);
      /* intersection of "sun points" with ground */
        if ( intersectGround == true ){
          sunPoints.children[i].userData.intersects = true;
        } else {
           /* intersection of "sun points" with buildings */
          for (var j = 0; j < buildings.children.length; j++) {
          var building_bounding = new THREE.Box3().setFromObject(buildings.children[j]);
          var intersectBuilding = building_bounding.intersectsBox(bounding_sp);
              if ( intersectBuilding == true ){
                  sunPoints.children[i].userData.intersects = true;
              } else {
            sunPoints.children[i].userData.delete = false;
          }
          }
        }
      }
  }
 

Investigating Urban Neighborhood Similarity

AI classification of urban neighbourhoods for material-stock recycling — a case study on machine learning vs. vector distance vs. expert knowledge in the city of Vienna

Vienna holds an enormous, largely unmapped material stock — brick, wood and steel locked inside buildings that will eventually be demolished. To locate where similar recycling potential clusters, we partition the entire city into approximately 16,000 map ...

AlgoPlana 2026

Proceedings of the ALGOPLANA Conference 2026

The students‘ conference “Algorithms in Planning Practice 2026” is the result of a seminar held at the Research Unit Digital Architecture and Planning at the TU Wien in the summer semester 2026. ...

Urban Transformation Between Built and NaturalSystems by Means of an Adapted Wave FunctionCollapse Approach

Journal Paper In JoDLA –  Journal of Digital Landscape Architecture (e-ISSN 2511-624X)

In practice, urban transformation is often carried out at the outskirts or in between existing areas of a city. In that context, important questions are: How can one imagine a transition between different urban structures? ...

Healthcare and Wellbeing

Presentation: at the School of Environment and Society, Institute of Science Tokyo, Japan

This presentation explores process-driven approaches to healthcare design through early-stage functional planning and agent-based simulation. ...

Urban Data

Presentation: at the School of Environment and Society, Institute of Science Tokyo, Japan

This presentation explores how municipal data provided by the City of Vienna can be used to support urban analysis, planning, and decision-making. ...

eCAADe 2025:
Artificially Interactive Individualized Genetic Algorithms (AIIGA) for Gestalt Analysis

Evolutionary algorithms enhanced with sAI in architectural design
Talk and Proceeding: eCAADe 2025 – Confluence (Ankara, Turkey | conference)

This research is concerned with the automation of the user interventional aspect within interactive genetic algorithms (IGA) as already explored in previous publications by the authors considering their use for Gestalt analyses and generative design optimization. ...