중요했던 부분:
- Copy to Points
1번 인풋으로 들어온 Geometry를 구성하는 포인트들에 0번 인풋으로 들어온 Geometry들을 위치시켜주는 노드이다.
Attributes from target: 여기서 타겟의 attribute를 불러와서 geometry에 붙여넣을 수 있다. 기존 0번 input geometry에 색깔이 설정되어있다고 하여도 각기 포인트들이 가지고 있던 색깔값에 따라 대체해서 값을 붙여넣어진다. 이때 Attributes from target에서 1번 인풋 geometry를 구성하는 포인트들로부터 어떠한 attribute를 불러올지 고를 수 있는데 이때 이 불러온 attribute를 어떠한 방식으로 적용시킬지 설정할 수 있다.

이때 Apply to Points by " " Attributes. 이때 따옴표 안에 들어갈 메뉴들이 여러개 있는데 이는 이렇다.
Copying - 1번 input geometry의 정보를 0번 input geometry에게 대체해서 붙여넣어준것
Nothing - 아무런 작업도 하지 않는다.
Multiplying - 값을 곱해주는 것으므로써 vector면 vector 끼리 float이면 float끼리 연산이 될것이다.
Adding - 그야말로 더해주는 것. 0번 input geometry를 기준으로 1번 input geometry의 값들을 더해줄 것 이다.
Subtracting - 0번 input geometry를 기준으로 1번 input geometry가 가지고 있는 attribute의 값을 빼주게 되는것.
그리고 Copy to Points에서 불러올 attribute 값들을 설정해줄때 이러한 특수한 문자를 입력해줄 수 있다. 이는
* 즉 별표표시는 ALL 모든 Attribute 를 불러와라 이러한 표시가 될것이고 (만약 0번 input geometry에서 1번 input geometry가 가지고 있는 attribute들이 몇개 없어도 없든지 있든지 간에 copy to points에서 모든 attributes를 불러오게 된다. ), ^ 이 표시는 NOT으로써 이 표시가 적힌 Attribute는 불러오지 말아라 이러한 의미로 쓰이게 될것이다.
eg) * // 모든 Attribute를 불러와라
eg) *, ^Cd // @Cd를 제외한 모든 attribute를 불러와 적용할 geometry에 적용시켜주어라

- @pscale
Attribute pscale은 geometry의 uniform scale을 조절하는 attribute로써 @attribute randomize 노드의 attribute name칸에 pscale을 만약 입력한다면 각기 여러개의 geometry의 스케일이 랜덤값으로 나와 각기 geometry의 크기가 달라진다. Type casting은 float으로 지정된다.

이때 중요한 점은 pscale같은 attribute들은 즉 pscale/scale/rotation/normal 같은 것에 해당하는 것들은 Attribute from target에 지정된 attribute 설정을 무시하고 따로 작동되게 할 수 있다. 이는 Transform Using Target Point Orientations와 같은 메뉴에 체크표시를 해주냐 안하느냐에 따라 결과가 달라질 수 있다. 이 부분을 체크하는지 안하는지 여부에 따라 해당하는 attribute 값들이 트렌스폼하는지 안하는지 여부가 결정되기도 한다.
만약 이렇게 attribute randomize 노드를 세번 연결하고 이 값을 copy to points노드로 포인트들이 box로 변하게 끔 설정해주면 이렇게 처음에 @Cd값이 렌덤값으로 설정되 제각기 다른색을 띄게되고 @pscale도 랜덤값이되어 크기가 제각기가되고 @N값도 랜덤이 되어 포인트들이 향하는 방향값들도 제각기로 설정된다. 이렇게 해서 모든 포인트들을 box로 나타나게 copy to points노드를 연결해 주면 아래와 같은 쉐입을 띄는 것을 알 수 있다.

하지만 방금전 언급한 Transform Using Target Point Orientations 이 표시를 체크 해제 시켜준다면 pscale과 Normal 값들이 원상복귀되어 Copy to Points에서 적용이 해당 attribute들이 제어되어주지 않는것을 알 수 있다.

