@zephyr3d/scene 0.9.6 → 0.9.7
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/animation/joint_dynamics/controller.js +92 -32
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +57 -19
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +71 -27
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics_modifier.js +21 -20
- package/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/animation/skeleton.js +7 -10
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/app/engine.js +134 -140
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptregistry.js +47 -16
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +3 -1
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +346 -7
- package/dist/asset/model.js.map +1 -1
- package/dist/avatar/wardrobe.js +20 -16
- package/dist/avatar/wardrobe.js.map +1 -1
- package/dist/camera/camera.js +416 -210
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +1349 -621
- package/dist/index.js +6 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/lambert.js +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +23 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +178 -23
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +4 -4
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +2 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +2 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +63 -16
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +105 -32
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -6
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +1 -1
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +276 -65
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +3 -3
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js +2 -2
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/mtoon.js +574 -0
- package/dist/material/mtoon.js.map +1 -0
- package/dist/material/pbrblueprint.js +499 -336
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +118 -100
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +324 -294
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +812 -0
- package/dist/material/subsurfaceprofile.js.map +1 -0
- package/dist/material/unlit.js +1 -1
- package/dist/material/unlit.js.map +1 -1
- package/dist/posteffect/compositor.js +46 -11
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/ssr.js +422 -96
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +1053 -0
- package/dist/posteffect/sss.js.map +1 -0
- package/dist/posteffect/taa.js +61 -60
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +63 -12
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +6 -5
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +1 -5
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +2 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +2 -1
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +2 -1
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +2 -1
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/lightpass.js +110 -23
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/render_queue.js +51 -8
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +80 -66
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +8 -0
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +481 -95
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +55 -0
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +3 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +10 -4
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sky.js +31 -1
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +23 -5
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +4 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -1
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +11 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +21 -3
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +29 -14
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +5 -2
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +5 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +3 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +6 -5
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +4 -2
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +2 -1
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +4 -2
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +4 -2
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/shadow.js +26 -393
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/esm.js +112 -12
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +2 -2
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +19 -10
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +58 -7
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +6 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +229 -0
- package/dist/shadow/shadow_region.js.map +1 -0
- package/dist/shadow/shadowmapper.js +67 -59
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/vsm.js +45 -19
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +8 -8
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +31 -4
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +1 -17
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +327 -359
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +5 -2
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -1
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +249 -54
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +37 -1
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +42 -3
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1112 -646
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +7 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +31 -12
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -1
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +3 -1
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +18 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -3
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +5 -2
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +3 -1
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +4 -1
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +6 -0
- package/dist/utility/textures/ltcdata.js.map +1 -0
- package/dist/utility/textures/ltclut.js +61 -0
- package/dist/utility/textures/ltclut.js.map +1 -0
- package/dist/values.js +9 -1
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightpass.js","sources":["../../src/render/lightpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { RenderItemListBundle, RenderQueue } from './render_queue';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { PostEffectLayer } from '../posteffect/posteffect';\r\nimport type { Camera } from '../camera';\r\n\r\n/**\r\n * Forward render pass\r\n * @internal\r\n */\r\nexport class LightPass extends RenderPass {\r\n /** @internal */\r\n protected _shadowMapHash: Nullable<string>;\r\n /** @internal */\r\n protected _transmission: boolean;\r\n /**\r\n * Creates an instance of ForwardRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_LIGHT);\r\n this._shadowMapHash = null;\r\n this._transmission = false;\r\n this._clearColor = Vector4.zero();\r\n }\r\n /** @internal */\r\n get transmission() {\r\n return this._transmission;\r\n }\r\n set transmission(val) {\r\n this._transmission = val;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext, camera: Camera) {\r\n return `${this._shadowMapHash}:${ctx.lightBlending ? 1 : 0}:${camera.oit?.calculateHash() ?? ''}:${ctx.env!.getHash(\r\n ctx\r\n )}:${ctx.materialFlags}:${ctx.linearDepthTexture?.uid ?? 0}:${ctx.sceneColorTexture?.uid ?? 0}:${\r\n ctx.HiZTexture?.uid ?? 0\r\n }`;\r\n }\r\n /** @internal */\r\n protected renderLightPass(\r\n ctx: DrawContext,\r\n camera: Camera,\r\n itemList: RenderItemListBundle,\r\n lights: PunctualLight[],\r\n flags: any\r\n ) {\r\n const baseLightPass = !ctx.lightBlending;\r\n ctx.drawEnvLight =\r\n baseLightPass &&\r\n ctx.env!.light.type !== 'none' &&\r\n (ctx.env!.light.envLight.hasRadiance() || ctx.env!.light.envLight.hasIrradiance());\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx, camera);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n if (!flags.cameraSet[ctx.renderPassHash]) {\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, camera, !!ctx.device.getFramebuffer());\r\n flags.cameraSet[ctx.renderPassHash] = 1;\r\n }\r\n if (ctx.currentShadowLight) {\r\n ShaderHelper.setLightUniformsShadow(bindGroup, ctx, lights[0]);\r\n } else {\r\n if (!flags.lightSet[ctx.renderPassHash]) {\r\n ShaderHelper.setLightUniforms(\r\n bindGroup,\r\n ctx,\r\n ctx.clusteredLight!.clusterParam,\r\n ctx.clusteredLight!.countParam,\r\n ctx.clusteredLight!.lightBuffer!,\r\n ctx.clusteredLight!.lightIndexTexture!\r\n );\r\n flags.lightSet[ctx.renderPassHash] = 1;\r\n }\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG && !flags.fogSet[ctx.renderPassHash]) {\r\n ShaderHelper.setFogUniforms(\r\n bindGroup,\r\n ctx.env!.sky.skyType === 'scatter' ? 1 : 0,\r\n ctx.env!.sky.mappedFogType,\r\n baseLightPass ? 0 : 1,\r\n ctx.env!.sky.atmosphereParams,\r\n ctx.env!.sky.heightFogParams,\r\n ctx.env!.sky.getAerialPerspectiveLUT(ctx),\r\n ctx.env!.sky.getSkyDistantLightLUT(ctx)\r\n );\r\n flags.fogSet[ctx.renderPassHash] = 1;\r\n }\r\n ctx.device.setBindGroup(0, bindGroup);\r\n const reverseWinding = camera.worldMatrixDet < 0;\r\n for (const lit of itemList.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n if (!ctx.lightBlending) {\r\n for (const unlit of itemList.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, camera: Camera, renderQueue: RenderQueue) {\r\n ctx.renderPassHash = null;\r\n ctx.env = ctx.scene.env;\r\n ctx.drawEnvLight = false;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n const ssr = !!(ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS);\r\n const tmpFramebuffer = ssr\r\n ? ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n ctx.device.getDrawingBufferWidth(),\r\n ctx.device.getDrawingBufferHeight(),\r\n ctx.device.getFramebuffer()!.getColorAttachments()[0],\r\n ctx.device.getFramebuffer()!.getDepthAttachment()\r\n )\r\n : null;\r\n const oit =\r\n renderQueue.drawTransparent && camera.oit && camera.oit.supportDevice(ctx.device.type)\r\n ? camera.oit\r\n : null;\r\n if (!oit && renderQueue.drawTransparent) {\r\n renderQueue.sortTransparentItems(camera.getWorldPosition());\r\n }\r\n const flags: any = {\r\n lightSet: {},\r\n cameraSet: {},\r\n fogSet: {}\r\n };\r\n const items = renderQueue.itemList;\r\n const lists = this._transmission\r\n ? [items?.transmission, items?.transmission_trans, items?.transparent]\r\n : [items?.opaque, items?.transparent];\r\n const transparentPass = lists.length - 1;\r\n for (let i = 0; i < lists.length; i++) {\r\n if (lists[i]) {\r\n ctx.queue = i === 0 ? QUEUE_OPAQUE : QUEUE_TRANSPARENT;\r\n ctx.oit = i === 0 || !items ? null : oit;\r\n if ((ctx.queue === QUEUE_TRANSPARENT || this._transmission) && ctx.scene.env.sky.fogPresents) {\r\n ctx.materialFlags |= MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n const numOitPasses = ctx.oit ? ctx.oit.begin(ctx) : 1;\r\n for (let p = 0; p < numOitPasses; p++) {\r\n if (ctx.oit) {\r\n if (!ctx.oit.beginPass(ctx, p)) {\r\n continue;\r\n }\r\n }\r\n let lightIndex = 0;\r\n if (ctx.shadowMapInfo) {\r\n for (const k of ctx.shadowMapInfo.keys()) {\r\n ctx.currentShadowLight = k;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = ctx.shadowMapInfo.get(k)!.shaderHash;\r\n this.renderLightPass(ctx, camera, lists[i]!, [k], flags);\r\n lightIndex++;\r\n }\r\n }\r\n if (lightIndex === 0 || renderQueue.unshadowedLights.length > 0) {\r\n ctx.currentShadowLight = null;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = '';\r\n if (ctx.lightBlending && tmpFramebuffer) {\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n this.renderLightPass(ctx, camera, lists[i]!, renderQueue.unshadowedLights, flags);\r\n if (ctx.lightBlending && tmpFramebuffer) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.endPass(ctx, p);\r\n }\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.end(ctx);\r\n }\r\n ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n if (i === 0 && !ctx.sceneColorTexture) {\r\n if (tmpFramebuffer) {\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n ctx.env.sky.renderSky(ctx);\r\n if (ctx.env.sky.fogPresents) {\r\n ctx.env.sky.renderFog(camera);\r\n }\r\n if (tmpFramebuffer) {\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (!renderQueue.needSceneColor() || ctx.sceneColorTexture) {\r\n if (i === 0 || i === transparentPass) {\r\n ctx.compositor?.drawPostEffects(\r\n ctx,\r\n i === 0 ? PostEffectLayer.opaque : PostEffectLayer.transparent,\r\n ctx.linearDepthTexture!\r\n );\r\n }\r\n }\r\n }\r\n if (tmpFramebuffer) {\r\n ctx.device.pool.releaseFrameBuffer(tmpFramebuffer);\r\n }\r\n }\r\n}\r\n"],"names":["LightPass","RenderPass","RENDER_PASS_TYPE_LIGHT","_shadowMapHash","_transmission","_clearColor","Vector4","zero","transmission","val","_getGlobalBindGroupHash","ctx","camera","lightBlending","oit","calculateHash","env","getHash","materialFlags","linearDepthTexture","uid","sceneColorTexture","HiZTexture","renderLightPass","itemList","lights","flags","baseLightPass","drawEnvLight","light","type","envLight","hasRadiance","hasIrradiance","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","cameraSet","ShaderHelper","setCameraUniforms","device","getFramebuffer","currentShadowLight","setLightUniformsShadow","lightSet","setLightUniforms","clusteredLight","clusterParam","countParam","lightBuffer","lightIndexTexture","MaterialVaryingFlags","APPLY_FOG","fogSet","setFogUniforms","sky","skyType","mappedFogType","atmosphereParams","heightFogParams","getAerialPerspectiveLUT","getSkyDistantLightLUT","setBindGroup","reverseWinding","worldMatrixDet","lit","drawItemList","unlit","renderQueue","scene","flip","isAutoFlip","ssr","SSR_STORE_ROUGHNESS","tmpFramebuffer","pool","fetchTemporalFramebuffer","getDrawingBufferWidth","getDrawingBufferHeight","getColorAttachments","getDepthAttachment","drawTransparent","supportDevice","sortTransparentItems","getWorldPosition","items","lists","transmission_trans","transparent","opaque","transparentPass","length","i","queue","QUEUE_OPAQUE","QUEUE_TRANSPARENT","fogPresents","numOitPasses","begin","p","beginPass","lightIndex","shadowMapInfo","k","keys","get","shaderHash","unshadowedLights","pushDeviceStates","setFramebuffer","popDeviceStates","endPass","end","renderSky","renderFog","needSceneColor","compositor","drawPostEffects","PostEffectLayer","releaseFrameBuffer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lightpass.js","sources":["../../src/render/lightpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\nimport { MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\nimport type { Nullable } from '@zephyr3d/base';\nimport { Vector4 } from '@zephyr3d/base';\nimport type { RenderItemListBundle, RenderQueue } from './render_queue';\nimport type { PunctualLight } from '../scene/light';\nimport type { DrawContext } from './drawable';\nimport { ShaderHelper } from '../material/shader/helper';\nimport { PostEffectLayer } from '../posteffect/posteffect';\nimport type { Camera } from '../camera';\n\nconst SURFACE_MRT_FLAGS =\n MaterialVaryingFlags.SSR_STORE_ROUGHNESS |\n MaterialVaryingFlags.SSS_STORE_PROFILE |\n MaterialVaryingFlags.SSS_STORE_DIFFUSE |\n MaterialVaryingFlags.SSS_STORE_NORMAL |\n MaterialVaryingFlags.SSS_STORE_TRANSMISSION;\nconst ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS =\n MaterialVaryingFlags.SSR_STORE_ROUGHNESS |\n MaterialVaryingFlags.SSS_STORE_PROFILE |\n MaterialVaryingFlags.SSS_STORE_NORMAL;\n\n/**\n * Forward render pass\n * @internal\n */\nexport class LightPass extends RenderPass {\n /** @internal */\n protected _shadowMapHash: Nullable<string>;\n /** @internal */\n protected _transmission: boolean;\n /** @internal */\n protected _renderOpaque: boolean;\n /** @internal */\n protected _renderTransparent: boolean;\n /**\n * Creates an instance of ForwardRenderPass\n */\n constructor() {\n super(RENDER_PASS_TYPE_LIGHT);\n this._shadowMapHash = null;\n this._transmission = false;\n this._renderOpaque = true;\n this._renderTransparent = true;\n this._clearColor = Vector4.zero();\n }\n /** @internal */\n get transmission() {\n return this._transmission;\n }\n set transmission(val) {\n this._transmission = val;\n }\n /** @internal */\n get renderOpaque() {\n return this._renderOpaque;\n }\n set renderOpaque(val: boolean) {\n this._renderOpaque = !!val;\n }\n /** @internal */\n get renderTransparent() {\n return this._renderTransparent;\n }\n set renderTransparent(val: boolean) {\n this._renderTransparent = !!val;\n }\n /** @internal */\n protected getAdditiveLightPassColorAttachments(ctx: DrawContext, materialFlags: number) {\n const framebuffer = ctx.device.getFramebuffer();\n if (!framebuffer) {\n return null;\n }\n const attachments: any[] = [framebuffer.getColorAttachments()[0]];\n if (materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE) {\n attachments.push(ctx.SSSDiffuseTexture!);\n }\n if (materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {\n attachments.push(ctx.SSSTransmissionTexture!);\n }\n return attachments.length === 1 ? attachments[0] : attachments;\n }\n /** @internal */\n protected selectTransparentOITShadowLight(ctx: DrawContext, renderQueue: RenderQueue) {\n const shadowMapInfo = ctx.shadowMapInfo;\n if (!shadowMapInfo || shadowMapInfo.size === 0) {\n return null;\n }\n if (renderQueue.primaryDirectionalLight && shadowMapInfo.has(renderQueue.primaryDirectionalLight)) {\n return renderQueue.primaryDirectionalLight;\n }\n if (renderQueue.primaryTransmissionLight && shadowMapInfo.has(renderQueue.primaryTransmissionLight)) {\n return renderQueue.primaryTransmissionLight;\n }\n for (const light of renderQueue.shadowedLights) {\n if (shadowMapInfo.has(light)) {\n return light;\n }\n }\n return shadowMapInfo.keys().next().value ?? null;\n }\n /** @internal */\n protected _getGlobalBindGroupHash(ctx: DrawContext, camera: Camera) {\n return `${this._shadowMapHash}:${ctx.currentShadowLight?.runtimeId ?? 0}:${\n ctx.lightBlending ? 1 : 0\n }:${camera.oit?.calculateHash() ?? ''}:${ctx.env!.getHash(\n ctx\n )}:${ctx.materialFlags}:${ctx.linearDepthTexture?.uid ?? 0}:${ctx.sceneColorTexture?.uid ?? 0}:${\n ctx.HiZTexture?.uid ?? 0\n }`;\n }\n /** @internal */\n protected renderLightPass(\n ctx: DrawContext,\n camera: Camera,\n itemList: RenderItemListBundle,\n lights: PunctualLight[],\n flags: any\n ) {\n const baseLightPass = !ctx.lightBlending;\n ctx.drawEnvLight =\n baseLightPass &&\n ctx.env!.light.type !== 'none' &&\n (ctx.env!.light.envLight.hasRadiance() || ctx.env!.light.envLight.hasIrradiance());\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx, camera);\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\n if (!flags.cameraSet[ctx.renderPassHash]) {\n ShaderHelper.setCameraUniforms(bindGroup, ctx, camera, !!ctx.device.getFramebuffer());\n flags.cameraSet[ctx.renderPassHash] = 1;\n }\n if (ctx.currentShadowLight) {\n ShaderHelper.setLightUniformsShadow(bindGroup, ctx, lights[0]);\n } else {\n if (!flags.lightSet[ctx.renderPassHash]) {\n ShaderHelper.setLightUniforms(\n bindGroup,\n ctx,\n ctx.clusteredLight!.clusterParam,\n ctx.clusteredLight!.countParam,\n ctx.clusteredLight!.lightBuffer!,\n ctx.clusteredLight!.lightIndexTexture!\n );\n flags.lightSet[ctx.renderPassHash] = 1;\n }\n }\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG && !flags.fogSet[ctx.renderPassHash]) {\n ShaderHelper.setFogUniforms(\n bindGroup,\n ctx.env!.sky.skyType === 'scatter' ? 1 : 0,\n ctx.env!.sky.mappedFogType,\n baseLightPass ? 0 : 1,\n ctx.env!.sky.atmosphereParams,\n ctx.env!.sky.heightFogParams,\n ctx.env!.sky.getAerialPerspectiveLUT(ctx),\n ctx.env!.sky.getSkyDistantLightLUT(ctx)\n );\n flags.fogSet[ctx.renderPassHash] = 1;\n }\n ctx.device.setBindGroup(0, bindGroup);\n const reverseWinding = camera.worldMatrixDet < 0;\n for (const lit of itemList.lit) {\n this.drawItemList(lit, ctx, reverseWinding);\n }\n if (!ctx.lightBlending) {\n for (const unlit of itemList.unlit) {\n this.drawItemList(unlit, ctx, reverseWinding);\n }\n }\n }\n /** @internal */\n protected renderItems(ctx: DrawContext, camera: Camera, renderQueue: RenderQueue) {\n ctx.renderPassHash = null;\n ctx.env = ctx.scene.env;\n ctx.drawEnvLight = false;\n ctx.flip = this.isAutoFlip(ctx);\n const surfaceMRT = ctx.materialFlags & SURFACE_MRT_FLAGS;\n const additiveOpaqueMaterialFlags = ctx.materialFlags & ~ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS;\n const additiveTransparentMaterialFlags = ctx.materialFlags & ~SURFACE_MRT_FLAGS;\n const tmpFramebuffer = surfaceMRT\n ? ctx.device.pool.fetchTemporalFramebuffer(\n false,\n ctx.device.getDrawingBufferWidth(),\n ctx.device.getDrawingBufferHeight(),\n this.getAdditiveLightPassColorAttachments(ctx, additiveOpaqueMaterialFlags)!,\n ctx.device.getFramebuffer()!.getDepthAttachment()\n )\n : null;\n const needsTransparentSingleColorFramebuffer =\n !!tmpFramebuffer && tmpFramebuffer.getColorAttachments().length > 1;\n const transparentTmpFramebuffer = needsTransparentSingleColorFramebuffer\n ? ctx.device.pool.fetchTemporalFramebuffer(\n false,\n ctx.device.getDrawingBufferWidth(),\n ctx.device.getDrawingBufferHeight(),\n this.getAdditiveLightPassColorAttachments(ctx, additiveTransparentMaterialFlags)!,\n ctx.device.getFramebuffer()!.getDepthAttachment()\n )\n : tmpFramebuffer;\n const oit =\n renderQueue.drawTransparent && camera.oit && camera.oit.supportDevice(ctx.device.type)\n ? camera.oit\n : null;\n if (!oit && renderQueue.drawTransparent) {\n renderQueue.sortTransparentItems(camera.getWorldPosition());\n }\n const flags: any = {\n lightSet: {},\n cameraSet: {},\n fogSet: {}\n };\n const items = renderQueue.itemList;\n const lists = this._transmission\n ? [items?.transmission, items?.transmission_trans, items?.transparent]\n : [items?.opaque, items?.transparent];\n const transparentPass = lists.length - 1;\n for (let i = 0; i < lists.length; i++) {\n const isOpaquePass = i === 0;\n if ((isOpaquePass && !this._renderOpaque) || (!isOpaquePass && !this._renderTransparent)) {\n continue;\n }\n if (lists[i]) {\n ctx.queue = i === 0 ? QUEUE_OPAQUE : QUEUE_TRANSPARENT;\n ctx.oit = i === 0 || !items ? null : oit;\n const isolateTransparentABufferLightPasses =\n !!ctx.oit && ctx.queue === QUEUE_TRANSPARENT && ctx.oit.getType() === 'ab';\n if ((ctx.queue === QUEUE_TRANSPARENT || this._transmission) && ctx.scene.env.sky.fogPresents) {\n ctx.materialFlags |= MaterialVaryingFlags.APPLY_FOG;\n }\n const numOitPasses = ctx.oit ? ctx.oit.begin(ctx) : 1;\n for (let p = 0; p < numOitPasses; p++) {\n if (ctx.oit && !isolateTransparentABufferLightPasses) {\n if (!ctx.oit.beginPass(ctx, p)) {\n continue;\n }\n }\n const runLightPass = (lights: PunctualLight[]) => {\n if (ctx.oit && isolateTransparentABufferLightPasses) {\n if (!ctx.oit.beginPass(ctx, p)) {\n return;\n }\n this.renderLightPass(ctx, camera, lists[i]!, lights, flags);\n ctx.oit.endPass(ctx, p);\n } else {\n this.renderLightPass(ctx, camera, lists[i]!, lights, flags);\n }\n };\n const runAdditiveLightPass = (lights: PunctualLight[]) => {\n const passFramebuffer =\n ctx.queue === QUEUE_TRANSPARENT ? transparentTmpFramebuffer : tmpFramebuffer;\n if (ctx.lightBlending && passFramebuffer && !ctx.oit) {\n const savedMaterialFlags = ctx.materialFlags;\n ctx.materialFlags =\n ctx.queue === QUEUE_TRANSPARENT\n ? savedMaterialFlags & ~SURFACE_MRT_FLAGS\n : savedMaterialFlags & ~ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS;\n ctx.device.pushDeviceStates();\n ctx.device.setFramebuffer(passFramebuffer);\n try {\n runLightPass(lights);\n } finally {\n ctx.materialFlags = savedMaterialFlags;\n ctx.device.popDeviceStates();\n }\n } else {\n runLightPass(lights);\n }\n };\n let lightIndex = 0;\n if (ctx.shadowMapInfo) {\n for (const k of ctx.shadowMapInfo.keys()) {\n ctx.currentShadowLight = k;\n ctx.lightBlending = lightIndex > 0;\n this._shadowMapHash = ctx.shadowMapInfo.get(k)!.shaderHash;\n runAdditiveLightPass([k]);\n lightIndex++;\n }\n }\n if (lightIndex === 0 || renderQueue.unshadowedLights.length > 0) {\n ctx.currentShadowLight = null;\n ctx.lightBlending = lightIndex > 0;\n this._shadowMapHash = '';\n runAdditiveLightPass(renderQueue.unshadowedLights);\n }\n if (ctx.oit && !isolateTransparentABufferLightPasses) {\n ctx.oit.endPass(ctx, p);\n }\n }\n if (ctx.oit) {\n ctx.oit.end(ctx);\n }\n ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;\n }\n if (i === 0 && !ctx.sceneColorTexture) {\n if (tmpFramebuffer) {\n ctx.device.pushDeviceStates();\n ctx.device.setFramebuffer(tmpFramebuffer);\n }\n ctx.env.sky.renderSky(ctx);\n if (ctx.env.sky.fogPresents) {\n ctx.env.sky.renderFog(camera);\n }\n if (tmpFramebuffer) {\n ctx.device.popDeviceStates();\n }\n }\n if (!renderQueue.needSceneColor() || ctx.sceneColorTexture) {\n if (i === 0 || i === transparentPass) {\n ctx.compositor?.drawPostEffects(\n ctx,\n i === 0 ? PostEffectLayer.opaque : PostEffectLayer.transparent,\n ctx.linearDepthTexture!\n );\n if (\n i === 0 &&\n surfaceMRT &&\n (ctx.device.getFramebuffer()?.getColorAttachments().length ?? 0) <= 1\n ) {\n ctx.materialFlags &= ~surfaceMRT;\n }\n }\n }\n }\n if (tmpFramebuffer) {\n ctx.device.pool.releaseFrameBuffer(tmpFramebuffer);\n }\n if (transparentTmpFramebuffer && transparentTmpFramebuffer !== tmpFramebuffer) {\n ctx.device.pool.releaseFrameBuffer(transparentTmpFramebuffer);\n }\n ctx.oit = null;\n }\n}\n"],"names":["SURFACE_MRT_FLAGS","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","SSS_STORE_PROFILE","SSS_STORE_DIFFUSE","SSS_STORE_NORMAL","SSS_STORE_TRANSMISSION","ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS","LightPass","RenderPass","RENDER_PASS_TYPE_LIGHT","_shadowMapHash","_transmission","_renderOpaque","_renderTransparent","_clearColor","Vector4","zero","transmission","val","renderOpaque","renderTransparent","getAdditiveLightPassColorAttachments","ctx","materialFlags","framebuffer","device","getFramebuffer","attachments","getColorAttachments","push","SSSDiffuseTexture","SSSTransmissionTexture","length","selectTransparentOITShadowLight","renderQueue","shadowMapInfo","size","primaryDirectionalLight","has","primaryTransmissionLight","light","shadowedLights","keys","next","value","_getGlobalBindGroupHash","camera","currentShadowLight","runtimeId","lightBlending","oit","calculateHash","env","getHash","linearDepthTexture","uid","sceneColorTexture","HiZTexture","renderLightPass","itemList","lights","flags","baseLightPass","drawEnvLight","type","envLight","hasRadiance","hasIrradiance","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","cameraSet","ShaderHelper","setCameraUniforms","setLightUniformsShadow","lightSet","setLightUniforms","clusteredLight","clusterParam","countParam","lightBuffer","lightIndexTexture","APPLY_FOG","fogSet","setFogUniforms","sky","skyType","mappedFogType","atmosphereParams","heightFogParams","getAerialPerspectiveLUT","getSkyDistantLightLUT","setBindGroup","reverseWinding","worldMatrixDet","lit","drawItemList","unlit","scene","flip","isAutoFlip","surfaceMRT","additiveOpaqueMaterialFlags","additiveTransparentMaterialFlags","tmpFramebuffer","pool","fetchTemporalFramebuffer","getDrawingBufferWidth","getDrawingBufferHeight","getDepthAttachment","needsTransparentSingleColorFramebuffer","transparentTmpFramebuffer","drawTransparent","supportDevice","sortTransparentItems","getWorldPosition","items","lists","transmission_trans","transparent","opaque","transparentPass","i","isOpaquePass","queue","QUEUE_OPAQUE","QUEUE_TRANSPARENT","isolateTransparentABufferLightPasses","getType","fogPresents","numOitPasses","begin","p","beginPass","runLightPass","endPass","runAdditiveLightPass","passFramebuffer","savedMaterialFlags","pushDeviceStates","setFramebuffer","popDeviceStates","lightIndex","k","get","shaderHash","unshadowedLights","end","renderSky","renderFog","needSceneColor","compositor","drawPostEffects","PostEffectLayer","releaseFrameBuffer"],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Vector3, Disposable, objectKeys } from '@zephyr3d/base';
|
|
2
|
-
import { QUEUE_TRANSPARENT } from '../values.js';
|
|
2
|
+
import { RENDER_PASS_TYPE_SHADOWMAP, QUEUE_TRANSPARENT } from '../values.js';
|
|
3
3
|
import { ProgramBuilder } from '@zephyr3d/device';
|
|
4
4
|
import { ShaderHelper } from '../material/shader/helper.js';
|
|
5
5
|
import '../material/lambert.js';
|
|
6
6
|
import '../material/blinn.js';
|
|
7
7
|
import '../material/unlit.js';
|
|
8
8
|
import '../material/particle.js';
|
|
9
|
+
import '../material/subsurfaceprofile.js';
|
|
9
10
|
import { RenderBundleWrapper } from './renderbundle_wrapper.js';
|
|
10
11
|
import { getDevice } from '../app/api.js';
|
|
11
12
|
import '../material/meshmaterial.js';
|
|
@@ -13,10 +14,10 @@ import '../material/grassmaterial.js';
|
|
|
13
14
|
import '../material/terrain-cm.js';
|
|
14
15
|
import '../material/pbrmr.js';
|
|
15
16
|
import '../material/pbrsg.js';
|
|
17
|
+
import '../material/mtoon.js';
|
|
16
18
|
import '../material/pbrblueprint.js';
|
|
17
19
|
import '../material/sprite.js';
|
|
18
20
|
import '../material/sprite_std.js';
|
|
19
|
-
import '../material/msdf_text.js';
|
|
20
21
|
import '../utility/blueprint/material/texture.js';
|
|
21
22
|
|
|
22
23
|
const maxBufferSizeInFloats = 65536 / 4;
|
|
@@ -78,6 +79,8 @@ const tmpDrawablePos = new Vector3();
|
|
|
78
79
|
/** @internal */ _shadowedLightList;
|
|
79
80
|
/** @internal */ _unshadowedLightList;
|
|
80
81
|
/** @internal */ _sunLight;
|
|
82
|
+
/** @internal */ _primaryDirectionalLight;
|
|
83
|
+
/** @internal */ _primaryTransmissionLight;
|
|
81
84
|
/** @internal */ _bindGroupAllocator;
|
|
82
85
|
/** @internal */ _ref;
|
|
83
86
|
/** @internal */ _instanceInfo;
|
|
@@ -97,6 +100,8 @@ const tmpDrawablePos = new Vector3();
|
|
|
97
100
|
this._shadowedLightList = [];
|
|
98
101
|
this._unshadowedLightList = [];
|
|
99
102
|
this._sunLight = null;
|
|
103
|
+
this._primaryDirectionalLight = null;
|
|
104
|
+
this._primaryTransmissionLight = null;
|
|
100
105
|
this._ref = {
|
|
101
106
|
ref: this
|
|
102
107
|
};
|
|
@@ -115,6 +120,28 @@ const tmpDrawablePos = new Vector3();
|
|
|
115
120
|
set sunLight(light) {
|
|
116
121
|
this._sunLight = light;
|
|
117
122
|
}
|
|
123
|
+
/** Primary directional light used by effects that need a main light direction. */ get primaryDirectionalLight() {
|
|
124
|
+
return this._primaryDirectionalLight;
|
|
125
|
+
}
|
|
126
|
+
set primaryDirectionalLight(light) {
|
|
127
|
+
this._primaryDirectionalLight = light;
|
|
128
|
+
}
|
|
129
|
+
/** Primary punctual light used by thin-transmission effects when there is no main directional light. */ get primaryTransmissionLight() {
|
|
130
|
+
return this._primaryTransmissionLight;
|
|
131
|
+
}
|
|
132
|
+
set primaryTransmissionLight(light) {
|
|
133
|
+
this._primaryTransmissionLight = light;
|
|
134
|
+
}
|
|
135
|
+
/** @internal */ getTransmissionLightScore(light) {
|
|
136
|
+
if (light.isDirectionLight()) {
|
|
137
|
+
return -1;
|
|
138
|
+
}
|
|
139
|
+
const color = light.diffuseAndIntensity;
|
|
140
|
+
const luma = color.x * 0.2126 + color.y * 0.7152 + color.z * 0.0722;
|
|
141
|
+
const range = Math.max(1, light.positionAndRange.w);
|
|
142
|
+
const typeWeight = light.isSpotLight() ? 1.2 : light.isPointLight() ? 1.08 : light.isRectLight() ? 1.02 : 1;
|
|
143
|
+
return Math.max(color.w, 0) * Math.max(luma, 0) * Math.sqrt(range) * typeWeight;
|
|
144
|
+
}
|
|
118
145
|
/** @internal */ needSceneColor() {
|
|
119
146
|
return this._needSceneColor;
|
|
120
147
|
}
|
|
@@ -174,8 +201,15 @@ const tmpDrawablePos = new Vector3();
|
|
|
174
201
|
} else {
|
|
175
202
|
this._unshadowedLightList.push(light);
|
|
176
203
|
}
|
|
177
|
-
if (light.isDirectionLight()
|
|
178
|
-
this.
|
|
204
|
+
if (light.isDirectionLight()) {
|
|
205
|
+
if (!this._primaryDirectionalLight || light.intensity > this._primaryDirectionalLight.intensity) {
|
|
206
|
+
this._primaryDirectionalLight = light;
|
|
207
|
+
}
|
|
208
|
+
if (light.sunLight) {
|
|
209
|
+
this.sunLight = light;
|
|
210
|
+
}
|
|
211
|
+
} else if (!this._primaryTransmissionLight || this.getTransmissionLightScore(light) > this.getTransmissionLightScore(this._primaryTransmissionLight)) {
|
|
212
|
+
this._primaryTransmissionLight = light;
|
|
179
213
|
}
|
|
180
214
|
}
|
|
181
215
|
/**
|
|
@@ -201,6 +235,13 @@ const tmpDrawablePos = new Vector3();
|
|
|
201
235
|
this._needSceneDepth ||= queue._needSceneDepth;
|
|
202
236
|
this._needSceneColorWithDepth ||= queue._needSceneColorWithDepth;
|
|
203
237
|
this._drawTransparent ||= queue._drawTransparent;
|
|
238
|
+
this._sunLight ||= queue._sunLight;
|
|
239
|
+
if (queue._primaryDirectionalLight && (!this._primaryDirectionalLight || queue._primaryDirectionalLight.intensity > this._primaryDirectionalLight.intensity)) {
|
|
240
|
+
this._primaryDirectionalLight = queue._primaryDirectionalLight;
|
|
241
|
+
}
|
|
242
|
+
if (queue._primaryTransmissionLight && (!this._primaryTransmissionLight || this.getTransmissionLightScore(queue._primaryTransmissionLight) > this.getTransmissionLightScore(this._primaryTransmissionLight))) {
|
|
243
|
+
this._primaryTransmissionLight = queue._primaryTransmissionLight;
|
|
244
|
+
}
|
|
204
245
|
this._objectColorMaps.push(...queue._objectColorMaps);
|
|
205
246
|
}
|
|
206
247
|
/**
|
|
@@ -213,7 +254,8 @@ const tmpDrawablePos = new Vector3();
|
|
|
213
254
|
if (!this._itemList) {
|
|
214
255
|
this._itemList = this.newRenderItemList();
|
|
215
256
|
}
|
|
216
|
-
const
|
|
257
|
+
const material = drawable.getMaterial();
|
|
258
|
+
const trans = this._renderPass.type === RENDER_PASS_TYPE_SHADOWMAP && material?.useTransparentShadowCasterForPass?.(this._renderPass.type) ? false : drawable.getQueueType() === QUEUE_TRANSPARENT;
|
|
217
259
|
const unlit = drawable.isUnlit();
|
|
218
260
|
const needDepth = !!drawable.needSceneDepth();
|
|
219
261
|
const transmission = !!drawable.needSceneColor() || needDepth;
|
|
@@ -253,9 +295,8 @@ const tmpDrawablePos = new Vector3();
|
|
|
253
295
|
sortDistance: drawable.getSortDistance(camera),
|
|
254
296
|
instanceData: null
|
|
255
297
|
});
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
list.materialList.add(mat.coreMaterial);
|
|
298
|
+
if (material) {
|
|
299
|
+
list.materialList.add(material.coreMaterial);
|
|
259
300
|
}
|
|
260
301
|
drawable.applyTransformUniforms(this);
|
|
261
302
|
}
|
|
@@ -306,6 +347,8 @@ const tmpDrawablePos = new Vector3();
|
|
|
306
347
|
this._shadowedLightList = [];
|
|
307
348
|
this._unshadowedLightList = [];
|
|
308
349
|
this._sunLight = null;
|
|
350
|
+
this._primaryDirectionalLight = null;
|
|
351
|
+
this._primaryTransmissionLight = null;
|
|
309
352
|
this._needSceneColor = false;
|
|
310
353
|
this._needSceneDepth = false;
|
|
311
354
|
this._needSceneColorWithDepth = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render_queue.js","sources":["../../src/render/render_queue.ts"],"sourcesContent":["import type { Nullable, Vector4 } from '@zephyr3d/base';\r\nimport { Disposable, objectKeys, Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { BatchDrawable, Drawable } from './drawable';\r\nimport type { DirectionalLight, PunctualLight } from '../scene/light';\r\nimport type { RenderPass } from '.';\r\nimport { QUEUE_TRANSPARENT } from '../values';\r\nimport type { BindGroup, BindGroupLayout } from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport type { Material } from '../material';\r\nimport { ShaderHelper } from '../material';\r\nimport { RenderBundleWrapper } from './renderbundle_wrapper';\r\nimport { getDevice } from '../app/api';\r\n\r\n/** @public */\r\nexport type CachedBindGroup = {\r\n bindGroup: BindGroup;\r\n buffer: Float32Array;\r\n offset: number;\r\n dirty: boolean;\r\n};\r\n\r\nconst maxBufferSizeInFloats = 65536 / 4;\r\n\r\n/**\r\n * Instance bind group allocator\r\n * @public\r\n */\r\nexport class InstanceBindGroupAllocator {\r\n private static _instanceBindGroupLayout: Nullable<BindGroupLayout> = null;\r\n _bindGroupList: CachedBindGroup[] = [];\r\n private _allocFrameStamp: number;\r\n constructor() {\r\n this._allocFrameStamp = -1;\r\n this._bindGroupList = [];\r\n }\r\n allocateInstanceBindGroup(framestamp: number, sizeInFloats: number) {\r\n // Reset if render frame changed\r\n if (this._allocFrameStamp !== framestamp) {\r\n this._allocFrameStamp = framestamp;\r\n for (const k of this._bindGroupList) {\r\n k.offset = 0;\r\n }\r\n }\r\n for (const k of this._bindGroupList) {\r\n if (k.offset + sizeInFloats <= maxBufferSizeInFloats) {\r\n k.dirty = true;\r\n return k;\r\n }\r\n }\r\n if (!InstanceBindGroupAllocator._instanceBindGroupLayout) {\r\n const buildInfo = new ProgramBuilder(getDevice()).buildRender({\r\n vertex(pb) {\r\n this[ShaderHelper.getInstanceDataUniformName()] = pb.vec4[65536 >> 4]().uniformBuffer(3);\r\n pb.main(function () {});\r\n },\r\n fragment(pb) {\r\n pb.main(function () {});\r\n }\r\n });\r\n InstanceBindGroupAllocator._instanceBindGroupLayout = buildInfo[2][3];\r\n }\r\n const bindGroup = {\r\n bindGroup: getDevice().createBindGroup(InstanceBindGroupAllocator._instanceBindGroupLayout),\r\n buffer: new Float32Array(maxBufferSizeInFloats),\r\n offset: 0,\r\n dirty: true\r\n };\r\n this._bindGroupList.push(bindGroup);\r\n return bindGroup;\r\n }\r\n}\r\n\r\nconst defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();\r\nconst tmpDrawablePos = new Vector3();\r\n\r\n/**\r\n * Instance data\r\n * @public\r\n */\r\nexport interface InstanceData {\r\n bindGroup: CachedBindGroup;\r\n stride: number;\r\n offset: number;\r\n numInstances: number;\r\n}\r\n\r\n/**\r\n * Render queue item\r\n * @public\r\n */\r\nexport interface RenderQueueItem {\r\n drawable: Drawable;\r\n sortDistance: number;\r\n instanceColor?: Vector4;\r\n instanceData: Nullable<InstanceData>;\r\n}\r\n\r\n/**\r\n * Render item list information\r\n * @public\r\n */\r\nexport interface RenderItemListInfo {\r\n itemList: RenderQueueItem[];\r\n renderBundle?: RenderBundleWrapper;\r\n skinItemList: RenderQueueItem[];\r\n skinRenderBundle?: RenderBundleWrapper;\r\n morphItemList: RenderQueueItem[];\r\n morphRenderBundle?: RenderBundleWrapper;\r\n skinAndMorphItemList: RenderQueueItem[];\r\n skinAndMorphRenderBundle?: RenderBundleWrapper;\r\n instanceItemList: RenderQueueItem[];\r\n instanceRenderBundle?: RenderBundleWrapper;\r\n instanceList: Record<string, BatchDrawable[]>;\r\n materialList: Set<Material>;\r\n renderQueue: RenderQueue;\r\n}\r\n\r\n/**\r\n * Render item list bundle\r\n * @public\r\n */\r\nexport interface RenderItemListBundle {\r\n lit: RenderItemListInfo[];\r\n unlit: RenderItemListInfo[];\r\n}\r\n\r\n/**\r\n * Item list of render queue\r\n * @public\r\n */\r\nexport interface RenderItemList {\r\n opaque: RenderItemListBundle;\r\n transmission: RenderItemListBundle;\r\n transparent: RenderItemListBundle;\r\n transmission_trans: RenderItemListBundle;\r\n}\r\n\r\n/**\r\n * Render queue reference\r\n * @public\r\n */\r\nexport interface RenderQueueRef {\r\n ref: RenderQueue;\r\n}\r\n\r\n/**\r\n * Drawable instance information\r\n * @public\r\n */\r\nexport interface DrawableInstanceInfo {\r\n bindGroup: CachedBindGroup;\r\n offset: number;\r\n}\r\n\r\n/**\r\n * A queue that contains the items to be rendered\r\n * @public\r\n */\r\nexport class RenderQueue extends Disposable {\r\n /** @internal */\r\n private _itemList: Nullable<RenderItemList>;\r\n /** @internal */\r\n private readonly _renderPass: RenderPass;\r\n /** @internal */\r\n private _shadowedLightList: PunctualLight[];\r\n /** @internal */\r\n private _unshadowedLightList: PunctualLight[];\r\n /** @internal */\r\n private _sunLight: Nullable<DirectionalLight>;\r\n /** @internal */\r\n private readonly _bindGroupAllocator: InstanceBindGroupAllocator;\r\n /** @internal */\r\n private readonly _ref: RenderQueueRef;\r\n /** @internal */\r\n private readonly _instanceInfo: Map<Drawable, DrawableInstanceInfo>;\r\n /** @internal */\r\n private _needSceneColor: boolean;\r\n private _needSceneDepth: boolean;\r\n private _needSceneColorWithDepth: boolean;\r\n /** @internal */\r\n private _drawTransparent: boolean;\r\n /** @internal */\r\n private readonly _objectColorMaps: Map<number, Drawable>[];\r\n /**\r\n * Creates an instance of a render queue\r\n * @param renderPass - The render pass to which the render queue belongs\r\n */\r\n constructor(renderPass: RenderPass, bindGroupAllocator?: InstanceBindGroupAllocator) {\r\n super();\r\n this._bindGroupAllocator = bindGroupAllocator ?? defaultInstanceBindGroupAlloator;\r\n this._itemList = null;\r\n this._renderPass = renderPass;\r\n this._shadowedLightList = [];\r\n this._unshadowedLightList = [];\r\n this._sunLight = null;\r\n this._ref = { ref: this };\r\n this._instanceInfo = new Map();\r\n this._needSceneColor = false;\r\n this._needSceneDepth = false;\r\n this._needSceneColorWithDepth = false;\r\n this._drawTransparent = false;\r\n this._objectColorMaps = [new Map()];\r\n }\r\n /** The sun light */\r\n get sunLight() {\r\n return this._sunLight;\r\n }\r\n set sunLight(light) {\r\n this._sunLight = light;\r\n }\r\n /** @internal */\r\n needSceneColor() {\r\n return this._needSceneColor;\r\n }\r\n /** @internal */\r\n needSceneDepth() {\r\n return this._needSceneDepth;\r\n }\r\n /** @internal */\r\n needSceneColorWithDepth() {\r\n return this._needSceneColorWithDepth;\r\n }\r\n /** Whether this render queue has transparent objects to be drawn */\r\n get drawTransparent() {\r\n return this._drawTransparent;\r\n }\r\n /** The render pass to which the render queue belongs */\r\n get renderPass() {\r\n return this._renderPass;\r\n }\r\n /**\r\n * Gets the items of the render queue\r\n */\r\n get itemList() {\r\n return this._itemList;\r\n }\r\n /**\r\n * Gets the shadowed lights\r\n */\r\n get shadowedLights() {\r\n return this._shadowedLightList;\r\n }\r\n /**\r\n * Gets the unshadowed lights\r\n */\r\n get unshadowedLights() {\r\n return this._unshadowedLightList;\r\n }\r\n /**\r\n * Gets the indirect reference of this\r\n */\r\n get ref() {\r\n return this._ref;\r\n }\r\n /**\r\n * Gets the instance information for given drawable object\r\n * @param drawable - The drawable object\r\n * @returns The instane information for given drawable object, null if no exists\r\n */\r\n getInstanceInfo(drawable: Drawable) {\r\n return this._instanceInfo.get(drawable);\r\n }\r\n /**\r\n * Gets the maximum batch size of a given device\r\n * @returns The maximum batch size of the device\r\n *\r\n * @internal\r\n */\r\n getMaxBatchSize() {\r\n return getDevice().getDeviceCaps().shaderCaps.maxUniformBufferSize / 64;\r\n }\r\n /**\r\n * Push a punctual light\r\n * @param light - The light to be pushed\r\n */\r\n pushLight(light: PunctualLight) {\r\n if (light.castShadow) {\r\n this._shadowedLightList.push(light);\r\n } else {\r\n this._unshadowedLightList.push(light);\r\n }\r\n if (light.isDirectionLight() && light.sunLight) {\r\n this.sunLight = light;\r\n }\r\n }\r\n /**\r\n * Push items from another render queue\r\n * @param queue - The render queue to be pushed\r\n */\r\n pushRenderQueue(queue: RenderQueue) {\r\n const newItemLists = queue._itemList;\r\n if (!newItemLists) {\r\n return;\r\n }\r\n if (!this._itemList) {\r\n this._itemList = this.newRenderItemList();\r\n }\r\n this._itemList.opaque.lit.push(...newItemLists.opaque.lit);\r\n this._itemList.opaque.unlit.push(...newItemLists.opaque.unlit);\r\n this._itemList.transmission.lit.push(...newItemLists.transmission.lit);\r\n this._itemList.transmission.unlit.push(...newItemLists.transmission.unlit);\r\n this._itemList.transparent.lit.push(...newItemLists.transparent.lit);\r\n this._itemList.transparent.unlit.push(...newItemLists.transparent.unlit);\r\n this._itemList.transmission_trans.lit.push(...newItemLists.transmission_trans.lit);\r\n this._itemList.transmission_trans.unlit.push(...newItemLists.transmission_trans.unlit);\r\n this._needSceneColor ||= queue._needSceneColor;\r\n this._needSceneDepth ||= queue._needSceneDepth;\r\n this._needSceneColorWithDepth ||= queue._needSceneColorWithDepth;\r\n this._drawTransparent ||= queue._drawTransparent;\r\n this._objectColorMaps.push(...queue._objectColorMaps);\r\n }\r\n /**\r\n * Push an item to the render queue\r\n * @param camera - The camera for drawing the item\r\n * @param drawable - The object to be drawn\r\n */\r\n push(camera: Camera, drawable: Drawable) {\r\n if (drawable) {\r\n drawable.pushRenderQueueRef(this._ref);\r\n if (!this._itemList) {\r\n this._itemList = this.newRenderItemList();\r\n }\r\n const trans = drawable.getQueueType() === QUEUE_TRANSPARENT;\r\n const unlit = drawable.isUnlit();\r\n const needDepth = !!drawable.needSceneDepth();\r\n const transmission = !!drawable.needSceneColor() || needDepth;\r\n this._needSceneColor ||= transmission;\r\n this._needSceneDepth ||= drawable.needSceneDepth();\r\n this._needSceneColorWithDepth ||= transmission && needDepth;\r\n this._drawTransparent ||= trans;\r\n if (camera.getPickResultResolveFunc()) {\r\n drawable.getMaterial()!.objectColor = drawable.getObjectColor();\r\n this._objectColorMaps[0].set(drawable.getDrawableId(), drawable);\r\n }\r\n if (drawable.isBatchable()) {\r\n const instanceList = trans\r\n ? transmission\r\n ? unlit\r\n ? this._itemList.transmission_trans.unlit[0].instanceList\r\n : this._itemList.transmission_trans.lit[0].instanceList\r\n : unlit\r\n ? this._itemList.transparent.unlit[0].instanceList\r\n : this._itemList.transparent.lit[0].instanceList\r\n : transmission\r\n ? unlit\r\n ? this._itemList.transmission.unlit[0].instanceList\r\n : this._itemList.transmission.lit[0].instanceList\r\n : unlit\r\n ? this._itemList.opaque.unlit[0].instanceList\r\n : this._itemList.opaque.lit[0].instanceList;\r\n const hash = drawable.getInstanceId(this._renderPass);\r\n let drawableList = instanceList[hash];\r\n if (!drawableList) {\r\n drawableList = [];\r\n instanceList[hash] = drawableList;\r\n }\r\n drawableList.push(drawable);\r\n } else {\r\n const list = trans\r\n ? transmission\r\n ? unlit\r\n ? this._itemList.transmission_trans.unlit[0]\r\n : this._itemList.transmission_trans.lit[0]\r\n : unlit\r\n ? this._itemList.transparent.unlit[0]\r\n : this._itemList.transparent.lit[0]\r\n : transmission\r\n ? unlit\r\n ? this._itemList.transmission.unlit[0]\r\n : this._itemList.transmission.lit[0]\r\n : unlit\r\n ? this._itemList.opaque.unlit[0]\r\n : this._itemList.opaque.lit[0];\r\n const skinAnimation = !!drawable.getBoneMatrices();\r\n const morphAnimation = !!drawable.getMorphData();\r\n let queue: RenderQueueItem[];\r\n if (skinAnimation && morphAnimation) {\r\n queue = list.skinAndMorphItemList;\r\n } else if (skinAnimation) {\r\n queue = list.skinItemList;\r\n } else if (morphAnimation) {\r\n queue = list.morphItemList;\r\n } else {\r\n queue = list.itemList;\r\n }\r\n this.binaryInsert(queue, {\r\n drawable,\r\n sortDistance: drawable.getSortDistance(camera),\r\n instanceData: null\r\n });\r\n const mat = drawable.getMaterial();\r\n if (mat) {\r\n list.materialList.add(mat.coreMaterial);\r\n }\r\n drawable.applyTransformUniforms(this);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n getDrawableByColor(c: Uint8Array<ArrayBuffer>) {\r\n const id = (c[0] << 24) + (c[1] << 16) + (c[2] << 8) + c[3];\r\n for (const m of this._objectColorMaps) {\r\n const drawable = m.get(id);\r\n if (drawable) {\r\n return drawable;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Removes all items in the render queue\r\n */\r\n reset() {\r\n if (this._itemList) {\r\n // Release all render bundles\r\n for (const k of objectKeys(this._itemList)) {\r\n const itemListBundle: RenderItemListBundle = this._itemList[k];\r\n for (const l of objectKeys(itemListBundle)) {\r\n const listInfo: RenderItemListInfo[] = itemListBundle[l];\r\n for (const info of listInfo) {\r\n if (info.renderQueue === this) {\r\n if (info.renderBundle) {\r\n info.renderBundle.dispose();\r\n }\r\n if (info.skinRenderBundle) {\r\n info.skinRenderBundle.dispose();\r\n }\r\n if (info.morphRenderBundle) {\r\n info.morphRenderBundle.dispose();\r\n }\r\n if (info.skinAndMorphRenderBundle) {\r\n info.skinAndMorphRenderBundle.dispose();\r\n }\r\n if (info.instanceRenderBundle) {\r\n info.instanceRenderBundle.dispose();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this._itemList = null;\r\n }\r\n this._shadowedLightList = [];\r\n this._unshadowedLightList = [];\r\n this._sunLight = null;\r\n this._needSceneColor = false;\r\n this._needSceneDepth = false;\r\n this._needSceneColorWithDepth = false;\r\n this._drawTransparent = false;\r\n }\r\n /** @internal */\r\n end(camera: Camera, createRenderBundles?: boolean) {\r\n const frameCounter = getDevice().frameInfo.frameCounter;\r\n const itemList = this._itemList!;\r\n if (!this.itemList) {\r\n return this;\r\n }\r\n const lists = [\r\n itemList.opaque.lit,\r\n itemList.opaque.unlit,\r\n itemList.transmission.lit,\r\n itemList.transmission.unlit,\r\n itemList.transparent.lit,\r\n itemList.transparent.unlit,\r\n itemList.transmission_trans.lit,\r\n itemList.transmission_trans.unlit\r\n ];\r\n for (let i = 0; i < lists.length; i++) {\r\n const list = lists[i];\r\n for (const info of list) {\r\n if (info.renderQueue !== this) {\r\n continue;\r\n }\r\n const instanceList = info.instanceList;\r\n for (const x in instanceList) {\r\n const drawables = instanceList[x];\r\n let bindGroup: Nullable<CachedBindGroup> = null;\r\n let item: Nullable<RenderQueueItem> = null;\r\n for (let i = 0; i < drawables.length; i++) {\r\n const drawable = drawables[i];\r\n const instanceUniforms = drawable.getInstanceUniforms();\r\n const instanceUniformsSize = instanceUniforms?.length ?? 0;\r\n const stride = ShaderHelper.MATERIAL_INSTANCE_DATA_OFFSET * 4 + instanceUniformsSize;\r\n if (!bindGroup || bindGroup.offset + stride > maxBufferSizeInFloats) {\r\n bindGroup = this._bindGroupAllocator.allocateInstanceBindGroup(frameCounter, stride);\r\n item = {\r\n drawable,\r\n sortDistance: drawable.getSortDistance(camera),\r\n instanceData: {\r\n bindGroup,\r\n offset: bindGroup.offset,\r\n numInstances: 0,\r\n stride\r\n }\r\n };\r\n this.binaryInsert(info.instanceItemList, item);\r\n drawable.applyInstanceOffsetAndStride(this, stride, bindGroup.offset);\r\n }\r\n const instanceInfo = { bindGroup, offset: bindGroup.offset };\r\n this._instanceInfo.set(drawable, instanceInfo);\r\n drawable.applyTransformUniforms(this);\r\n drawable.applyMaterialUniforms(instanceInfo);\r\n bindGroup.offset += stride;\r\n item!.instanceData!.numInstances++;\r\n const mat = drawable.getMaterial();\r\n if (mat) {\r\n info.materialList.add(mat.coreMaterial);\r\n }\r\n }\r\n }\r\n info.instanceList = {};\r\n if (createRenderBundles) {\r\n if (info.itemList.length > 0) {\r\n info.renderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.skinItemList.length > 0) {\r\n info.skinRenderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.morphItemList.length > 0) {\r\n info.morphRenderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.skinAndMorphItemList.length > 0) {\r\n info.skinAndMorphRenderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.instanceItemList.length > 0) {\r\n info.instanceRenderBundle = new RenderBundleWrapper();\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n binaryInsert(itemList: RenderQueueItem[], item: RenderQueueItem) {\r\n let left = 0;\r\n let right = itemList.length - 1;\r\n const newInstanceId = item.drawable.getMaterial()!.instanceId;\r\n while (left <= right) {\r\n const mid = Math.floor((left + right) / 2);\r\n const instanceId = itemList[mid].drawable.getMaterial()!.instanceId;\r\n if (instanceId === newInstanceId) {\r\n itemList.splice(mid + 1, 0, item);\r\n return;\r\n } else if (instanceId < newInstanceId) {\r\n left = mid + 1;\r\n } else {\r\n right = mid - 1;\r\n }\r\n }\r\n itemList.splice(left, 0, item);\r\n }\r\n /**\r\n * Sorts the items in the render queue for rendering\r\n */\r\n sortTransparentItems(cameraPos: Vector3) {\r\n if (this._itemList) {\r\n this._itemList.transparent.lit[0].itemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.lit[0].skinItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.lit[0].morphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.lit[0].skinAndMorphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].itemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].skinItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].morphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].skinAndMorphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n }\r\n }\r\n /** Disposes the render queue */\r\n protected onDispose() {\r\n super.onDispose();\r\n this.reset();\r\n }\r\n\r\n private drawableDistanceToCamera(drawable: Drawable, cameraPos: Vector3) {\r\n const drawablePos = drawable.getNode().getWorldPosition(tmpDrawablePos);\r\n return Vector3.distanceSq(drawablePos, cameraPos);\r\n }\r\n private newRenderItemListInfo() {\r\n return {\r\n itemList: [],\r\n skinItemList: [],\r\n morphItemList: [],\r\n skinAndMorphItemList: [],\r\n instanceItemList: [],\r\n materialList: new Set(),\r\n instanceList: {},\r\n renderQueue: this\r\n } as RenderItemListInfo;\r\n }\r\n private newRenderItemListBundle() {\r\n return {\r\n lit: [this.newRenderItemListInfo()],\r\n unlit: [this.newRenderItemListInfo()]\r\n };\r\n }\r\n private newRenderItemList() {\r\n return {\r\n opaque: this.newRenderItemListBundle(),\r\n transmission: this.newRenderItemListBundle(),\r\n transparent: this.newRenderItemListBundle(),\r\n transmission_trans: this.newRenderItemListBundle()\r\n };\r\n }\r\n}\r\n"],"names":["maxBufferSizeInFloats","InstanceBindGroupAllocator","_instanceBindGroupLayout","_bindGroupList","_allocFrameStamp","allocateInstanceBindGroup","framestamp","sizeInFloats","k","offset","dirty","buildInfo","ProgramBuilder","getDevice","buildRender","vertex","pb","ShaderHelper","getInstanceDataUniformName","vec4","uniformBuffer","main","fragment","bindGroup","createBindGroup","buffer","Float32Array","push","defaultInstanceBindGroupAlloator","tmpDrawablePos","Vector3","RenderQueue","Disposable","_needSceneDepth","_needSceneColorWithDepth","renderPass","bindGroupAllocator","_bindGroupAllocator","_itemList","_renderPass","_shadowedLightList","_unshadowedLightList","_sunLight","_ref","ref","_instanceInfo","Map","_needSceneColor","_drawTransparent","_objectColorMaps","sunLight","light","needSceneColor","needSceneDepth","needSceneColorWithDepth","drawTransparent","itemList","shadowedLights","unshadowedLights","getInstanceInfo","drawable","get","getMaxBatchSize","getDeviceCaps","shaderCaps","maxUniformBufferSize","pushLight","castShadow","isDirectionLight","pushRenderQueue","queue","newItemLists","newRenderItemList","opaque","lit","unlit","transmission","transparent","transmission_trans","camera","pushRenderQueueRef","trans","getQueueType","QUEUE_TRANSPARENT","isUnlit","needDepth","getPickResultResolveFunc","getMaterial","objectColor","getObjectColor","set","getDrawableId","isBatchable","instanceList","hash","getInstanceId","drawableList","list","skinAnimation","getBoneMatrices","morphAnimation","getMorphData","skinAndMorphItemList","skinItemList","morphItemList","binaryInsert","sortDistance","getSortDistance","instanceData","mat","materialList","add","coreMaterial","applyTransformUniforms","getDrawableByColor","c","id","m","reset","objectKeys","itemListBundle","l","listInfo","info","renderQueue","renderBundle","dispose","skinRenderBundle","morphRenderBundle","skinAndMorphRenderBundle","instanceRenderBundle","end","createRenderBundles","frameCounter","frameInfo","lists","i","length","x","drawables","item","instanceUniforms","getInstanceUniforms","instanceUniformsSize","stride","MATERIAL_INSTANCE_DATA_OFFSET","numInstances","instanceItemList","applyInstanceOffsetAndStride","instanceInfo","applyMaterialUniforms","RenderBundleWrapper","left","right","newInstanceId","instanceId","mid","Math","floor","splice","sortTransparentItems","cameraPos","sort","a","b","drawableDistanceToCamera","onDispose","drawablePos","getNode","getWorldPosition","distanceSq","newRenderItemListInfo","Set","newRenderItemListBundle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"render_queue.js","sources":["../../src/render/render_queue.ts"],"sourcesContent":["import type { Nullable, Vector4 } from '@zephyr3d/base';\r\nimport { Disposable, objectKeys, Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { BatchDrawable, Drawable } from './drawable';\r\nimport type { DirectionalLight, PunctualLight } from '../scene/light';\r\nimport type { RenderPass } from '.';\r\nimport { QUEUE_TRANSPARENT, RENDER_PASS_TYPE_SHADOWMAP } from '../values';\r\nimport type { BindGroup, BindGroupLayout } from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport type { Material } from '../material';\r\nimport { ShaderHelper } from '../material';\r\nimport { RenderBundleWrapper } from './renderbundle_wrapper';\r\nimport { getDevice } from '../app/api';\r\n\r\n/** @public */\r\nexport type CachedBindGroup = {\r\n bindGroup: BindGroup;\r\n buffer: Float32Array;\r\n offset: number;\r\n dirty: boolean;\r\n};\r\n\r\nconst maxBufferSizeInFloats = 65536 / 4;\r\n\r\n/**\r\n * Instance bind group allocator\r\n * @public\r\n */\r\nexport class InstanceBindGroupAllocator {\r\n private static _instanceBindGroupLayout: Nullable<BindGroupLayout> = null;\r\n _bindGroupList: CachedBindGroup[] = [];\r\n private _allocFrameStamp: number;\r\n constructor() {\r\n this._allocFrameStamp = -1;\r\n this._bindGroupList = [];\r\n }\r\n allocateInstanceBindGroup(framestamp: number, sizeInFloats: number) {\r\n // Reset if render frame changed\r\n if (this._allocFrameStamp !== framestamp) {\r\n this._allocFrameStamp = framestamp;\r\n for (const k of this._bindGroupList) {\r\n k.offset = 0;\r\n }\r\n }\r\n for (const k of this._bindGroupList) {\r\n if (k.offset + sizeInFloats <= maxBufferSizeInFloats) {\r\n k.dirty = true;\r\n return k;\r\n }\r\n }\r\n if (!InstanceBindGroupAllocator._instanceBindGroupLayout) {\r\n const buildInfo = new ProgramBuilder(getDevice()).buildRender({\r\n vertex(pb) {\r\n this[ShaderHelper.getInstanceDataUniformName()] = pb.vec4[65536 >> 4]().uniformBuffer(3);\r\n pb.main(function () {});\r\n },\r\n fragment(pb) {\r\n pb.main(function () {});\r\n }\r\n });\r\n InstanceBindGroupAllocator._instanceBindGroupLayout = buildInfo[2][3];\r\n }\r\n const bindGroup = {\r\n bindGroup: getDevice().createBindGroup(InstanceBindGroupAllocator._instanceBindGroupLayout),\r\n buffer: new Float32Array(maxBufferSizeInFloats),\r\n offset: 0,\r\n dirty: true\r\n };\r\n this._bindGroupList.push(bindGroup);\r\n return bindGroup;\r\n }\r\n}\r\n\r\nconst defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();\r\nconst tmpDrawablePos = new Vector3();\r\n\r\n/**\r\n * Instance data\r\n * @public\r\n */\r\nexport interface InstanceData {\r\n bindGroup: CachedBindGroup;\r\n stride: number;\r\n offset: number;\r\n numInstances: number;\r\n}\r\n\r\n/**\r\n * Render queue item\r\n * @public\r\n */\r\nexport interface RenderQueueItem {\r\n drawable: Drawable;\r\n sortDistance: number;\r\n instanceColor?: Vector4;\r\n instanceData: Nullable<InstanceData>;\r\n}\r\n\r\n/**\r\n * Render item list information\r\n * @public\r\n */\r\nexport interface RenderItemListInfo {\r\n itemList: RenderQueueItem[];\r\n renderBundle?: RenderBundleWrapper;\r\n skinItemList: RenderQueueItem[];\r\n skinRenderBundle?: RenderBundleWrapper;\r\n morphItemList: RenderQueueItem[];\r\n morphRenderBundle?: RenderBundleWrapper;\r\n skinAndMorphItemList: RenderQueueItem[];\r\n skinAndMorphRenderBundle?: RenderBundleWrapper;\r\n instanceItemList: RenderQueueItem[];\r\n instanceRenderBundle?: RenderBundleWrapper;\r\n instanceList: Record<string, BatchDrawable[]>;\r\n materialList: Set<Material>;\r\n renderQueue: RenderQueue;\r\n}\r\n\r\n/**\r\n * Render item list bundle\r\n * @public\r\n */\r\nexport interface RenderItemListBundle {\r\n lit: RenderItemListInfo[];\r\n unlit: RenderItemListInfo[];\r\n}\r\n\r\n/**\r\n * Item list of render queue\r\n * @public\r\n */\r\nexport interface RenderItemList {\r\n opaque: RenderItemListBundle;\r\n transmission: RenderItemListBundle;\r\n transparent: RenderItemListBundle;\r\n transmission_trans: RenderItemListBundle;\r\n}\r\n\r\n/**\r\n * Render queue reference\r\n * @public\r\n */\r\nexport interface RenderQueueRef {\r\n ref: RenderQueue;\r\n}\r\n\r\n/**\r\n * Drawable instance information\r\n * @public\r\n */\r\nexport interface DrawableInstanceInfo {\r\n bindGroup: CachedBindGroup;\r\n offset: number;\r\n}\r\n\r\n/**\r\n * A queue that contains the items to be rendered\r\n * @public\r\n */\r\nexport class RenderQueue extends Disposable {\r\n /** @internal */\r\n private _itemList: Nullable<RenderItemList>;\r\n /** @internal */\r\n private readonly _renderPass: RenderPass;\r\n /** @internal */\r\n private _shadowedLightList: PunctualLight[];\r\n /** @internal */\r\n private _unshadowedLightList: PunctualLight[];\r\n /** @internal */\r\n private _sunLight: Nullable<DirectionalLight>;\r\n /** @internal */\r\n private _primaryDirectionalLight: Nullable<DirectionalLight>;\r\n /** @internal */\r\n private _primaryTransmissionLight: Nullable<PunctualLight>;\r\n /** @internal */\r\n private readonly _bindGroupAllocator: InstanceBindGroupAllocator;\r\n /** @internal */\r\n private readonly _ref: RenderQueueRef;\r\n /** @internal */\r\n private readonly _instanceInfo: Map<Drawable, DrawableInstanceInfo>;\r\n /** @internal */\r\n private _needSceneColor: boolean;\r\n private _needSceneDepth: boolean;\r\n private _needSceneColorWithDepth: boolean;\r\n /** @internal */\r\n private _drawTransparent: boolean;\r\n /** @internal */\r\n private readonly _objectColorMaps: Map<number, Drawable>[];\r\n /**\r\n * Creates an instance of a render queue\r\n * @param renderPass - The render pass to which the render queue belongs\r\n */\r\n constructor(renderPass: RenderPass, bindGroupAllocator?: InstanceBindGroupAllocator) {\r\n super();\r\n this._bindGroupAllocator = bindGroupAllocator ?? defaultInstanceBindGroupAlloator;\r\n this._itemList = null;\r\n this._renderPass = renderPass;\r\n this._shadowedLightList = [];\r\n this._unshadowedLightList = [];\r\n this._sunLight = null;\r\n this._primaryDirectionalLight = null;\r\n this._primaryTransmissionLight = null;\r\n this._ref = { ref: this };\r\n this._instanceInfo = new Map();\r\n this._needSceneColor = false;\r\n this._needSceneDepth = false;\r\n this._needSceneColorWithDepth = false;\r\n this._drawTransparent = false;\r\n this._objectColorMaps = [new Map()];\r\n }\r\n /** The sun light */\r\n get sunLight() {\r\n return this._sunLight;\r\n }\r\n set sunLight(light) {\r\n this._sunLight = light;\r\n }\r\n /** Primary directional light used by effects that need a main light direction. */\r\n get primaryDirectionalLight() {\r\n return this._primaryDirectionalLight;\r\n }\r\n set primaryDirectionalLight(light) {\r\n this._primaryDirectionalLight = light;\r\n }\r\n /** Primary punctual light used by thin-transmission effects when there is no main directional light. */\r\n get primaryTransmissionLight() {\r\n return this._primaryTransmissionLight;\r\n }\r\n set primaryTransmissionLight(light) {\r\n this._primaryTransmissionLight = light;\r\n }\r\n /** @internal */\r\n private getTransmissionLightScore(light: PunctualLight) {\r\n if (light.isDirectionLight()) {\r\n return -1;\r\n }\r\n const color = light.diffuseAndIntensity;\r\n const luma = color.x * 0.2126 + color.y * 0.7152 + color.z * 0.0722;\r\n const range = Math.max(1, light.positionAndRange.w);\r\n const typeWeight = light.isSpotLight()\r\n ? 1.2\r\n : light.isPointLight()\r\n ? 1.08\r\n : light.isRectLight()\r\n ? 1.02\r\n : 1;\r\n return Math.max(color.w, 0) * Math.max(luma, 0) * Math.sqrt(range) * typeWeight;\r\n }\r\n /** @internal */\r\n needSceneColor() {\r\n return this._needSceneColor;\r\n }\r\n /** @internal */\r\n needSceneDepth() {\r\n return this._needSceneDepth;\r\n }\r\n /** @internal */\r\n needSceneColorWithDepth() {\r\n return this._needSceneColorWithDepth;\r\n }\r\n /** Whether this render queue has transparent objects to be drawn */\r\n get drawTransparent() {\r\n return this._drawTransparent;\r\n }\r\n /** The render pass to which the render queue belongs */\r\n get renderPass() {\r\n return this._renderPass;\r\n }\r\n /**\r\n * Gets the items of the render queue\r\n */\r\n get itemList() {\r\n return this._itemList;\r\n }\r\n /**\r\n * Gets the shadowed lights\r\n */\r\n get shadowedLights() {\r\n return this._shadowedLightList;\r\n }\r\n /**\r\n * Gets the unshadowed lights\r\n */\r\n get unshadowedLights() {\r\n return this._unshadowedLightList;\r\n }\r\n /**\r\n * Gets the indirect reference of this\r\n */\r\n get ref() {\r\n return this._ref;\r\n }\r\n /**\r\n * Gets the instance information for given drawable object\r\n * @param drawable - The drawable object\r\n * @returns The instane information for given drawable object, null if no exists\r\n */\r\n getInstanceInfo(drawable: Drawable) {\r\n return this._instanceInfo.get(drawable);\r\n }\r\n /**\r\n * Gets the maximum batch size of a given device\r\n * @returns The maximum batch size of the device\r\n *\r\n * @internal\r\n */\r\n getMaxBatchSize() {\r\n return getDevice().getDeviceCaps().shaderCaps.maxUniformBufferSize / 64;\r\n }\r\n /**\r\n * Push a punctual light\r\n * @param light - The light to be pushed\r\n */\r\n pushLight(light: PunctualLight) {\r\n if (light.castShadow) {\r\n this._shadowedLightList.push(light);\r\n } else {\r\n this._unshadowedLightList.push(light);\r\n }\r\n if (light.isDirectionLight()) {\r\n if (!this._primaryDirectionalLight || light.intensity > this._primaryDirectionalLight.intensity) {\r\n this._primaryDirectionalLight = light;\r\n }\r\n if (light.sunLight) {\r\n this.sunLight = light;\r\n }\r\n } else if (\r\n !this._primaryTransmissionLight ||\r\n this.getTransmissionLightScore(light) > this.getTransmissionLightScore(this._primaryTransmissionLight)\r\n ) {\r\n this._primaryTransmissionLight = light;\r\n }\r\n }\r\n /**\r\n * Push items from another render queue\r\n * @param queue - The render queue to be pushed\r\n */\r\n pushRenderQueue(queue: RenderQueue) {\r\n const newItemLists = queue._itemList;\r\n if (!newItemLists) {\r\n return;\r\n }\r\n if (!this._itemList) {\r\n this._itemList = this.newRenderItemList();\r\n }\r\n this._itemList.opaque.lit.push(...newItemLists.opaque.lit);\r\n this._itemList.opaque.unlit.push(...newItemLists.opaque.unlit);\r\n this._itemList.transmission.lit.push(...newItemLists.transmission.lit);\r\n this._itemList.transmission.unlit.push(...newItemLists.transmission.unlit);\r\n this._itemList.transparent.lit.push(...newItemLists.transparent.lit);\r\n this._itemList.transparent.unlit.push(...newItemLists.transparent.unlit);\r\n this._itemList.transmission_trans.lit.push(...newItemLists.transmission_trans.lit);\r\n this._itemList.transmission_trans.unlit.push(...newItemLists.transmission_trans.unlit);\r\n this._needSceneColor ||= queue._needSceneColor;\r\n this._needSceneDepth ||= queue._needSceneDepth;\r\n this._needSceneColorWithDepth ||= queue._needSceneColorWithDepth;\r\n this._drawTransparent ||= queue._drawTransparent;\r\n this._sunLight ||= queue._sunLight;\r\n if (\r\n queue._primaryDirectionalLight &&\r\n (!this._primaryDirectionalLight ||\r\n queue._primaryDirectionalLight.intensity > this._primaryDirectionalLight.intensity)\r\n ) {\r\n this._primaryDirectionalLight = queue._primaryDirectionalLight;\r\n }\r\n if (\r\n queue._primaryTransmissionLight &&\r\n (!this._primaryTransmissionLight ||\r\n this.getTransmissionLightScore(queue._primaryTransmissionLight) >\r\n this.getTransmissionLightScore(this._primaryTransmissionLight))\r\n ) {\r\n this._primaryTransmissionLight = queue._primaryTransmissionLight;\r\n }\r\n this._objectColorMaps.push(...queue._objectColorMaps);\r\n }\r\n /**\r\n * Push an item to the render queue\r\n * @param camera - The camera for drawing the item\r\n * @param drawable - The object to be drawn\r\n */\r\n push(camera: Camera, drawable: Drawable) {\r\n if (drawable) {\r\n drawable.pushRenderQueueRef(this._ref);\r\n if (!this._itemList) {\r\n this._itemList = this.newRenderItemList();\r\n }\r\n const material = drawable.getMaterial();\r\n const trans =\r\n this._renderPass.type === RENDER_PASS_TYPE_SHADOWMAP &&\r\n material?.useTransparentShadowCasterForPass?.(this._renderPass.type)\r\n ? false\r\n : drawable.getQueueType() === QUEUE_TRANSPARENT;\r\n const unlit = drawable.isUnlit();\r\n const needDepth = !!drawable.needSceneDepth();\r\n const transmission = !!drawable.needSceneColor() || needDepth;\r\n this._needSceneColor ||= transmission;\r\n this._needSceneDepth ||= drawable.needSceneDepth();\r\n this._needSceneColorWithDepth ||= transmission && needDepth;\r\n this._drawTransparent ||= trans;\r\n if (camera.getPickResultResolveFunc()) {\r\n drawable.getMaterial()!.objectColor = drawable.getObjectColor();\r\n this._objectColorMaps[0].set(drawable.getDrawableId(), drawable);\r\n }\r\n if (drawable.isBatchable()) {\r\n const instanceList = trans\r\n ? transmission\r\n ? unlit\r\n ? this._itemList.transmission_trans.unlit[0].instanceList\r\n : this._itemList.transmission_trans.lit[0].instanceList\r\n : unlit\r\n ? this._itemList.transparent.unlit[0].instanceList\r\n : this._itemList.transparent.lit[0].instanceList\r\n : transmission\r\n ? unlit\r\n ? this._itemList.transmission.unlit[0].instanceList\r\n : this._itemList.transmission.lit[0].instanceList\r\n : unlit\r\n ? this._itemList.opaque.unlit[0].instanceList\r\n : this._itemList.opaque.lit[0].instanceList;\r\n const hash = drawable.getInstanceId(this._renderPass);\r\n let drawableList = instanceList[hash];\r\n if (!drawableList) {\r\n drawableList = [];\r\n instanceList[hash] = drawableList;\r\n }\r\n drawableList.push(drawable);\r\n } else {\r\n const list = trans\r\n ? transmission\r\n ? unlit\r\n ? this._itemList.transmission_trans.unlit[0]\r\n : this._itemList.transmission_trans.lit[0]\r\n : unlit\r\n ? this._itemList.transparent.unlit[0]\r\n : this._itemList.transparent.lit[0]\r\n : transmission\r\n ? unlit\r\n ? this._itemList.transmission.unlit[0]\r\n : this._itemList.transmission.lit[0]\r\n : unlit\r\n ? this._itemList.opaque.unlit[0]\r\n : this._itemList.opaque.lit[0];\r\n const skinAnimation = !!drawable.getBoneMatrices();\r\n const morphAnimation = !!drawable.getMorphData();\r\n let queue: RenderQueueItem[];\r\n if (skinAnimation && morphAnimation) {\r\n queue = list.skinAndMorphItemList;\r\n } else if (skinAnimation) {\r\n queue = list.skinItemList;\r\n } else if (morphAnimation) {\r\n queue = list.morphItemList;\r\n } else {\r\n queue = list.itemList;\r\n }\r\n this.binaryInsert(queue, {\r\n drawable,\r\n sortDistance: drawable.getSortDistance(camera),\r\n instanceData: null\r\n });\r\n if (material) {\r\n list.materialList.add(material.coreMaterial);\r\n }\r\n drawable.applyTransformUniforms(this);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n getDrawableByColor(c: Uint8Array<ArrayBuffer>) {\r\n const id = (c[0] << 24) + (c[1] << 16) + (c[2] << 8) + c[3];\r\n for (const m of this._objectColorMaps) {\r\n const drawable = m.get(id);\r\n if (drawable) {\r\n return drawable;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Removes all items in the render queue\r\n */\r\n reset() {\r\n if (this._itemList) {\r\n // Release all render bundles\r\n for (const k of objectKeys(this._itemList)) {\r\n const itemListBundle: RenderItemListBundle = this._itemList[k];\r\n for (const l of objectKeys(itemListBundle)) {\r\n const listInfo: RenderItemListInfo[] = itemListBundle[l];\r\n for (const info of listInfo) {\r\n if (info.renderQueue === this) {\r\n if (info.renderBundle) {\r\n info.renderBundle.dispose();\r\n }\r\n if (info.skinRenderBundle) {\r\n info.skinRenderBundle.dispose();\r\n }\r\n if (info.morphRenderBundle) {\r\n info.morphRenderBundle.dispose();\r\n }\r\n if (info.skinAndMorphRenderBundle) {\r\n info.skinAndMorphRenderBundle.dispose();\r\n }\r\n if (info.instanceRenderBundle) {\r\n info.instanceRenderBundle.dispose();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this._itemList = null;\r\n }\r\n this._shadowedLightList = [];\r\n this._unshadowedLightList = [];\r\n this._sunLight = null;\r\n this._primaryDirectionalLight = null;\r\n this._primaryTransmissionLight = null;\r\n this._needSceneColor = false;\r\n this._needSceneDepth = false;\r\n this._needSceneColorWithDepth = false;\r\n this._drawTransparent = false;\r\n }\r\n /** @internal */\r\n end(camera: Camera, createRenderBundles?: boolean) {\r\n const frameCounter = getDevice().frameInfo.frameCounter;\r\n const itemList = this._itemList!;\r\n if (!this.itemList) {\r\n return this;\r\n }\r\n const lists = [\r\n itemList.opaque.lit,\r\n itemList.opaque.unlit,\r\n itemList.transmission.lit,\r\n itemList.transmission.unlit,\r\n itemList.transparent.lit,\r\n itemList.transparent.unlit,\r\n itemList.transmission_trans.lit,\r\n itemList.transmission_trans.unlit\r\n ];\r\n for (let i = 0; i < lists.length; i++) {\r\n const list = lists[i];\r\n for (const info of list) {\r\n if (info.renderQueue !== this) {\r\n continue;\r\n }\r\n const instanceList = info.instanceList;\r\n for (const x in instanceList) {\r\n const drawables = instanceList[x];\r\n let bindGroup: Nullable<CachedBindGroup> = null;\r\n let item: Nullable<RenderQueueItem> = null;\r\n for (let i = 0; i < drawables.length; i++) {\r\n const drawable = drawables[i];\r\n const instanceUniforms = drawable.getInstanceUniforms();\r\n const instanceUniformsSize = instanceUniforms?.length ?? 0;\r\n const stride = ShaderHelper.MATERIAL_INSTANCE_DATA_OFFSET * 4 + instanceUniformsSize;\r\n if (!bindGroup || bindGroup.offset + stride > maxBufferSizeInFloats) {\r\n bindGroup = this._bindGroupAllocator.allocateInstanceBindGroup(frameCounter, stride);\r\n item = {\r\n drawable,\r\n sortDistance: drawable.getSortDistance(camera),\r\n instanceData: {\r\n bindGroup,\r\n offset: bindGroup.offset,\r\n numInstances: 0,\r\n stride\r\n }\r\n };\r\n this.binaryInsert(info.instanceItemList, item);\r\n drawable.applyInstanceOffsetAndStride(this, stride, bindGroup.offset);\r\n }\r\n const instanceInfo = { bindGroup, offset: bindGroup.offset };\r\n this._instanceInfo.set(drawable, instanceInfo);\r\n drawable.applyTransformUniforms(this);\r\n drawable.applyMaterialUniforms(instanceInfo);\r\n bindGroup.offset += stride;\r\n item!.instanceData!.numInstances++;\r\n const mat = drawable.getMaterial();\r\n if (mat) {\r\n info.materialList.add(mat.coreMaterial);\r\n }\r\n }\r\n }\r\n info.instanceList = {};\r\n if (createRenderBundles) {\r\n if (info.itemList.length > 0) {\r\n info.renderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.skinItemList.length > 0) {\r\n info.skinRenderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.morphItemList.length > 0) {\r\n info.morphRenderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.skinAndMorphItemList.length > 0) {\r\n info.skinAndMorphRenderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.instanceItemList.length > 0) {\r\n info.instanceRenderBundle = new RenderBundleWrapper();\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n binaryInsert(itemList: RenderQueueItem[], item: RenderQueueItem) {\r\n let left = 0;\r\n let right = itemList.length - 1;\r\n const newInstanceId = item.drawable.getMaterial()!.instanceId;\r\n while (left <= right) {\r\n const mid = Math.floor((left + right) / 2);\r\n const instanceId = itemList[mid].drawable.getMaterial()!.instanceId;\r\n if (instanceId === newInstanceId) {\r\n itemList.splice(mid + 1, 0, item);\r\n return;\r\n } else if (instanceId < newInstanceId) {\r\n left = mid + 1;\r\n } else {\r\n right = mid - 1;\r\n }\r\n }\r\n itemList.splice(left, 0, item);\r\n }\r\n /**\r\n * Sorts the items in the render queue for rendering\r\n */\r\n sortTransparentItems(cameraPos: Vector3) {\r\n if (this._itemList) {\r\n this._itemList.transparent.lit[0].itemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.lit[0].skinItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.lit[0].morphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.lit[0].skinAndMorphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].itemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].skinItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].morphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].skinAndMorphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n }\r\n }\r\n /** Disposes the render queue */\r\n protected onDispose() {\r\n super.onDispose();\r\n this.reset();\r\n }\r\n\r\n private drawableDistanceToCamera(drawable: Drawable, cameraPos: Vector3) {\r\n const drawablePos = drawable.getNode().getWorldPosition(tmpDrawablePos);\r\n return Vector3.distanceSq(drawablePos, cameraPos);\r\n }\r\n private newRenderItemListInfo() {\r\n return {\r\n itemList: [],\r\n skinItemList: [],\r\n morphItemList: [],\r\n skinAndMorphItemList: [],\r\n instanceItemList: [],\r\n materialList: new Set(),\r\n instanceList: {},\r\n renderQueue: this\r\n } as RenderItemListInfo;\r\n }\r\n private newRenderItemListBundle() {\r\n return {\r\n lit: [this.newRenderItemListInfo()],\r\n unlit: [this.newRenderItemListInfo()]\r\n };\r\n }\r\n private newRenderItemList() {\r\n return {\r\n opaque: this.newRenderItemListBundle(),\r\n transmission: this.newRenderItemListBundle(),\r\n transparent: this.newRenderItemListBundle(),\r\n transmission_trans: this.newRenderItemListBundle()\r\n };\r\n }\r\n}\r\n"],"names":["maxBufferSizeInFloats","InstanceBindGroupAllocator","_instanceBindGroupLayout","_bindGroupList","_allocFrameStamp","allocateInstanceBindGroup","framestamp","sizeInFloats","k","offset","dirty","buildInfo","ProgramBuilder","getDevice","buildRender","vertex","pb","ShaderHelper","getInstanceDataUniformName","vec4","uniformBuffer","main","fragment","bindGroup","createBindGroup","buffer","Float32Array","push","defaultInstanceBindGroupAlloator","tmpDrawablePos","Vector3","RenderQueue","Disposable","_needSceneDepth","_needSceneColorWithDepth","renderPass","bindGroupAllocator","_bindGroupAllocator","_itemList","_renderPass","_shadowedLightList","_unshadowedLightList","_sunLight","_primaryDirectionalLight","_primaryTransmissionLight","_ref","ref","_instanceInfo","Map","_needSceneColor","_drawTransparent","_objectColorMaps","sunLight","light","primaryDirectionalLight","primaryTransmissionLight","getTransmissionLightScore","isDirectionLight","color","diffuseAndIntensity","luma","x","y","z","range","Math","max","positionAndRange","w","typeWeight","isSpotLight","isPointLight","isRectLight","sqrt","needSceneColor","needSceneDepth","needSceneColorWithDepth","drawTransparent","itemList","shadowedLights","unshadowedLights","getInstanceInfo","drawable","get","getMaxBatchSize","getDeviceCaps","shaderCaps","maxUniformBufferSize","pushLight","castShadow","intensity","pushRenderQueue","queue","newItemLists","newRenderItemList","opaque","lit","unlit","transmission","transparent","transmission_trans","camera","pushRenderQueueRef","material","getMaterial","trans","type","RENDER_PASS_TYPE_SHADOWMAP","useTransparentShadowCasterForPass","getQueueType","QUEUE_TRANSPARENT","isUnlit","needDepth","getPickResultResolveFunc","objectColor","getObjectColor","set","getDrawableId","isBatchable","instanceList","hash","getInstanceId","drawableList","list","skinAnimation","getBoneMatrices","morphAnimation","getMorphData","skinAndMorphItemList","skinItemList","morphItemList","binaryInsert","sortDistance","getSortDistance","instanceData","materialList","add","coreMaterial","applyTransformUniforms","getDrawableByColor","c","id","m","reset","objectKeys","itemListBundle","l","listInfo","info","renderQueue","renderBundle","dispose","skinRenderBundle","morphRenderBundle","skinAndMorphRenderBundle","instanceRenderBundle","end","createRenderBundles","frameCounter","frameInfo","lists","i","length","drawables","item","instanceUniforms","getInstanceUniforms","instanceUniformsSize","stride","MATERIAL_INSTANCE_DATA_OFFSET","numInstances","instanceItemList","applyInstanceOffsetAndStride","instanceInfo","applyMaterialUniforms","mat","RenderBundleWrapper","left","right","newInstanceId","instanceId","mid","floor","splice","sortTransparentItems","cameraPos","sort","a","b","drawableDistanceToCamera","onDispose","drawablePos","getNode","getWorldPosition","distanceSq","newRenderItemListInfo","Set","newRenderItemListBundle"],"mappings":"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"}
|