UNPKG

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
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 };