다음을 통해 공유


변위 매핑(Direct3D 9)

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

블록 다이어그램

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

꼭짓점 파이프다이어그램

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

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

  • 변위 맵은 텍스처 맵과 유사하지만 꼭짓점 엔진에서 액세스합니다.
  • 추가 샘플러 단계는 변위 맵을 샘플링할 수 있는 꼭짓점 파이프의 초기 부분에 있습니다. 이 단계는 일반적인 SetSamplerState API에서 액세스하지만 스테이지 번호는 D3DDMAPSAMPLER = 256입니다.
  • SetSamplerState(D3DDMAPSAMPLER, ...)에서 변위 맵 샘플러 상태를 설정할 수 있습니다. API.
  • 변위 맵 텍스처는 SetTexture(D3DDMAPSAMPLER, 텍스처) API에 의해 설정됩니다.
  • 맵은 미리 샘플링할 수도 있고 아닐 수도 있습니다. 즉, 필터링하지 않고 변위 값을 조회할 수 있는 특정 방식으로 정렬할 수 있습니다.
  • 선언 구조의 변경으로 텍스처 맵을 조회하는 데 사용되는 텍스처 좌표의 사양을 사용할 수 있습니다. 예를 들어 Stream0, Offset, FLOAT2, LOOKUP, Displacement_value. 이렇게 하면 tessellator가 특정 오프셋의 stream0에서 2D float 벡터를 텍스처 좌표로 사용하여 변위 맵을 조회하고 Displacement_value 사용 의미 체계를 연결하도록 지시합니다. 꼭짓점 셰이더 선언에는 텍스처0 의미 체계가 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사용하여 쿼리할 수 있습니다.
  • D3DUSAGE_DMAP을 지정하여 드라이버가 이 텍스처를 변위 맵으로 사용하도록 해야 합니다. CreateTexture
  • 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) 여기서 인덱스는 생성된 꼭짓점과 TSS[D3DSAMP_DMAPOFFSET]의 순차적 인덱스입니다. 순차 인덱스는 각 기본 형식의 시작 부분에 0으로 설정되며 꼭짓점이 생성된 후 증가합니다.

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

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

꼭짓점 파이프라인