- Copy to Points노드를 활용하여 모션만들어 보기
이렇게 grid를 구성하는 포인트들의 위치들에 box들을 전부 카피시켜주고 Attribute wrangle로 어떠한 모션을 취할지 설정해주어주면 신비로운 형태의 Geometry 쉐입을 볼 수 있다.

float d = length (@P); // 원점으로부터 모든 포인트까지의 거리를 float variable d에 저장하여라
// 거리값에 fit()을 적용시켜주어 0.2와 8에서 clamp시켜주고 0.2와 0.8사이 range를 가지게끔 간격을 축소시켜주어라
/* 아래 만약 거리값에 비례해서 @pscale값을 설정해 준다면 0번 input geometry의 scale값을 0.2에서 0.8까지로
제한시켜 줄 수있다*/
d = fit (d , 0.2, 8, 0.2, 0.8);
// 원점으로 부터 모든 포인트까지의 거리 길이 값에 비례해서 포인트의 위치하는 geometry의 uniform scale을 설정해준다.
@pscale = d;

또한 이와 같은 식으로 더욱 동적인 모션을 구축해보았다.
float d = length (@P); // 원점으로부터 모든 포인트까지의 거리를 float variable d에 저장하여라
float t = @Time*4; // @Time에 4를 곱한 값을 float variable t에 저장하여라
d = d*2; // 거리값에 2를 곱해주어 sin()을 적용하였을때 더욱 촘촘하게끔 만들어라
d = d + t; // 거리값에 @Time이 저장된 float variable t를 더하여 모션을 추가하여라
d = sin (d); // 거리값에 sin()을 적용하여 sine wave가 형성되는 geometry를 만들어라
// sine wave가 적용된 d의 파형값의 세기를 -1과 1사이에서 0.1에서 1로 range를 바꾸어준다
d = fit (d, -1, 1, 0.1, 1);
// sine wave가 적용된 거리값을 높이값으로 주어 찰랑거리는 효과를 만들어라
@P.y = d;
/* sine wave가 적용된 거리값을 pscale값으로 주어 sine wave의 수치가 높아질수록 geometry가 커지고
낮을수록 geometry가 작아지는 모션을 만들어라*/
@pscale = d;
// r값에 파형이 적용되는 부분이 들어가고, 안되는 부분은 b값이 들어가 색깔로도 보여지게 해준다.
@Cd = set (d, 0, (1-d)*3);
- @scale
@pscale하고 다르게 @scale은 vector의 type을 가진 attribute로써 x/y/z 방향에 따라 따로따로 geometry의 scale값을 조절할 수 있게 해준다.
@scale = {1, 2, 1}; // x방향으로 1, y방향으로 2, z방향으로 1로 스케일을 지정
@scale = {1, 2, 3}; // x방향으로 1, y방향으로 2, z방향으로 3로 스케일을 지정
이와같이 코드구성을 해준다면 각기 포인트들에 @scale값들을 wrangle로 지정해준다음 copy to points노드로 geometry를 0번 인풋에 연결해 포인트의 위치에 고정되게 해준다면 아래와 같은 결과를 얻을 수 있다.

- Advanced Motion
Copy to Points 노드를 활용하여 생각보다 멋있어 보이는 애니메이션을 한번 완성해 보았다. 우선 copy to points에 연결된 0번 input geometry의 쉐입을 꾸며주기 위해 이와 같은 작업을 하였다.


그리고 copy to points의 1번 인풋에 들어갈 포인트들을 꾸며주기 위해 attribute wrangle로 코드를 장식하여 위치와 모션을 꾸며주기로 하였다. 그리고 마지막에 add를 통해 grid의 프리미티브를 전부 지우고 포인트만 남겨주기로 설정하였다.

