Share via


변위 매핑(Direct3D 9)

변위 맵은 텍스처 맵과 비슷하지만 꼭짓점 엔진에서 액세스합니다.

블록 다이어그램

다음 다이어그램과 같이 꼭짓점 파이프의 초기 부분에 추가 샘플러 단계가 있습니다. 이 단계에서는 변위 맵을 샘플링하여 꼭짓점 변위 데이터를 제공할 수 있습니다.

꼭짓점 파이프의 샘플러 단계 다이어그램

변위 맵 샘플러 상태는 새 스테이지 번호인 스테이지 번호 256을 사용하여 SetSamplerState 에서 설정할 수 있습니다. 변위 맵 텍스처는 SetTexture에 의해 설정됩니다.

맵은 미리 샘플링될 수 있습니다. 즉, 필터링하지 않고 변위 값을 조회할 수 있는 방식으로 정렬할 수 있습니다.

  • 변위 맵은 텍스처 맵과 유사하지만 꼭짓점 엔진에서 액세스합니다.
  • 추가 샘플러 단계는 변위 맵을 샘플링할 수 있는 꼭짓점 파이프의 초기 부분에 있습니다. 이 단계는 일반적인 SetSamplerState API에서 액세스하지만 스테이지 번호는 D3DDMAPSAMPLER = 256입니다.
  • 변위 맵 샘플러 상태는 SetSamplerState(D3DDMAPSAMPLER, ...)에서 설정할 수 있습니다. Api.
  • 변위 맵 텍스처는 SetTexture(D3DDMAPSAMPLER, 텍스처) API에 의해 설정됩니다.
  • 맵은 미리 샘플링할 수 있습니다. 즉, 필터링하지 않고 변위 값을 조회할 수 있는 특정 방식으로 정렬할 수 있습니다.
  • 선언 구조의 변경으로 텍스처 맵을 조회하는 데 사용되는 텍스처 좌표의 사양을 사용할 수 있습니다. 예를 들어 Stream0, Offset, FLOAT2, LOOKUP, Displacement_value. 이렇게 하면 테셀레이터가 특정 오프셋에서 stream0의 2D 부동 소수 벡터를 텍스처 좌표로 사용하여 변위 맵을 조회하고 Displacement_value 사용 의미 체계를 연결하도록 지시합니다. 꼭짓점 셰이더 선언에는 texture0 의미 체계가 v0 입력 레지스터와 연결되어야 함을 나타내는 {dcl_texture0, v0}과 유사한 선이 포함됩니다. 조회된 변위 값은 입력 레지스터 v0에 복사됩니다.
  • 텍스처 맵을 미리 샘플링할 때 특별한 유형의 변위 매핑이 있습니다. 생성된 꼭짓점의 순차적 인덱스는 텍스처 맵의 텍스처 좌표로 사용됩니다. 예를 들어 0,0,(D3DDECLTYPE)0,D3DDECLMETHOD_LOOKUPPRESAMPLED, Usage, UsageIndex입니다.
  • 조회의 출력은 4개의 부동 소수입니다.
  • 변위 매핑은 N 패치에서만 지원됩니다.
  • 드라이버는 변위 맵을 처리하지 않는 경우 SetTextureStageState에서 D3DDMAPSAMPLER를 무시해야 합니다.
  • D3DTEXF_ANISOTROPIC 필터 모드는 지원되지 않습니다.
  • 변위 맵 샘플러의 D3DSAMP_MIPFILTER D3DTEXF_NONE 않은 경우 세부 수준은 다음과 같이 계산됩니다(D3DRS_ENABLEADAPTIVETESSELLATION FALSE인 경우에도 적응 테셀레이션 상태가 사용됨): Tmax = 렌더링 상태 D3DRS_MAXTESSELLATIONLEVEL
  • 꼭짓점 Vi에 대한 컴퓨팅 테셀레이션 수준 Te: (Xi, Yi, Zi)는 "적응 테셀레이션" 섹션에 설명된 것과 동일합니다. 세부 정보 수준 L = log2(Tmax) - log2(Te).
  • 텍스처 필터링 및 샘플링 작업은 픽셀 파이프라인(LOD(세부 수준) 바이어스가 적용되는 등)과 동일한 규칙을 따릅니다.
  • 모든 형식을 변위 맵으로 사용할 수는 없지만 D3DUSAGE_DMAP 지원하는 형식만 사용할 수 있습니다. 애플리케이션은 CheckDeviceFormat CheckDeviceFormat을 사용하여 쿼리할 수 있습니다.
  • 이 텍스처가 변위 맵으로 사용되도록 드라이버에 알리려면 CreateTexture 에서 D3DUSAGE_DMAP 지정해야 합니다.
  • D3DUSAGE_DMAP 텍스처에서만 사용할 수 있습니다. 큐브 맵 또는 볼륨에는 사용할 수 없습니다.
  • D3DUSAGE_DMAP 사용하여 만든 질감 및 렌더링 대상은 일반 샘플러 단계에서 렌더링 대상으로 설정할 수 있습니다.
  • 텍스처 좌표에 대한 래핑 모드를 설정하는 렌더링 상태는 변위 매핑에서 무시됩니다. 일반적으로 테셀레이터 엔진에 대한 래핑 모드는 없습니다.
  • 변위 맵 샘플러의 동작은 픽셀 텍스처 샘플러의 동작과 동일합니다. 4개 미만의 채널(예: R32f)이 있는 텍스처를 조회하는 경우 조회된 값은 대상 레지스터의 적절한 채널(_sample 의미 체계로 태그가 지정된 꼭짓점 셰이더 입력 레지스터)로 이동하지만 다른 채널은 기본적으로 (1, 1, 1)로 설정됩니다. 조회하면 D3DFMT_L8 R, G, B 채널 및 A 기본값 1로 브로드캐스트됩니다. 참조 래스터라이저에는 전체 구현 세부 정보가 있습니다.

