조명과 물질
3D 모형은 구성되고 변형된 후. 정적인 이미지나 애니메이션의 틀로 렌더링된다. 예술 상태는 너무 빨리 발전해 불과
'수년 전 생성된 그래픽이 오늘날에는 투박해 보일 수도 있다. 소프트웨어 렌더링의 최우선 목표는 포토 리얼리즘이었다. 생 성된 이미지는 사진과 구분할 수 없어야 한다는 뜻이다. 그러나 비 포토 리얼리즘 렌더링에 상당한 혁신이 있었고 이것은 양 식화된 이미지 생성을 시도했다. 예를 들어 만화영화, 목탄화, 회화 특유의 렌더러는 손과 자연물질의 효과를 모방한다.
3D 렌더링 작업은 주로 수학적 모델링, 빛과 화면 교류의 효율적 계산이다. 광선추적법과 다른 변수는 렌더링의 가장 인기 있는 메소드에 영향을 미친다. 광선추적법은 광원에서 발생해 화면에 닿을 때까지 장면 표면에서 이리저리 튕기는 광 선을 모형화한다. 이것은 계산하는 데 엄청난 비용이 들며 자연광이 일으키는 중요한 현상을 예측하는 데 실패한다. 색칠된 한 표면이 다른 표면에 반사되는 '컬러 블리드'현상을 예로 들 수 있다. 라디오시티법 기술은 '글로벌 조도'를 모형화한다. 이 것은 기정된 광원에서 직접 생성되는 빛뿐만 아니라 어느 장면에서 보통 표면에서 반사되는 빛도 포함한다. 조명 계산이 필요 없는 3가지 렌더링이 있다. 철사 구조, 은선 기술, 단순 쉐이딩이다.
철사 구조,은선 기술,단순 쉐이딩
철사 구조는 가장 단순한 렌더링 모델이다. 이것은 다면체의 선과 모서리를 기본 채우기 색상으로 렌더링한다. 이 결과 는 프로세싱에서 스트로크 색상으로 그림을 그리고 색상을 입히지 않는 방식으로 얻을 수 있다. 은선 기술은 그 다음으로 복 잡하다. 모서리만 그려지며 고형물로 가린 부위는 보이지 않는다. 프로세싱은 이것을 직접 지원하지 않지만 이 효과는 배경 색과 같은 색상으로 칠해 모방할 수 있다. 마지막 불을 켜지 않은 모형은 단순 쉐이딩 방식이다. 물체의 평면은 색이 입혀지지만 기본 채우기 색상만 사용한다.
조명과 표면 물질은 이미지가 더 현실적으로 보이도록 모형화된다. 실제 조명 계산을 위해 사용된 기술은 이미 말한 추 법과 라디오시티 메소드와 다르다. 물론 미래에 사용할 수 있는 계산 속도를 생각해보면 상기 방법에 적용할 수 있 은 확실하지만 빠른 이미지 렌더링을 하기에는 계산적으로 비싸다.그 대신 실시간 그래픽에는 단순화된 여러 평범한 조 술이 사용된다. 이것을 이해하기 위해서는 거의 모든 실시간 3D가 사용하는 빛과 표면-물질교류 모형을 소개해야 한다.
장면에 추가될 수 있는 빛에는 지향성 빛, 환경광, 점팡, 스포트라이트 형 등이 있다. 지향성 빛과 환경광은 유일하 장면 안에 특정한 위치가 없다. 지향성 빛은 장면으로부터 매우 먼 광원을 추정한다. 이것은 위치와 상관 없이 구체적 향으로 장면을 비추므로 햇빛을 표현하기에 적합하다. 다른 빛들은 위치가 있으며 저하에 해당한다. 이것은 거리에 따른 감소를 나타낸다. 현실에서 빛의 세기는 광원 거리의 제곱에 비례해 줄어든다. 3D 장면에서 저하는 매우 적거나 아예 나지 않아 필요한 광원 수가 줄어들며 이것은 계산적으로 효율적이다. 또한 현실과 달리 가상 장면에서는 빛이 이리저리 기지 않으므로 빛이 추가로 필요하다.
지향성 빛은 directionalL ight() 함수에 의해 정의되며 6개 매개변수를 통해 색과 방향을 정의한다. 첫 번째 3개 묶 빛의 색. 두 번째 묶음은 5-. I-. 2-축에 빛이 비추어지는 방향을 정의한다. 다음 예시에서 마우스를 클릭해 좌측부터 꼭대기까지 빛이 변하는 것을 확인해보자.
void setup() {
size (100, 100, P3D);
noStroke();}
void draw() {
background(0);
if (mousePressed == true) {
directionalL ight(255, 255, 255, 0, 1, 0);
}else {
directionalLight(255, 255, 255, 1, 0, 0);
translate(width/2, height/2, 0);
sphere (33);
빛의 두 번째 방향적 요소는 반사적 반영이다. 이것은 표면에서 반사되어 노말에 반영되는 빛의 종류다. 물질이 더 많은 반사적 반영을 가질수록 더 반사적으로 보이게 된다. 예를 들어 완벽한 거울은 확산 반사가 없으며 완벽한 반사적 반영이다.
lightspeculr() 함수는 빛의 반사적 색상을 설정한다. 빛의 반사적 특성은 specular( ) 함수에 의해 결정된 물질의 반사적 특 성과 교류한다. specular( ) 함수는 물질의 반사적 색상을 설정하며 이것은 하이라이트 색상을 설정한다.
빛남 정도 특성은 shinincss() 함수에 의해 조정되며 역시 반사적 반영 요소 중 하나다. 이것은 들어오는 광선이 노말로 부터 탈선하는 동시에 반사적 반영에 일어나는 쇠퇴율이다. 높은 빛남 정도는 빛나는 금속에 그렇듯이 물질에 매우 강렬한 빛 점을 생성한다. 낮은 빛남 정도는 어느 정도 반사적 반영으로 이어지겠지만 하이라이트가 더 부드러워진다. 다음 프로그램은 마우스가 좌측에서 우측으로 이동하는 정도에 따라 빛나는 정도를 결정한다.
void setup () {
size (100, 100, P3D);
noStroke();
}
void draw() {
background(0);
fill(0, 51, 102);
ambientlight(102, 102, 102);
lightSpecular (204, 204, 204);
directionall ight(102, 102, 102, 0, 0, -1); specular (255, 255, 255);
translate(width/2, height/2, 0);
float s = map(mouseX, 0, width, 1, 10);
shininess(s);
sphere (33);
}
도형은 여러 면의 집합으로 여겨진다. 예를 들어 정육면체의 6개 표면은 각각측면이다. 각 측면들은 노말이 있는데 이 것은 측면 중심에서 수직으로 화살처럼 뻗어 나오는 방향 벡터다. 이 노말은 물체에 대한 빛의 각도 계산에 사용되므로 빛을 마주보는 물체는 더 밝으며 각진 물체는 덜하다. 환경광은 방향성이 없어 측면 노말의 영향을 받지 않지만 그것을 제외한 모 든 빛은 영향을 받는다. 물질은 빛을 2가지 방법으로 반사한다. 첫 번째는 확산반사다.
물질은 확산 색상이 있으며 이 색상은 물질이 빛을 받을 때 이것이 모든 방향으로 흩어지는 빛의 양에 영향을 미친다. 빛이 측면을 앞으로(노말과 일치하게) 들이 받으면 측면은 이 확산 색상을 모두 반사한다. 빛이 노말과 90도 각을 빚으면 측면은 확산 색상을 아예 반사하지 않는다. 빛 이 측면에 닿을 때 노말과 가까울수록 측면은 더 많은 확산 색상을 반사한다(유입되는 빛과 노말 사이 각의 코사인을 사용해 계산할 수 있다). 한 측면이 더 많이 분산될수록 더 거칠고 덜 빛나 보인다. 이것은 실제로 물리적으로 같은 양이다. 프로세싱의 fill() 함수는 2가지를 함께 설정하지만 환경은 ambient() 함수로 따로 설정할 수 있다.
댓글