UV애니메이션과 울렁효과 울렁효과 - 강물이나 마그마가 흘러가는 효과는 UV애니메이션을 사용하여 구현 - 강물이 흘러갈 때 물결과 같은 울렁거리는 효과도 셰이더에서 구현할 수 있다. - 물결의 파장을 표현하려면 위아래로 곡선을 이루는 형태가 될 것 → 효과를 내기 위해 코사인 그래프를 사용한다. 위의 y = cos(x) 그래프에서 x축 - 경과한 시간 y축 - 표면 정점 위치 변경값 으로 표현하면 울렁거리는 효과를 만들 수 있다. 코드 정점셰이더 ... float gTime; float gWaveHeight; float gSpeed; float gWaveFrequency; float gUVSpeed; 전역변수 - gWaveHeight : cos 결과값의 범위를 설정 - gSpeed : 울렁거리는 움직임 ..
UV 애니메이션과 울렁효과 - 게임에서 유용하게 사용할 수 있는 정점셰이더를 활용하는 기법 UV 애니메이션 - 게임에서 강물이나 마그마가 흘러가는 모습을 낼 수 있는 기법 - 표면에 텍스처를 입혀준 뒤 한쪽으로 이동시킨다. - UV 좌표를 바꿔주는 것으로 구현 그림처럼 UV좌표를 변경하려면? → (U, V)에서 U좌표에 offset을 더해준다. offset 값에 따라 움직이는 속도나 방향을 설정 시간의 흐름에 따라 텍스처가 움직이는 효과를 낼 수 있다. 문제점 셰이더는 GPU상에서 실행되기 때문에 시간을 구하는 함수가 없다. → CPU에서 시간을 계산하여 전역변수로 받는다. 코드 - 디퓨즈 / 스페큘러 매핑에서 사용했던 프로젝트를 사용한다. - 효과를 좀 더 보기 쉽게 모델은 Torus(원환체)를 사용한..
환경 매핑 - 주위 환경이 거울처럼 표면에 반사되는 것 - 다른 물체들이 반사하는 정반사광과 난반사광을 가지고 계산하는 것은 어렵다. - 실시간 렌더링은 수많은 속임수가 허용되는 분야로 법선매핑, 환경매핑도 같은 원리 개념 주위 환경을 미리 텍스처 안에 저장해 놓은 뒤 실시간으로 그 텍스처를 입힌다. 주위환경을 360도 담기 위해 입방체 텍스처를 만들어서 물체 주위를 감싼다 →입방체 맵(Cube Map) 그림과 같은 방식으로 카메라 벡터가 물체의 표면에 부딪히면 반사 벡터를 얻을수 있고, 반사된 벡터가 텍스처에 부딪히면 부딪힌 입방체 텍스처를 표면에 그려주는 것으로 보인다. 반사 벡터 - 다른 물체에서 반사되어 들어오는 빛의 벡터를 뒤집은것 카메라 벡터 - 거울 표면에서 반사된 벡터를 뒤집은것 반사 벡터..
법선 매핑 디퓨즈 스페큘러 매핑에서 이 디퓨즈 맵을 사용하여 텍스처 매핑을 하면 - 이 이미지를 얻었는데 텍스처를 볼 때는 표면이 울퉁불퉁한 돌덩어리 라는걸 알 수 있지만 렌더링된 화면을 보면 매끈한 면으로 보임 - 이를 해결하기 위해 직접 울퉁불퉁하도록 폴리곤을 추가해 모델을 만들 수도 있지만 정점이 많아져서 처리속도가 느려지게 되고 저장할 정점이 늘어나서 메모리 소모가 커지게 된다. - 폴리곤을 늘리지 않고 이런 효과를 낼 수 있게 하는 것이 법선 매핑 법선 매핑의 개념 - 평평한 평면의 법선 벡터와 울퉁불퉁한 표면의 법선벡터는 이런 차이가 있다. - 울퉁불퉁한 표면에서는 법선 벡터가 방향이 다 다르기 때문에 빛을 받았을때 울퉁불퉁한 표면이 표현되는 것 - 법선매핑은 위의 울퉁불퉁한 표면의 법선 벡터..