Archive for June, 2008

Jun
28

Hahoe Folk Village

I’m always impressed by the way traditional architects build. Hahoe is one of these preserved areas where people still live in the old Korean spaces. Although I’m a huge fan of the digital technology for all its advantages, precise calculations or heavy-duty machines are obviously not the most important elements in creating masterful designs. I feel as if I have become a little too computer driven. I love the fact that all the houses, the streets, and the natural gardens at Hahoe are so beautifully scaled for small daily activities. There is no overwhelming sense of sublime architecture. The wooden structures, stone walls, and paper windows are all very human in size, proportion, and arrangements. It’s amazing how everything manages to humbly blend into the natural surroundings.

Read the rest of this entry »

Jun
25

Magok Process

This is the recent competition that we finished recenlty. Unfortunately, most of the bigger Korean companies ended up winning the competition. These are the pages that we submitted.

Click to View all Pages

MAGOK PROCESS (Albu, Kim, Rui, Yam, Yin)

Jun
18

Two Surface Space Frame (Rhino Explicit History)

space frame

Ah so, the new version of the Explicit History plug-in for Rhino is out. http://grasshopper.rhino3d.com. It’s going to be a cool new toy to play with :)

This is another way of creating space frames using U/V divisions from two surfaces. Almost the same thing as the previous post. Very simple.

crtli_gh_space_frame.wrm
crtli_gh_space_frame.3dm

Jun
17

Two Surface Space Frame (MEL)

This could be done with many different softwares/methods. Some time last year, I was looking at MEL to write this script that uses two different surfaces to simulate a space frame according to U/V divisions. This can now be easily performed with just a few steps using Grasshopper (Explicit History Plug-in) in Rhino.

//
// Script written by Howard Jiho Kim | kimjiho@gmail.com | crtl-i.com | 2007
//
// ex.
// spFrSurface(srfName1, srfName2, U, V)
// spFrSurface(“nurbsPlane1”, “nurbsPlane2”, 10, 10)
//

// HORIZONTAL MEMBERS!!

global proc spFrSurface(string $nurb, string $nurb2, int $u, int $v)
{
gridSurface($nurb, $u,$v);
gridSurface($nurb2, $u,$v);

float $u_inc = 1.0/$u;
float $v_inc = 1.0/$v;
float $cv[], $cv2[], $cv3[];

float $i2, $k2;

// get U information

$u = $u + 1;
$v = $v + 1;

for($i=0;$i<$u;$i++)
{
for($k=0;$k<$v;$k++)
{

$i2 = $u_inc * $i;
print (“u:” + $i2 + ” | “);
$k2 = $v_inc * $k;
print (“v:” + $k2 + ” | “);
$cv = `pointOnSurface -u $i2 -v $k2 -position $nurb`;
print( $cv[0] +” “+ $cv[1] +” “+ $cv[2]  + ” | “);

$cv2 = `pointOnSurface -u $i2 -v $k2 -position $nurb2`;
print( $cv2[0] +” “+ $cv2[1] +” “+ $cv2[2] +”\n”);

curve -d 1 -p $cv[0] $cv[1] $cv[2] -p $cv2[0] $cv2[1] $cv2[2] -k 0 -k 1;

// print CV

//$x[$k] = $cv[0];
//$y[$k] = $cv[1];
//$z[$k] = $cv[2];

}

//$curveName[$i] = `curve -p $x[0] $y[0] $z[0] -p $x[1] $y[1] $z[1] -p $x[2] $y[2] $z[2] -p $x[3] $y[3] $z[3] -p $x[4] $y[4] $z[4] -p $x[5] $y[5] $z[5] -p $x[6] $y[6] $z[6] -p $x[7] $y[7] $z[7]`;
}
}

