플루이드로 구름만들기 2

Fluid를 이용한 구름만들기1

Fluid를 이해하면서 제일 쉽게 접할수 있는것이 구름를 표현하는 일 일것이다.
그동안 하늘에 구름을 표현하기 위해 여러가지 플러그인이나 텍스춰를 사용하여 작업을 하였으나 조금이라도 아쉬웠던 분들은 이제 부터는 fluid 의 기능을 사용하여 보다 쉽게 사실적 인 배경을 만들수 있게 되었습니다.



Fluid 는 크게 두가지로 구분할수있는데 Dynamic Fluid Effect 와 Non-Dynamic Fluid Effect 로 나눌수 있는데 그중에서 후자인 Non-Dynamic Fluid Effect 만으로도 사용자들이 원하는 많은 표현들을 가능하게 해줍니다.

이번 예제에서는 Fluid 사용에 기본이라 할수있는 사실적인 구름제작에 관해서 설명 하고자 합니다.

그림중 help 라 하는 것은 Maya help 에 있는 이미지를 첨부하였습니다.

1> Container 생성하기

Fluid 는 Container 라는 사각 박스안에서만 존재하기 때문에 구름은 생성하는 첫 단계라 할수있습니다.

1. Fluid Effect > Creat 3D Container 를 선택합니다.




<그림1>


작업화면에 정사작형의 3D Container가 생성 됩니다.




<그림1-1>


구름의 형태를 만들기위해서 Container 의 크기를 조절할 필요가 있습니다.

2. Container 를 선택후 Attribuite Editor (Ctrl+A) 열어서 Fluidshape 탭을 엽니다.




<그림2>


Resoulution 과 Size를 다음과 같이 설정합니다.




<그림2-1>



<그림2-2>


크기(Size) 에 따라 해상도(Resoulution)의 비율을 비례적으로 만들어야 각축의 퀄리티를 동일하게 만들수있습니다.

2> Container 에 Fluid 추가하기

1. Container 를 선택후 Attribuite Editor (Ctrl+A) 보십시오.




<그림3>


2. Contents method 안에 Density, Velocity, Temperature, Fuel 을 모두 Off(zero) 로 설정합니다.




<그림4>


일반적으로 구름에 표현을 위해 Density Gradient 에 Constant 를 사용하여 Density 값을 모두 1로 만든 후 조절을 하였으나 이번에는 이 값을 사용하지 않고 내부 Shading 의 속성으로 표현을 하겠습니다.

3. Attribuite Editor 에서 Shading 부분에서 Opacity 하위의 Opacity Input 을 Y Gradient 로 설정을 바꿉니다.




<그림5>


자세한 설명은 후에 다루에 질 것입니다.

이제 Container 에 Fluid 입자가 채워진것을 볼수있습니다.




<그림6>


# Display 설정하기

Attribuite Editor 에서 Display 항목을 엽니다.

*Shaded display 는 화면에 표시되는 방식이 어떠한 것으로 보여질지를 결정합니다.
화면상에 표시되길 원치 않으시면 Off 를 선택하십시요..
가능한 Fluid 를 보기 위해선 As Render 를 선택 하십시요.

*Opacity Preview Gain
Shaded Display 설정중에서 As Render 가 아닐때 보여지는 Opacity .를 조절 합니다.

*Slices per Voxel
Shaded Display 상태에서 Voxel (Volume Pixel) 에 보여지는 Slices 개수를 조절합니다. 기본값은 2 이며 최대값은 12 입니다.




(help-1)


*Voxel Quality
Best 로 설정 했을경우 display quality 가 높고 Faster 는 낮다.

*Boundary Draw
화면상에 container 가 어떻게 보여질지를 선택하는 항목이다..
그것들에 대한 종류이다.




(help-2)

*Numeric Display
Voxel 이 선택된 성질에(Density, Temperature, or Fuel) 에 대하여 표시되는 값이다.
이값은 각 성질의 Scale 변경되기 전 값이다.
만약 Numeric Display 가 Off 되었거나 각 성질의(Density, Temperature, or Fuel)
Method 가 Gradient 로 설정되었을 경우 나타나지 않는다.




(help-3)


*Wireframe Display
작업 화면이 wireframe display mode 일때 Fluid 표시 방식을 어떻게 할지를 결정하는것 입니다.
Rectangles일경우 사각형의 모양으로 나오며 Opacity의 값에 따라 크기가 다릅니다.




(help-4)


*Velocity Draw
Fluid 의 움직임을 방향으로 표시하기위해서 이 옵션을 사용합니다.

*Draw Arrowheads
체크하였을경우 Velocity 방향을 지시하는 부분이 없어집니다.




(help-5)


*Velocity Draw Skip
화살표들이 얼마나 조밀하게 표시 될지를 설정합니다.

*Draw Length
화살표 방향의 길이를 조절 합니다.


Fluid 입자의 디스플레이 상태를 더욱 잘보이게 하기위해 Container 좌표의 Display 를 끄도록 하겠습니다.

Attribuite Editor 에서 Display> Boundary Draw 에서 None 으로 설정합니다.




<그림6-1>



<그림6-2>


3> Container 의 입자에 Texture 적용하기

구름과 같은 투명도와 불투명도를 나타내기 위해서 Texture 를 적용 할것 입니다.

1. Attribuite Editor 에서 Textures 를 엽니다.

2. 현재의 Texture 를 Opacity 값들에 할당하기 위해서 Texture Opacity 를 켭니다.




<그림7>


*Texture Color
Color 에 Texture 를 적용할 것인가를 선택하는 옵션입니다.

*Texture Incandescence
Incandescence 에 Texture 를 적용할 것인가를 선택하는 옵션입니다.

*Texture Opacity
Opacity 에 Texture 를 적용할 것인가를 선택하는 옵션입니다
   Fluid를 이용한 구름만들기2


3.Texture Type

*Perlin Noise
Perlin Noise는 Solid Faractal Texture 에서 사용되는 기본적인 3D Noise 를 사용합니다.

*Billow
부풀어 오른 구름과 같은 효과를 가지고 있습니다. 단점이라면 계산시간이 오래 걸립니다.

*Volume Wave
3D 공간안에 Waves 가 있는것같은 효과가 납니다.

*Wispy
Perlin Noise 보다 경계부분이 흐려져 있습니다.

각각의 Type 의 그림들입니다.




(help-6)


이번 예제 에서는 Perlin Noise 로 설정합니다.(기본 설정값임.)

이제 Fluid 입자들은 좀더 불투명한 영역과 투명한 영역을 가지고 살짝 얼룩이 진것처럼 보입니다.




<그림8>


만약, Container 안에 입자들이 '그림8' 처럼 보이지 않는다면 아래를 확인하십시오.




<그림9>


view menu bar 에서 shading>hardware texturing 을 선택합니다.
view menu bar 에서 shading>smooth shading all (단축키: 6 ) 을 선택합니다.

일단 textuer가 입혀진 상태에서 그다지 표가 안나지만 Container 안의 입자들은 각각의 불투명한 영역과 투명한 영역을 가지고 있습니다.
이것을 더 극대화하여 투명한 영역은 더욱 투명하게 불투명한 영역은 더욱 불투명하게 하기위해서 아래와 같이 Opacity 를 먼저 조정 하겠습니다.

4. Shading>Opacity 에 설정값을 다음과 같이 설정합니다.




<그림10>


다른 속성값과는 달리 그래프로 형태 조정이 가능하기에 좀서 세세한 조정이 가능합니다.




<그림11>

Opacity 값은 아래쪽이 0 (완전 투명) 이고 윗쪽이 1(완전 불투명)입니다.
Y Gradient 0 은 Y축의 +방향 끝이고 - 방향의 끝이 1 입니다.

위그림에서 보여지는 그래프의 경우에는 Y Gradient 위치가 0.25 까지는 완전투명이고
Y Gradient 위치가 1 이면 완전 불투명하게 만들어진다.




<그림12>

5. 이제 Textueres 옵션들을 이용해서 좀더 구름과 같은 효과를 만들기위해 다음과같이 설정 합니다.




<그림13>

*Color Tex Gain
Color Input 값에 얼마나 영향을 미치는가를 말합니다.
Color값을 붉은색과 푸른색 으로 설정 하고 Color Input 을 X Gradient
로 설정 하였다.




<그림13-1>


기본값으로 되었을때는 붉은색과 푸른색이 동일하게 Texture 에 영향을 미친다.
1에서 0값으로 갈수록 Texture 의 값이 사라진다.1보다
클 경우 Texture는 푸른색쪽으로 기울어진다.




<그림13-2>


*Incand Tex Gain
Color Tex Gain의 의미와 동일 하다.

*Opacity Tex Gain
Color Tex Gain의 의미와 동일 하다.

