DirectX 11 3d

230619 Mapmapping

슬뷔 2023. 6. 26. 00:23

노이즈처럼 나오는것을 해결

텍스쳐에 기능 추가

 

MinMap 1을 지정하면 원본만 만들어진다.

MinMap 2을 지정하면 1일 때의 절반짜리 해상도가 하나 더 만들어진다.

즉, MinMap 레벨이 늘어날수록 가로세로 픽셀 수가 2의 승수로 줄어들기 때문에, 원본 텍스쳐보다 해상도가 훨씬 적어서 퀄리티가 떨어지면서 자체적인 알고리즘에 의해 색상이 낮은 저퀄리티 저해상도 버전을 만드는 것이다.

 

배열텍스쳐는 한 장이 여러 장으로 구성되어 있다.

이걸 만약 MinMap 을 8로 지정한다면, 텍스쳐 하나당 민맵이 8개 생성이 된다.

LandScape.fx

for (int i = 0; i < 4; ++i)
{
    vColor += TileTexArr.SampleLevel(g_sam_0, float3(_in.vUV, i), 7) * vWeight[i];
    
     if (fMaxWeight < vWeight[i])
     {
         fMaxWeight = vWeight[i];
         iMaxWeightIdx = i;
     }
}
output.vColor = float4(vColor.rgb, 1.f);

float3(_in.vUV, i), 7 에서 7은 민맵 몇 번째를 고를지 정하는 것이다.. (8장이라면 0 ~ 7 중에 고를 수 있다)

 


Mipmap은 렌더링 속도를 향상시키기 위한 목적으로 기본 텍스쳐와 이를 연속적으로 미리 축소시킨 텍스쳐들로 이루어진 비트맵 이미지의 집합이다.
 
지금 Camera는 원근 투영을 사용하고 있는데, 이를 사용시 멀리 있는 Obejct에 Sampling될 Texture가 원래 해상도의 크기를 다 못담는 경우가 발생한다.
 
이 경우, Sampling이 띄엄띄엄 발생하게 되며, 이는 원본이미지와는 보이는 그림이 차이가 많이 날 수 있고, 보는 입장에서는 자글자글한 느낌으로 밖에 안보일 것이다.
 
(텍스쳐가 픽셀 9개의 픽셀 으로 표현된다면 1/3 지점마다 Sampling이 일어날 것이고, 이는 사용자가 식별할 수 없는 정도로 Sampling이 일어난 것이며, 보게되는 픽셀 3칸은 자글거리는 느낌으로 보여질 것이다)
 
따라서, 이를 해결하기 위해 멀리 있는 물체에는 해상도가 낮은 Texture에서 Sampling이 일어져야 하고 이때 Mipmap을 사용하는 것이다.
 
MipMap중 어떤 Level을 사용할지는 다음과 같다.
 
HLSL에서는 ddx와 ddy라는 함수를 제공하고 있는데, ddx의 경우, 옆픽셀과의 값차이를, ddy의 경우 윗 픽셀과의 값차이를 반환해준다.
 
ddx에 uv를 대입하면 옆픽셀에서의 uv값이 나온다. 만약이 uv값의 차이가 작으면, 높은 해상도의 Texture가 필요하다는 것이고, 차이가 크다면 낮은 해상도의 Texture가 필요하다는 것이다.
 
Sample Level은 실수로도 나올 수 있으며, 이는 SampleGrad()라는 함수 사용시 자동적으로 계산해준다.

 

 

Mipmap은 렌더링 속도를 향상시키기 위한 목적으로 기본 텍스쳐와 이를 연속적으로 미리 축소시킨 텍스쳐들로 이루어진 비트맵 이미지의 집합이다.
 
지금 Camera는 원근 투영을 사용하고 있는데, 이를 사용시 멀리 있는 Obejct에 Sampling될 Texture가 원래 해상도의 크기를 다 못담는 경우가 발생한다.
 
이 경우, Sampling이 띄엄띄엄 발생하게 되며, 이는 원본이미지와는 보이는 그림이 차이가 많이 날 수 있고, 보는 입장에서는 자글자글한 느낌으로 밖에 안보일 것이다.
 
(텍스쳐가 픽셀 9개의 픽셀 으로 표현된다면 1/3 지점마다 Sampling이 일어날 것이고, 이는 사용자가 식별할 수 없는 정도로 Sampling이 일어난 것이며, 보게되는 픽셀 3칸은 자글거리는 느낌으로 보여질 것이다)
 
따라서, 이를 해결하기 위해 멀리 있는 물체에는 해상도가 낮은 Texture에서 Sampling이 일어져야 하고 이때 Mipmap을 사용하는 것이다.
 
MipMap중 어떤 Level을 사용할지는 다음과 같다.
 
HLSL에서는 ddx와 ddy라는 함수를 제공하고 있는데, ddx의 경우, 옆픽셀과의 값차이를, ddy의 경우 윗 픽셀과의 값차이를 반환해준다.
 
ddx에 uv를 대입하면 옆픽셀에서의 uv값이 나온다. 만약이 uv값의 차이가 작으면, 높은 해상도의 Texture가 필요하다는 것이고, 차이가 크다면 낮은 해상도의 Texture가 필요하다는 것이다.
 
Sample Level은 실수로도 나올 수 있으며, 이는 SampleGrad()라는 함수 사용시 자동적으로 계산해준다.

 

 

 

 

'DirectX 11 3d' 카테고리의 다른 글

230626 FBX 정적 매쉬 로딩  (0) 2023.07.13
230621 Directional Light Shadow  (0) 2023.07.13
230615 LandScape - Splating(색칠)  (0) 2023.06.26
230609 LandScape Heightmap  (0) 2023.06.25
230607 LandScape 포워드 -> 디퍼드 전환  (0) 2023.06.14