float d = length (@P); // 원점으로부터 모든 포인트까지의 거리 길이를 float variable d에 저장
float t = @Time; // 모션을 취해줄 @Time값을 float variable t에 저장하여라
// fit()으로 파형의 세기값을 정해줄 값을 chf()으로 각기 유저가 파라미터로 저장하게끔 만들 variables 생성
float min = chf ("MIN");
float max = chf ("MAX");
t = @Time*chf ("SPEED"); // @Time값에 chf()가 적용된 상수를 곱해주어 모션의 스피드를 조절할 수 있게끔 업데이트
// 거리값에 chf()가 적용된 상수를 곱해주어 sin()이 적용되었을때 파형의 파장 거리를 조절 할 수 있게끔 설정
d *= chf ("FREQ");
d += t; // 거리값에 @Time이 저장된 float variable t를 더해주어 모션을 취할 수 있게끔하여라
d = sin (d); // 거리값에 sin()을 적용하여 sine 파형을 띄게끔 설정하여라
// fit()으로 sine Wave의 세기의 최솟값과 최댓값을 유저가 파라미터로 조절할 수 있게끔 설정하여라
d = fit (d, -1, 1, min, max);
/* sine 파형이 적용된 거리값에 geometry의 y방향 scale이 비례할 수 있도록 설정하여라. 그리고 x와 z방향의
scale은 min 파라미터로 유저가 직접 조절 할 수 있게끔 설정하여라*/
// 즉 원점에서 멀어질수록 카피되는 geometry의 높이값이 커진다고 보면된다
@scale = set (min, d, min);
아니면 또다른 코드를 통해 이러한 모션을 취해줄 수도 있다. 이때 마지막 코드에 chramp()을 vector 값으로 type casting 하면서 파라미터를 한번에 생성시켜주면 새로운 형태의 ramp파라미터를 형성하는 사실을 알 수 있었다.
/* 나중에 @scale값을 지정해줄때 카피되는 geometry의 x와 z방향의 scale값을 유저가 파라미터로
지정할 수 있게 끔 설정하였다*/
float x = chf ("X");
float z = chf ("Z");
float d = length (@P); // 원점으로부터 모든 포인트까지의 거리 길이를 float variable d에 저장
float t = @Time; // 모션을 취해줄 @Time값을 float variable t에 저장하여라
// fit()으로 파형의 세기값을 정해줄 값을 chf()으로 각기 유저가 파라미터로 저장하게끔 만들 variables 생성
float min = chf ("MIN");
float max = chf ("MAX");
t = @Time*chf ("SPEED");// @Time값에 chf()가 적용된 상수를 곱해주어 모션의 스피드를 조절할 수 있게끔 업데이트
// 거리값에 chf()가 적용된 상수를 곱해주어 sin()이 적용되었을때 파형의 파장 거리를 조절 할 수 있게끔 설정
d *= chf ("FREQ");
d += t; // 거리값에 @Time이 저장된 float variable t를 더해주어 모션을 취할 수 있게끔하여라
d = sin (d); // 거리값에 sin()을 적용하여 sine 파형을 띄게끔 설정하여라
// fit()으로 sine Wave의 세기의 최솟값과 최댓값을 유저가 파라미터로 조절할 수 있게끔 설정하여라
d = fit (d, -1, 1, min, max);
/* sine 파형이 적용된 거리값에 geometry의 y방향 scale이 비례할 수 있도록 설정하여라. 그리고 x와 z방향의
scale은 맨위에 설정해둔 변수 x와 z에 대한 파라미터로 유저가 직접 각기 조절 할 수 있게끔 설정하여라*/
@scale = set (x, d, z);
// 파형의 높이값에 원점으로 부터 모든 포인트의 거리길이값의 반의 수치를 더하여 땅에 딱 붙어있게끔 고정하여라
@P.y = @P.y + d/2;
/* 나중에 @Cd 컬러값을 원점으로부터 모든포인트에 비례하게끔 chramp()으로 조절해 주기 위해 range값을 0에서
1까지의 범위로 새롭게 설정하였다 그래야 chramp()에 설정된 ramp가 반복이 되지 않는다*/
d = fit (d, min, max, 0, 1);
/* @Cd값을 sine wave가 적용된 d의 수치에 비례하게 chramp()으로 설정해주기로 하였다.
이때 @Cd값은 vector attribute인데 어떻게 chramp()을
적용했을까. 이는 vector으로 chramp()을 새롭게 type casting해주며 chramp()의 ramp파라미터로
색깔값을 지정해 줄 수 있게 설정하였다*/
@Cd = vector (chramp ("COLOR", d));
- Attribute Wrangle -> Edit Parameter Interface -> Existing Parameters -> Ramp -> Parameter Description -> Parameter -> Ramp Type
이와 같은 방식으로 따라가면 chramp()으로 형성된 ramp파라미터의 형태를 float 의 형태인지 color의 형태인지 지정해 줄 수있다. 만약 chramp()을 vector type casting을 한채 바로 생성시켜주면 바로 color ramp의 형태로 나타나지만 그렇지 않다면 이와 같은 방식으로 지정해 줄 수 있다.