*Threshold
Texture 의 뭉침 정도를 조절한다.

*Amplitude
이수치가 올라가면 Texture 투명한값은 더욱 투명해지고 불투명한값은 더욱
불투명해진다.

*Ratio
Fractal Noise의 빈도수를 조절합니다. 디테일의 미세함을 이값으로 조절 합니다.

*Frequency Ratio
공간의 크기에 맞추어 Noise의 반복도를 결정합니다

*Depth Max
Fluid 의 세세한 부분까지 Texture 를 적용할것인가를 결정할수있습니다.
값을 올리므로 인해서 Fluid 가 조금더 깊이값을 가져 사실적으로 보입니다.
하지만 그만큼 계산시간은 많이 걸립니다.

*Invert Texture
말그대로 Texture Noise 형태를 바꾸는 옵션입니다.

*Inflection
Texture 에 적용된 Noise 값을 더욱 더 심하게 만드는것을 말합니다.


1) 전체적이 구름의 패턴이 너무 크게 만들어졌기에 Frequency Ratio 를 설정 합니다.

2)Ratio 를 설정합니다.

3) 구름의 깊이감을 주기위해 Depth Max 값을 올려줍니다.

4) 구름이 너무 평탄해 보이기에 Inflection 을 체크해 주었습니다.


5) 구름의 입자의 어두운 부분과 밝은 부분의 차이가 심해 구름의 외각이 이글거리는 형상이 생겨 Amplitude 를 적당이 줄였습니다.




<그림14>


지금까지 설정한것을 Test 렌더링을 해보았습니다.




<그림14-1>


6.Texture 에니메이션

Non-Dynamic Fluid Effect 는 한 장의 멈춰진 사진과 같은으로 에니메이션은 적용된 Texture를 사용하여 에니메이션을 합니다.

1) Attribuite Editor 에서 Textures 뒷부분을 열어 봅니다.




<그림 14-2>

Texture Time에 Key값을 주어서 구름이 흘러가는 것처럼 표현 할수있습니다.

2)Frequency 는 Noise의 세밀함을 조절할수 있습니다.

3)Textures Scale 과 Origin 은 Textures 크기를 조절하거나 Textures 의 원점을 조절할수 있습니다. 만약에 한축의 Scale을 적당히 늘리면 구름이 옆으로 늘어지게 된다.

4)Implode 는 Implode Center 에 의해 정의내려진 1점을 기준으로 방사 됩니다.
폭발과 같은 효과를 낼때 사용하기도 합니다.
Implode 의 값에따라 변하는 그림 입니다.




<그림14-3>


Implode Center 값에 따라 방사되는 점이 변하는 그림입니다.




<그림14-4>


1번의 그림은 Implode Center 값을 1, 0, 0 으로 설정 하였습니다.( X 축방향)
2번의 그림은 Implode Center 값을 0, 1, 0 으로 설정 하였습니다.( Y 축방향)
3번의 그림은 2D Container 이기에 Z 축의 방향이 없어 센터에 생기게 되었다.

4> Shader 적용하기

Color, Incandescence, Opacity 를 사용하여 좀더 사실적이고 입체감있는 구름을 표현 합니다.




<그림15>


1. Attribuite Editor 에서 Shading 부분을 열고 위의 그림처럼 왼쪽값을 오른쪽값으로 설정을 하였습니다.

# Color Ramp 의 사용법을 알아보겠습니다.




<그림15-1>


* selected position 은 Ramp의 왼쪽이 0의 값이고 오른쪽의 값이 1이 된다.

* selected color 는 선택된 position marker 의 color 값을 조절 할수있습니다.

* Interpolation 은 color 값이 어떻게 섞일것인가를 선택할수있습니다.
각 종류에 관한 이미지 입니다.




(help-7)


* Color Input 설정을한 컬러를 어떻게 위치시킬까를 결정합니다.

Constant 는 Container 안에 Ramp의 오른쪽 끝에 색(1.0) 으로 넣어지게 된다.

X, Y, Z, Center Gradient 는 Ramp 의 왼쪽의 색(0.0) 에서 오른쪽의 색(1.0)
까지의 색을 어떠한 축을 기준으로 보여지는 가를 결정하는 것이다.

그외의 Density/Velocity/Temperature/Fuel 는 각 성질의 값을 기준으로
낮은값은 0에 색을 가지고 높은 값은 1의 색을 가진다.

2. Transparency 의 값을 조금더 불투명하게 하였습니다.

3. Edge Dropoff (Dropoff Shape 의 설정 Shape 에따라 Container 의 외각을 기준으로 얼마나 부드럽게 만들어지는가) 를 조절하여 사각 박스모양의 Fluid 입자를 부드럽게 합니다.

4.Color 부분에서 Color Input 부분을 Y Gradient 로 설정합니다.(Y 축을 기준으로 색을 조정 할수있습니다.) 구름에 색은 흰색이므로 Color 는 흰색으로 남겨둡니다. Input Bias 는 0 의 값에서 Input 값이 어느쪽으로 치우칠 지를 결정합니다.

5.Incandescence 의 Input 값 또한 Y Gradient 설정 합니다.
구름이 발광을 할 필요는 없으나 공간감을 살리기 위해서 구름의 아래쪽에 조금은 발광을 하도록 설정을 하였습니다.

6. Opacity 의 Input 은 그전에 설정한 그값이며 그래프의 곡선은 Y축을 기준으로 아래쪽에 구름의 모양이 생성 되도록 하였고 구름의 투명도와 불튜명도값의 차이를 많이 두어 구름과 구름 사이의 간격을 멀어지게 했습니다.




<그림16>


오른쪽은 최저의 퀄리티로 이미지를 렌더링 한것입니다..아직까지 2D 느낌을 면치 못할것 입니다. 그리고 이미지가 깨지는 느낌이 듭니다.

좀더 자세히 확인하기 위해 Attribuite Editor 에서 Shading Quality 안에 있는 Quality 를 3정도로 올리고 Render Interpolator 를 Smooth 로 바꿉니다.




<그림17>


* Quality 는 Fluid Texture 에는 적용되지 않습니다.다만 Fluid Sampling 개수를 늘려 주어 디테일 표현을 할수있습니다.

*Render Interpolator
Smoth 로 선택하였을때에 Fluid 입자의 급격한 contrast 를 부드럽게 만들어 줍니다.

훨씬 더 부드러운것을 느낄수있습니다.




<그림18>


5> Lighting 설정하기

1. Attribuite Editor 에서 Linghting 부분을 엽니다.




<그림 19>


2. Self Shadiwing 추가하기
그림19 처럼 Self Shadiwing 을 추가하면 구름에 더욱 깊이감을 줄수가 있습니다.
Self Shadiwing 은 내부의 Directional Light 를 설치하여 Fluid 가 스스로 그림자를 생성하도록 합니다.

Real Lights 선택시에 사용자의 라이트에 의해 영향을 받습니다.
선택해지시에 Directional Light 의 기본조명이 생성되며 좌표를 통하여 조절할수있습니다.

Fluid 로 생성된 구름의 그림자를 바닥에 맺히고 싶다면 Raytrace Shadow 사용해야만 그림자를 생성할수 있다

그럼 지금까지 생성한 Fluid 에 배경이미지를 넣어서 렌더링을 해보았습니다.


Fluid 를 사용한 배경 제작 예제 >


이번 Tutorial을 쓰면서 무엇을 예로 들어야 할지 많이 고민을 하게 되었습니다. 대부분의 구름에 대한것은 aliaswavefront 에 홈페이지에 들어가면 많이 있기에 실제 사진을 가지고 따라해보기로 했습니다.




<그림 21>


일몰 되기 직전의 사진인것같습니다. 전체적으로 붉은색톤이 감돌면서 비춰지는 구름은 정말 너무나도 멋있습니다. 그럼 한번 표현을 해보도록 하겠습니다.

1>Container 생성하여 Fluid 추가하기




<그림22>


1. 3D container 를 생성한후 Ressolution 과 Size 를 위에 크기대로 설정 한다.

2. 이번에는 Density 를 Gradient 로 놓고 Density Gradient 를 Constant 로 놓습니다.
이렇게 하면 바로 Container 에 Fluid 의 입자가 가득 채워집니다.
그것은 단지 Shading 안에 Opacity 가 Density 로 설정이 되어있기 때문입니다.

3.Velocity 를 Off 로 설정 합니다.

2> Texture 적용하기

Display 의 설정은 사용자의 편의에 따라 설정 하시기 바랍니다.




<그림23>


1. 일단 Texture Opacity 를 체크하고 Type 을 Perlin Noise 로 설정한다. Billow 로 설정하고 Test 를 해보았으나 Display 상태나 Rendering 시에 계산시간이 너무 많이 걸려 포기하고 기본 Type 을 선택하기로 했습니다.

