在 Direct3D 12 中,D3D12_RAYTRACING_GEOMETRY_DESC 是一个结构体,用于描述射线追踪光线几何体(Ray Tracing Geometry)。这个结构体可以用于创建光线追踪的加速结构。

以下是 D3D12_RAYTRACING_GEOMETRY_DESC 结构的定义:
typedef struct D3D12_RAYTRACING_GEOMETRY_DESC {
  D3D12_RAYTRACING_GEOMETRY_TYPE Type;
  D3D12_RAYTRACING_GEOMETRY_FLAGS Flags;
  union {
    struct {
      D3D12_GPU_VIRTUAL_ADDRESS Transform3x4;
      DXGI_FORMAT                IndexFormat;
      DXGI_FORMAT                VertexFormat;
      UINT                       IndexCount;
      UINT                       VertexCount;
      D3D12_RAYTRACING_GEOMETRY_TRIANGLES_FLAGS Flags;
    } Triangles;
    struct {
      D3D12_GPU_VIRTUAL_ADDRESS Transform3x4;
      DXGI_FORMAT                IndexFormat;
      DXGI_FORMAT                VertexFormat;
      UINT                       Width;
      UINT                       Height;
      UINT                       Depth;
      UINT                       RowPitch;
      UINT                       SlicePitch;
    } ProceduralAabbs;
    struct {
      D3D12_GPU_VIRTUAL_ADDRESS Transform3x4;
      DXGI_FORMAT                IndexFormat;
      DXGI_FORMAT                VertexFormat;
      UINT                       Width;
      UINT                       Height;
      BYTE                       Depth;
      D3D12_RAYTRACING_GEOMETRY_SPHERES_FLAGS Flags;
    } ProceduralSpheres;
  };
} D3D12_RAYTRACING_GEOMETRY_DESC;

结构体成员的含义如下:

  •  Type: 枚举类型,指定几何体的类型,可以是以下值之一:

  - D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES: 表示三角形几何体。
  - D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS: 表示程序化边界体几何体。
  - D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_TRIANGLES: 表示程序化三角形几何体。

  •  Flags: 位掩码,用于指定几何体的标志,可以是以下值之一或它们的组合:

  - D3D12_RAYTRACING_GEOMETRY_FLAG_NONE: 无标志。
  - D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE: 表示几何体是不透明的。
  - D3D12_RAYTRACING_GEOMETRY_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION: 表示光线与几何体相交时不触发任何命中组的重复调用。

  •  Triangles: 包含三角形几何体的信息,当 Type 为 D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES 时使用。

  - Transform3x4: 一个 3x4 的变换矩阵的 GPU 虚拟地址。
  - IndexFormat: 枚举类型,表示索引的格式,可以是 DXGI_FORMAT_R16_UINT 或 DXGI_FORMAT_R32_UINT。
  - VertexFormat: 枚举类型,表示顶点的格式。
  - IndexCount: 索引的数量。
  - VertexCount: 顶点的数量。
  - Flags: 位掩码,用于指定三角形几何体的标志。

  •  ProceduralAabbs: 包含程序化边界体几何体的信息,当 Type 为 D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS 时使用。

  - Transform3x4: 一个 3x4 的变换矩阵的 GPU 虚拟地址。
  - IndexFormat: 枚举类型,表示索引的格式,可以是 DXGI_FORMAT_R16_UINT 或 DXGI_FORMAT_R32_UINT。
  - VertexFormat: 枚举类型,表示顶点的格式。
  - Width: 几何体宽度。
  - Height: 几何体高度。
  - Depth: 几何体深度。
  - RowPitch: 几何体每行的字节数。
  - SlicePitch: 几何体每层的字节数。

  •  ProceduralSpheres: 包含程序化球体几何体的信息,当 Type 为 D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_TRIANGLES 时使用。

  - Transform3x4: 一个 3x4 的变换矩阵的 GPU 虚拟地址。
  - IndexFormat: 枚举类型,表示索引的格式,可以是 DXGI_FORMAT_R16_UINT 或 DXGI_FORMAT_R32_UINT。
  - VertexFormat: 枚举类型,表示顶点的格式。
  - Width: 球体的直径。
  - Height: 未使用。
  - Depth: 未使用。
  - Flags: 位掩码,用于指定球体几何体的标志。

这个结构体用于在创建射线追踪的加速结构时描述几何体的属性,包括三角形几何体和程序化几何体。通过使用这个结构体,你可以指定几何体的类型、变换矩阵、顶点和索引信息等。


转载请注明出处:http://www.pingtaimeng.com/article/detail/25969/Win32 API/D3d12.h/D3D12_RAYTRACING_GEOMETRY_DESC