'잡담'에 해당되는 글 16건

  1. 2010/02/25 Hybrid Material 과 Renderer 연결 문제
  2. 2010/02/03 Hybrid 3일 째 Common Lisp 삽질 중 (4)
  3. 2010/01/14 Hybrid 잡담 - 곧 올라올 글들
  4. 2009/12/29 Hybrid [뻘글] 다른 직업을 고른다면?? (4)
  5. 2009/07/27 Hybrid [책] Code Complete 2/E 번역서

요즘 이걸로 고민하고 있다. 사실 몇달 전부터 고민하던건데, 다시 끄집어내서 파해치는 중이다.

근본적인 목적은 Material 과 Renderer 를 분리하는 것이다. 당연히 다른 것이니 분리 되어 있는거 아냐? 하겠지만, 직접 짜다보면 잘 분리가 안된다. (나만 그런가?) 일단 Ogre3D 엔진의 경우는 Material 과 Renderer 가 사실상 같은 거라고 볼 수 있고, Unity 엔진도 크게 다르지 않은 것 같다.

결합도가 높은 이유는, Renderer, 즉, 쉐이더의 Parameter 들이 사실상 Material 의 Parameter 들이 되고, 텍스쳐 역시 마찬가지다. 이 둘을 분리한 다는 것은 각각의 Renderer 가 지정된 Material 말고 다른 Material 과도 붙어야 한다. 물론 그 반대도 마찬가지.

가령 1번 Material 에 Ambient Texture, Diffuse Texture, Specular Texture, Height Texture 가 있을 경우.

Shader 1은 Ambient/Diffuse Texture 두개만 사용한다.

Shader 2 는 Diffuse/Height Texture 만 사용한다. 이럴 경우 이걸 정적으로 붙여 버리면, 렌더링 할 때 실시간으로 필요한 텍스쳐를 얻기가 곤란해진다.

처음에는 좀 무식한 방법으로 시도했다. 지정된 텍스쳐 타입을 지정해서, 그만큼의 포인터 배열을 만들었다. 예를 들어 0번째는 Ambient, 1 번째는 Diffuse 등이다. 이 경우 사용자가 원하는 텍스쳐 타입을 추가해서 새로운 방식으로 렌더링하기가 어렵다는 문제도 있었고, 일단 전체적 모양이 별로 마음에 들지 않았다.

일단 현재는 방법을 조금 달리 했다. 텍스쳐 타입을 정수(enum)으로 하지 않고 문자열로 했다. 그리고 Material 과 Renderer 가 연결 될때 연결이 가능한 텍스쳐들을 연결 시킨다. 이렇게 하면 원하는대로 Material 과 Renderer 를 중복해서 다양한 상황에 섞어서 쓸 수 있을 듯 하다. 그런데, 또 어떤 문제가 생길지는 모르겠다.

이 문제 때문에, 몇몇 공개 엔진을 아주 간략하게는 살펴봤는데, 내가 원하는 방식은 없는 것 같았다. Ogre3D 는 Material 정보에 아에 Shader 정보까지 들어가서 하나를 이루는 것 같고, Irrlicht 엔진은 Material 에 E_MATERIAL_TYPE 이 존재해서, 몇가지(수십가지) 렌더링 방식이 정해진 것 같어서, 역시 내가 원하는 방식이 아닌듯 하다.

좀 모범이 될만한 좋은 엔진 없을라나.... (원래 지향하는 것은 Ogre3D 였는데, namespace 를 버리기로 하고, 어느정도 자체적으로 방향을 잡다보니까 완전히 다른 구조가 되버렸다.)


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/25 22:24 2010/02/25 22:24

트랙백 주소 :: http://www.hybrid.pe.kr/tt/trackback/525

댓글을 달아 주세요

[로그인][오픈아이디란?]