2. 사진에 있는 구름은 약간은 두리 뭉실하고 작은구름이 거의 안보입니다. 다른옵션은 전에 설명을 했던 부분이었기에 넘어가기로 합니다.
제일 중요하다 할수있는 Texture Scale 을 조정 하였습니다. 각 축의 Texture Scale 을 조정하여 사진의 구름처럼 X 축으로 늘어난 구름을 만들었습니다.




<그림24> Texture Scale 을 조정 하기 전의 그림 입니다.



<그림25> Texture Scale 을 조정한 후의 그림 입니다.


위에 이미지는 이미 Opacity 를 조정 하였음을 알아두십시요.

3> Shading 적용하기

1. Edge Dropoff 조정 함으로써 외각라인을 기준으로 부드럽게 만듭니다.




<그림27>


2. Color Input 을 Y Gradient 로 바꾼후에 원본의 그림처럼 구름이 진한 회색으로 나타나기에 아래쪽부터 윗쪽으로 어두운 색에서 밝은 색으로 변경을 하였습니다.




<그림28>


* 이제부터 카메라의 위치를 잡고 렌더링을 걸어보며 테스트를 하겠습니다.
* 렌더링을 디테일하게 보기위해 Shading Quality 안에 Quality 를 4 로 올립니다.




<그림28-1>


3. Incandescence Input 을 Y Gradient 로 바꿉니다.

사진에서 구름의 윗부분이 붉은색의 하일라이트가 보이므로 아래부분은 검은색으로
발광하지 않고 구름의 끝 부분에 붉은색이 발광하도록 설정 하였습니다.




<그림29>


발광하는 부분이 배경이 검은색인 관계로 잘보이지 않습니다.하지만 원하는 대로
윗쪽 끝 부분이 붉은색톤으로 발광합니다.

* 필자는 이미 테스트 된 이미지를가지고 설명을 하지만 따라하실때는 위치를 잡기위해
많은 테스트를 하셔야 할것입니다.

4. Opacity 는 Texture 를 적용한 후에 설정하는것이 바람직하다.
설정한 그래프를 설명하자면 Texture Noise 의 값에 따라 투명한 부분과 불투명한
부분이 Y 축을 기준으로 투명도가 날카롭게 떨어지고 중간부분에서는 부드럽게
불투명해 집니다. 마지막 부분에서는 불투명도가 급격히 투명해 집니다.

4> Lighting 적용하기

1. Light 는 외부 Light 를 사용할 것이기에 Real Lights를 체크하였고 자체적인 그림자는
생성을 하지 않겠습니다.




<그림30>

2. 외부 Light 중 volume Light 한개를 추가 합니다.




<그림31>


원본 이미지와 같은 위치에 설치하고 내부 설정값을 변경 하십시오.




<그림32>


렌더링한 이미지 입니다.



<그림33>


구름에 전체적으로 volume Light 에 의해 붉은색으로 비칩니다.

5>하늘과 태양 만들기

하늘과 태양은 현재 Fluid 를 다루고 있기에 모두 Fluid 로 제작하기로 한다.

1. 하늘 만들기




<그림34>


* 3D container 를 생성한후 Ressolution 과 Size 를 위에 크기대로 설정 합니다.

* Density 를 Gradient 로 놓고 Density Gradient 를 Constant 로 놓습니다.
이렇게 하면 바로 Container 에 Fluid 의 입자가 가득 채워집니다.
그것은 단지 Shading 안에 Opacity 가 Density 로 설정이 되어있기 때문입니다.

* 사진의 배경과 알맞은 위치에 배치 시킵니다.

* 하늘은 Noise 를 넣을 필요가 없으니 Texture 는 설정하지 않겠습니다.

* Shading 설정을 합니다.




<그림35>


* Light 는 외부조명을 사용하므로 Real Light 를 체크한다.




<그림36>


지금까지 셋팅한것을 렌더링 하였습니다.




<그림37>


2.태양 만들기

태양은 2D container 로 만들어 보겠습니다. 3D container 와 옵션의 내용은 같기에
자세한 설명은 하지 않겠습니다.




<그림38>


* 2D container 를 생성한후 Ressolution 과 Size 를 위에 크기대로 설정 합니다.

* Density 를 Gradient 로 놓고 Density Gradient 를 Constant 로 놓습니다.
이렇게 하면 바로 Container 에 Fluid 의 입자가 가득 채워집니다.
그것은 단지 Shading 안에 Opacity 가 Density 로 설정이 되어있기 때문입니다.

* 위치는 사진에 있는 태양의 위치와 같은장소로 옮긴다.

* Shading 을 설정합니다.




<그림39>


* Lighting 의 하늘만드는 셋팅과 동일하다.

태양 아래로 바다가 비추는 것인데 그냥 오브젝트로 대치시켰다.

지금까지 셋팅한것을 렌더링 하였습니다. 어떻게 보면 마무리 이미지 이다.




<그림40>


너무도 간단히 예제를 설명하여 어떨지 모르지만 여러번 반복하다 보면 여기 나온
이미지 보다 더 멋진 것을 만들수 있을것입니다.

by 봉봉 | 2008/05/08 05:57 | 트랙백

dd

Today_is_the_day-jelly_boy.wma

you can... you will be happy..
너는 할수있어...너는 행복해 질꺼야..
you know.. this is the only way..
알잖아.. 이방법 뿐이라는걸
all right.. no need to be afraid..
그래... 두려워할필요 없어
you can ... i know...
너는 할수있어... 나는 알아..


you can... you will be happy..
you know.. this is the only way..

all right.. no need to be afraid..
you can ... i know...
위와 같음


fly away...to make a wish,,
꿈을위해 날아가
you will make it.. dream come true
너는 잘할거야..꿈은 이루어질꺼야
fly away... to make a life...
인생을위해 날아가
you can`t take it anymore..
더이상은 가질수 없어(인생은 한번뿐이다...뭐 이런뜻 같아여;;;)


fly away...to make a wish,,
you will make it.. dream come true

fly away... to make a life...
you can`t take it anymore..

you can... you will be happy..
you know.. this is the only way..

all right.. no need to be afraid..
you can ... i know...



you can... you will be happy..
you know.. this is the only way..

all right.. no need to be afraid..
you can ... i know...



fly away...to make a wish,,
you will make it.. dream come true

fly away... to make a life...
you can`t take it anymore..



fly away...to make a wish,,
you will make it.. dream come true

fly away... to make a life...
you can`t take it anymore..

by 봉봉 | 2008/04/20 03:40 | 트랙백

sum41 - still waiting

So am I still waiting
그래서 난 아직도 기다리고 있어
For this world to stop hating
이 세상이 날 그만 미워하길
Can't find a good reason
적당한 이유를 못 찾아
Can't find hope to believe in
믿을만한 소망을 찾을 수 없어

Drop dead a bullet to my head
총알이 내 머리에 박혔어
Your words are like a gun in hand
너의 말은 내 손안의 총같아
You can't change the state of the nation
넌 나라의 상태를 바꿀순 없어
We just need some motivation
우린 그냥 조금의 자극이 필요할 뿐이야
Three times I see no conviction
세번모두 설득력은 보이지 않아
just lies and more contradiction
그냥 거짓말과 더 많은 모순

So tell me what would you say
그래 뭐라고 할껀지 말해봐
I'd say it's time (to listen)
나는 이걸 들을 시간이라고 말해줄테니

So am I still waiting
그래서 난 아직도 기다리고 있어
For this world to stop hating
이 세상이 날 그만 미워하길
Can't find a good reason
적당한 이유를 못 찾아
Can't find hope to believe in
믿을만한 소망을 찾을 수 없어

Ignorance and Understanding
무지함과 이해함
We're the first ones to jump in line
우린 시간에 늦지않은 첫번째 사람들이야
Out of step for what we believe in
우리의 믿는 것은 조화적이지 않아
But whos left? To start the pleading
하지만 변명할 사람 누가 남았니
How far will we take this
이것이 우릴 얼마나 멀리 데려갈려나
It's not hard to see through the sickness
아픔을 통해서 보는 것은 어렵지 않아

So tell me what would you say
뭐라고 할건지 내게 말해줘
I'd say it's time (to listen)
이걸 들을 시간이라고 말해줄 테니

So am I still waiting
그래서 난 아직도 기다리고 있어
For this world to stop hating
이 세상이 날 그만 미워하길
Can't find a good reason
적당한 이유를 못 찾아
Can't find hope to believe in
믿을만한 소망을 찾을 수 없어

this can't last forever
이건 영원히 계속될수 없어
Time won't make things better
시간이 일을 좋아지게 하진 않을꺼야

