effet de table de recherche 3D

Une table de recherche 3D est un effet à usage général qui est utilisé pour encapsuler n’importe quel effet d’image 1:1 en précalculant la façon dont l’effet mappe les entrées aux sorties pour un sous-ensemble de toutes les valeurs d’entrée.

L’effet de la table de recherche 3D (LUT) modifie une image d’entrée à l’aide de la valeur de couleur RVB de l’image pour indexer une texture 3D, où la texture contient une valeur de sortie précalculée d’un pipeline d’effet arbitraire.

Le LUT 3D doit être chargé dans une ressource de texture GPU afin d’être rendu, ce qui peut être coûteux en fonction de la taille de la texture et des fonctionnalités de l’appareil. Les développeurs d’applications peuvent spécifier le moment auquel payer ce coût à l’aide de la ressource D2D ID2D1LookupTable3D . ID2D1LookupTable3D a les attributs suivants :

  • Fournit une représentation abstraite de la ressource GPU de l’un des graphiques 3D.
  • Selon les fonctionnalités de l’appareil, une texture 2D ou 3D est créée et remplie avec les données LUT fournies.
  • Peut être passé à la propriété de l’effet de LUT 3D pour le rendu.

Le CLSID de cet effet est CLSID _ D2D1LookupTable3D.

Exemple d’image

exemple de sortie d’effet

Exemple de code

//
    // 1. Generate the lookup table data and create an ID2D1LookupTable3D.
    //
 
    // Create a 16x16x16 LUT of arbitrary data type T.
    UINT extents[] = { 16, 16, 16 };
    UINT cElements = extents[0] * extents[1] * extents[2] * 4;
    UINT cbElements = cElements * formatSize;
 
    // Compute the step size in each direction to vary the RGB 
    // channels uniformly over the range [0, 1]
    float steps[] = 
    { 
        1.0f / static_cast<float>(extents[0] - 1),
        1.0f / static_cast<float>(extents[1] - 1),
        1.0f / static_cast<float>(extents[2] - 1),
    };
 
    CArray<BYTE> lutData;
    IFR(lutData.Resize(cbElements));
 
    T* pData = reinterpret_cast<T *>(lutData.GetData());
    T oneValue = ConvertValue<T>(1.0f);
    
    // Generate the LUT by applying an imaging pipeline to RGB values.
    for (UINT iR = 0; iR < extents[2]; iR++)
    {
        for (UINT iG = 0; iG < extents[1]; iG++)
        {
            for (UINT iB = 0; iB < extents[0]; iB++)
            {
                T outputColor[3];
                ApplyPipeline(iR * steps[2], iG * steps[1], iB * steps[0], &outputColor);
 
                pData[0] = outColor[0];
                pData[1] = outColor[1];
                pData[2] = outColor[2];
 
                // Set opaque alpha in the output
                pData[3] = oneValue;
 
                // Advance the pointer
                pData += sizeof(T) * 4;
            }
        }
    }
    
    // Compute the strides of the LUT data.
    UINT strides[2];
    IFR(UIntMult(sizeof(T) * 4, extents[0], &strides[0]));
    IFR(UIntMult(strides[0], extents[1], &strides[1]));
    
    D2D1_BUFFER_PRECISION precision = GetBufferPrecision<T>();
 
    // Create an ID2D1LookupTable3D from the LUT data.
    CComPtr<ID2D1LookupTable3D> sp3dLut;
    IFR(_spEffectContext1->CreateLookupTable3D(
        precision,
        extents,
        lutData.GetData(),
        lutData.GetCount(),
        strides,
        &sp3dLut
        )); 
 
    //
    // 2. To apply the lookup table to an input image, create a LookupTable3D effect
    //    and pass the ID2D1LookupTable3D to the effect as a property.
    //
 
    // Create a 3D LUT effect to render our LUT.
    CComPtr<ID2D1Effect> sp3dLutEffect;
    IFR(pEffectContext->CreateEffect(CLSID_D2D1LookupTable3D, &sp3dLutEffect)); 
 
    // Set the LUT as a property on the effect.
    IFR(sp3dLutEffect->SetValue(D2D1_LOOKUPTABLE3D_PROP_LUT, _spLut));

Propriétés d’effet

Les propriétés de l’effet de table de recherche 3D sont définies par l’énumération d2d1 _ LOOKUPTABLE3D _ prop .

Spécifications

Condition requise Valeur
Client minimal pris en charge Windows 10 [ applications de bureau | Windows applications du windows Store]
Serveur minimal pris en charge Windows 10 [ applications de bureau | Windows applications du windows Store]
En-tête d2d1effects _ 2. h
Bibliothèque d2d1. lib, dxguid. lib