// LONGITUDINAL MEMBERS
global proc gridSurface(string $nurb, int $u, int $v)
{
float $u_inc = 1.0/$u;
float $v_inc = 1.0/$v;
float $cv[], $cv2[], $cv3[];

float $i2, $k2;

// get U information

$u = $u + 1;

for($i=0;$i<$u;$i++)
{
for($k=0;$k<$v;$k++)
{

$i2 = $u_inc * $i;
print (“u:” + $i2 + ” | “);
$k2 = $v_inc * $k;
print (“v:” + $k2 + ” | “);
$cv = `pointOnSurface -u $i2 -v $k2 -position $nurb`;
print( $cv[0] +” “+ $cv[1] +” “+ $cv[2]  + ” | “);

$k3 = $v_inc * ($k+1);

$cv2 = `pointOnSurface -u $i2 -v $k3 -position $nurb`;
print( $cv2[0] +” “+ $cv2[1] +” “+ $cv2[2] +”\n”);

curve -d 1 -p $cv[0] $cv[1] $cv[2] -p $cv2[0] $cv2[1] $cv2[2] -k 0 -k 1;

// print CV

//$x[$k] = $cv[0];
//$y[$k] = $cv[1];
//$z[$k] = $cv[2];

}

//$curveName[$i] = `curve -p $x[0] $y[0] $z[0] -p $x[1] $y[1] $z[1] -p $x[2] $y[2] $z[2] -p $x[3] $y[3] $z[3] -p $x[4] $y[4] $z[4] -p $x[5] $y[5] $z[5] -p $x[6] $y[6] $z[6] -p $x[7] $y[7] $z[7]`;
}

// get U information

$v = $v + 1;
$u = $u – 1;

for($i=0;$i<$v;$i++)
{
for($k=0;$k<$u;$k++)
{

$i2 = $u_inc * $k;
print (“u:” + $i2 + ” | “);
$k2 = $v_inc * $i;
print (“v:” + $k2 + ” | “);
$cv = `pointOnSurface -u $i2 -v $k2 -position $nurb`;
print( $cv[0] +” “+ $cv[1] +” “+ $cv[2]  + ” | “);

$i3 = $u_inc * ($k+1);

$cv2 = `pointOnSurface -u $i3 -v $k2 -position $nurb`;
print( $cv2[0] +” “+ $cv2[1] +” “+ $cv2[2] +”\n”);

curve -d 1 -p $cv[0] $cv[1] $cv[2] -p $cv2[0] $cv2[1] $cv2[2] -k 0 -k 1;

// print CV

//$x[$k] = $cv[0];
//$y[$k] = $cv[1];
//$z[$k] = $cv[2];

}

//$curveName[$i] = `curve -p $x[0] $y[0] $z[0] -p $x[1] $y[1] $z[1] -p $x[2] $y[2] $z[2] -p $x[3] $y[3] $z[3] -p $x[4] $y[4] $z[4] -p $x[5] $y[5] $z[5] -p $x[6] $y[6] $z[6] -p $x[7] $y[7] $z[7]`;
}
}

Jun
13

Seoul Golmok


photo by Yann Arthus-Bertrand

I’ve been back in Korea for about a week now looking for new things to do. This photo has caught my attention and now I have a new world to explore in my home land. I have no idea where these old streets of Seoul will take me to. But, these are some extremly complex spaces created over a long period of time for living. It’s incredible… Unfortunately, most of them are being replaced with tall apartment buildings. I’m looking to see if there are any possibilities of renting a room in these areas.

 

Jun
09

Polyline Network Surface

poly network surface

This is a handy script for those that use NetworkSrf extensively. NetworkSrf is probably one of the coolest things that Rhino offers for nurbs modelling. Just make some polylines in a way that has U/V organization and hit the script.

Option Explicit
‘Script written by Howard Jiho Kim
‘Script version Monday, March 10, 2008 12:46:21 PM

Call Main()
Sub Main()

Dim strObject, strObject2, arrObjects
Dim netCrv(100)
Dim i
Dim arrNew
i=0

arrObjects = Rhino.GetObjects(“Pick some curves”, 4)

If IsArray(arrObjects) Then

For Each strObject In arrObjects

If Rhino.IsPolyline(strObject) Then
netCrv(i) = SubDividePolyline(strObject)
Print netCrv(i)
Rhino.SelectObject netCrv(i)
i=i+1
End If

Next

End If

Rhino.Command(“NetworkSrf”)

End Sub

Function SubDividePolyline(strObject)
Dim arrV
arrV = Rhino.PolylineVertices(strObject)
Dim arrSubD() : ReDim arrSubD(2 * UBound(arrV))
Dim i

For i=0 To UBound(arrV)-1

arrSubD(i*2) = arrV(i)
arrSubD(i*2+1) = Array( (arrV(i)(0) + arrV(i+1)(0))/ 2.0, _
(arrV(i)(1) + arrV(i+1)(1))/ 2.0, _
(arrV(i)(2) + arrV(i+1)(2))/ 2.0)
Next

arrSubD(UBound(arrSubD)) = arrV(UBound(arrV))
SubDividePolyline = Rhino.AddCurve(arrSubD)

End Function

Jun
05

Trancoso Bus Terminal

Sorry for the late update and also for not replying to some e-mails/comments. I’ll get to them soon. Also I’m not sure why, but my blog was blocked by the Chinese government for a while. I couldn’t access it from China. Now I’m back in Korea, so it’s all good.. but anyways-

We’ve been working on a few different projects lately. This one is a bus terminal in Trancoso, Portugal. Y’s first design. The physical model came out quite nicely. It was a huge chunk of plexi glass that was milled out of a CNC machine based on a nurbs-model built in Rhino and Maya.

We also finished a competition recently for which we are now waiting to hear some results. I will post some images of the competition in the near future.

Trancoso Bus Terminal
Trancoso Bus Terminal
physical model

Trancoso Bus Terminal
night render

 

 Some earlier images from the form finding process

Trancoso Bus Terminal

Trancoso Bus Terminal

Milling process

Trancoso Bus Terminal
maya sub-d model of the base brought into rhino for final check-up. the entire base was made of transparent acrylic. red/green indicates which parts to be frosted.

Trancoso Bus Terminal
iges model brought into a program before the information was sent to the machine

Trancoso Bus Terminal
the machine working hard

Trancoso Bus Terminal
crazy milling factory

Trancoso Bus Terminal
before the paint job

Trancoso Bus Terminal
the final look

and lastly, here’s a render of the space underneath the roofTrancoso Bus Terminal