그러면 이와 같이 일반적인 chramp()로 나타나게 되는 ramp interface의 대한것과는 다르게 나타나는 것을 알 수 있다.

위의 코드처럼 이렇게 작성하였을때
f@d = @P.x; // @P.x geometry의 모든 포인트의 대한 x값을 float Attribute d에 저장하여라
// geometry의 모든 포인트의 대한 x값을 vector attribute k로써 chramp()으로 지정되게끔 만들어라
v@k = vector (chramp ("TWA", @d));
// 그리고 지정한 vector attribute k값을 색깔값으로 보여주어라
@Cd = @k;

오늘 배운 것 정리:
1. Copy to Points는 정보를 가져와서 copying을 할건지 multiplying을 할건지 Adding을 할지 Subtracting을 할지 이와 같은 방법이 있다. 또한 모든 정보를 불러올때 *별표표시를 하는것 그리고 ^표시로 정보를 차단해주는 방법을 배웠다.
2. 어떤정보들은 물체의 크기, 회전, 방향 (Point orientation attributes)의 대한 정보를 가지고 있어서 복사하는 물체에 영향을 주는 경우가 있다. 이와 같은 정보에 대해서 copy to points에서 이용을 할지 안할지에 대해서 정해줄 수 있다. Attributes로만 불러오고 물체에 대한 변형을 주지 않게 할 수 있다.
3. 코드를 직접 입력해보는 과정을 통해 copy to points가 연결된 geometry가 어떠한 모션을 구축할 수 있는지 알아보았다.
Exercises:
1. Use noise to drive the scale shapes
sin()대신 noise()을 활용하여 geometry의 @scale값을 한번 조절해 보기로 하였다.
/* 나중에 @scale값을 지정해줄때 카피되는 geometry의 x와 z방향의 scale값을 유저가 파라미터로
지정할 수 있게 끔 설정하였다*/
float x = chf ("X");
float z = chf ("Z");
float d = length (@P); // 원점으로부터 모든 포인트까지의 거리 길이를 float variable d에 저장
float t = @Time; // 모션을 취해줄 @Time값을 float variable t에 저장하여라
// fit()으로 파형의 세기값을 정해줄 값을 chf()으로 각기 유저가 파라미터로 저장하게끔 만들 variables 생성
float time = @Time;
// 거리값에 chf()가 적용된 상수를 곱해주어 sin()이 적용되었을때 파형의 파장 거리를 조절 할 수 있게끔 설정
d *= chf ("FREQ");
d -= time*chf ("SPEED"); // @Time값에 chf()가 적용된 상수를 곱해주어 모션의 스피드를 조절할 수 있게끔 업데이트
d = noise (d); // 거리값에 noise()을 적용하여 noise 파형을 띄게끔 설정하여라
/* 0에서 1까지의 간격이 정해지는 noise에 특성상 amplitude값이 늘어나도
땅에 붙어잇도록 fit()을 활용하여 -0.5에서 0.5사이로 range값을 조정*/
d = fit (d, 0, 1, -0.5, 0.5);
d *= chf ("AMP"); // Amplitude값을 곱해주어 파형의 높이값 조절
/* noise 파형이 적용된 거리값에 geometry의 y방향 scale이 비례할 수 있도록 설정하여라. 그리고 x와 z방향의
scale은 맨위에 설정해둔 변수 x와 z에 대한 파라미터로 유저가 직접 각기 조절 할 수 있게끔 설정하여라*/
@scale = set (x, d, z);
/* 나중에 @Cd 컬러값을 원점으로부터 모든포인트에 비례하게끔 chramp()으로 조절해 주기 위해 range값을 0에서
1까지의 범위로 새롭게 설정하였다 그래야 chramp()에 설정된 ramp가 반복이 되지 않는다*/
d = fit (d, -0.5, 0.5, 0, 1);
/* @Cd값을 sine wave가 적용된 d의 수치에 비례하게 chramp()으로 설정해주기로 하였다.
이때 @Cd값은 vector attribute인데 어떻게 chramp()을
적용했을까. 이는 vector으로 chramp()을 새롭게 type casting해주며 chramp()의 ramp파라미터로
색깔값을 지정해 줄 수 있게 설정하였다*/
@Cd = vector (chramp ("COLOR", d));
이때 noise()파형이 들어간 grid에서 이미 fit()을 땅에 붙어있게끔 써넣어두니 그다음에 copy to points에 연결된 Geometry가 뒤집혀지지 않게끔 (box의 @scale값이 negative 땅 아래쪽으로 넘어가지 않게끔) fit()을 사용했었어야 하지만 그러한 방법을 모르겠어서 box가 우선적으로 뒤집혀지지만 noise()가 적용된 @scale로써 보여지는 모션을 만들어보았다.
2. Combine noise and sine to get noisy waves
이미 Sine wave가 적용된 파형에 noise wave를 추가하여 생각만큼 noisy하진 않지만 어쨌든 두 파형이 공존하게 되는 effect를 만들어 보았다. 그리고 copy to points를 연결하여 geometry가 파형의 구조를 따라 움직이게끔 만들어 보았다.
/* 나중에 @scale값을 지정해줄때 카피되는 geometry의 x와 z방향의 scale값을 유저가 파라미터로
지정할 수 있게 끔 설정하였다*/
float x = chf ("X");
float z = chf ("Z");
// 여기 float variable fx는 전체적인 effect를 추가한 값임. 모든 효과에 대해 정의를 내려준다.
float fx = 0;
/* nearpoint()를 활용하여 0번 인풋으로 들어온 Geometry로부터 1번 인풋으로 들어온
geometry를 구성하는 모든 점들중 가장 가까운 점들의 포인트 넘버를 integer variable pt에 저장하여라*/
int pt = nearpoint (1, @P);
/* point()을 이용하여 0번 인풋에 연결 된 Geometry로부터
1번 인풋에 연결된 geometry중 0번 포인트 넘버를 가진 포인트의 위치값을 불러와
vector variable pos에 저장하여라*/
vector pos1 = point (1, "P", 0);
/* point()을 이용하여 0번 인풋에 연결 된 Geometry로부터
1번 인풋에 연결된 geometry중 1번 포인트 넘버를 가진 포인트의 위치값을 불러와
vector variable pos에 저장하여라*/
vector pos2 = point (1, "P", 1);
/*각기 위에서 불러온 위치값에서 0번 input geometry를 모든 포인트들까지의 거리를 구해 각기 알맞은
variable에 저장*/
float d = distance (pos1, @P);
float k = distance (pos2, @P);
// 거리값에 chf()가 적용된 상수를 곱해주어 sin()이 적용되었을때 파형의 파장 거리를 조절 할 수 있게끔 설정
d *= chf ("FREQ");
d += @Time*chf ("SPEED");// @Time값에 chf()가 적용된 상수를 곱해주어 모션의 스피드를 조절할 수 있게끔 업데이트
// 거리값에 sin()을 적용하여 sine 파형을 띄게끔 설정하여라
fx += sin (d)*chf ("AMP"); // Amplitude값을 곱해주어 파형의 높이값 조절
// 거리값에 chf()가 적용된 상수를 곱해주어 noise()이 적용되었을때 파형의 파장 거리를 조절 할 수 있게끔 설정
k *= chf ("FREQNOISE");
k += @Time*chf ("SPEEDNOISE");// @Time값에 chf()가 적용된 상수를 곱해주어 모션의 스피드를 조절할 수 있게끔 업데이트
// 거리값에 noise()을 적용하여 noise 파형을 띄게끔 설정하여라
fx += noise (k)*chf ("AMPFORNOISE"); // Amplitude값을 곱해주어 파형의 높이값 조절
/* noise 파형이 적용된 거리값에 geometry의 y방향 scale이 비례할 수 있도록 설정하여라. 그리고 x와 z방향의
scale은 맨위에 설정해둔 변수 x와 z에 대한 파라미터로 유저가 직접 각기 조절 할 수 있게끔 설정하여라*/
@scale = set (x, fx, z);
/* @Cd값을 sine wave가 적용된 d의 수치에 비례하게 chramp()으로 설정해주기로 하였다.
이때 @Cd값은 vector attribute인데 어떻게 chramp()을
적용했을까. 이는 vector으로 chramp()을 새롭게 type casting해주며 chramp()의 ramp파라미터로
색깔값을 지정해 줄 수 있게 설정하였다*/
@Cd = vector (chramp ("COLOR", d));
3. What happens if you affect @N?
@N Normal값에 물리적으로 파형이 생기게끔 만들어주기 위해 입체적인 Geometry인 sphere을 사용하여 모션을 만들어 보았다. 여러가지 파형을 for loop 반복문으로 만들어 준다음 point()로 불러와 파형 효과를 지정해준다음 이를 @N값으로 나타나게끔하여 막 표면에서 튀어오르게 해보았다. 그리고 마지막으로 Copy to points를 이용해 box에 연결하여 box가 포인트들의 위치에 카피되게끔 세팅해주었다.
/* * 변수 생성 & 효과 생성 * */
// 여기 float variable FX는 전체적인 effect를 추가한 값임. 모든 효과에 대해 정의를 내려준다.
float FX = 0;
// 여기 float variable fx는 FX에 추가될 수치들로써 각기 어떠한 효과를 나타낼지 정의를 내려준다.
float fx = 0;
// 나중에 값을 지정해줄 변수들을 미리 설정함
vector pos = 0;
float d = 0;
// 유저가 float variable rad를 chf()을 사용하여 파라미터로 지정하여 유동적으로 조절할 수 있게 함
float rad = chf ("RADIUS");
// 그대신 point()의 세번째 인풋값을 각기 다르게하여 각기 다른 포인트의 위치에 대해 효과를 생성하게끔 설정하였다
// 이는 계속 변수에 값을 새롭게 정의해주면서 위에서 선언된 값들을 무시하고 새로운 값들을 변수에 저장시켜 바뀌게 했다
for (int i = 0; i < 100; i++) { // i 가 0에서부터 100까지 1씩 늘동안
/* point()을 이용하여 1번 인풋에 연결된 geometry의 파라미터로 설정된 i번 포인트 넘버를 가진
포인트의 위치값을 불러와 vector variable pos에 저장하여라*/
pos = point (1, "P", i);
// 여기서부턴 위에서 작성한 식과 거의 동일하다
d = distance (@P, pos);
fx = d;
fx *= chf ("FREQ");
fx -= @Time*chf ("SPEED");
fx = sin (fx);
fx *= chf ("AMP");
// 이때 fit()을 활용하여 쉐입을 뒤집어 버렸다.
fx *= fit (d, 0, rad, 1, 0);
// FX변수에 기존에 효과들을 저장하든 fx변수를 추가하여 효과들이 누적될 수 있게끔 세팅하였다
FX += fx;
}
// 효과가 geometry의 normal값을 중심으로 물리적으로 생성되게끔 함
@P = @P + @N*FX;
// @pscale값을 파라미터로 조절 가능케 하여 카피될 geometry의 uniform scale을 조절 가능케함
@pscale = chf ("PSCALE");
//@scale = set (fx + @N.x, fx + @N.y, fx + @N.z);
/* @Cd값을 d의 수치에 비례하게 chramp()으로 설정해주기로 하였다.
이때 @Cd값은 vector attribute인데 어떻게 chramp()을
적용했을까. 이는 vector으로 chramp()을 새롭게 type casting해주며 chramp()의 ramp파라미터로
색깔값을 지정해 줄 수 있게 설정하였다*/
@Cd = vector (chramp ("COLOR", d));
이해가 안되었던 부분:
- 1번 exercise에서 noise()를 적용시켜 파형을 형성할때 fit()을 사용하여 위치를 고정시키고자 하였는데 그랬을때 다음번에 파형이 음수로 넘어가지 않게끔 할때 아니면 chramp()을 사용하여 색깔을 조절시키려 할때 또 fit()을 사용할때가 있어 어떻게 써야할지 몰라 대략 난감하였다.
- 지난번에 배운 중첩과 이번시간에 배운 것들을 종합하여 코딩을 해보자니 머리가 폭파되기 일부직전이었다. nearpoints()와 array를 이용해서 @scale값을 조절해보고 싶었지만 나중에는 그냥 순간 TWA님이 갑자기 너무 존경스러워지고 내 머리가 원망스러웠다.
- 갈수록 Exercises들이 너무 어려워지는 것 같다. 강의를 들을때는 이해된건줄 알았는데 직접 코딩을 하자니 내맘대로 안되는게 의아하게 된다. 어 이게 왜 안되지? 어 이게 왜 되지? 이런 순간들이 많아지는 것같다. 개발자들의 마음이 공감되는것 같다.
공부하면서 들었던 생각:
참 강의를 들을때는 생각보다 쉽고 이해가 되는 것 같은데 exercise로 넘어가서 직접 문제를 풀어볼때 머리가 막히는 것을 많이 느끼는 것같다. exercises시간이 두려워지는 것은 오직 나뿐인가...? 하기싫은 유산소운동을 하는 느낌이다.... 그래도 실력이 늘려면 시도해봐야 겠다는 생각에 꾸역꾸역 시간을 투자해서라도 코드를 작성하고는 있다. 어쨌든 오늘 배운 Copy to points는 내가 제일 좋아하는 노드였다. 뭔가 geometry가 모든 포인트의 위치에 카피되는 것이 웃기기도 하고 재밌기도 하였다. 그리고 카피만 되는 줄 알 았는데 포인트의 해당 attribute들이 geometry의 attribute과 카피/곱셉/덧셉/뺄셈 등이 되는 사실을 알고나니 생각보다 노드의 쓰임세가 많구나라는 것을 깨닫게 되었다. 그리고 강의에서 rigid body에 대해 짤막하게 언급되었는데 그때 @pscale, @scale과 같은 point orientation attribute들이 사용된다는 사실이 신기하기도 하고 아직은 제대로 감이 잡히지는 않았다. 그리고 각기 포인트들에 vex를 작성해주어 특정 모션을 취해주게 한 다음 geometry를 copy to points에 연결해주어 같이 모션에 따라 움직이게 만드는 것이 특이하기도 하고 재밌었던 것 같다. 점차적으로 코드를 읽는 것 뿐만이 아닌 직접 작성하는 시간을 갖는것의 중요성에 있어서 생각하게 만드는 오늘 강의였던 것 같다. vex 생각보다 쉽네 이러고 있었는데 갈수록 배운것들을 다 종합하자니 머리가 지끈지끈해지는것 같다. 계속 계속 연구해보고 공부해야 할 것 같다.

'FX > Houdini_Joy of VEX' 카테고리의 다른 글
| Joy of Vex - Day 17-1: copy sop, orient, quaternions (0) | 2022.07.27 |
|---|---|
| Joy of Vex - Day 16: copy sop, midweight instance attributes (scale, N) (0) | 2022.07.24 |
| Joy of Vex - Day 14: creating geometry, deleting geometry, debugging vex (0) | 2022.07.20 |
| Joy of Vex - Recap of Week 4 (0) | 2022.07.18 |
| Joy of Vex - Day 13: for loops (ties nicely into arrays) (0) | 2022.07.18 |