Как добавить функцию в цикл, хотя кости в шейдере фрагментов

#function #loops #fragment #fragment-shader

Вопрос:

Это мой первый пост о stackoverflow. Я новичок в написании фрагментов и вершинных шейдеров. Мой шейдер запущен и работает, и теперь я пытаюсь оптимизировать некоторые из них. Я пытаюсь свести эти шесть строк кода в функцию, в которую я могу передавать значения. Я новичок в программировании шейдеров вершин и фрагментов, и мне нужна небольшая помощь в понимании того, как я должен настроить функцию.

 {

    float HandPinky0ConIntensity = lerp(0, 10, _HandPinkyConfidence0);          
    float3 maskConfidenceHandPinky0 = ( ( i.worldPos - _HandPinky0Pos ) / _ConfidenceMaskRange * _HandPinky0MaskAdjust); //size and position of mask
    float dotValueLineMaskHandPinky0 = clamp(dot(maskConfidenceHandPinky0 , maskConfidenceHandPinky0 ) , 0.0 , 1.0 );
    float sphereMaskLineMaskHandPinky0 = pow( dotValueLineMaskHandPinky0 , _OutlineMaskFalloff );           
    float3 spheremaskConfidenceHandPinky0 = saturate(1.0-sphereMaskLineMaskHandPinky0) * HandPinky0ConIntensity;    
    float3 outConfidenceHandPinky0 = spheremaskConfidenceHandPinky0;
    
}
 

Я хочу написать функцию, которая принимает _HandPinkyConfidence0, _HandPinky0Pos, _ConfidenceMaskRange, _HandPinky0MaskAdjust и которая в конечном итоге проходит через все кости, в данном случае кости мизинца. Таким образом, мне нужно всего 5 функций на палец вместо 6 строк кода на кость.

Я не верю, что правильно перехожу к методу. Должен ли я использовать для этого ввод структуры?

 for(int i=0; i<4; i  )

    Confidence(float _HandPinky[i]Confidence, float3 _HandPinky[i]Pos, float _ConfidenceMaskRange, float _HandPinky[i]MaskAdjust)
        
    {
        float HandPinky[i]ConIntensity = lerp(0, 10, _HandPinky0Confidence);            
        float3 maskConfidenceHandPinky[i] = ( ( i.worldPos - _HandPinky[i]Pos ) / _ConfidenceMaskRange * _HandPinky[i]MaskAdjust); //size and position of mask
        float dotValueLineMaskHandPinky[i] = clamp(dot(maskConfidenceHandPinky[i] , maskConfidenceHandPinky[i] ) , 0.0 , 1.0 );
        float sphereMaskLineMaskHandPinky[i] = pow( dotValueLineMaskHandPinky[i] , _OutlineMaskFalloff );           
        float3 spheremaskConfidenceHandPinky[i] = saturate(1.0-sphereMaskLineMaskHandPinky[i]) * HandPinky[i]ConIntensity;  
        float3 outConfidenceHandPinky[i] = spheremaskConfidenceHandPinky[i];

        return outConfidenceHandPinky[i];
}
 

Спасибо вам за вашу помощь!