중요 2011. 10. 22. 02:31

Car Explosion on the set of The Avengers.

'중요' 카테고리의 다른 글

FlowFixer: Using BFECC for Fluid Simulation  (0) 2011.10.28
Maya Fluid 의 이해.  (2) 2011.10.26
삼각함수.  (0) 2011.06.09
RanderMan Shader.  (0) 2011.06.09
Texture mapping과 Shading, 그리고 Rendering의 정의.  (0) 2011.06.09
중요/중요사이트 2011. 6. 12. 22:02

Java cutter.

다운로드 http://fundza.com/

설치시 Java Runtime Environment(JRE)를 반드시 설치하여햐 한다.

cutter란 Rnderman RIB/SL 을 컨트롤 하기 쉽게 만들어진 툴이다.
그밖에 MEL, Mentalray를 컨트롤 하는 기능도 있다.


cutter 설치하고 난다음 경로지정


   


 
중요 2011. 6. 9. 10:18

삼각함수.

전용뷰어 보기

학교에서는 삼각비를 일반화하여 삼각함수를 배우게 된다. 90도보다 큰 각에 대해서는 직각삼각형을 그릴 수 없는데 어떻게 이런 각에 대해 삼각함수를 정의할 수 있는 것일까? 이런 정의는 억지가 아닐까? 참고로 직각삼각형을 이용한 삼각비의 정의는 아래와 같다.

 

직각삼각형을 이용해서 정의하는 삼각비

 

 

 

삼각함수의 시작은 천문학에서

삼각비를 처음으로 연구한 사람들은 고대 그리스의 천문학자들이었다. 물론 이 시대에는 수학자와 천문학자가 구별되지 않았으므로, 천문현상을 연구한 수학자라 부르는 게 더 적절할지도 모르겠다. 천문학자들은 별을 관측하는 것이 기본적인 연구 방법이었고, 따라서 두 별 사이의 거리를 정확히 구하는 것이 대단히 중요하였다. 지금과 같은 우주 시대에는 두 별 사이의 실제 거리를 구하는 것도 가능하지만, 실용적인 목적을 위해서는 모든 별들이 하나의 구면에 놓여 있다고 생각하고 두 별 사이의 거리를 구하는 것이 더 중요하다.

 

실제로 밤 하늘을 보며 두 별 사이의 거리를 잰다고 생각해 보자. 팔을 쭉 뻗어 30cm자를 들고 두 별 사이의 거리를 재면 충분하다고 생각하기 쉽지만, 이 방법은 사람마다 팔의 길이가 다르므로 정확한 거리를 구하는 것과는 거리가 멀다. 극단적으로 생각하면, 눈 앞에 자를 놓고 두 별 사이의 거리를 잴 때와 팔을 쭉 뻗어 잴 때를 비교하면 되겠다.

 

고대 (천문현상을 연구한) 수학자들은 직접 거리를 구하는 것이 잘 되지 않으므로, 대신에 두 별 사이의 각도를 재는 방법을 사용하였다. 이것은 팔의 길이에 상관없이 누구나 별 사이의 거리를 짐작할 수 있는 방법이었다. 모든 별이 하나의 구면에 있다고 생각하였으므로, 이제 별까지 이르는 거리만 알면 두 별 사이의 거리는 자동으로 결정된다.

 

만약 별까지 이르는 거리가 기존에 생각하던 것보다 두 배로 멀어진다면, 두 별 사이의 거리도 두 배로 멀어진다. 결국 두 별이 멀고 가까운 정도를 재는 데 중요한 것은 거리가 아니라 각도이며, 그에 따라 별에 이르는 거리와 두 별 사이 거리를 결정하는 비례상수 또한 중요하다. 각도마다 이 비례상수를 구하려는 시도가 바로 삼각함수의 시작이었다. 


두 별 사이의 거리를 결정하기는 어렵지만 두 별 사이의 각도는 일정하다.

 

 

90도가 넘는 각의 사인값은?

