macro personnalisée de shader

macro personnalisée de shader

Nous pouvons ajouter des macros personnalisées dans le shader pour simplifier l'écriture de code de plusieurs branches conditionnelles
Unity est appelé une variante de shader

principe

Unity compile en fait plusieurs variantes de shader différentes en fonction des différentes valeurs des macros que vous définissez
et utilise ensuite une variante spécifique en fonction des conditions

Définir une macro

  • Il y a principalement ces 4 fonctions :

    • #pragma multi_compile
    • #pragma multi_compile_local
    • #pragma shader_feature
    • #pragma shader_feature_local
  • La différence entre multi_compile et shader_feature est
    La macro définie par multi_compile est à utiliser dans votre code, et toutes les variantes combinées seront générées lors de l'empaquetage
    La macro définie par shader_feature est à utiliser dans le matériau. Lors du packaging, seules les variantes utilisées dans le matériau seront empaquetées

  • La différence entre avoir un suffixe local et ne pas en avoir est
    Sans suffixe local, des macros globales sont définies, ce qui signifie que d'autres fichiers de shader peuvent également être utilisés. Il existe jusqu'à 256 fichiers shader dans l'ensemble du projet. , Unity en utilise 64 en interne
    Ceux avec un suffixe local sont définis comme des macros locales, qui ne peuvent être utilisées que dans ce fichier shader, et chaque fichier est limité à 64

  • Utilisation multi_compile (les 3 autres sont similaires)
    HLSLPROGRAM est placé dans le bloc de code HLSL
    #pragma multi_compile A B C Définir des macros mutuellement exclusives dans un line , A B C ne peut avoir qu'une seule définition, la valeur par défaut est A
    #pragma multi_compile __ D E 2 traits de soulignement indiquent qu'aucun des deux n'est défini, ces 2 lignes produiront 3x

おすすめ

転載: blog.csdn.net/qmladm/article/details/131030751