The shape of the LED current ramp isn't that important to human perception, it is the maximum slew rate — fastest rate of change — that really matters.
Seeing that the OP has around six chains of LEDs they want to turn on and off "slowly", I think I'd use a
TI TPS922050D2DGN per chain, so that each chain has a 24V input, GND, and a 5V active-high enable signal. One could use e.g. shielded phone cable, two twisted pairs within a common shield, for longer runs.
The active-high enable signal would be connected to a 2.5V regulator enable pin, say
Analog ADP121, whose output would be connected to a low pass filter (say, three 33kΩ resistors in series, each followed by a 1µF capacitor to ground, for about one-second turn-on/turn-off time), and to the analog DIM pin of the TPS922050D2.
The LED control circuitry costs about 2€ per LED chain — TPS922050D2 is 0.435€ apiece in lots of ten at Digikey, 0.836€ apiece in lots of ten at Mouser; the inductor depends on the current each LED chain needs, with the calculation procedure described in the datasheet linked to above. Because you can adjust the turn-on/off time per chain, you can do stuff like have them turn on/off almost sequentially, for an even more pleasing effect. With a bit of care in the design of the control PCBs, you can have them made and assembled in sets of ten, leaving out just the parts that vary (like the RC low-pass filter and the sense resistor setting the maximum current). After populating and testing the board and soldering the wires (to connectors) to it, use UV-curing nail polish to protect the PCB and components from moisture.
As you can see, one can definitely use "modern" ICs to get this kind of stuff done pretty effectively, without any microcontrollers or PWM at all. Also, TPS92205xD2 are definitely not the only LED drivers with an analog input control pin you can find; there are many, many alternatives from several manufacturers that will work well. You only need a microcontroller if you want to use the PWM controlled one LED drivers and a programmable ramp; I recommend the 3·(
t/
T)² - 2·(
t/
T)³ one for turn-on during 0≤
t≤
T, and 1 - 3·(t/T)² + 2×(t/T)³ for turn-off during 0≤
t≤
T in that case, which I find particularly pleasing. Note that many of the cheap (~0.5€ in singles) microcontrollers easily programmed in the Arduino environment can achieve this, so it really would not affect the price much.