처음 삼각함수를 생각할 때는 두 별 사이의 각과 두 별 사이의 거리를 비교하였으므로, 지금 우리가 사용하는 삼각함수와는 약간의 차이가 있다. 관측 지점부터 별까지의 거리를 1, 두 별 사이의 각을 θ라 하면, 두 별 사이의 거리는 2sin(θ/2)가 된다.

 

θ보다 θ/2를 사용하는 쪽이 편하다.


우리에게는 피타고라스 정리라는 막강한 도구가 있기 때문에 중심각이 θ인 부채꼴의 현의 길이를 구하는 것보다 한 각이 θ/2인 직각삼각형을 이용하는 쪽이 훨씬 편리하다. 이런 이유로 인도 수학자들은 직각삼각형에서 주어진 각의 맞은편 변의 길이를 ‘현의 절반’이라는 뜻에서 jya-ardha, 줄여서 jya라 불렀다.

 

이 용어는 이후 아라비아 수학자들이 소리를 흉내내어 jiba로 옮기게 되는데, 이것이 다시 유럽으로 전해지면서 약간의 사고가 생겼다. 아랍어는 모음이 세 개뿐이어서 아랍 문자에는 모음을 따로 표기하지 않는 경우가 많다. 그 바람에 jiba의 모음을 없앤 jb를 본 유럽인들은 이 단어가 jaib인 것으로 착각하였다. 원래의 jiba는 특별한 뜻이 없는 단어였지만, jaib는 만(灣, bay)를 뜻하는 단어여서, 여기에 해당하는 라틴어 sinus로 번역되었다. 우리가 사인(sine)이라 부르는 것은 이 라틴어를 다시 영어식으로 바꾼 것이다.

 

사인값을 직각삼각형의 빗변과 높이의 비로 정의하는 것이 중학교에서 배우는 삼각비인데, 고등학교 수학에서는 이것을 둔각까지 확장하여 정의한다. 이것은 삼각함수의 원래 목적을 생각하면 자연스럽게 생각할 수 있다. 예를 들어 sin 90°를 구하려면, 반지름이 1이고 중심각이 180°인 부채꼴을 만들어 그 현의 길이를 재면 된다. 즉, 두 별 사이의 각이 180°일 때 두 별 사이의 거리를 구하는 것이다. 이 경우에는 현의 길이가 곧 지름의 길이가 되므로, 2sin(180/2)°=2가 되어, sin90°=1로 정의하면 자연스럽다.

 

직각에 대한 사인값(왼쪽), 둔각에 대한 사인값(오른쪽).

 

 

같은 식으로 sin120°를 구하여 보자. 이 경우 두 별 사이의 각이 240°일 때 두 별 사이의 거리를 구하는 것은, 뒤돌아 서서 보면 두 별 사이의 각이 120°일 때를 생각하는 것과 같다. 따라서 sin120° = sin60° = /2가 된다. 이와 같이 생각하면 둔각에 대한 사인값을 자연스럽게 정할 수 있다.

 

이와 같은 착상으로 둔각에 대한 코사인, 탄젠트 등의 값을 확장할 수 있고, 심지어 180°를 넘는 각에 대해서도 삼각함수의 값을 정할 수 있다. 이런 과정은 원래의 성질이 잘 유지되게 하면서 특정한 경우로부터 일반적인 경우로 확장하는 수학적 사고 방식을 잘 보여준다.

 

 

삼각함수의 값은 어떻게 계산할까?

고대의 수학자들은 삼각함수의 정확한 값을 계산하기 위하여 엄청나게 많은 노력을 기울였다. 특정한 값의 사인값이나 코사인값을 구하려면 피타고라스 정리, 닮음비 등등 수많은 정리와 공식을 수많은 종이 위에 써야만 했다. 예를 들어, 15°, 라디언으로는 π/12인 각에 대한 사인값을 구하여 보자. 다음 그림을 이용하면 sin(π/12) = (-)/4 = 0.25881904510…임을 계산할 수 있다.

 

