꽃미남 프로그래머 김포프가 창립한 탑 프로그래머 양성 교육 기관 POCU 아카데미 오픈!
절찬리에 수강생 모집 중!
프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 김포프
얼마 전에 GPU상에서 텍스처의 밉맵을 만드느라 tex2Dlod() 함수를 사용할 일이 있었습니다. HLSL 함수인 tex2Dlod()는 텍스처좌표를 float4 변수로 받는데 이 float4의 네번째 성분이 텍스처 샘플링에 사용할 밉 레벨을 가리킨다고 하더군요.

여기서 절 다소 혼란스럽게 한 부분이 "2번째 밉맵을 샘플링하려면 다음 둘 중에 정확히 어떤 값을 전달해줘야 하는거지?" 였습니다.

texcoord = float4(u, v, 0, 1);


또는
 

texccord = float4(u, v, 0, 1 / 총 밉맵 수);


불행히도 이걸 제대로 설명해 놓은 문서를 찾지 못했고, MSDN에도 설명되어 있지 않고, 구글 검색에서도 실패....

괜히 쓸데없이 검색하느라 시간 낭비하는 사이 직장동료인 다니엘(저와 같이 KGC 발표 했던 그 박사님이십니다)이 렌더 몽키를 사용해서 재빨리 테스트를 해봤더니 첫번째가 정답이라더군요. 즉, 두번째 밉맵을 읽어오려면 float4의 4번째 성분에 1을 대입해줘야 합니다. 다시 한 번 생각해보니 D3D 샘플러 상태인 D3DSAMP_MAXMIPLEVEL을 살펴보면 제대로 유추할 수도 있었더군요. MSDN은 D3DSAMP_MAXMIPLEVEL을 다음과 같이 설명하고 있거든요.

D3DSAMP_MAXMIPLEVEL: level-of-detail index of largest map to use. Values range from 0 to (n - 1) where 0 is the largest. The default value is zero.


두번째 문장을 대충 번역하면 "0 부터 n-1 까지의 값을 사용할 것. 0이 가장 크기가 큰 밉맵(즉, 첫번째 밉맵)이다."입니다.

참고로 이렇게 정수로 밉맵 레벨을 가리키는 것은 OpenGL과 DirectX에서 동일합니다.

포프였습니다.

댓글을 달아 주세요