@zephyr3d/scene 0.9.15 → 0.9.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/engine.js +3 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/asset/assetmanager.js +1 -0
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/camera/camera.js +87 -0
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +152 -4
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/material/meshmaterial.js +8 -1
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/shader/helper.js +6 -0
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/skin.js +263 -0
- package/dist/material/skin.js.map +1 -0
- package/dist/posteffect/compositor.js +3 -0
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/skinsss.js +194 -0
- package/dist/posteffect/skinsss.js.map +1 -0
- package/dist/posteffect/ssr.js +26 -49
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +1 -0
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +2 -40
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +1 -0
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/drawable_mixin.js +1 -0
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +1 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +1 -0
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +1 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/lightpass.js +4 -1
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/render_queue.js +1 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +1 -0
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +41 -41
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +78 -8
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/scene/basesprite.js +1 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +1 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +1 -0
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +6 -4
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +1 -0
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/msdftext.js +1 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +1 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +1 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +1 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +1 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +1 -0
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/shadow.js +504 -1
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/esm.js +1 -0
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +1 -0
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +1 -0
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +181 -0
- package/dist/shadow/pcss.js.map +1 -0
- package/dist/shadow/shader.js +1 -0
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +86 -8
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +1 -0
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +1 -0
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/utility/serialization/manager.js +3 -1
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +1 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +1 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +122 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +1 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +82 -21
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +195 -3
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +1 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +1 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +1 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +1 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +1 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +1 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +1 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/values.js +1 -0
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
|
@@ -33,7 +33,7 @@ const _clusters = [];
|
|
|
33
33
|
const _devicePoolAllocator = new DevicePoolAllocator();
|
|
34
34
|
let _backDepthColorState = null;
|
|
35
35
|
let _frontDepthColorState = null;
|
|
36
|
-
const SURFACE_MRT_FLAGS = MaterialVaryingFlags.SSR_STORE_ROUGHNESS | MaterialVaryingFlags.SSS_STORE_PROFILE | MaterialVaryingFlags.SSS_STORE_DIFFUSE | MaterialVaryingFlags.SSS_STORE_NORMAL | MaterialVaryingFlags.SSS_STORE_TRANSMISSION;
|
|
36
|
+
const SURFACE_MRT_FLAGS = MaterialVaryingFlags.SSR_STORE_ROUGHNESS | MaterialVaryingFlags.SSS_STORE_PROFILE | MaterialVaryingFlags.SSS_STORE_DIFFUSE | MaterialVaryingFlags.SSS_STORE_NORMAL | MaterialVaryingFlags.SSS_STORE_TRANSMISSION | MaterialVaryingFlags.SKIN_SSS_STORE;
|
|
37
37
|
function getClusteredLight() {
|
|
38
38
|
return _clusters.length > 0 ? _clusters.pop() : new ClusteredLight();
|
|
39
39
|
}
|
|
@@ -46,6 +46,9 @@ function getCoreMaterial(material) {
|
|
|
46
46
|
function hasSSSMaterialCore(material) {
|
|
47
47
|
return !!getCoreMaterial(material)?.subsurfaceProfile;
|
|
48
48
|
}
|
|
49
|
+
function hasSkinSSSMaterialCore(material) {
|
|
50
|
+
return !!getCoreMaterial(material)?.skinSSS;
|
|
51
|
+
}
|
|
49
52
|
function renderQueueHasActiveSSS(renderQueue) {
|
|
50
53
|
const itemList = renderQueue.itemList;
|
|
51
54
|
if (!itemList) {
|
|
@@ -64,6 +67,24 @@ function renderQueueHasActiveSSS(renderQueue) {
|
|
|
64
67
|
}
|
|
65
68
|
return false;
|
|
66
69
|
}
|
|
70
|
+
function renderQueueHasActiveSkinSSS(renderQueue) {
|
|
71
|
+
const itemList = renderQueue.itemList;
|
|
72
|
+
if (!itemList) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const lists = [
|
|
76
|
+
...itemList.opaque.lit,
|
|
77
|
+
...itemList.opaque.unlit
|
|
78
|
+
];
|
|
79
|
+
for (const list of lists){
|
|
80
|
+
for (const material of list.materialList){
|
|
81
|
+
if (hasSkinSSSMaterialCore(material)) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
67
88
|
function filterActualSSSItemList(items) {
|
|
68
89
|
return items.filter((item)=>hasSSSMaterialCore(item.drawable.getMaterial?.()));
|
|
69
90
|
}
|
|
@@ -185,6 +206,9 @@ function getLightPassColorAttachments(ctx, colorAttachment) {
|
|
|
185
206
|
if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {
|
|
186
207
|
attachments.push(ctx.SSSTransmissionTexture);
|
|
187
208
|
}
|
|
209
|
+
if (ctx.materialFlags & MaterialVaryingFlags.SKIN_SSS_STORE) {
|
|
210
|
+
attachments.push(ctx.SkinSSSTexture);
|
|
211
|
+
}
|
|
188
212
|
return attachments.length === 1 ? attachments[0] : attachments;
|
|
189
213
|
}
|
|
190
214
|
/**
|
|
@@ -193,6 +217,7 @@ function getLightPassColorAttachments(ctx, colorAttachment) {
|
|
|
193
217
|
*/ function deriveForwardPlusOptions(scene, camera, deviceType, renderQueue) {
|
|
194
218
|
const ssr = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();
|
|
195
219
|
const sss = camera.SSS && renderQueueHasActiveSSS(renderQueue);
|
|
220
|
+
const skinSSS = camera.skinSSS && renderQueueHasActiveSkinSSS(renderQueue);
|
|
196
221
|
const needSceneColor = renderQueue.needSceneColor();
|
|
197
222
|
const needSceneColorWithDepth = renderQueue.needSceneColorWithDepth();
|
|
198
223
|
return {
|
|
@@ -205,7 +230,8 @@ function getLightPassColorAttachments(ctx, colorAttachment) {
|
|
|
205
230
|
needSceneColor,
|
|
206
231
|
needSceneColorWithDepth,
|
|
207
232
|
needsTransmissionDepthForSSR: !!ssr && needSceneColor && !needSceneColorWithDepth,
|
|
208
|
-
sss: !!sss
|
|
233
|
+
sss: !!sss,
|
|
234
|
+
skinSSS: !!skinSSS
|
|
209
235
|
};
|
|
210
236
|
}
|
|
211
237
|
// ─── Forward+ Graph Builder ─────────────────────────────────────────
|
|
@@ -229,6 +255,7 @@ function getLightPassColorAttachments(ctx, colorAttachment) {
|
|
|
229
255
|
function buildForwardPlusGraphInternal(graph, ctx, renderQueue, options) {
|
|
230
256
|
const backbuffer = graph.importTexture('backbuffer');
|
|
231
257
|
ctx.SSS = !!options.sss;
|
|
258
|
+
ctx.SkinSSSTexture = null;
|
|
232
259
|
// Shared mutable frame state
|
|
233
260
|
const frame = {
|
|
234
261
|
ctx,
|
|
@@ -348,6 +375,7 @@ function buildForwardPlusGraphInternal(graph, ctx, renderQueue, options) {
|
|
|
348
375
|
const depthHandle = depthPassResult.depthHandle;
|
|
349
376
|
const motionVectorHandle = depthPassResult.motionVectorHandle;
|
|
350
377
|
const renderDepthAttachment = depthPassResult.graphDepthAttachmentHandle ?? depthPassResult.externalDepthAttachment ?? null;
|
|
378
|
+
const useFinalFramebufferAsIntermediate = !!depthPassResult.externalDepthAttachment && depthPassResult.externalDepthAttachment === ctx.finalFramebuffer?.getDepthAttachment();
|
|
351
379
|
let preLightTransmissionDepthToken;
|
|
352
380
|
if (options.needsTransmissionDepthForSSR) {
|
|
353
381
|
preLightTransmissionDepthToken = graph.addPass('TransmissionDepthForSSR', (builder)=>{
|
|
@@ -534,7 +562,8 @@ function buildForwardPlusGraphInternal(graph, ctx, renderQueue, options) {
|
|
|
534
562
|
if (writeSSSDiffuse && writeSSSTransmission && includeSSRSurfaceMRT && getSSSLightingTextureFormat(ctx, 2, includeSSRSurfaceMRT) !== ctx.colorFormat) {
|
|
535
563
|
writeSSSTransmission = false;
|
|
536
564
|
}
|
|
537
|
-
const
|
|
565
|
+
const writeSkinSSS = options.skinSSS;
|
|
566
|
+
const sssLightingAttachmentCount = (writeSSSDiffuse ? 1 : 0) + (writeSSSTransmission ? 1 : 0) + (writeSkinSSS ? 1 : 0);
|
|
538
567
|
const sssLightingFormat = getSSSLightingTextureFormat(ctx, sssLightingAttachmentCount, includeSSRSurfaceMRT);
|
|
539
568
|
const sssDiffuseHandle = writeSSSDiffuse ? builder.createTexture({
|
|
540
569
|
format: sssLightingFormat,
|
|
@@ -544,7 +573,10 @@ function buildForwardPlusGraphInternal(graph, ctx, renderQueue, options) {
|
|
|
544
573
|
format: sssLightingFormat,
|
|
545
574
|
label: 'sssTransmission'
|
|
546
575
|
}) : undefined;
|
|
547
|
-
const
|
|
576
|
+
const skinSSSHandle = writeSkinSSS ? builder.createTexture({
|
|
577
|
+
format: sssLightingFormat,
|
|
578
|
+
label: 'skinSSS'
|
|
579
|
+
}) : undefined;
|
|
548
580
|
const sceneColorFramebufferHandle = useFinalFramebufferAsIntermediate ? undefined : builder.createFramebuffer({
|
|
549
581
|
label: 'SceneColorFramebuffer',
|
|
550
582
|
width: ctx.renderWidth,
|
|
@@ -575,6 +607,7 @@ function buildForwardPlusGraphInternal(graph, ctx, renderQueue, options) {
|
|
|
575
607
|
}
|
|
576
608
|
ctx.SSSDiffuseTexture = sssDiffuseHandle ? rgCtx.getTexture(sssDiffuseHandle) : null;
|
|
577
609
|
ctx.SSSTransmissionTexture = sssTransmissionHandle ? rgCtx.getTexture(sssTransmissionHandle) : null;
|
|
610
|
+
ctx.SkinSSSTexture = skinSSSHandle ? rgCtx.getTexture(skinSSSHandle) : null;
|
|
578
611
|
const renderLightPass = ()=>renderMainLightPass(frame, sceneColorTex, sceneColorCopyTex, rgCtx, sceneColorFramebufferHandle, sceneColorCopyFramebufferHandle);
|
|
579
612
|
if (historyManager && lightHistoryReadBindings.length > 0) {
|
|
580
613
|
historyManager.beginReadScope(lightHistoryReadBindings.map((binding)=>({
|
|
@@ -631,19 +664,24 @@ function buildForwardPlusGraphInternal(graph, ctx, renderQueue, options) {
|
|
|
631
664
|
builder.read(binding.handle);
|
|
632
665
|
}
|
|
633
666
|
const outputBackbuffer = builder.write(backbuffer);
|
|
667
|
+
const taaHistoryColorHandle = useFinalFramebufferAsIntermediate ? outputBackbuffer : sceneColorHandle;
|
|
634
668
|
builder.setExecute((rgCtx)=>{
|
|
669
|
+
const renderAndCommitComposite = ()=>{
|
|
670
|
+
renderComposite(frame);
|
|
671
|
+
queueTAAHistoryCommit(frame, rgCtx, historyManager, taaHistoryColorHandle, motionVectorHandle);
|
|
672
|
+
};
|
|
635
673
|
if (historyManager && compositeHistoryReadBindings.length > 0) {
|
|
636
674
|
historyManager.beginReadScope(compositeHistoryReadBindings.map((binding)=>({
|
|
637
675
|
name: binding.name,
|
|
638
676
|
texture: rgCtx.getTexture(binding.handle)
|
|
639
677
|
})));
|
|
640
678
|
try {
|
|
641
|
-
|
|
679
|
+
renderAndCommitComposite();
|
|
642
680
|
} finally{
|
|
643
681
|
historyManager.endReadScope();
|
|
644
682
|
}
|
|
645
683
|
} else {
|
|
646
|
-
|
|
684
|
+
renderAndCommitComposite();
|
|
647
685
|
}
|
|
648
686
|
});
|
|
649
687
|
return outputBackbuffer;
|
|
@@ -702,7 +740,7 @@ function renderForwardSSSProfile(frame, profileFramebuffer, profileTexture, para
|
|
|
702
740
|
ctx.SSRNormalTexture = normalTexture;
|
|
703
741
|
ctx.compositor = null;
|
|
704
742
|
ctx.camera.commandBufferReuse = false;
|
|
705
|
-
ctx.materialFlags = ctx.materialFlags & ~(MaterialVaryingFlags.SSR_STORE_ROUGHNESS | MaterialVaryingFlags.SSS_STORE_PROFILE | MaterialVaryingFlags.SSS_STORE_NORMAL | MaterialVaryingFlags.SSS_STORE_DIFFUSE | MaterialVaryingFlags.SSS_STORE_TRANSMISSION) | profileFlags;
|
|
743
|
+
ctx.materialFlags = ctx.materialFlags & ~(MaterialVaryingFlags.SSR_STORE_ROUGHNESS | MaterialVaryingFlags.SSS_STORE_PROFILE | MaterialVaryingFlags.SSS_STORE_NORMAL | MaterialVaryingFlags.SSS_STORE_DIFFUSE | MaterialVaryingFlags.SSS_STORE_TRANSMISSION | MaterialVaryingFlags.SKIN_SSS_STORE) | profileFlags;
|
|
706
744
|
_scenePass.transmission = false;
|
|
707
745
|
_scenePass.renderOpaque = true;
|
|
708
746
|
_scenePass.renderTransparent = false;
|
|
@@ -932,7 +970,7 @@ function blitToCurrentColorAttachment(ctx, source) {
|
|
|
932
970
|
const device = ctx.device;
|
|
933
971
|
// Use RenderGraph-allocated scene color texture
|
|
934
972
|
const depthTex = frame.depthFramebuffer?.getDepthAttachment();
|
|
935
|
-
ctx.materialFlags &= ~(MaterialVaryingFlags.SSR_STORE_ROUGHNESS | MaterialVaryingFlags.SSS_STORE_PROFILE | MaterialVaryingFlags.SSS_STORE_DIFFUSE | MaterialVaryingFlags.SSS_STORE_NORMAL | MaterialVaryingFlags.SSS_STORE_TRANSMISSION);
|
|
973
|
+
ctx.materialFlags &= ~(MaterialVaryingFlags.SSR_STORE_ROUGHNESS | MaterialVaryingFlags.SSS_STORE_PROFILE | MaterialVaryingFlags.SSS_STORE_DIFFUSE | MaterialVaryingFlags.SSS_STORE_NORMAL | MaterialVaryingFlags.SSS_STORE_TRANSMISSION | MaterialVaryingFlags.SKIN_SSS_STORE);
|
|
936
974
|
if (ctx.SSR) {
|
|
937
975
|
ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;
|
|
938
976
|
}
|
|
@@ -944,6 +982,9 @@ function blitToCurrentColorAttachment(ctx, source) {
|
|
|
944
982
|
ctx.materialFlags |= MaterialVaryingFlags.SSS_STORE_TRANSMISSION;
|
|
945
983
|
}
|
|
946
984
|
}
|
|
985
|
+
if (ctx.SkinSSSTexture) {
|
|
986
|
+
ctx.materialFlags |= MaterialVaryingFlags.SKIN_SSS_STORE;
|
|
987
|
+
}
|
|
947
988
|
if (depthTex === ctx.finalFramebuffer?.getDepthAttachment()) {
|
|
948
989
|
ctx.intermediateFramebuffer = ctx.finalFramebuffer;
|
|
949
990
|
} else if (sceneColorFramebufferHandle && !hasSurfaceMRT(ctx)) {
|
|
@@ -1022,6 +1063,34 @@ function blitToCurrentColorAttachment(ctx, source) {
|
|
|
1022
1063
|
/** @internal */ function renderTransmissionDepthPass(frame, rgCtx) {
|
|
1023
1064
|
renderSceneDepth(frame, frame.depthFramebuffer, rgCtx);
|
|
1024
1065
|
}
|
|
1066
|
+
function queueTAAHistoryCommit(frame, rgCtx, historyManager, colorHandle, motionVectorHandle) {
|
|
1067
|
+
const { ctx } = frame;
|
|
1068
|
+
if (!historyManager?.frameActive || !ctx.camera.TAA || !frame.options.motionVectors || !motionVectorHandle) {
|
|
1069
|
+
return;
|
|
1070
|
+
}
|
|
1071
|
+
const colorTexture = rgCtx.getTexture(colorHandle);
|
|
1072
|
+
const colorSize = {
|
|
1073
|
+
width: colorTexture.width,
|
|
1074
|
+
height: colorTexture.height
|
|
1075
|
+
};
|
|
1076
|
+
historyManager.queueRetainedCommit(RGHistoryResources.TAA_COLOR, {
|
|
1077
|
+
format: colorTexture.format,
|
|
1078
|
+
sizeMode: 'absolute',
|
|
1079
|
+
width: colorTexture.width,
|
|
1080
|
+
height: colorTexture.height
|
|
1081
|
+
}, colorSize, colorTexture);
|
|
1082
|
+
const motionVectorTexture = rgCtx.getTexture(motionVectorHandle);
|
|
1083
|
+
const motionVectorSize = {
|
|
1084
|
+
width: motionVectorTexture.width,
|
|
1085
|
+
height: motionVectorTexture.height
|
|
1086
|
+
};
|
|
1087
|
+
historyManager.queueRetainedCommit(RGHistoryResources.TAA_MOTION_VECTOR, {
|
|
1088
|
+
format: motionVectorTexture.format,
|
|
1089
|
+
sizeMode: 'absolute',
|
|
1090
|
+
width: motionVectorTexture.width,
|
|
1091
|
+
height: motionVectorTexture.height
|
|
1092
|
+
}, motionVectorSize, motionVectorTexture);
|
|
1093
|
+
}
|
|
1025
1094
|
/** @internal */ function renderComposite(frame) {
|
|
1026
1095
|
const { ctx } = frame;
|
|
1027
1096
|
ctx.compositor?.drawPostEffects(ctx, PostEffectLayer.end, ctx.linearDepthTexture);
|
|
@@ -1032,6 +1101,7 @@ function blitToCurrentColorAttachment(ctx, source) {
|
|
|
1032
1101
|
ctx.materialFlags &= ~MaterialVaryingFlags.SSS_STORE_DIFFUSE;
|
|
1033
1102
|
ctx.materialFlags &= ~MaterialVaryingFlags.SSS_STORE_NORMAL;
|
|
1034
1103
|
ctx.materialFlags &= ~MaterialVaryingFlags.SSS_STORE_TRANSMISSION;
|
|
1104
|
+
ctx.materialFlags &= ~MaterialVaryingFlags.SKIN_SSS_STORE;
|
|
1035
1105
|
if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {
|
|
1036
1106
|
const blitter = new CopyBlitter();
|
|
1037
1107
|
blitter.srgbOut = !ctx.finalFramebuffer;
|