sin 15° 구하기.

 

 

한 각의 크기가 15˚인 삼각형의 빗변의 길이를 x라 하면, 피타고라스 정리에 의해 다음이 성립한다.

 

 

따라서 x의 값을 구하면 다음과 같다.

 

 

이제 분모를 유리화하면, 다음과 같다.

 

 

그러나 이런 방식은 대단히 복잡할 뿐만 아니라, 임의의 각에 대한 사인값을 계산하기 어려워, 지금은 테일러 급수(Taylor series)를 이용하여 근삿값을 구한다. 테일러 급수란 어떤 함수를 다항식의 형태로 근사하는 것으로, 삼각함수는 다음의 형태로 나타낼 수 있다.

 

 

테일러 급수를 이용하여 위에서 구한 sin 15°를 다시 구해 보면 다음과 같은 값을 얻는다.

 

 

겨우 네 개의 항만 구하여도 소수점 아래 아홉 번째 자리까지 맞았고, 항을 더 많이 계산할수록 근삿값도 점점 정밀해진다. 전자계산기가 삼각함수값을 구하는 것도 이런 원리이다. 계산기 속에 종이와 자, 각도기가 들어 있을 리는 없으니까. 

 

 

 

 박부성 / 경남대학교 수학교육과 교수
서울대 수학교육과를 졸업하고, 서울대 수학과에서 석사, 박사 학위를 받았다. 고등과학원 연구원을 거쳐 현재 경남대학교 수학교육과 교수로 재직 중이다. 저서로는 [재미있는 영재들의 수학퍼즐 1,2]와 [천재들의 수학노트]가 있다.

자료출저 
http://navercast.naver.com/contents.nhn?contents_id=3005
 

 


중요 2011. 6. 9. 09:30

RanderMan Shader.


자료 출저
http://www.renderman.or.kr

본문주소
http://www.renderman.or.kr/RenderMan/shader_07.html


안녕하세요. 김대현입니다.

오늘은 프로시주얼 텍스쳐를 만들기 위한 기초 준비를 해보겠습니다.

Makefile
------------------------------------------------------------------------------------------

RENDER=prman
SLCOMPILER=shader
SLEXT=slo
RIBNAME=test.rib

SHADERNAME=Test

${SHADERNAME}.tiff : ${SHADERNAME}.${SLEXT} ${RIBNAME}
    cat ${RIBNAME} | sed s/XXXX/${SHADERNAME}/| ${RENDER} -progress

${SHADERNAME}.${SLEXT} : ${SHADERNAME}.sl
    ${SLCOMPILER} ${SHADERNAME}.sl

clean :
    rm -f ${SHADERNAME}.tiff ${SHADERNAME}.${SLEXT}


------------------------------------------------------------------------------------------



test.rib
------------------------------------------------------------------------------------------

Display "XXXX.tiff" "tiff" "rgb"
Format 320 240 1
Projection "perspective" "fov" [45]
LightSource "ambientlight" 1 "intensity" [0.2]
LightSource "distantlight" 2 "from" [-1 1 0 ] "to" [0 0 3] "intensity" [1]

Translate -0.5 -0.5 1.5
WorldBegin
    Color [1 0 0]
    Surface "XXXX"
    Patch "bilinear" "P" [ 0 0 0
                           1 0 0
                           0 1 0
                           1 1 0]
WorldEnd


------------------------------------------------------------------------------------------



Test.sl
------------------------------------------------------------------------------------------

surface Test ( float Ka = 1; float Kd = .8; )
{
    normal Nf = faceforward (normalize(N),I);
    color Ct;

    color Red = color "rgb" (1, 0, 0);
    color Blue = color "rgb" (0, 0, 1);

    Ct = mix(Red, Blue, s);

    Oi = Os;
    Ci = Oi * ( Ct * ( Ka*ambient() + Kd*diffuse(Nf) ) );
}


------------------------------------------------------------------------------------------



Pasted Graphic

