Skip to content

Commit

Permalink
Lit/Standard material vertex shader is now a chunk driven by defines (#…
Browse files Browse the repository at this point in the history
…7381)

Co-authored-by: Martin Valigursky <[email protected]>
  • Loading branch information
mvaligursky and Martin Valigursky authored Feb 26, 2025
1 parent 19d45fb commit 2c2b24d
Show file tree
Hide file tree
Showing 15 changed files with 274 additions and 221 deletions.
2 changes: 1 addition & 1 deletion src/core/preprocessor.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ class Preprocessor {
// replace all instances of the injected defines with the value itself
const lines = source.split('\n');
injectDefines.forEach((value, key) => {
const regex = new RegExp(`\\b${key}\\b`, 'g');
const regex = new RegExp(key, 'g');
for (let i = 0; i < lines.length; i++) {

// replace them on lines that do not contain a preprocessor directive (the define itself for example)
Expand Down
3 changes: 1 addition & 2 deletions src/framework/lightmapper/lightmapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -236,8 +236,7 @@ class Lightmapper {
const material = new StandardMaterial();
material.name = `lmMaterial-pass:${pass}-ambient:${addAmbient}`;
material.chunks.APIVersion = CHUNKAPI_1_65;
const transformDefines = '#define UV1LAYOUT\n';
material.chunks.transformVS = transformDefines + shaderChunks.transformVS; // draw into UV1 texture space
material.setDefine('UV1LAYOUT', ''); // draw into UV1 texture space

if (pass === PASS_COLOR) {
let bakeLmEndChunk = shaderChunksLightmapper.bakeLmEndPS; // encode to RGBM
Expand Down
16 changes: 6 additions & 10 deletions src/scene/shader-lib/chunks-wgsl/chunks-wgsl.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@
// import aoSpecOccConstSimplePS from './lit/frag/aoSpecOccConstSimple.js';
// import aoSpecOccSimplePS from './lit/frag/aoSpecOccSimple.js';
// import basePS from './lit/frag/base.js';
// import baseVS from './lit/vert/base.js';
// import baseNineSlicedPS from './lit/frag/baseNineSliced.js';
// import baseNineSlicedVS from './lit/vert/baseNineSliced.js';
// import baseNineSlicedTiledPS from './lit/frag/baseNineSlicedTiled.js';
// import bayerPS from './common/frag/bayer.js';
// import blurVSMPS from './lit/frag/blurVSM.js';
Expand All @@ -37,7 +35,6 @@ import decodePS from './common/frag/decode.js';
// import emissivePS from './standard/frag/emissive.js';
// import encodePS from './common/frag/encode.js';
// import endPS from './lit/frag/end.js';
// import endVS from './lit/vert/end.js';
import envAtlasPS from './common/frag/envAtlas.js';
// import envConstPS from './common/frag/envConst.js';
import envMultiplyPS from './common/frag/envMultiply.js';
Expand Down Expand Up @@ -83,6 +80,7 @@ import immediateLineVS from './internal/vert/immediateLine.js';
// import lightSpecularBlinnPS from './lit/frag/lightSpecularBlinn.js';
// import lightSheenPS from './lit/frag/lightSheen.js';
// import linearizeDepthPS from './common/frag/linearizeDepth.js';
// import litMainVS from './lit/vert/litMain.js';
// import litShaderArgsPS from './standard/frag/litShaderArgs.js';
// import ltcPS from './lit/frag/ltc.js';
// import metalnessPS from './standard/frag/metalness.js';
Expand Down Expand Up @@ -176,7 +174,6 @@ import sphericalPS from './common/frag/spherical.js';
// import specularityFactorPS from './standard/frag/specularityFactor.js';
// import spotPS from './lit/frag/spot.js';
// import startPS from './lit/frag/start.js';
// import startVS from './lit/vert/start.js';
// import startNineSlicedPS from './lit/frag/startNineSliced.js';
// import startNineSlicedTiledPS from './lit/frag/startNineSlicedTiled.js';
// import tangentBinormalVS from './lit/vert/tangentBinormal.js';
Expand All @@ -199,8 +196,9 @@ import tonemappingNonePS from './common/frag/tonemapping/tonemappingNone.js';
// import twoSidedLightingPS from './lit/frag/twoSidedLighting.js';
// import uv0VS from './lit/vert/uv0.js';
// import uv1VS from './lit/vert/uv1.js';
// import uvTransformPS from './lit/vert/uvTransform.js';
// import uvTransformUniformsPS from './lit/vert/uvTransformUniforms.js';
// import viewDirPS from './lit/frag/viewDir.js';
// import viewNormalVS from './lit/vert/viewNormal.js';
// import webgpuPS from '../../../platform/graphics/shader-chunks/frag/webgpu.js';
// import webgpuVS from '../../../platform/graphics/shader-chunks/vert/webgpu.js';

Expand All @@ -223,9 +221,7 @@ const shaderChunksWGSL = {
// aoSpecOccConstSimplePS,
// aoSpecOccSimplePS,
// basePS,
// baseVS,
// baseNineSlicedPS,
// baseNineSlicedVS,
// baseNineSlicedTiledPS,
// bayerPS,
// blurVSMPS,
Expand All @@ -250,7 +246,6 @@ const shaderChunksWGSL = {
// emissivePS,
// encodePS,
// endPS,
// endVS,
envAtlasPS,
// envConstPS,
envMultiplyPS,
Expand Down Expand Up @@ -297,6 +292,7 @@ const shaderChunksWGSL = {
// lightSpecularBlinnPS,
// lightSheenPS,
// linearizeDepthPS,
// litMainVS,
// litShaderArgsPS,
// ltcPS,
// metalnessPS,
Expand Down Expand Up @@ -390,7 +386,6 @@ const shaderChunksWGSL = {
// specularityFactorPS,
// spotPS,
// startPS,
// startVS,
// startNineSlicedPS,
// startNineSlicedTiledPS,
// tangentBinormalVS,
Expand All @@ -413,8 +408,9 @@ const shaderChunksWGSL = {
// twoSidedLightingPS,
// uv0VS,
// uv1VS,
// uvTransformPS,
// uvTransformUniformsPS,
// viewDirPS,
// viewNormalVS,
// webgpuPS,
// webgpuVS
};
Expand Down
7 changes: 6 additions & 1 deletion src/scene/shader-lib/chunks/chunk-validation.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,12 @@ const removedChunks = {
shadowEVSMnPS: CHUNKAPI_2_6,
shadowVSM_commonPS: CHUNKAPI_2_6,
shadowStandardPS: CHUNKAPI_2_6,
shadowStandardGL2PS: CHUNKAPI_2_6
shadowStandardGL2PS: CHUNKAPI_2_6,
startVS: CHUNKAPI_2_6,
endVS: CHUNKAPI_2_6,
baseVS: CHUNKAPI_2_6,
baseNineSlicedVS: CHUNKAPI_2_6,
viewNormalVS: CHUNKAPI_2_6
};

// compare two "major.minor" semantic version strings and return true if a is a smaller version than b.
Expand Down
16 changes: 6 additions & 10 deletions src/scene/shader-lib/chunks/chunks.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ import aoSpecOccConstPS from './lit/frag/aoSpecOccConst.js';
import aoSpecOccConstSimplePS from './lit/frag/aoSpecOccConstSimple.js';
import aoSpecOccSimplePS from './lit/frag/aoSpecOccSimple.js';
import basePS from './lit/frag/base.js';
import baseVS from './lit/vert/base.js';
import baseNineSlicedPS from './lit/frag/baseNineSliced.js';
import baseNineSlicedVS from './lit/vert/baseNineSliced.js';
import baseNineSlicedTiledPS from './lit/frag/baseNineSlicedTiled.js';
import bayerPS from './common/frag/bayer.js';
import blurVSMPS from './lit/frag/blurVSM.js';
Expand All @@ -37,7 +35,6 @@ import diffuseDetailMapPS from './standard/frag/diffuseDetailMap.js';
import emissivePS from './standard/frag/emissive.js';
import encodePS from './common/frag/encode.js';
import endPS from './lit/frag/end.js';
import endVS from './lit/vert/end.js';
import envAtlasPS from './common/frag/envAtlas.js';
import envConstPS from './common/frag/envConst.js';
import envMultiplyPS from './common/frag/envMultiply.js';
Expand Down Expand Up @@ -83,6 +80,7 @@ import lightSpecularAnisoGGXPS from './lit/frag/lightSpecularAnisoGGX.js';
import lightSpecularBlinnPS from './lit/frag/lightSpecularBlinn.js';
import lightSheenPS from './lit/frag/lightSheen.js';
import linearizeDepthPS from './common/frag/linearizeDepth.js';
import litMainVS from './lit/vert/litMain.js';
import litShaderArgsPS from './standard/frag/litShaderArgs.js';
import ltcPS from './lit/frag/ltc.js';
import metalnessPS from './standard/frag/metalness.js';
Expand Down Expand Up @@ -176,7 +174,6 @@ import sphericalPS from './common/frag/spherical.js';
import specularityFactorPS from './standard/frag/specularityFactor.js';
import spotPS from './lit/frag/spot.js';
import startPS from './lit/frag/start.js';
import startVS from './lit/vert/start.js';
import startNineSlicedPS from './lit/frag/startNineSliced.js';
import startNineSlicedTiledPS from './lit/frag/startNineSlicedTiled.js';
import tangentBinormalVS from './lit/vert/tangentBinormal.js';
Expand All @@ -199,8 +196,9 @@ import transmissionPS from './standard/frag/transmission.js';
import twoSidedLightingPS from './lit/frag/twoSidedLighting.js';
import uv0VS from './lit/vert/uv0.js';
import uv1VS from './lit/vert/uv1.js';
import uvTransformPS from './lit/vert/uvTransform.js';
import uvTransformUniformsPS from './lit/vert/uvTransformUniforms.js';
import viewDirPS from './lit/frag/viewDir.js';
import viewNormalVS from './lit/vert/viewNormal.js';
import webgpuPS from '../../../platform/graphics/shader-chunks/frag/webgpu.js';
import webgpuVS from '../../../platform/graphics/shader-chunks/vert/webgpu.js';

Expand All @@ -223,9 +221,7 @@ const shaderChunks = {
aoSpecOccConstSimplePS,
aoSpecOccSimplePS,
basePS,
baseVS,
baseNineSlicedPS,
baseNineSlicedVS,
baseNineSlicedTiledPS,
bayerPS,
blurVSMPS,
Expand All @@ -250,7 +246,6 @@ const shaderChunks = {
emissivePS,
encodePS,
endPS,
endVS,
envAtlasPS,
envConstPS,
envMultiplyPS,
Expand Down Expand Up @@ -297,6 +292,7 @@ const shaderChunks = {
lightSpecularBlinnPS,
lightSheenPS,
linearizeDepthPS,
litMainVS,
litShaderArgsPS,
ltcPS,
metalnessPS,
Expand Down Expand Up @@ -390,7 +386,6 @@ const shaderChunks = {
specularityFactorPS,
spotPS,
startPS,
startVS,
startNineSlicedPS,
startNineSlicedTiledPS,
tangentBinormalVS,
Expand All @@ -413,8 +408,9 @@ const shaderChunks = {
twoSidedLightingPS,
uv0VS,
uv1VS,
uvTransformPS,
uvTransformUniformsPS,
viewDirPS,
viewNormalVS,
webgpuPS,
webgpuVS
};
Expand Down
11 changes: 0 additions & 11 deletions src/scene/shader-lib/chunks/lit/vert/base.js

This file was deleted.

10 changes: 0 additions & 10 deletions src/scene/shader-lib/chunks/lit/vert/baseNineSliced.js

This file was deleted.

2 changes: 0 additions & 2 deletions src/scene/shader-lib/chunks/lit/vert/end.js

This file was deleted.

104 changes: 104 additions & 0 deletions src/scene/shader-lib/chunks/lit/vert/litMain.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
// main shader of the lit vertex shader
export default /* glsl */`
#ifdef VERTEX_COLOR
attribute vec4 vertex_color;
#endif
vec3 dPositionW;
mat4 dModelMatrix;
#ifdef UV0
attribute vec2 vertex_texCoord0;
#include "uv0VS"
#endif
#ifdef UV1
attribute vec2 vertex_texCoord1;
#include "uv1VS"
#endif
#include "transformCoreVS"
#ifdef NINESLICED
varying vec2 vMask;
varying vec2 vTiledUv;
uniform mediump vec4 innerOffset;
uniform mediump vec2 outerScale;
uniform mediump vec4 atlasRect;
#endif
#ifdef LINEAR_DEPTH
#ifndef VIEWMATRIX
#define VIEWMATRIX
uniform mat4 matrix_view;
#endif
#endif
#include "transformVS"
#ifdef NORMALS
#include "normalCoreVS"
#include "normalVS"
#endif
#ifdef TANGENTS
attribute vec4 vertex_tangent;
#include "tangentBinormalVS"
#endif
// expand uniforms for uv transforms
#include "uvTransformUniformsPS, UV_TRANSFORMS_COUNT"
#ifdef MSDF
#include "msdfVS"
#endif
void main(void) {
gl_Position = getPosition();
vPositionW = getWorldPosition();
#ifdef NORMALS
vNormalW = getNormal();
#endif
#ifdef TANGENTS
vTangentW = getTangent();
vBinormalW = getBinormal();
#elif defined(GGX_SPECULAR)
vObjectSpaceUpW = normalize(dNormalMatrix * vec3(0, 1, 0));
#endif
#ifdef UV0
vec2 uv0 = getUv0();
#ifdef UV0_UNMODIFIED
vUv0 = uv0;
#endif
#endif
#ifdef UV1
vec2 uv1 = getUv1();
#ifdef UV1_UNMODIFIED
vUv1 = uv1;
#endif
#endif
// expand code for uv transforms
#include "uvTransformPS, UV_TRANSFORMS_COUNT"
#ifdef VERTEX_COLOR
vVertexColor = vertex_color;
#endif
#ifdef LINEAR_DEPTH
// linear depth from the worldPosition, see getLinearDepth
vLinearDepth = -(matrix_view * vec4(vPositionW, 1.0)).z;
#endif
#ifdef MSDF
unpackMsdfParams();
#endif
}
`;
4 changes: 0 additions & 4 deletions src/scene/shader-lib/chunks/lit/vert/start.js

This file was deleted.

7 changes: 7 additions & 0 deletions src/scene/shader-lib/chunks/lit/vert/uvTransform.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// chunk that generates uv coordinate transformed by uv transform matrix
export default /* glsl */`
vUV_INJECT_TRANSFORM_UV_{i}__INJECT_TRANSFORM_ID_{i} = vec2(
dot(vec3(uv_INJECT_TRANSFORM_UV_{i}, 1), _INJECT_TRANSFORM_NAME_{i}0),
dot(vec3(uv_INJECT_TRANSFORM_UV_{i}, 1), _INJECT_TRANSFORM_NAME_{i}1)
);
`;
5 changes: 5 additions & 0 deletions src/scene/shader-lib/chunks/lit/vert/uvTransformUniforms.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// uniform declaration for uv transform matrix, 3x2 matrix
export default /* glsl */`
uniform vec3 _INJECT_TRANSFORM_NAME_{i}0;
uniform vec3 _INJECT_TRANSFORM_NAME_{i}1;
`;
Loading

0 comments on commit 2c2b24d

Please sign in to comment.