Aller au contenu
Exemple de code d’appel direct avec accélération Unity Burst

Exemple de code d’appel direct avec accélération Unity Burst

2024-11-05 06:20

La documentation et les exemples sur Burst sont rares. En plus de l’appel via les Jobs, il est également possible de l’appeler directement.

Voici un exemple de code pour générer les UVs de tous les sommets d’une sphère, avec une accélération d’environ 50% grâce à Burst.

using System.Runtime.CompilerServices;
using Unity.Burst;
using Unity.Mathematics;

[BurstCompile]
public static class ParallelMethods
{
    [MethodImpl(MethodImplOptions.NoInlining)]
    [BurstCompile]
    public static unsafe void GenUVs([NoAlias] in float3* vertices, [NoAlias] float2* uvs,
        int count)
    {
        for (var i = 0; i < count; i += 1)
        {
            // Unity.Burst.CompilerServices.Loop.ExpectVectorized(); Inefficace

            var p = vertices[i];
            var longitude = math.atan2(p.z, p.x);
            var latitude = math.asin(p.y);
            uvs[i].x = longitude / math.PI2 + 0.5f;
            uvs[i].y = latitude / math.PI + 0.5f;
        }
    }

La méthode d’appel direct est la suivante :

void Update()
{
    UVs = new Vector2[vertices.Length];
    unsafe
    {
        fixed (Vector3* vts = vertices)
        {
            fixed (Vector2* uvs = UVs)
            {
                ParallelMethods.GenUVs((float3*)vts, (float2*)uvs, vertices.Length);
            }
        }
    }
}

[NoAlias] est utilisé pour indiquer à Burst que ce pointeur ne chevauche pas avec d’autres pointeurs, permettant ainsi une vectorisation en toute sécurité. Avec NativeArray, cette vérification est automatique et inutile. Ici, comme nous utilisons nos propres pointeurs, il est préférable de l’ajouter.

Burst impose de nombreuses restrictions pour générer du code vectorisé et offre un faible niveau de parallélisme. Il est donc recommandé d’utiliser plutôt un Compute Shader, ce qui peut encore accélérer de 50%.

Dernière modification
hugo-builder
hugo-builder · · 自动翻译 about.md 2... · 248520b
Autres contributeurs
...