Металльность в ShaderMaterial в тройках - PullRequest
0 голосов
/ 28 января 2020

Я хотел бы знать, как лучше всего использовать металличность с помощью ShaderMaterial. С другими тремя js материалами я могу добавить металличность в качестве параметра и изменить его с 0 на 1 и посмотреть результаты, но в данный момент я пытаюсь реализовать его в своем ShaderMaterial. Я явно что-то упускаю, потому что из того, что я понял, когда металличность = 1, диффузный термин равен 0, а зеркальный термин - основной цвет. Это выделенный код (воссоздающий золотой материал):

var materialParameters = {
        cdiff_red: 0.0,
        cdiff_green: 0.0,
        cdiff_blue: 0.0,
        cspec_red: 1.022,
        cspec_green: 0.782,
        cspec_blue: 0.344,
        roughness: 0.5,                     
    }       

    var uniforms = {
        cspec: { type: "v3", value: new THREE.Vector3() },
        cdiff: { type: "v3", value: new THREE.Vector3() },
        roughness: { type: "v3", value: new THREE.Vector3() },          
        spotLightPosition: { type: "v3", value: new THREE.Vector3() },
        clight: { type: "v3", value: new THREE.Vector3() },         
    };

    vs = document.getElementById("vertex").textContent;
    fs = document.getElementById("fragment").textContent;

    ourMaterial = new THREE.ShaderMaterial({ uniforms: uniforms, vertexShader: vs, fragmentShader: fs });

Затем я обновляю униформу и выполняю вычисления в шейдерах фрагментов. Я уже пытался объединить униформу из родных материалов, но я не могу заставить ее работать, что мне не хватает? Я почти уверен, что металличность стандартных трех js материалов относится к тому, чего я не могу найти

...