gpu-curtains
Version:
gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.
74 lines (61 loc) • 2.74 kB
JavaScript
import { constants } from '../../chunks/utils/constants.mjs';
import { common } from '../../chunks/utils/common.mjs';
import { toneMappingUtils } from '../../chunks/utils/tone-mapping-utils.mjs';
import { getLightsInfos } from '../../chunks/fragment/head/get-lights-infos.mjs';
import { REIndirectDiffuse } from '../../chunks/fragment/head/RE-indirect-diffuse.mjs';
import { getLambertDirect } from '../../chunks/fragment/head/get-lambert-direct.mjs';
import { getLambertShading } from '../../chunks/fragment/body/get-lambert-shading.mjs';
import { applyToneMapping } from '../../chunks/fragment/body/apply-tone-mapping.mjs';
import { getFragmentInputStruct } from '../../chunks/fragment/head/get-fragment-input-struct.mjs';
import { declareAttributesVars } from '../../chunks/fragment/body/declare-attributes-vars.mjs';
import { declareMaterialVars } from '../../chunks/fragment/body/declare-material-vars.mjs';
import { getBaseColor } from '../../chunks/fragment/body/get-base-color.mjs';
import { getNormalTangentBitangent } from '../../chunks/fragment/body/get-normal-tangent-bitangent.mjs';
import { getEmissiveOcclusion } from '../../chunks/fragment/body/get-emissive-occlusion.mjs';
import { patchAdditionalChunks } from '../../default-material-helpers.mjs';
const getLambertFragmentShaderCode = ({
chunks = null,
toneMapping = "Khronos",
geometry,
additionalVaryings = [],
materialUniform = null,
materialUniformName = "material",
receiveShadows = false,
baseColorTexture = null,
normalTexture = null,
emissiveTexture = null,
occlusionTexture = null
}) => {
chunks = patchAdditionalChunks(chunks);
return (
/* wgsl */
`
${chunks.additionalHead}
${constants}
${common}
${toneMappingUtils}
${getLightsInfos}
${REIndirectDiffuse}
${getLambertDirect}
${getFragmentInputStruct({ geometry, additionalVaryings })}
@fragment fn main(fsInput: FSInput) -> @location(0) vec4f {
var outputColor: vec4f = vec4();
${declareAttributesVars({ geometry, additionalVaryings })}
${declareMaterialVars({ materialUniform, materialUniformName, shadingModel: "Lambert" })}
${getBaseColor({ geometry, baseColorTexture })}
// user defined preliminary contribution
${chunks.preliminaryContribution}
${getNormalTangentBitangent({ geometry, normalTexture })}
${getEmissiveOcclusion({ emissiveTexture, occlusionTexture })}
// lights
${getLambertShading({ receiveShadows })}
outputColor = vec4(outgoingLight, outputColor.a);
outputColor = vec4(outputColor.rgb + emissive, outputColor.a);
// user defined additional contribution
${chunks.additionalContribution}
${applyToneMapping({ toneMapping })}
return outputColor;
}`
);
};
export { getLambertFragmentShaderCode };