본문 바로가기

OGRE 엔진활용

OGRE에 노말맵핑 적용하는 방법


오우거(OGRE)엔진에서 노말맵핑을 적용하기 위해 한동안 많은 고생을 했다.
현재까지 나온 OGRE엔진의 SDK 버전은.. 1.63버전.. 내가 가진 SDK는 1.6.2.3 인데 크게 차이는 없을거라 본다.

버전업이 되면서 기능면에서 추가 및 변경되는것들이 있는데, 내가 알아본 바로는 노말맵핑에 관련된 것에 관한것은 변경된것이 없는듯 하다.

오우거를 공부하면서 많은 사이트를 참고하고 자료들을 모았었다.
그중에 가장 많은 도움이 되는곳이 '용수의 웹노트' 라고 하는곳과 '네이버 OGRE3D 카페' 그리고 '한국산업기술대학교 이대현교수의 오우거강좌 자료들' 이다.

노말맵핑에 관련된 자료는 셰이더 파트인데, 이 부분에 대한 자료가 구하기가 힘든 관계로 2008년 이대현교수의 강좌에 보면 셰이더 파트가 있었다. 그것을 참고로 공부하던중.. 유독 노말맵핑과, 툰 랜더링 파트에서 적용이 안되는것이었다.
아직도 그것에 대한 해답은 못찾았다.. 왜 적용이 안되는지 아직도 검토해봐야 할 사항이다.

일단 셰이더 파트를 보면서 알았던 내용은 셰이더를 적용하기위해서는 *.cg, *.hlsl, *.glsl, *.vert 등과 같은 파일을 다뤄야 하고, material파일에 해당 셰이더 파일을 재질에 연결시켜주는 부분.. 그리고 엔진에서는 이렇게 정의된 material파일을 읽어와야 하는부분이 있어야 한다는것이다.

*.cg, *.hlsl 파일과 같은 셰이더에 관련된 파일들은 오우거 media 경로의 material\programs 폴더에 들어있다.
노말맵을 적용하기위해서 SDK의 샘플 예제를 참고했다. 예제명은 Dot3Bump 라는 프로젝트를 참고하면 된다.

일단 노말맵이 적용이 안된 상태로 렌더링을 건 화면은 아래와 같다.

이곳에 노말값이 들어간 텍스쳐를 렌더링 시킨 결과는 놀랍게도 다르다. 같은 모델링 데이터이지만 결과는 눈에 보는것과 같다


실제로 위 두 스크린샷을 보면 프레임에 많은 변화가 있다는것을 알수 있다. 노말값이 들어가지 않은것보다 들어간것이 프레임을 많이 저하시킨다. 하지만 이러한 방법을 쓰지 않고 실제로 모델링 데이터를 아래처럼 더 정교하게 만든다면 프레임저하는 더 심하다. 결론적으로 모델링 데이터는 low 폴리곤으로 구성하고, 노말값이 적용될수 있는 텍스쳐를 하나 더 만든후 이것을 이용한 내부적인 연산을 통하는것이 더 빠르다는 것이다.

실제로 이방법은 둠3에서도 적용되었고, 많은 게임에서도 사용되는 검증된 방법중 하나다.

정상적으로 노말맵을 적용하기위해서는 반드시 넣어줘야 하는 코드가 있는것으로 안다. 하지만 내가 적용한 방법은 material 값을 이용해서 적용해봤는데 방법은 아래와 같다.


위 내용은 노말을 적용해주기 위해 수정한 메트리얼이다.
단 주의할점이 있다면, 주황색으로 되어있는 부분외것은 건드리지 않는게 좋고,  주석이 달린 부분만 수정한다면 적용이 될것이다. 위 내용중에 "  source Example_CelShading.cg" 와 같은 부분들이 있는데 여기서 Example_CelShading.cg 라는 파일의 내용을 참고하여 재질을 설정한다는 뜻이므로, 오우어SDK설치경로\media\material\programs 경로에 해당 cg 파일들이 있어야 한다.

아래는 노말이 적용된 사진이다.