I feel so alone
난 외로워
Can't help myself
난 나에대해 뭘 할수가 없어
And no one knows
If this is worthless
이게 쓸모있는지는
아무도 몰라
Tell me: so
그러니 말해줘

What have we done
우리가 뭘 한거야
We're in a war that can't be won
우린 이길수 없는 전쟁을 하고 있어
This can't be real
이건 진짜일수 없어
I don't know what to feel
뭘 느껴야 하는지 모르겠어

So am I still waiting
그래서 난 아직도 기다리고 있어
For this world to stop hating
이 세상이 날 그만 미워하길
Can't find a good reason
적당한 이유를 못 찾아
Can't find hope to believe in
믿을만한 소망을 찾을 수 없어

So am I still waiting
그래서 난 아직도 기다리고 있어
For this world to stop hating
이 세상이 날 그만 미워하길
Can't find a good reason
적당한 이유를 못 찾아
Can't find hope to believe in
믿을만한 소망을 찾을 수 없어

by 봉봉 | 2008/04/07 06:14 | 트랙백

스 토리보드

by 봉봉 | 2008/01/08 07:52 | 막쓰라 | 트랙백

세계 디자인잡지

노르웨이SABRE Magazine http://www.tricom.no/sabre/s.htm

핀란드 The magazine of the Finnish Associa..
http://www.safa.fi/ark/index.html

스웨덴 EFX Art & Design
http://www.create.tm.fr/ACTUS/1_110..

영국 Creative Review
http://www.mad.co.uk/cr/index.asp

영국 Baseline
http://www.baselinemagazine.com/

프랑스 Lurzer's Int'l Archive
http://www.luerzersarchive.com/

미국 Typofile
http://www.will-harris.com/type.htm

미국 Smithsonian-Media
http://www.smithsonian-media.com/

미국 Razor Magazine
http://www.razormag.com/

미국 Plan Net
http://www.plannet.com/

미국 New Dodge
http://www.4adodge.com/

미국 Journal E
http://www.journale.com/

미국 Highfive
http://www.highfive.com/

미국 FontSite
http://www.fontsite.com/

미국 Fashion Net
http://www.fashion.net/

미국 Eye Caramba
http://www.eyecaramba.com/

미국 Digitalthread
http://www.digitalthread.com/

미국 Desgin Management Institute
http://www.dmi.org/dmi/html/index.h..

미국 Critique Magazine
http://www.critiquemag.com/

미국 CartooNet
http://www.cartoonet.net/

미국 Can-abyss
http://www.canabyss.de/

미국 Cafenzo
http://www.cafenzo.com/

미국 Born magazine
http://www.bornmag.com/

미국 Asian Arts
http://www.asianart.com/index.html

미국 ARTISTICA Magazine
http://www.artistica.org/

미국 Art Commotion
http://www.artcommotion.com/

미국 Animation World Network
http://www.awn.com/

일본 닛케이디자인(日經デザイン)
http://nd.nikkeibp.co.jp/nd/index.h..

일본 디자인의 현장(デザインの現場)
http://www.so-net.ne.jp/dezagen/dez..

일본 AXIS
http://www.axisinc.co.jp/

일본 HONCO
http://www.honco.net/honcoten/publi..

일본 DESIGN NEWS
http://www.jidpo.or.jp/designnews/i..

일본 design plex
http://www.bnn.co.jp/designplex/

HONCO 일본
http://www.honco.net/honcoten/publi..

일본 agosto
http://www.agosto.com/

미국 3D- Artisan
http://www.3dartisan.com

미국 BIG
http://WWW.BIGMAGAZINE.COM

미국 Emigre
http://www.emigre.com/

미국 Idea
http://www.ideamagazine.net

미국 HOW
http://www.howdesign.com/

미국 Graphis
http://www.graphis.com/

미국 Eye
http://the-internet-eye.com/

미국 Communication Arts
http://www.commarts.com/

미국 프린트
http://www.printmag.com/

미국 Casa BRUTUS
http://www.brutusonline.com/casa/

by 봉봉 | 2007/11/27 15:42 | 트랙백

..

wmv 인코딩에 대한 설명입니다..|Q&A
전체공개2006.07.19 21:30

>mov 나 avi나 MG25등의 갤러리를 보면 화면은 작지만 정말 깨끗하게 렌더링이 되어있는데 어떤식으로 하시는건지.. 궁금

>제가 만들면 화면작을땐 좀 지저분해지더라고요... 그리고 화면크면 용량이 어마어마하고.. 쩝..

 

 

사실은 mov랜더링에 대해서는 저두 잘 모릅니다. -ㅂ-;

애펙에서 1차로 mov로 랜더링은 건 다음에, sorenson squeeze 라는 프로그램에서 다시 압축했을때는 웹에서 쓸만한 수준이 나오긴 하는데요, sorenson squeeze

4 을 깔다보면 퀵타임6이 기본으로 깔리고, flv파일 인코딩시에 플래시8의 비디오 압축코덱이 지원을 안하는등 - 퀵타임6이 깔리면서 애펙7에서도 약간 문제가

.. 그리고 컴에 따라 잘 안깔리거나 이래저래 사소한 문제들이 많아서 -_-;;;

 

결론적으로 잘 안씁니다! 저는. -__;;

 

 

 

가장 쉬운 방법은 애펙에서 DV포맷으로 avi파일을 뽑아내거나 해서 윈도우 미디어 인코더에서 wmv로 인코딩 하는 것입니다.

윈도우 미디어 인코더의 사용방법은 인터넷에 찾아보시면 나올거 같구요 (안 어렵습니다~)

 

 

 

 

여기서는 제가 애펙에서 wmv로 인코딩하는 걸 설명드리겠습니다. (애펙7기준)

 

콤프가 열려있는 타임라인에서 Ctrl + m 으로 랜더큐로 들어갑니다.

Output Module 의 Lossless를 클릭합니다.
Output Module Settings 창에서
Format을 Windows Media로 합니다. (wmv포맷입니다.)
그 아래 Video Output 에서 Format Options... 버튼을 누릅니다. 그러면 Window Media 창이 뜹니다. (프리미어 프로2.0에서도 같은 창이 뜨죵..)

 

 

거기서부터는 이제 wmv 세팅입니다.
위에보면 Export Setting에 보면 Preset이 있는데 일반적으로 일단은 WM9 NTSC 1024K download라는 세팅을 선택합니다.
그 아래쪽에 보면 Filters / Video / Audio / Audiences / Others 등으로 이루어진 탭창이 있습니다.
기본적으로 Video 탭이 활성화 되어 있습니다.

 

여기서 중요한 것은 Bitrate Mode와 Maximum Bitrate 입니다.


Bitrate Mode는 Constant와 Variable Quality가 있습니다.

Constant는 초당 비트레이트를 일정하게 압축하는 것이고, Variable Quality는 컬러수가 많고 화면전환이 빨라서 용량이 많이 필요로 하는 곳은 높은 비트레이트를, 아닌곳은 적은 비트레이트를 할당하여 용량을 최적화 시키는 모드입니다. 대신 랜더링 타임이 더 걸립니다.

 

Constant 모드를 사용할때는 Maximum Bitrate를 1000k (즉 1M) ~ 2000k 로 놓으시면 괜찮은 퀄리티가 나옵니다만, 용량을 보시고 더 러닝타임이 긴 영상 같은 경우에는 500k 정도로 놓기도 합니다. 30초짜리 같은 경우에는 2000k로 놓아도 무리가 없습니다.

 

Variable Quality 모드를 선택하시면 Maximum Bitrate 대신에 VBR Quality라는 것이 생깁니다.
높을수록 좋지만 70-80%로 놓아주시면 됩니다.

(참고로 예전에 적어놓았던 VBR quality 대비 파일 용량의 비율을 보시면

 

70 : 80 : 90 : 100 = 3.1 : 4.2 : 7.5 : 25.1

 

으로써 90%나 100%일때 파일용량이 불필요하게 비약적으로 증가하는 것을 볼 수 있습니다.)

 

 


필요한 경우 오디오 세팅도 해주시고, OK누르고 Rendering하시면 됩니다.

 

화면크기를 줄이시고 싶은 경우에는 Output Module Settings 창의 Stretch를 체크하시고 새로운 화면크기를 입력하시면 되겠습니다~ ^---^

by 봉봉 | 2007/11/06 06:04 | 이~Motion | 트랙백

플러그인

ㅇㅇ

by 봉봉 | 2007/10/30 16:25 | 트랙백

파티클

by 봉봉 | 2007/10/29 03:15 | 트랙백

se5y3

by 봉봉 | 2007/10/29 03:04 | 트랙백

프로세싱

