Can I set a zero fee to transaction if there is less transaction volume than space in the blocks? I'd like to set a zero fee to transaction when block is spacious.

Is it acceptable and can be confirmed by network, miner on BTC, BCH, BTG ... these chain?
You can set a zero fee in BTC, it is regarded as a dust. The transaction can confirm in the case you have asked about but, if it will confirm is dependant upon the transaction broadcast by the individual nodes, the node may not accept a transaction with fees below a particular level, particularly if that nodes mempool is rather full, and it depends on if miners will include the transaction in a block.

Even if in the past there have been zero fee transactions included in blocks, I would not risk it.