Будем делать имитацию (иногда тупо маску накладывают просто - но это слишком):
- берем маски этих бликов (чем их больше, тем разнообразнее и естественнее получится эффект)
- берем две точки, между которыми будут висеть блики
- по числу бликов выставляем число инстансов
- в вертексном шейдере по индексу инстанса выставляем на нашем отрезке квад (заодно можно и размер рандомно покрутить)
- во фрагментном тупо рисуем текстуру во весь квад
- не забываем создать металовский пайпалайн с блендингом по типу как ниже, чтобы при наложении засвет усиливался
if let color0 = desc.colorAttachments[0] {
color0.isBlendingEnabled = true
color0.rgbBlendOperation = .add
color0.alphaBlendOperation = .add
color0.sourceRGBBlendFactor = .one
color0.destinationRGBBlendFactor = .one
color0.sourceAlphaBlendFactor = .one
color0.destinationAlphaBlendFactor = .oneMinusSourceAlpha
}
Что можно/нужно добавить
В идеале нужно трекать автоматически самую яркою точку и от нее проводить отрезок для эффекта (у меня анимация захаркожена - потому криво)