import processing.opengl.*;
import krister.Ess.*;
//draw value
float circleX[] = new float[256];
float circleY[] = new float[256];
float span[] = new float[256];
float Cscale[] = new float[256];
float r[] = new float[256];
float g[] = new float[256];
float b[] = new float[256];
float a[] = new float[256];
float targetX[] = new float[256];
float targetY[] = new float[256];
int value = 0;
boolean viewS=false;

//sound value
int bufferSize;
int steps;
float limitDiff;
int numAverages=32;
float myDamp=.1f;
float maxLimit,minLimit;
FFT myFFT;
AudioInput myInput;
AudioChannel myChannel;

//cubic value
float xmag, ymag = 0;
float newXmag, newYmag = 0;

//Tri value
float ax[] = new float[256];
float ay[] = new float[256];
float bx[] = new float[256];
float by[] = new float[256];
float initialX, initialY = 0;

void setup() {
  size(1280, 760, OPENGL);
  PFont font;
  refresh();

  Ess.start(this);  // start up Ess
  // set up our AudioInput
  bufferSize=512;
  myInput=new AudioInput(bufferSize);
  // set up AudioChannel
  myChannel=new AudioChannel(bufferSize);
  // set up our FFT
  myFFT=new FFT(bufferSize*2);
  myFFT.equalizer(true);
  // set up our FFT normalization/dampening
  minLimit=.005;
  maxLimit=.05;
  myFFT.limits(minLimit,maxLimit);
  myFFT.damp(myDamp);
  myFFT.averages(numAverages);
  // get the number of bins per average
  steps=bufferSize/numAverages;
  // get the distance of travel between minimum and maximum limits
  limitDiff=maxLimit-minLimit;
  frameRate(30);        
  myInput.start();
}
void refresh(){
  for(int i=0; i<256; i++){
    circleX[i] = random(width);
    circleY[i] = random(height);
    Cscale[i] = random(20)+5;
    span[i] = random(1)+1;
    r[i] = random(255);
    g[i] = random(255);
    b[i] = random(255);
    a[i] = random(100);
    targetX[i] = random(width);
    targetY[i] = random(height);
  }
}

void draw() {
  background(0x000000);
  if(keyPressed){
    if(key == '1'){
      if(viewS == false){
        colorMode(RGB, 255);
        viewS =true;
      }
      else {
        viewS=false;
      }
    }
    else if(key == '2'){
      refresh();
      colorMode(RGB, 255);
      value=2;
    }
    else if(key == '3'){
      refresh();
      colorMode(RGB, 255);
      value=3;
    }
    else if(key == '4'){
      refresh();
      colorMode(RGB, 255);
      value=4;
    }
    else if(key == '5'){
      refresh();
      colorMode(RGB, 255);
      value=5;
    }
    else if(key == '6'){
      refresh();
      colorMode(RGB, 255);
      value=6;
    }
    else if(key == '7'){
      refresh();
      colorMode(RGB, 255);
      value=7;
    }
    else if(key == '8'){
      refresh();
      colorMode(RGB, 255);
      value=8;
    }
    else if(key == '9'){
      refresh();
      colorMode(RGB, 255);
      value=9;
    }
    else if(key == '0'){
      refresh();
      colorMode(RGB, 255);
      value=0;
    }
    else if(key == 'q'){
      refresh();
      colorMode(RGB, 255);
      value='q';
    }
    else if(key == 'w'){
      refresh();
      colorMode(RGB, 255);
      value='w';
    }
    else if(key == 'e'){
      refresh();
      colorMode(RGB, 255);
      value='e';
    }
    else if(key == 'r'){
      refresh();
      colorMode(RGB, 255);
      value='r';
    }

  }
  if(viewS == true){
    drawSpectrum();
  }
  if(value == 2){
    drawCircle();
  }
  if(value == 3){
    drawCurve();
  }
  if(value == 4){
    drawWool();
  }
  if(value == 5){
    drawCurve1();
  }
  if(value == 6){
    drawTri();
  }
  if(value == 7){
    drawCurve2();
  }
  if(value == 8){
    drawCircle1();
  }
  if(value == 9){
    drawCircle2();
  }
  if(value == 0){
    drawCircle3();
  }
  if(value == 'q'){
    drawWool1();
  }
  if(value == 'w'){
    drawWool2();
  }
  if(value == 'e'){
    drawWool3();
  }
  if(value == 'r'){
    drawTri1();
  }

}
void drawTri(){
  noStroke();
  for(int i=0; i<256; i++){

    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      //   Cscale[i] = Cscale[i] + span[i];
      targetX[i] = random(width);
      targetY[i] = random(height);
      circleX[i] = random(width);
      circleY[i] = random(height);
      initialX = circleX[i];
      initialY = circleY[i];
      ax[i] = initialX+Cscale[i]*cos(10);
      ay[i] = initialY+Cscale[i]*sin(.5);
      bx[i] = initialX+Cscale[i]*cos(PI);
      by[i] = initialY+Cscale[i]*sin(PI);
      a[i] = 800;
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i]*10;
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i]*10;
    a[i] = a[i]-10*myFFT.spectrum[i];
    //   println(myFFT.spectrum[i]);
    fill(r[i],g[i],b[0],a[i]);
    triangle(ax[i],ay[i],bx[i],by[i],circleX[i],circleY[i]);
  }
}
void drawTri1(){
  noStroke();
  for(int i=0; i<256; i++){

    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      //   Cscale[i] = Cscale[i] + span[i];
      targetX[i] = random(width);
      targetY[i] = random(height);
      circleX[i] = random(width);
      circleY[i] = random(height);
      initialX = circleX[i];
      initialY = circleY[i];
      ax[i] = initialX+Cscale[i]*cos(10);
      ay[i] = initialY+Cscale[i]*sin(.5);
      bx[i] = initialX+Cscale[i]*cos(PI);
      by[i] = initialY+Cscale[i]*sin(PI);
      a[i] = 800;
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i]*10;
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i]*10;
    a[i] = a[i]-10*myFFT.spectrum[i];
    //   println(myFFT.spectrum[i]);
    fill(r[i],g[i],b[0],a[i]);
    triangle(ax[i],ay[i],bx[i],by[i],circleX[0],circleY[0]);
  }
}


void drawCurve1(){

  beginShape();
  for(int i=0; i<256; i++){

    if(Cscale[i]<5){
      span[i] = myFFT.spectrum[i*2]*8;
      Cscale[i]= random(50)+myFFT.averages[i%16]*256;
      circleX[i] = random(myFFT.spectrum[i*2]*300+300);
      circleY[i] = random(myFFT.spectrum[i*2]*150+150);

    }
    Cscale[i] = Cscale[i] - span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(width)*myFFT.spectrum[i*2];
      targetY[i] = random(height)*myFFT.spectrum[i*2];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];
    g[0]=myFFT.averages[16]*512;
    if(i<150){
      r[0]=min(600,myFFT.averages[i%8]*256+120);
      b[0]=min(600,myFFT.averages[i%8]*256+300);
    }
    else {
      r[i]=int(random(512));
      b[i]=int(random(512));
    }
    smooth();
    noFill();
    strokeWeight(7);  
    stroke(r[0],g[i],b[i],min(180,myFFT.spectrum[i]*512));
    curveVertex(circleX[i]/myFFT.spectrum[i*2],circleY[i]+myFFT.spectrum[i*2]);

  }
  endShape();
  for(int i=0;i<256;i++){
    strokeWeight(1.5);
    stroke(r[0],g[i],b[i],min(300,myFFT.spectrum[i]*512));
    line(circleX[i]/myFFT.spectrum[i*2],circleY[i],circleX[i]/myFFT.spectrum

[i*2],height);
  }
  /*
  for(int j=1;j<16;j++){
   beginShape();
   for(int i=0;i<16;i++){
   int a;
   a=j*i;
   curveVertex(circleX[a],circleY[a]);
   };
   endShape();
   }
   */
}

