Set renderer.outputEncoding = THREE.sRGBEncoding;.
Note that neither of these settings are exported – the expectation is that C4D should do color management correctly. Perhaps it is not.
Based on the result that fully-saturated colors appear the same in C4D, but unsaturated colors do not, I think this is a color management problem. Are these vertex colors, texture colors, material colors, or something else? Could you share the cube glTF shown above? If it’s reloaded into three.js at https://gltf-viewer.donmccurdy.com/ is the glTF shown correctly?
My hunch, unfortunately, is that C4D’s importer color management may be incorrect.
There are two problems here, the emissive color is given in sRGB (it should be Linear-sRGB) and the whole metallic PBR model there is probably not what you intended. I’m not sure if C4D supports unlit exports; Blender does, and that would give the precise match you’re after (+/- tone mapping).
A quick way to ‘fix’ the model would be to load it up in https://gltf.report/, open the script tab, and run the script below:
import { ColorUtils } from '@gltf-transform/core';
import { unlit } from '@gltf-transform/functions';
const defaultMaterial = document.createMaterial();
for (const material of document.getRoot().listMaterials()) {
const color = material.getEmissiveFactor();
ColorUtils.convertSRGBToLinear(color, color);
material.copy(defaultMaterial).setBaseColorFactor([...color, 1]);
}
defaultMaterial.dispose();
await document.transform(unlit());