Featured image of post 3주차

3주차

3주

이제는 Script Listener를 배웠으니, 이제는 Listener로 박스를 생성해 봅시다.mybox = box() $Box:Box01 @ [0.000000,0.000000,0.000000]
mybox.rotation = angleaxis 30 [0,1,0]
여기서 사용된 position, rotation, scale 속성은 모든 오브젝트가 공통적 으로 가지고 있는 속성입니다. 반대로 말해서, 모든 오브젝트들은 position과 rotation, scale을 변경할 수 있습니다. 이 세 개의 값들이 시간에 따라서 나열되면 그것은 애니메이션 정보가 되는 것이고, 다른 애니메이션들도 결국 이 세 개의 position, rotation, scale값을 변경함 으로써 이루어지는 것입니다. Transform의 대상은 오브젝트 단위로만 이루어지지는 않습니다. 오브젝트 안의 속성들도 Transform을 할 수 있고, 이런 식으로 여러 가지 Transform들을 적용시키면서 최종 형태가 나타나게 되는 것입니다. 그래서 3ds max로 모델링하는 방식은 그림과 같은 과정들을 따라가게 됩니다.
이런 방식으로 최종 형태를 만들어 냅니다. 3ds max에서 Modifier란 결국 이렇게 적용된 Transform에 대한 정보라고 생각하면 됩니다. Transform을 하기 위해서는 Transform의 종류와 Transform을 적용할 대상 등이 필요 합니다. Transform의 순서도 중요하기 때문에 Modifier 들은 이런 Transform들이 적용된 순서대로 Modifier Stack이란 곳에 저장합니다.
Transform은 해당 오브젝트 단위로도 적용할 수 있지만 그 오브젝트의 Sub-Object에도 적용할 수 있습니다. 예를 들어 Mesh Modifier를 적용한 Object의 경우 Mesh의 Sub-Object들은 vertex, edge, polygon 등이 됩니다. 역시 해당 Sub-Object를 선택한 다음 적절한 Transform을 가해두면 됩니다.
Hierarchies(계층구조)란 오브젝트들이 일정한 관계를 가지고 연결되어 있는 상태를 말합니다. 보통 부모와 자식의 관계로 정의가 되는데, 이렇게 관계가 설정되었을 경우 변환은 다음과 같은 룰을 따릅니다.
부모와 자식과의 관계를 한번 설정해 봅시다.
먼저 박스를 한 개 더 만듭니다.
박스가 한 개 더 생성되었습니다. 이제 이 박스를 이전에 만들었던 박스의 부모(parent)라고 관계를 맺어 줍시다.
화면 상에서는 아무런 변화도 일어나지 않습니다. 화면 위쪽의 툴 바에서 select by name 버튼을 눌러 봅시다.
Box02가 Box01보다 좀 더 왼쪽으로 치우쳐 있는데, 이것은 현재 Box02가 Box01의 부모라는 것을 나타냅니다.
3ds max에는 여러 가지 좌표계가 존재합니다. World/Local/Parent 등의 좌표계를 기준으로 위치가 결정됩니다.
지금까지 위치나 각도 설정은 모두 world 좌표계를 기준으로 하고 있었습니다. World 좌표계는 Perspective Viewport 화면의 왼쪽 아래에 보이는 좌표계를 보고 알 수 있습니다.
여기서 보이는 좌표축이 3ds max의 기본 축인 World 좌표계입니다. 모든 Local 좌표계는 렌더링할 때 World로 변환이 이루어지게 됩니다.

View 좌표계는 뷰포트 기준인 좌표계입니다. 이것은 Front/Left/Top 뷰
에서 유용한 좌표계입니다. Perspective나 User Viewport가 아닌 Front/Left/Top 같은 뷰포트에서 오브젝트를 선택하면 뷰포트에 관계없이 그 오브젝트의 축은 항상 위쪽으로는 y축과 오른쪽으로는 x축이 됨을
알 수 있습니다.