void drawWool(){
  noStroke();
  for(int i=0; i<256; i++){
    if(Cscale[i]>100){
      span[i] = (myFFT.spectrum[i*2]*10)*(-10);
      if(i<108){
        r[i]=min(180,myFFT.averages[i%8]*256+120);
        g[i]=min(210,myFFT.averages[i%8]*256+90);
        b[i]=min(20,myFFT.averages[i%8]*256+190);
      }
      else if(i<168) {
        r[i]=min(150,myFFT.spectrum[i*2]*200);
        g[i]=min(255,myFFT.spectrum[i*2]*180);
        b[i]=min(55,myFFT.spectrum[i*2]*160);

      }
      else {
        r[i]=min(180,myFFT.spectrum[i*2]*200);
        g[i]=min(250,myFFT.spectrum[i*2]*200);
        b[i]=min(20,myFFT.spectrum[i*2]*200);
      }

    }
    else if(Cscale[i]<30){
      span[i] = (myFFT.spectrum[i*2]*100);
      if(i<108){
        r[i]=min(200,myFFT.averages[i%8]*256+120);
        g[i]=min(180,myFFT.averages[i%8]*256+90);
        b[i]=min(80,myFFT.averages[i%8]*256+50);
      }
      else if(i<168) {
        r[i]=min(255,myFFT.spectrum[i*2]*200);
        g[i]=min(25,myFFT.spectrum[i*2]*180);
        b[i]=min(25,myFFT.spectrum[i*2]*160);
      }
      else {
        r[i]=min(180,myFFT.spectrum[i*2]*200);
        g[i]=min(10,myFFT.spectrum[i*2]*200);
        b[i]=min(100,myFFT.spectrum[i*2]*200);
      }

    }
    //    println(myFFT.spectrum[i*2]*110);
    a[i]=min(10000,myFFT.spectrum[i]*1024);
    Cscale[i] = Cscale[i] + span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(-myFFT.spectrum[i*2]*20,myFFT.spectrum[i*2]*20)+targetX[i];
      targetY[i] = random(-myFFT.spectrum[i*2]*20,myFFT.spectrum[i*2]*20)+targetY[i];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];


    fill(r[i],g[i],b[i],a[i]);
    ellipse(circleX[i],circleY[i],Cscale[i]+myFFT.spectrum[i*2],Cscale[i]

+myFFT.spectrum[i*2]);
  }
  /*
  for (int i=0;i<256;i++){
    if(Cscale[i]>10){
      span[i] = (myFFT.spectrum[i*2]*12)*(-1);
    }
    if(Cscale[i]<3){
      span[i] = (myFFT.spectrum[i*2]*12);
    }
    a[i]=min(100,myFFT.spectrum[i]*512);
    Cscale[i] = Cscale[i] + span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(-myFFT.spectrum[i*2]*40,myFFT.spectrum[i*2]*40)+targetX[i];
      targetY[i] = random(-myFFT.spectrum[i*2]*40,myFFT.spectrum[i*2]*40)+targetY[i];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];

    fill(r[i],g[i],b[i],a[i]);
    ellipse(circleX[i],circleY[i],Cscale[i]+myFFT.spectrum[i*2],Cscale[i]

+myFFT.spectrum[i*2]);
  }*/
}

void drawWool1(){
  noStroke();
  for(int i=0; i<256; i++){
    if(Cscale[i]>100){
      span[i] = (myFFT.spectrum[i*2]*10)*(-10);
      if(i<108){
        r[i]=min(180,myFFT.averages[i%8]*256+120);
        g[i]=min(210,myFFT.averages[i%8]*256+90);
        b[i]=min(20,myFFT.averages[i%8]*256+190);
      }
      else if(i<168) {
        r[i]=min(150,myFFT.spectrum[i*2]*200);
        g[i]=min(255,myFFT.spectrum[i*2]*180);
        b[i]=min(55,myFFT.spectrum[i*2]*160);

      }
      else {
        r[i]=min(180,myFFT.spectrum[i*2]*200);
        g[i]=min(250,myFFT.spectrum[i*2]*200);
        b[i]=min(20,myFFT.spectrum[i*2]*200);
      }

    }
    else if(Cscale[i]<30){
      span[i] = (myFFT.spectrum[i*2]*100);
      if(i<108){
        r[i]=min(200,myFFT.averages[i%8]*256+120);
        g[i]=min(180,myFFT.averages[i%8]*256+90);
        b[i]=min(80,myFFT.averages[i%8]*256+50);
      }
      else if(i<168) {
        r[i]=min(255,myFFT.spectrum[i*2]*200);
        g[i]=min(25,myFFT.spectrum[i*2]*180);
        b[i]=min(25,myFFT.spectrum[i*2]*160);
      }
      else {
        r[i]=min(180,myFFT.spectrum[i*2]*200);
        g[i]=min(10,myFFT.spectrum[i*2]*200);
        b[i]=min(100,myFFT.spectrum[i*2]*200);
      }

    }
    //    println(myFFT.spectrum[i*2]*110);
    a[i]=min(10000,myFFT.spectrum[i]*1024);
    Cscale[i] = Cscale[i] + span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(-myFFT.spectrum[i*2]*20,myFFT.spectrum[i*2]*20)+targetX[i];
      targetY[i] = random(-myFFT.spectrum[i*2]*20,myFFT.spectrum[i*2]*20)+targetY[i];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];


    fill(r[i],g[i],b[0],a[i]);
    ellipse(circleX[i],circleY[i],Cscale[i]+myFFT.spectrum[i*2],Cscale[i]

+myFFT.spectrum[i*2]);
  }
  /*
  for (int i=0;i<256;i++){
    if(Cscale[i]>10){
      span[i] = (myFFT.spectrum[i*2]*12)*(-1);
    }
    if(Cscale[i]<3){
      span[i] = (myFFT.spectrum[i*2]*12);
    }
    a[i]=min(100,myFFT.spectrum[i]*512);
    Cscale[i] = Cscale[i] + span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(-myFFT.spectrum[i*2]*40,myFFT.spectrum[i*2]*40)+targetX[i];
      targetY[i] = random(-myFFT.spectrum[i*2]*40,myFFT.spectrum[i*2]*40)+targetY[i];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];

    fill(r[i],g[i],b[i],a[i]);
    ellipse(circleX[i],circleY[i],Cscale[i]+myFFT.spectrum[i*2],Cscale[i]

+myFFT.spectrum[i*2]);
  }*/
}

void drawWool2(){
  noStroke();
  for(int i=0; i<256; i++){
    if(Cscale[i]>50){
      span[i] = (myFFT.spectrum[i*2]*10)*(-10);
      if(i<108){
        r[i]=min(180,myFFT.averages[i%8]*256+120);
        g[i]=min(210,myFFT.averages[i%8]*256+90);
        b[i]=min(20,myFFT.averages[i%8]*256+190);
      }
      else if(i<168) {
        r[i]=min(150,myFFT.spectrum[i*2]*200);
        g[i]=min(255,myFFT.spectrum[i*2]*180);
        b[i]=min(55,myFFT.spectrum[i*2]*160);

      }
      else {
        r[i]=min(180,myFFT.spectrum[i*2]*200);
        g[i]=min(250,myFFT.spectrum[i*2]*200);
        b[i]=min(20,myFFT.spectrum[i*2]*200);
      }

    }
    else if(Cscale[i]<30){
      span[i] = (myFFT.spectrum[i*2]*100);
      if(i<108){
        r[i]=min(200,myFFT.averages[i%8]*256+120);
        g[i]=min(180,myFFT.averages[i%8]*256+90);
        b[i]=min(80,myFFT.averages[i%8]*256+50);
      }
      else if(i<168) {
        r[i]=min(255,myFFT.spectrum[i*2]*200);
        g[i]=min(25,myFFT.spectrum[i*2]*180);
        b[i]=min(25,myFFT.spectrum[i*2]*160);
      }
      else {
        r[i]=min(180,myFFT.spectrum[i*2]*200);
        g[i]=min(10,myFFT.spectrum[i*2]*200);
        b[i]=min(100,myFFT.spectrum[i*2]*200);
      }

    }
    //    println(myFFT.spectrum[i*2]*110);
    a[i]=min(10000,myFFT.spectrum[i]*1024);
    Cscale[i] = Cscale[i] + span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(-myFFT.spectrum[i*2]*20,myFFT.spectrum[i*2]*20)+targetX[i];
      targetY[i] = random(-myFFT.spectrum[i*2]*20,myFFT.spectrum[i*2]*20)+targetY[i];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];


    fill(r[0],g[i],b[i],a[i]);
    ellipse(circleX[i],circleY[i],Cscale[i]+myFFT.spectrum[i*2],Cscale[i]

+myFFT.spectrum[i*2]);
  }
  /*
  for (int i=0;i<256;i++){
    if(Cscale[i]>10){
      span[i] = (myFFT.spectrum[i*2]*12)*(-1);
    }
    if(Cscale[i]<3){
      span[i] = (myFFT.spectrum[i*2]*12);
    }
    a[i]=min(100,myFFT.spectrum[i]*512);
    Cscale[i] = Cscale[i] + span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(-myFFT.spectrum[i*2]*40,myFFT.spectrum[i*2]*40)+targetX[i];
      targetY[i] = random(-myFFT.spectrum[i*2]*40,myFFT.spectrum[i*2]*40)+targetY[i];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];

    fill(r[i],g[i],b[i],a[i]);
    ellipse(circleX[i],circleY[i],Cscale[i]+myFFT.spectrum[i*2],Cscale[i]

+myFFT.spectrum[i*2]);
  }*/
}