1. 
 시간과 마찮가지로 test.rib 같은 것을 계속 사용하고, Makefile SHADERNAME 우리가 만드는 쉐이더 파일의 이름으로 변경하시면 되겠습니다.



2. 
 소스는 별다른 것은 없고 시간에 만들었던 mix함수를 이용한 쉐이더입니다오늘은  소스에 계속 변경을 하면서 다양한 함수를 구경해  예정입니다.



3. 
첫번째로  함수는 step이라는 함수입니다우선 변경된 소스를 보시죠.

stepTest.sl
------------------------------------------------------------------------------------------

surface stepTest ( float Ka = 1; float Kd = .8; )
{
    normal Nf = faceforward (normalize(N),I);
    color Ct;

    color Red = color "rgb" (1, 0, 0);
    color Blue = color "rgb" (0, 0, 1);

    Ct = mix(Red, Blue, step(0.5, s));


    Oi = Os;
    Ci = Oi * ( Ct * ( Ka*ambient() + Kd*diffuse(Nf) ) );
}


------------------------------------------------------------------------------------------

위에서 말씀드렸듯이 Makefile SHADERNAME stepTest 바꾸시면 됩니다.

우리의 mix 함수에 step 함수를 넣어 봤습니다우선 결과를 보고 얘기하죠.


어떻습니까 시간에 smoothstep이라는 함수를 사용하기 전에 if문으로 위치에 따라 색상을 선택하게  소스와 비슷하지 않습니까 ?

맞습니다~.  함수의 구조는 step(min, value)로서 value값이 min보다 작으면 0 값을 리턴하고그렇지 않으면 1 리턴합니다.

우리가 만든 예제에선 s값이 0.5 보다 작으면 0 리턴하므로, s값이 0.5보다 클때까지 빨간색이 쉐이딩되고, s값이 0.5이상이 되면 1 리턴하여 웨이트 값이 파란쪽으로 100% 적용되므로 파란색이 쉐이딩됩니다.

Pasted Graphic 1

현재는 색상이 갈라지는 부분이 위아래 직선이므로 지글거림이 없지만역시나 대각선이 되었을때는 aliasing 발생합니다.



4. 
이전 시간에 했던  처럼 그냥 if문을 써서 해도 되는데 굳이 step문을 따로 만든 이유가 뭘까요 ?

mix
문에 사용된 step 보시면 뒤통수를 맞은듯한 느낌이 들지 않나요 ?

 ~~ 뒤통수를 어루 만지시고~!!

바로 다른 함수들과 연동해서 사용하기 위함입니다소스의 가독성을 좋게 하고더더욱 중요한......

바로 바로 바로 ~~~~~ 레이어링을 하기 위한 기반이라고   있겠습니다.

레이어링이 별건 아니고요포토샵에 레이어를 생각하시면 쉬울듯 합니다포토샵의 레이어를 어떤 기능을 하나요 ?

그렇죠바로  레이어를 합성하여 우리가 원하는 최종 이미지를 만들어 내는 역활을 하는 것입니다.

우리가 만若?쉐이더도 결국은 여러 연산을 통해 다양한 색상을 조합해서 하나의 이미지를 만들어 내는 것입니다.



5. slim
이란 툴이나, houdini Vex shader 보신  있으신가요 ?

 툴은은 노드들을 연결해서 하나의 쉐이더를 생성해 냅니다고도로 추상화되어 있어서 거의 프로그래밍 지식이 없이도 어여쁜 쉐이더를 만들어   있죠.

우리는 쉐이더 프로그래밍을 해봤으니가볍게 코웃음을 지으며"그게  별건가 ? 그냥  노드들이 색상을 계산해 주거나 조건을 만들어 주는 함수일 뿐이고 노드(함수)들의 입력출력을 적절히 다른 노드(함수)들과 연결해서 최종 이미지를 만들어 내는 거잖아~~" 하고 말해   있을 겁니다



6. 
 쉐이더 소스에 조금 장난을 쳐보고 다음으로 넘어갑시다.

