<div style="font-family: Arial, sans-serif; font-size: 14px;">Same approach (as Holger describes for X_ITE) applies also to Castle Game Engine and Castle Model Viewer.</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;">When loading glTF, we convert 100% of the information to X3D nodes. Most of them are standard X3D nodes, though we added some extensions to make it easier.  <span>It's all documented on <span><a target="_blank" rel="noreferrer nofollow noopener" href="https://github.com/michaliskambi/x3d-tests/wiki/Converting-glTF-to-X3D">https://github.com/michaliskambi/x3d-tests/wiki/Converting-glTF-to-X3D</a> . We have deliberately made it easy by "aligning" some X3D features with glTF, e.g. X3D 4 PhysicalMaterial is very much like standard glTF material (sans glTF extensions to material, for which X_ITE has extensions to X3D which I also like!).</span></span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span><span></span></span><span><br></span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span>Our supported nodes, along with some extensions, are documented on pages linked from <span><a target="_blank" rel="noreferrer nofollow noopener" href="https://castle-engine.io/x3d">https://castle-engine.io/x3d</a></span> (see the sidebar).</span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><div><br></div><div><span>Note: This answer is not specific to glTF. We load _all_ 3D models (we support about 15 model formats) this way. So this includes formats like Collada, IFC, Spine JSON etc. See <span><a target="_blank" rel="noreferrer nofollow noopener" href="https://castle-engine.io/model_formats">https://castle-engine.io/model_formats</a></span> . All the loaders are defined in <a target="_blank" rel="noreferrer nofollow noopener" href="https://github.com/castle-engine/castle-engine/tree/master/src/scene/load">https://github.com/castle-engine/castle-engine/tree/master/src/scene/load</a> -- as you can verify, the "loaders" are really just "converters into X3D nodes graph".</span></div><div><span></span></div><div><br></div><div><span>Note: </span>This answer is not specific to web either :) We use this approach for all platforms in CGE, including web.</div><div><br></div><div>Regards,</div><div>Michalis</div></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div>
<div style="font-family: Arial, sans-serif; font-size: 14px;" class="protonmail_signature_block protonmail_signature_block-empty">
    <div class="protonmail_signature_block-user protonmail_signature_block-empty">
        
            </div>
    
            <div class="protonmail_signature_block-proton protonmail_signature_block-empty">
        
            </div>
</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div class="protonmail_quote">
        On Tuesday, March 31st, 2026 at 17:32, GPU Group via x3d-public <x3d-public@web3d.org> wrote:<br>
        <blockquote class="protonmail_quote" type="cite">
            <div dir="ltr">Q. What's the best/right way to support gltf2 in a web3d browser:<div>a) on loading convert to web3d nodes</div><div>b) load into a gltf node and treat as a sub-scenegraph, and use a gltf2-specific rendering pipeline on each frame</div><div>-Doug Sanden</div></div>

        </blockquote><br>
    </div>