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.

82 lines (71 loc) 2.71 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 { applyToneMapping } from "../../chunks/fragment/body/apply-tone-mapping.mjs"; import { patchAdditionalChunks } from "../../default-material-helpers.mjs"; import { getFragmentInputStruct } from "../../chunks/fragment/head/get-fragment-input-struct.mjs"; import { getFragmentOutputStruct } from "../../chunks/fragment/head/get-fragment-output-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 { getEmissiveOcclusion } from "../../chunks/fragment/body/get-emissive-occlusion.mjs"; //#region src/core/shaders/full/fragment/get-unlit-fragment-shader-code.ts /** * Build an unlit fragment shader using the provided options. * @param parameters - {@link UnlitFragmentShaderInputParams} used to build the unlit fragment shader. * @returns - The unlit fragment shader generated based on the provided parameters. */ const getUnlitFragmentShaderCode = ({ chunks = null, toneMapping = "Khronos", outputColorSpace = "srgb", fragmentOutput = { struct: [{ type: "vec4f", name: "color" }], output: ` var output: FSOutput; output.color = outputColor; return output;` }, geometry, additionalVaryings = [], materialUniform = null, materialUniformName = "material", baseColorTexture = null, emissiveTexture = null, occlusionTexture = null }) => { chunks = patchAdditionalChunks(chunks); return ` ${chunks.additionalHead} ${constants} ${common} ${toneMappingUtils} ${getFragmentInputStruct({ geometry, additionalVaryings })} ${getFragmentOutputStruct({ struct: fragmentOutput.struct })} @fragment fn main(fsInput: FSInput) -> FSOutput { var outputColor: vec4f = vec4(); ${declareAttributesVars({ geometry, additionalVaryings })} ${declareMaterialVars({ materialUniform, materialUniformName, shadingModel: "Unlit" })} ${getBaseColor({ geometry, baseColorTexture })} ${getEmissiveOcclusion({ emissiveTexture, occlusionTexture })} // user defined preliminary contribution ${chunks.preliminaryContribution} outputColor = vec4(outputColor.rgb * occlusion + emissive, outputColor.a); // user defined additional contribution ${chunks.additionalContribution} ${applyToneMapping({ toneMapping, outputColorSpace })} ${fragmentOutput.output} }`; }; //#endregion export { getUnlitFragmentShaderCode };