stepTest2.sl
------------------------------------------------------------------------------------------

surface stepTest2 ( float Ka = 1; float Kd = .8; )
{
    normal Nf = faceforward (normalize(N),I);
    color Ct;

    color Red = color "rgb" (1, 0, 0);
    color Blue = color "rgb" (0, 0, 1);

    Ct = mix(Red, Blue, step(s, 0.5));


    Oi = Os;
    Ci = Oi * ( Ct * ( Ka*ambient() + Kd*diffuse(Nf) ) );
}


------------------------------------------------------------------------------------------

별다른 것은 아니고, step함수의 입력값을 살짜쿵 바꿔 봤습니다결과가 어떻게 될까 잠시 생각해 보시죠.

...Zzzz

...ZZzzzzzzzzz

바로  보시면 아니되옵니다. ^^; 

Pasted Graphic 2

s값은 왼쪽에서 오른쪽으로 0에서 1로 변화되어 가는 값입니다. 그렇다면, 초반에 0.5는 s보다 크므로 1이 나오겠죠 ?

그러다가 s가 0.5이상이 되면 value부분인 0,5가 s보다 작아지므로 0이 나올겁니다. 색상이 반전되었군요.

재미난 결과지 않습니까 ? 앞으로 많이 보시겠지만, 이런 이상 야릇한 소스들이 꽤 재미난 효과를 만들어 낸답니다.




7. 자~ 쫌 재밌는데, step 을 더 괴롭혀 보죠~

pulse.sl
------------------------------------------------------------------------------------------

surface pulse ( float Ka = 1; float Kd = .8; )
{
    normal Nf = faceforward (normalize(N),I);
    color Ct;

    color Red = color "rgb" (1, 0, 0);
    color Blue = color "rgb" (0, 0, 1);

    Ct = mix(Red, Blue, step(0.4, s)-step(0.6, s));


    Oi = Os;
    Ci = Oi * ( Ct * ( Ka*ambient() + Kd*diffuse(Nf) ) );
}


------------------------------------------------------------------------------------------



Pasted Graphic 3

결과를 보시면 아시겠지만, step 2개로 파란색 띠를 만들어 냈습니다.

s
 첫번째 step 0,4보다 작을 동안은 0 리턴합니다당연히 두번째 step 0.6 0.4보다  값이기 때문에 0 리턴합니다. 0 - 0이기 때문에 s 0.4 되기 전까진 0으로 빨간 색이 쉐이딩됩니다.

s
 0.4 되면첫번째 step 1 리턴하고두번째 step 아직 s 0.6보다 작으므로 0 리턴합니다.

그래서 1 - 0으로 1 값이 사용되어 파란색이 쉐이딩됩니다.

s
 0.6 되면첫번째 step 당근 0.4보다 크니 1 리턴할 것이고두번째 step s 0.6 넘겼으니 1 리턴할 것입니다그럼 1-1 = 0 해서 결국은 0 값이 사용되어 빨간색이 쉐이딩됩니다.

~~ 무지 무지 신기합니다조금만 응용하면  체스판 만드는 쉐이더 정도는 껌씹으면서 만드실  있을  같지 않습니까 ?



8. 
다시 본론으로 돌아와서 clamp 관해 알아봅시다.

clamp.sl
------------------------------------------------------------------------------------------

surface clamp ( float Ka = 1; float Kd = .8; )
{
    normal Nf = faceforward (normalize(N),I);
    color Ct;

    color Red = color "rgb" (1, 0, 0);
    color Blue = color "rgb" (0, 0, 1);

    Ct = mix(Red, Blue, clamp(s, 0.3, 0.6));


    Oi = Os;
    Ci = Oi * ( Ct * ( Ka*ambient() + Kd*diffuse(Nf) ) );
}


------------------------------------------------------------------------------------------


Pasted Graphic 4

clamp(value, min, max) 형태를 가진 놈으로 value값이 min보다 작으면 min값을 리턴하고, max보다 크면 max값을 리턴하고, min max사이 값이면 선형 보간을 하는 함수입니다.

