Я хотел бы знать, как лучше всего использовать металличность с помощью 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 материалов относится к тому, чего я не могу найти