JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdn.babylonjs.com/babylon.max.js"></script>
<script src="https://cdn.babylonjs.com/loaders/babylonjs.loaders.min.js"></script>
<canvas></canvas>

CSS

canvas {
  width: 100%;
  height: 100%;
}

JavaScript

const canvas = document.querySelector('canvas');
  const engine = new BABYLON.Engine(canvas, true);
  const createScene = function () {
  const scene = new BABYLON.Scene(engine);
  const hemi = new BABYLON.HemisphericLight();
  hemi.intensity = 0.5;
  hemi.diffuse = hemi.specular = new BABYLON.Color3(0.3, 0.3, 1);
  const sun = new BABYLON.DirectionalLight('sun', new BABYLON.Vector3(0.5, -1, -1), scene);
  const shadowGenerator = new BABYLON.ShadowGenerator(1024, sun);
  //shadowGenerator.bias = 0.001;
  //shadowGenerator.normalBias = 0.01;
  sun.shadowMaxZ = 5;
  sun.shadowMinZ = 0.1;
  //shadowGenerator.useContactHardeningShadow = true;
  //shadowGenerator.contactHardeningLightSizeUVRatio = 0.05;
  //shadowGenerator.setDarkness(0.1);

  //Adding an Arc Rotate Camera
  const camera = new BABYLON.ArcRotateCamera("Camera", 0, 0.8, 10, BABYLON.Vector3.Zero(), scene);

  // The first parameter can be used to specify which mesh to import. Here we import all meshes
  BABYLON.SceneLoader.Append("//tonioloewald.github.io/bindinator.js//test/", "omnidude.glb", scene, function (newMeshes) {
    scene.activeCamera = null;
    for(const mesh of newMeshes.meshes) {
      shadowGenerator.addShadowCaster(mesh);
      mesh.receiveShadows = true;
    }
    scene.createDefaultCameraOrLight(true);
    scene.activeCamera.attachControl(canvas, false);
    scene.activeCamera.setPosition(new BABYLON.Vector3(1.5, 1, 1.5));
  });

  return scene;
}
const scene = createScene();
engine.runRenderLoop(scene.render.bind(scene));