Skip to content

Commit

Permalink
Added multiple modes avatar , outline, both
Browse files Browse the repository at this point in the history
  • Loading branch information
mayankdigii committed Nov 22, 2024
1 parent 630e3e9 commit 5513820
Showing 1 changed file with 56 additions and 47 deletions.
103 changes: 56 additions & 47 deletions src/lib/babylon/render.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,55 +147,64 @@ export async function render(canvas: HTMLCanvasElement, config: PreviewConfig):
center(scene)
}

engine.runRenderLoop(() => {
// First Pass: Render Outline Shader
outlineShaderMaterial.backFaceCulling = false
// Provide the base color
outlineShaderMaterial.setColor4('_BaseColor', new Color4(1, 0.75, 0.8, 1))

for (const mesh of scene.meshes) {
if (meshIDsToOutline?.includes(mesh?.id)) {
mesh.material = outlineShaderMaterial // Assign the outline shader material
}
}

engine.clear(scene.clearColor, true, true)
scene.render()

// Apply ShaderMaterials
for (const mesh of scene.meshes) {
switch (mesh?.id) {
case 'M_Hair_Standard_01':
mesh.material = hairShaderMaterial
break
case 'M_uBody_Hoodie_01':
mesh.material = upperBodyShaderMaterial
break
case 'M_uBody_Hoodie_02':
mesh.material = upperBodyShaderMaterial
break
case 'M_lBody_LongPants_01_primitive0':
mesh.material = lowerBodyShaderMaterial
break
case 'M_lBody_LongPants_01_primitive1':
mesh.material = lowerBodyShaderMaterial
break
case 'M_Feet_Sneakers_01_primitive0':
mesh.material = feetShaderMaterial
break
case 'M_Feet_Sneakers_02':
mesh.material = feetShaderMaterial
break
// options could be avatar, outline, both
const renderMode: any = "avatar";

default:
// Optional: Handle cases where no match is found
break
}
hl.innerGlow = false
mesh.computeBonesUsingShaders = false
engine.runRenderLoop(() => {


switch (renderMode) {
case 'outline':
outlineShaderMaterial.backFaceCulling = false
outlineShaderMaterial.setColor4('_BaseColor', new Color4(1, 0.75, 0.8, 1))
for (const mesh of scene.meshes) {
if (meshIDsToOutline?.includes(mesh?.id)) {
mesh.material = outlineShaderMaterial // Assign the outline shader material
}
}
engine.clear(scene.clearColor, true, true)
scene.render()
break
case 'avatar':
for (const mesh of scene.meshes) {
switch (mesh?.id) {
case 'M_Hair_Standard_01':
mesh.material = hairShaderMaterial
break
case 'M_uBody_Hoodie_01':
mesh.material = upperBodyShaderMaterial
break
case 'M_uBody_Hoodie_02':
mesh.material = upperBodyShaderMaterial
break
case 'M_lBody_LongPants_01_primitive0':
mesh.material = lowerBodyShaderMaterial
break
case 'M_lBody_LongPants_01_primitive1':
mesh.material = lowerBodyShaderMaterial
break
case 'M_Feet_Sneakers_01_primitive0':
mesh.material = feetShaderMaterial
break
case 'M_Feet_Sneakers_02':
mesh.material = feetShaderMaterial
break

default:
// Optional: Handle cases where no match is found
break
}
hl.innerGlow = false
mesh.computeBonesUsingShaders = false
}
scene.render()
break
case 'both':
break
default:
console.warn(`Unknown render mode: ${renderMode}`)
break
}
engine.clear(undefined, true, true)
scene.render()
})

// return preview controller
Expand Down

0 comments on commit 5513820

Please sign in to comment.