우리가 만든 예제에서 s 0.3보다 작을때는 0,3 리턴하므로 빨간색 70%, 파란색 30% 섞인 색상이 나오고, s 0.3~0.6사이 값이면선형 보간된 웨이트 값에 의해 색상이 그라데이션됩니다.

s
 0.6보다 크면 0.6 리턴하므로 빨간색 40%, 파란색 60% 색상이 쉐이딩됩니다.

Pasted Graphic 5
위에 보시는 그래프가 바로 clamp 역활을 보여줍니다.




9. 
그밖에도 abs, min, max등의 함수들이 있습니다. abs 절대값을 돌려주고 min  수중 작은 놈을 리턴해 주고, max 두수   놈을 리턴해 줍니다.



10. 
지금까지 보신 함수들의 내용을  숙지해 두시기 바랍니다대부분의 패턴을 만들어 내는 쉐이더들은  함수들을 복잡하게 연결하여 결과값을 만들어 냅니다 내용을 정확히 이해하고 있지 못하면 미궁에 빠져 
어나오지 못하게 됩니다.

가능하면 여러가지 테스트를 해보시고확실히 익혀 두시기 바랍니다.

그럼 다음 시간에  뵙죠.

'중요' 카테고리의 다른 글

Maya Fluid 의 이해.  (2) 2011.10.26
Car Explosion on the set of The Avengers.  (0) 2011.10.22
삼각함수.  (0) 2011.06.09
Texture mapping과 Shading, 그리고 Rendering의 정의.  (0) 2011.06.09
마라톤을 완주하는 방법.(지식채널e)  (0) 2011.06.01
중요 2011. 6. 9. 03:37

Texture mapping과 Shading, 그리고 Rendering의 정의.

원본 3D 아티산 http://3dartisan.com/contents/cgforum/cgforumView.asp?ForumSeq=35


우리가 일반적으로 삼차원 그래픽을 접하면서 흔히들 혼동하는 부분이 Texture와 Shader, 그리고 Renderer의 의미와 그 차이점이다.


특히 Texture mapping과 Shading의 차이점과 Shading과 Rendering의 관계에서 이들을 수행하는 Shader와 Renderer의 차이점을 들 수 있겠다.


우선 Textur Mapping과 Shading의 차이점은 간단히 말해 Mapping Source(Bitmap Image)를 인위적으로 사용하는냐, 그렇지 않고 프로그램 내부에서 수학적인 계산에 의해 처리하느냐로 구분 지을 수 있다. 컴퓨터그래픽에서의 Texture라 함은 Scanner에 의해 Scan 받은 Bitmap Image를 Object 표면에 Coordinate라는 일정한 방향과 축으로 씌우는 작업이다. 이렇게 되면, 인위적으로나마 해당 물체는 원하는 재질을 가진 물체로 느껴지게 된다. 간단한 예로 구를 하나 만든 뒤, 표면에 세계지도를 입히면 지구본이 된다. 그러나 Texture Mapping으로 입혀진 물체를 Boolean(영국의 수학자-물체와 물체간의 상호 겹침 관계에 대한 수학적 이론을 정의했음)에 의해 쪼갤 경우, 쪼개진 부분은 Texture처리가 나타나지 않게 된다(물론, 현재는 이러한 기능이 옵션적으로 재 계산되어 쪼개진 부분에 다시 Mapping Coordination이 적용되지만...). 어쨌든 이는 Object 자체가 Solid 형식을 취하고 있더라도 Texture Mapping이라는 개념이 물체의 표면에 해당 Bitmap Image를 Mapping(사상-寫像)시키는 것이므로 내부에까지 베어들지는 않기 때문이다.