void drawWool3(){
  noStroke();
  for(int i=0; i<256; i++){
    if(Cscale[i]>50){
      span[i] = (myFFT.spectrum[i*2]*10)*(-10);
      if(i<108){
        r[i]=min(180,myFFT.averages[i%8]*256+120);
        g[i]=min(210,myFFT.averages[i%8]*256+90);
        b[i]=min(20,myFFT.averages[i%8]*256+190);
      }
      else if(i<168) {
        r[i]=min(150,myFFT.spectrum[i*2]*200);
        g[i]=min(255,myFFT.spectrum[i*2]*180);
        b[i]=min(55,myFFT.spectrum[i*2]*160);

      }
      else {
        r[i]=min(180,myFFT.spectrum[i*2]*200);
        g[i]=min(250,myFFT.spectrum[i*2]*200);
        b[i]=min(20,myFFT.spectrum[i*2]*200);
      }

    }
    else if(Cscale[i]<30){
      span[i] = (myFFT.spectrum[i*2]*100);
      if(i<108){
        r[i]=min(200,myFFT.averages[i%8]*256+120);
        g[i]=min(180,myFFT.averages[i%8]*256+90);
        b[i]=min(80,myFFT.averages[i%8]*256+50);
      }
      else if(i<168) {
        r[i]=min(255,myFFT.spectrum[i*2]*200);
        g[i]=min(25,myFFT.spectrum[i*2]*180);
        b[i]=min(25,myFFT.spectrum[i*2]*160);
      }
      else {
        r[i]=min(180,myFFT.spectrum[i*2]*200);
        g[i]=min(10,myFFT.spectrum[i*2]*200);
        b[i]=min(100,myFFT.spectrum[i*2]*200);
      }

    }
    //    println(myFFT.spectrum[i*2]*110);
    a[i]=min(10000,myFFT.spectrum[i]*1024);
    Cscale[i] = Cscale[i] + span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(-myFFT.spectrum[i*2]*20,myFFT.spectrum[i*2]*20)+targetX[i];
      targetY[i] = random(-myFFT.spectrum[i*2]*20,myFFT.spectrum[i*2]*20)+targetY[i];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];


    fill(r[i],g[0],b[i],a[i]);
    ellipse(circleX[i],circleY[i],Cscale[i]+myFFT.spectrum[i*2],Cscale[i]

+myFFT.spectrum[i*2]);
  }
  /*
  for (int i=0;i<256;i++){
    if(Cscale[i]>10){
      span[i] = (myFFT.spectrum[i*2]*12)*(-1);
    }
    if(Cscale[i]<3){
      span[i] = (myFFT.spectrum[i*2]*12);
    }
    a[i]=min(100,myFFT.spectrum[i]*512);
    Cscale[i] = Cscale[i] + span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(-myFFT.spectrum[i*2]*40,myFFT.spectrum[i*2]*40)+targetX[i];
      targetY[i] = random(-myFFT.spectrum[i*2]*40,myFFT.spectrum[i*2]*40)+targetY[i];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];

    fill(r[i],g[i],b[i],a[i]);
    ellipse(circleX[i],circleY[i],Cscale[i]+myFFT.spectrum[i*2],Cscale[i]

+myFFT.spectrum[i*2]);
  }*/
}


void drawCurve(){

  beginShape();
  for(int i=0; i<256; i++){

    if(Cscale[i]<5){
      span[i] = myFFT.spectrum[i*2]*8;
      Cscale[i]= random(50)+myFFT.averages[i%16]*256;
      circleX[i] = random(myFFT.spectrum[i*2]*300+300);
      circleY[i] = random(myFFT.spectrum[i*2]*150+150);

    }
    Cscale[i] = Cscale[i] - span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(width)*myFFT.spectrum[i*2];
      targetY[i] = random(height)*myFFT.spectrum[i*2];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];
    g[0]=myFFT.averages[16]*512;
    if(i<150){
      r[0]=min(600,myFFT.averages[i%8]*256+120);
      b[0]=min(600,myFFT.averages[i%8]*256+300);
    }
    else {
      r[i]=int(random(512));
      b[i]=int(random(512));
    }
    smooth();
    noFill();
    strokeWeight(1.5);  
    stroke(r[0],g[i],b[i],min(180,myFFT.spectrum[i]*512));
    curveVertex(circleX[i]/myFFT.spectrum[i*2],circleY[i]+myFFT.spectrum[i*2]);

  }
  endShape();
  for(int i=0;i<256;i++){
    strokeWeight(7);
    stroke(r[0],g[i],b[i],min(300,myFFT.spectrum[i]*512));
    line(circleX[i]/myFFT.spectrum[i*2],circleY[i],circleX[i]/myFFT.spectrum

[i*2],height);
  }
  /*
  for(int j=1;j<16;j++){
   beginShape();
   for(int i=0;i<16;i++){
   int a;
   a=j*i;
   curveVertex(circleX[a],circleY[a]);
   };
   endShape();
   }
   */
}

void drawCurve2(){

  beginShape();
  for(int i=0; i<256; i++){

    if(Cscale[i]<5){
      span[i] = myFFT.spectrum[i*2]*8;
      Cscale[i]= random(50)+myFFT.averages[i%16]*256;
      circleX[i] = random(myFFT.spectrum[i*2]*300+300);
      circleY[i] = random(myFFT.spectrum[i*2]*150+150);

    }
    Cscale[i] = Cscale[i] - span[i];
    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
      targetX[i] = random(width)*myFFT.spectrum[i*2];
      targetY[i] = random(height)*myFFT.spectrum[i*2];
    }
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];
    g[0]=myFFT.averages[16]*512;
    if(i<150){
      r[0]=min(600,myFFT.averages[i%8]*256+120);
      b[0]=min(600,myFFT.averages[i%8]*256+300);
    }
    else {
      r[i]=int(random(512));
      b[i]=int(random(512));
    }
    smooth();
    noFill();
    strokeWeight(7);  
    stroke(r[0],g[i],b[i],min(180,myFFT.spectrum[i]*512));
    curveVertex(circleX[i]/myFFT.spectrum[i*2],circleY[i]+myFFT.spectrum[i*2]);

  }
  endShape();
  for(int i=0;i<256;i++){
    strokeWeight(7);
    stroke(r[0],g[i],b[i],min(300,myFFT.spectrum[i]*512));
    line(circleX[i]/myFFT.spectrum[i*2],circleY[i],circleX[i]/myFFT.spectrum

[i*2],height);
  }
  /*
  for(int j=1;j<16;j++){
   beginShape();
   for(int i=0;i<16;i++){
   int a;
   a=j*i;
   curveVertex(circleX[a],circleY[a]);
   };
   endShape();
   }
   */
}

void drawCircle(){
  //draw circle random
  noStroke();
  for(int i=0; i<256; i++){
    if(Cscale[i]<5){
      span[i] = myFFT.spectrum[i*2]*24;
      Cscale[i]= random(50)+myFFT.averages[i%16]*256;
      circleX[i] = random(myFFT.spectrum[i*2]*300+600);
      circleY[i] = random(myFFT.spectrum[i*2]*150+350);
      if(i<128){
        r[0]=min(360,myFFT.averages[i%8]*256+500);
        g[0]=min(360,myFFT.averages[i%8]*256+240);
        b[0]=min(360,myFFT.averages[i%8]*256+500);
      }
      else {
        r[i]=int(random(255));
        g[i]=int(random(255));
        b[i]=int(random(256));
      }
    }
    Cscale[i] = Cscale[i] - span[i];
    /*    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
     targetX[i] = random(width);
     targetY[i] = random(height);
     }*/
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];
    r[0]=myFFT.averages[16]*512;

    fill(r[i],g[i],b[i],min(8000,myFFT.spectrum[i]*1024));
    ellipse(circleX[i],circleY[i],Cscale[i],Cscale[i]);
  };
}