미리 샘플링된 변위 매핑

  • 미리 샘플링된 변위 맵에서 D3DSAMP_DMAPOFFSET(DWORD) - 오프셋(꼭짓점)이라는 새로운 샘플러 상태가 도입되었습니다.
  • D3DDECLMETHOD_LOOKUPPRESAMPLED 새 선언 메서드가 도입되었습니다.
  • 적응 테셀레이션을 사용하지 않도록 설정해야 합니다.
  • 텍스처 필터 설정은 무시됩니다. 지점 샘플링이 수행됩니다. 밉 텍스처 필터는 D3DTEXF_NONE 것으로 간주됩니다. 다른 모든 텍스처 필터 모드는 D3DTEXF_POINT 것으로 간주됩니다.
  • 텍스처 좌표는 다음과 같이 계산됩니다. U = (Index % TextureWidthInPixeles) / (float)(TextureWidthInPixeles) V = (Index / TextureWidthInPixeles) / (float)(TextureHeightInPixeles) 여기서 Index는 생성된 꼭짓점과 TSS[D3DSAMP_DMAPOFFSET]의 순차적 인덱스입니다. 순차 인덱스는 각 기본 요소의 시작 부분에 0으로 설정되며 꼭짓점이 생성된 후 증가합니다.

변위 매핑을 지원하는 API 변경 내용입니다.

  • D3DFMT_L16 단일 채널 형식이 추가되었습니다.
  • D3DUSAGE_DMAP 새 사용 플래그입니다.
  • 변위 맵 텍스처 D3DDMAPSAMPLER를 설정하는 데 사용되는 특수 텍스처 단계입니다.
  • 새로운 하드웨어 캡, D3DDEVCAPS2_DMAPNPATCH 및 D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH 추가되었습니다. D3DDEVCAPS2를 참조하세요.

꼭짓점 파이프라인