하지만 Shading은 Texture Mapping과는 달리 Bitmap Image를 사용하지 않고 수학적인 계산에 의해 Material을 표현하는데, 암벽, 나뭇결, 물표면 등의 경우 대부분 Fractal적인 계산에 가장 많이 기초한다. 프로그램마다 약간의 활용과 정의가 차이를 보일 수 있겠지만, 근본적인 정의는 서로 같다. 쉽게 말해 물체표면에 Bitmap Image를 Mapping시키지 않고 Color로만 입혔다면, 그것은 Shading이라고 볼 수도 있다.


프로그램마다 나름대로의 Shader가 있는데, 유명한 Shader의 경우, 여러 platform과 프로그램들 사이에서 동등하게 사용되고 작용한다. 대표적인 Shader로는 Lume, Dark Tree 등을 들 수 있으며, 이밖에도 수많은 Plug-in 형식을 취한 쉐이더가 있는데, 이들은 물체에 대해 매우 Natural한 표면질감을 연출해 준다.



이러한 Shader에 의한 Shading 처리의 가장 커다란 특징은 아무리 카메라를 Zoom In해도 똑같은 느낌으로 재 계산 처리해 준다는 점이다. Texture Mapping의 경우, 해당 Bitmap Image의 크기와 관련하여 카메라를 Zoom In 할 경우, Pixel이 거칠게 나타나 인위적인 느낌이 든다. 하지만 Shading의 가장 큰 단점은 시간이 오래 걸린다는 점이다. Texture의 경우, 해당 Mapping Source Image의 크기에 비례하므로 작업자가 해당 Object의 크기와 중요성에 입각해 Bitmap이미지의 크기와 세밀함을 차별화 할 수 있지만, Shading의 경우 전적으로 프로그램 내부에서의 계산에 의존하게 되므로 작업자는 Object에 걸맞은 질감과 시간을 잘 파악해서 선택적으로 사용해야 한다.


물론, 거의 대부분 Texture와 Shader를 적절히 혼용해서 사용하는 것이 일반적이다.


Old-User들의 경우, 예전 3D Studio에서의 IPAS 중 PXP를 잘 알고 있을 것이다. 이는 Procedural Mapping 개념인데, 라이트웨이브에도 이러한 기능이 플러그인 형식이 아닌 기본 기능으로 내장되어 있다. 이도 역시 Shader 기능이라고 볼 수 있으며, 라이트웨이브의 Procedural Mapping은 그 사용방법이 매우 단순하면서도 상당히 풍부한 응용성을 지닌 대표적인 Shading 기능으로 평가된다.



앞에서 설명한대로 Shading과 Texturing의 차이점에 대해서는 대부분 구별이 될 것이다.


하지만, Shading을 수행하는 Shader와 Renderer의 차이점에 대해서는 아직도 많은 초보자들이나 기존의 메니아들조차도 약간의 혼동을 하는 경우가 많다.


모두 알고있듯이 Rendering은 장면의 모든 구성요소(Camera, Light, Object 등)들과 Shader에 의한 계산 일체를 포함하는 그 작업자체를 일컫는 말이다.


각각의 Tool들이 나름대로의 Rendering Algorism을 갖추고 있으며, 그런 만큼 Renderer는 삼차원 프로그램에 있어서 장면에서의 모든 상황을 일괄처리하는 작업이므로 우리는 이를 Renderer라고도 하지만, Rendering Engine이라고도 표현하는 것이다. 대표적인 Renderer로는 PIXAR에서 개발한 RenderMan을 들 수 있는데, 이는 수학 그 자체라고 할 수 있을 정도로 비 전문인들이 Handling하기에는 이론적인 뒷받침이 필요하다. RenderMax을 지원하는 프로그램도 많은데, Houdini, Vertigo, Solid Thinking은 RenderMan을 훌륭하게 지원하는 이른바 Interface가 있는 RenderMan으로까지 불린다.


'중요' 카테고리의 다른 글

Maya Fluid 의 이해.  (2) 2011.10.26
Car Explosion on the set of The Avengers.  (0) 2011.10.22
삼각함수.  (0) 2011.06.09
RanderMan Shader.  (0) 2011.06.09
마라톤을 완주하는 방법.(지식채널e)  (0) 2011.06.01