void drawCircle1(){
  //draw circle random
  noStroke();
  for(int i=0; i<256; i++){
    if(Cscale[i]<5){
      span[i] = myFFT.spectrum[i*2]*24;
      Cscale[i]= random(300)+myFFT.averages[i%16]*256;
      circleX[i] = random(myFFT.spectrum[i*2]*300+600);
      circleY[i] = random(myFFT.spectrum[i*2]*150+350);
      if(i<128){
        r[0]=min(360,myFFT.averages[i%8]*256+500);
        g[0]=min(360,myFFT.averages[i%8]*256+240);
        b[0]=min(360,myFFT.averages[i%8]*256+500);
      }
      else {
        r[i]=int(random(255));
        g[i]=int(random(255));
        b[i]=int(random(256));
      }
    }
    Cscale[i] = Cscale[i] - span[i];
    /*    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
     targetX[i] = random(width);
     targetY[i] = random(height);
     }*/
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];
    r[0]=myFFT.averages[16]*512;

    fill(r[i],g[0],b[0],min(8000,myFFT.spectrum[i]*512));
    ellipse(circleX[i],circleY[i],Cscale[i],Cscale[i]);
  };
}
void drawCircle2(){
  //draw circle random
  noStroke();
  for(int i=0; i<256; i++){
    if(Cscale[i]<5){
      span[i] = myFFT.spectrum[i*2]*24;
      Cscale[i]= random(300)+myFFT.averages[i%16]*256;
      circleX[i] = random(myFFT.spectrum[i*2]*300+600);
      circleY[i] = random(myFFT.spectrum[i*2]*150+350);
      if(i<128){
        r[0]=min(360,myFFT.averages[i%8]*256+500);
        g[0]=min(360,myFFT.averages[i%8]*256+240);
        b[0]=min(360,myFFT.averages[i%8]*256+500);
      }
      else {
        r[i]=int(random(255));
        g[i]=int(random(255));
        b[i]=int(random(256));
      }
    }
    Cscale[i] = Cscale[i] - span[i];
    /*    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
     targetX[i] = random(width);
     targetY[i] = random(height);
     }*/
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];
    r[0]=myFFT.averages[16]*512;

    fill(r[0],g[i],b[0],min(8000,myFFT.spectrum[i]*512));
    ellipse(circleX[i],circleY[i],Cscale[i],Cscale[i]);
  };
}
void drawCircle3(){
  //draw circle random
  noStroke();
  for(int i=0; i<256; i++){
    if(Cscale[i]<5){
      span[i] = myFFT.spectrum[i*2]*24;
      Cscale[i]= random(300)+myFFT.averages[i%16]*256;
      circleX[i] = random(myFFT.spectrum[i*2]*300+600);
      circleY[i] = random(myFFT.spectrum[i*2]*150+350);
      if(i<128){
        r[0]=min(360,myFFT.averages[i%8]*256+500);
        g[0]=min(360,myFFT.averages[i%8]*256+240);
        b[0]=min(360,myFFT.averages[i%8]*256+500);
      }
      else {
        r[i]=int(random(255));
        g[i]=int(random(255));
        b[i]=int(random(256));
      }
    }
    Cscale[i] = Cscale[i] - span[i];
    /*    if(abs(circleX[i]-targetX[i])<1 && abs(circleY[i]-targetY[i])<1){
     targetX[i] = random(width);
     targetY[i] = random(height);
     }*/
    circleX[i] = circleX[i]+(targetX[i]-circleX[i])*myFFT.spectrum[i*2];
    circleY[i] = circleY[i]+(targetY[i]-circleY[i])*myFFT.spectrum[i*2];
    r[0]=myFFT.averages[16]*512;

    fill(r[0],g[0],b[i],min(8000,myFFT.spectrum[i]*512));
    ellipse(circleX[i],circleY[i],Cscale[i],Cscale[i]);
  };
}
void drawSpectrum(){
  // draw the waveform

    stroke(0x00);
  int interp=(int)max(0,(((millis()-myInput.bufferStartTime)/(float)myInput.duration)

*myInput.size));

  for (int i=0;i<bufferSize;i++) {
    float left=160;
    float right=160;

    if (i+interp+1<myInput.buffer2.length) {
      left-=myInput.buffer2[i+interp]*50.0;
      right-=myInput.buffer2[i+1+interp]*50.0;
    }
    line(10+i,left,11+i,right);
  }

  // draw the spectrum
  noStroke();
  fill(0x44ff0000);
  for (int i=0; i<bufferSize; i++) {
    rect(30+i,10,1,myFFT.spectrum[i]*200);
  }

  // draw the range of normalization
  fill(0x3300ff00);
  rect(550,10,50,200);
  float percent=max(0,(myFFT.max-minLimit)/limitDiff);
  fill(0x5500ff00);
  rect(550,(int)(11+198*percent),50,1);
  rect(550,11,50,(int)(198*percent));

  // draw our damper slider
  fill(0xff);
  rect(550,(int)(11+198*myDamp),30,1);
}


void mouseDragged() {
  mousePressed();
}

void mousePressed() {
  // set our damper
  myDamp=mouseY/(float)height;
  if (myDamp>1) myDamp=1;
  else if(myDamp<0) myDamp=0;
  myFFT.damp(myDamp); 
}

public void audioInputData(AudioInput theInput) {
  myFFT.getSpectrum(myInput);
}

 


 

by 봉봉 | 2007/10/28 20:53 | 트랙백

주소들

국내 영상 & 모션그래픽 사이트

http://www.2inside.com/

http://www.25frame.com/
http://www.jacksonfilm.com/
http://www.liquidbrain.co.kr/
http://www.makod.com/
http://www.mg25.com/
http://www.motionfactory.co.kr/
http://www.moti-vation.com/
http://www.mimesistv.co.kr/
http://www.seoleuna.com/
http://www.sugarcube.tv/
http://www.spacemonkey.co.kr/
http://www.o2-media.com/
http://www.onsgraphic.com/
http://postvisual.com/
http://www.vi-nyl.com/

http://www.capimage.co.kr/
http://www.diodeo.com/
http://www.dv.co.kr/
http://www.eandi.co.kr/

http://www.atominteractive.co.kr/

카페
http://cafe.daum.net/motionfuture
http://home.freechal.com/mglink/
http://club.jungle.co.kr/MC/
http://myhome.naver.com/angilchan/

영상미디어센터
http://www.mediact.org/

 영상물등급위원회

http://www.kmrb.or.kr/

 

한국 레스페스트
http://www.resfestkorea.com/

[모션그래픽]

http://www.veig.com/

http://www.blind.com

http://www.blur.com

http://vkrdesign.com/

http://www.brandnewschool.com/

http://www.d-kitchen.com/

http://www.psyop.tv/

http://www.rezn8.com/

http://shilodesign.com/

http://www.stardust.tv/  

http://www.troika.tv/

http://www.aiw.co.kr/

http://www.verbmedia.com/
http://www.belief.com/

http://www.eyeballnyc.com/

http://www.justincone.com
http://www.qubekonstrukt.com/

http://www.emeraldcitydesign.com

http://www.jjwalker.com/

http://www.lowerground.com/ 

http://www.stylejuice.com/

http://www.methodstudios.com 
http://www.syndicate.tv/
http://www.buckla.com/

http://www.postpanic.nl/

http://www.spon.com/site/

http://www.studio.iamstatic.com/

http://www.exopolis.com

http://www.kenedge.com/

http://hypa.tv/

http://www.idiocase.com

http://www.picturestart.com

http://www.kafai.or.kr/
http://www.rainmandoll.com/
http://blog.daum.net/miniplayer
http://www.efigure.co.kr/
http://www.korea.adobe.com/
http://www.ayatoweb.com/index_e.html
http://www.cheil.com/
http://www.detizen.com/index.asp
http://www.mgoon.com/
http://www.mncast.com/main/main.asp
http://www.mju.ac.kr/mpd/menu/home/index.jsp
http://dcampus.co.kr/dcampus_index.php?PHPSESSID=c0dba98cded1c20d92a980c0019d8450
http://blog.naver.com/cehlofi/100022075994
http://img.spbo.com/tv/live.htm

by 봉봉 | 2007/09/07 04:10 | 트랙백

sdddd

sd

by 봉봉 | 2007/09/05 07:38 | 트랙백

올드 필름

by 봉봉 | 2007/09/04 14:47 | 트랙백

오프닝

by 봉봉 | 2007/09/04 06:12 | 트랙백

엔딩 에펙파일

by 봉봉 | 2007/09/04 05:42 | 트랙백

치지직

ㅇㅇㅇtv.wma

by 봉봉 | 2007/08/26 14:57 | 트랙백

티비 파일,,

by 봉봉 | 2007/08/26 09:06 | 트랙백(3)

에펙파일

ㅇㅇ1simt.aep

by 봉봉 | 2007/08/24 21:00 | 트랙백

by 봉봉 | 2007/08/24 21:00 | 트랙백

로고

ㅌㅊㅍㅌㅊㅍlogo.png

by 봉봉 | 2007/08/24 20:39 | 트랙백

dbdbdb

by 봉봉 | 2007/08/22 22:09 | 트랙백

iykv

by 봉봉 | 2007/08/22 12:54 | 트랙백

에펙 파일

ㅇㅇsimt.aep

by 봉봉 | 2007/08/22 12:31 | 트랙백

Gap

cap

by 봉봉 | 2007/08/22 00:26 | 이~Motion | 트랙백

지구본

에펙 파일earth.aep

by 봉봉 | 2007/08/16 16:53 | 트랙백

dma

dd

by 봉봉 | 2007/08/13 05:25 | 막쓰라 | 트랙백

◀ 이전 페이지          다음 페이지 ▶