Local 좌표계는 선택된 오브젝트가 사용하고 있는 좌표계를 표시해 줍니다. 예를 들어, 박스 오브젝트의 경우 박스 자신이 생성되기 위해 사용된 좌표계를 보여 줍니다. 그럼 이 오브젝트를 화면에 보이는 Local 좌표계를 기준으로 움직여 봅시다.
박스가 화면에서 파란색(z축)이 가리키는 방향으로 50만큼 이동했음을 알 수 있습니다.
해당 좌표계를 기준으로 어떤 Transform을 하고 싶다면 맨 앞에 다음과 같은 문장을 넣어 줍니다.
앞장의 예제에서 mybox를 local 좌표계로 [0,0,50]만큼 움직이기 위해서 다음과 같은 명령을 사용합니다.
move mybox[0,0,50]은 이전에도 볼 수 있었던 지금 있는 위치로부터 [0,0,50]만큼 이동하라는 의미입니다. In coordsys local이 없었다면 World 좌표계의 z축으로 50만큼 이동했을 것입니다.
좌표계 이름은 좌표계 선택 툴 바에서 보았던 대로 적으면 됩니다.
Modifier는 좀 더 복잡한 Transform들을 정의해 놓은 것이라 생각하면 됩니다. Modifier에는 여러 가지 종류가 있습니다. 그럼 이 Modifier들을 추가하는 것부터 배워 봅시다.
박스들이 좀 더 부풀어 보입니다. Tessellate Modifier는 폴리곤들을 좀 더 세밀하게 쪼개주는 Transform을 해 줍니다. 그래서 6개의 면밖에 없었던 Box의 폴리곤들이 좀 더 잘게 나눠지게 됩니다.
자, 그럼 왼쪽의 그림을 봅시다.
Box라는 이름 위에 Tessellate라는 이름이 들어가 있는 것을 알 수 있습니다.
여기에 다른 Modifier들을 적용시켜 봅시다.
stretch modifier는 주어진 오브젝트를 양옆으로 쭉 늘려주는 Transform을 해 줍니다.
Bend modifier는 주어진 오브젝트를 일정한 각도로 휘게 하는 modifier 입니다.
이 Modifier들은 이 순서대로 차례로 적용됩니다. 이전 Modifier의 결과에 새로운 Modifier 연산을 적용시킵니다.
이 Modifier들의 적용이 모두 끝나고 최종적으로 이 오브젝트의 pos/rotation/scale이 적용되면서 World 좌표계 상에 오브젝트가 위치 합니다. 이 오브젝트에 EditMesh Modifier를 적용시켜 봅시다.
Modifier Stack의 변화도 살펴봅시다. Edit Mesh Modifier가 추가되었음을 알 수 있습니다. $는 현재 선택되어 있는 오브젝트를 가리킵니다.
Edit Mesh Modifier는 현재 만들어진 오브젝트를 점, 선, 면의 단계에서 수정할 수 있도록 해 줍니다.
먼저 지금까지 생성된 오브젝트를 한 개의 mesh 오브젝트로 변환해 봅시다. 그전에 이 오브젝트의 복사본을 하나 더 만들어 둡니다.
[그림3-25]의 그림은 Editable Mesh Modifier가 가지고 있는 Sub-Object 들을 나타냅니다. Editable Mesh는 이 Vertex/Edge/Face/Polygon/Element 단위로 수정(Modify)할 수 있습니다.
먼저, Vertex를 선택해 봅시다. [그림 3-25]처럼 Vertex를 마우스로 클릭 하면 됩니다. 그 다음 Vertex 몇 개를 선택해 봅시다. 선택된 Vertex들은 빨간색으로 나타날 것입니다. 그렇지 않은 Vertex들은 파란색으로 표시가 됩니다. 그럼 어떤 vertex들이 선택되어 있는지 Script Listener를 통해서 알아봅시다.
이 명령은 현재 수정중인 Mesh에서 현재 선택되어 있는 Vertex들이 몇 번인가를 알려 줍니다. 보통 아래와 같은 형식의 결과가 나옵니다.
이것은 5번부터 8번까지, 14번부터 18번까지의 점들이 현재 선택되어 있다는 것을 알려 줍니다. 다시 선택을 해제한 다음과 같은 명령을 내려 봅시다.
이 선택된 버텍스들의 위치를 바꾸어 봅시다.setVert $ 5 [0,0,0]
Vertex의 개수를 다루기 위해서는 다음과 같은 함수를 사용합니다.
get은 Vertex의 총 개수를 얻어 오고 set은 반대로 총 개수를 설정합니다.
Vertex의 위치 변경은 다음의 함수를 통합니다.
이것은 Vertex들의 위치를 변경할 때 사용됩니다.
Normal의 변경은 다음의 함수를 사용합니다.
Vertex들의 선택은 다음의 함수를 사용합니다. 사용 형식은 getVert/setVert와 같습니다.
getVertexSelection/setVertexSelection은 Vertex들을 선택할 때 사용합니다.
averageSelVertCenter/averageSelVertNormal은 현재 선택된 Vertex들의 위치 평균이나 Normal들의 평균을 알려줍니다.

sphere()화면에 sphere가 하나 보일 것입니다.
numFaces = numFaces / 2 for i in 1 to numFaces do ( extrudeFace $ #{i*2..(i*2)+1} 4 50 )
먼저, meditMaterials[1]의 material을 multi-sub material로 변경해 봅시다.meditMaterials[1] = multiSubMaterial() meditMaterials[1].count = 2다음으로 각 material 슬롯의 diffuse 색상을 만듭시다.

여기서 잠깐 새로운 문법을 집고 넘어 갑시다.

Hugo로 만듦
JimmyStack 테마 사용 중