프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 대마왕J

둘은 상당히 비슷한 기능을 하죠. mipmap 제어라는...

그치만 공식의 작동법은 미묘하게 달라요.

lod가 shader3.0을 요구한다는 것도 다르고요...

 

프로그래머들에게 물어보면 공식에 대한 차이만 말해주니까요

자세한 느낌을 보기 위해 직접 테스트를 해 봤습니다.

 

 

 

예제를 만들어 봤습니다. 둘이 똑같아 보이죠?

근데 제 눈에는 살짝 오른쪽 텍스쳐가 추가 샘플링 된 것처럼 보입니다.

 

그래서 정말 그런가 테스트

 

 

 

 

 

오호라 과연 정말입니다.

tex2Dlod는 고정된 mipmap을 유지하지만, bias 는 이름값대로 추가로 바이어스를 걸어주고 있는 느낌입니다.

 

그럼 이번에는 값에 따른 변화를 테스트 하기 위해 다시 근접시킵니다.

 

 

 

음 겜브리오때는 밉맵을 수동 설정 가능했는데. 유니티는 방법이 없을까낭...

뭐 투덜대도 할 수 없으니까 이번에는 값을 비교해 보죠

 

지금 두 그림이 똑같아 보입니다만... 오른쪽이 밉맵 1 상태라고 보여집니다. 한 단계 낮은 이미지요.

 

어쨌거나 일단 비교.

 

 

lod/bias 값 1

 

 

lod/bias 값 1.5

 

 

lod/bias 값 2

 

 

lod/bias 값 2.5

 

 

lod/bias 값 3

 

 

lod/bias 값 3.5

 

 

lod/bias 값 4

 

 

lod/bias 값 4.5

 

 

lod/bias 값 5

 

 

lod/bias 값 5.5

 

 

 

lod/bias 값 6

 

 

음... 일단 오른쪽 bias의 값이 더 낮아 보입니다.

그 이유는... 현재 보이는 거리 때문에 밉맵이 한 단계 더 먹은 상태라서 그렇습니다.

그에 반해 tex2Dlod는 거리고 뭐고 상관 안하고 mipmap 값이 강제지정됩니다. 호옹이.

이런 차이로군요.

 

 

그래서 정말 그런가 추가 테스트

 

 

 

 

다시 6단계에서부터 추가 테스트. 이번에는 필터링을 개뿌연 Box 필터링에서 그나마 날카로운  Kaiser 필터링으로 바꿔 보았습니다. 카메라를 좀 근접시키니 두 이미지가 상당히 비슷하네요 그래도 lod가 더 선명해 보이는게, 1단계 앞인 느낌입니다.

 

 

거리를 멀게 하자 오호라. 역시 bias는 거리에 따라 mipmap이 더 먹습니다.

 

그렇다는것은...

 

 

 

 

거리만 가깝다면 bias가 더 선명하다는 말도 된단 말입니다. lod는 고정이니까. 오호호라...

 

즉  lod는 무조건 고정시키는 거고 bias는 말그대로 기존 값에 bias 시킨다는 말이겠습니다.

 

이 기능은 주로 싸구려 블러 효과로 사용됩니다만, 값을 반대로 처리하면 싸구려 샤픈 효과도 가능하겠죠.

뭐 그 외에도 사실 많이 쓸 데가 있습니다. Matcap 과 같이 어떻게 저렇게 응용하면 모바일용 러프니스 흉내도 ... 케케케케케 꼼수질...

 

 

뭐 그래서 위 내용이 정말 사실인가 테스트.

이렇게 밉맵을 수동으로 제어할 수 없는 엔진에서는 텍스쳐를 작게 만들면 잘 보입니다. 데헷. 역시 꼼수.

 

 

 

네네네 증명되었습니다 역시.

 

32 *32 이미지를 가지고 밉맵을 가동시켜보니 역시 이렇게 나오는군요. 어쩔 수 없지요.

이런건 오히려 곡면일때가 더 문제죠 .

 

 

 

이렇게 되어 버리니까요.

 

Tex2Dbias를 쓰려면 텍스쳐가 작으면 일단 안 되겠군요. * 위는 Bilinear 상태입니다.

 

 

 

겸해서 추가로 알아낸 lod와 bias의 차이.

 

bias는 float으로 소숫점 단위까지 하나하나 연산해서 mipmap을 흐리는데,

lod는 그렇게 변하질 않네요.

 

lod로 하면 0.0~0.49까지는 같고

0.5~1.49 일때 변하고

1.5~2.49 일때 변하고

2.5~3.49 일때 변....

 

한다는 것입니다.

* 위의 경우는 텍스쳐가 Bilinear 로 되어 있을때였네요.

Trilinear일 경우에는 밉맵간 인터폴레이션이 되니까 저렇게 되진 않습니다.

그래도 오른쪽 아티펙트도 조금 줄긴 하지만 여전히 아티펙트는 남습니다.

 

그리고

 

lod는 0 이하의 값이 존재할 리가 없지만

bias는 - 값을 사용하면 알리아싱이 없는 가짜 샤픈 효과를 낼 수 있다는 것 정도.(물론 아주 가까우면 아무 의미가 없지만)

 재밌네요.

 

재미있는 연구였습니다. 이상.

 

 

 

* 텍스쳐를 인터페이스용으로 쓰던걸 밉맵만 생성해서 쓰다가 그만 필터링 옵션을 Trilinear로 바꾸는걸 잊고 있었군요.

그래서 Bilinear로 돌고 있었습니다. 이런 실수를!!

 

 

그래서 보너스로 Bilinear 와 Trilinear 차이를 보여드리겠습니다.

 

 

원본 이미지. 엄청 작습니다. 16*16 짜리이죠.

 

 

 

 

 

 

이게 Point Sampling. 밉맵 있음. 밉맵이 작동되는 라인이 선명하게 보입니다.

픽셀이 확대되거나 축소될때 옆 픽셀과 어떤 블렌딩도 없죠.

 

 

이게 Bilinear 샘플링 밉맵있음. 밉맵라인이 훤히 보입니다.

확대되거나 축소되는 픽셀은 옆 픽셀들과 블렌딩됩니다.

 

 

 

이게 Trilinear 샘플링 밉맵있음. 밉맵끼리 블렌딩이 되기 때문에 거의 안 보입니다.

확대되거나 축소되는 픽셀은 역시 옆 픽셀들과 블렌딩됩니다.

 

 

마지막으로 Anisotropic 샘플링 * 16

기울어진 각도를 인식해서 비례로 샘플링하기 때문에 기울어졌을때 가장 선명하게 샘플링되지만 가장 느립니다.

 

언제 한 번 샘플링도 알기 쉽게 정리를 해야..

 

댓글을 달아 주세요

  1. 김원기 2016.05.03 06:11  댓글주소  수정/삭제  댓글쓰기

    정말 최고입니다. 감사합니다.