Scope with zoom
This example shows how to utilize useFBO hook to create a sniper scope zoom effect, complete with lens distortion and crosshairs.
<script lang="ts">
import { Canvas } from '@threlte/core'
import Scene from './Scene.svelte'
</script>
<div>
<ul>
<li>Press <b>S</b> to toggle scope mode.</li>
<li><b>Mousewheel</b> or <b>A/D</b> to adjust zoom level.</li>
</ul>
<Canvas>
<Scene />
</Canvas>
</div>
<style>
ul {
position: absolute;
top: 0;
left: 0;
}
div {
height: 100%;
}
</style>
<script
lanng="ts"
context="module"
>
import { writable } from 'svelte/store'
import { tweened } from 'svelte/motion'
export const baseFov = 60
export const scoping = writable(false)
export const zoomedFov = tweened(18, {
duration: 200
})
</script>
<script lang="ts">
import { useTask, useThrelte } from '@threlte/core'
import { onDestroy } from 'svelte'
import { Quaternion, Vector3 } from 'three'
import { clamp } from 'three/src/math/MathUtils.js'
const { renderer, camera } = useThrelte()
// Pointer lock with unadjusted movement: https://github.com/slightlyoff/unadjusted_pointer_lock_explainer
const requestPointerLock = (myTargetElement: HTMLElement) => {
//@ts-ignore
const promise = myTargetElement.requestPointerLock({
unadjustedMovement: true
})
//@ts-ignore
if (!promise) {
console.log('disabling mouse acceleration is not supported, locking pointer without it')
return
}
return (
promise
//@ts-ignore
.then()
//@ts-ignore
.catch((error) => {
if (error.name === 'NotSupportedError') {
return myTargetElement.requestPointerLock()
}
})
)
}
let pointerLocked = false
/*
Zoom in and out with mousewheel.
I used a passive listener on the renderer dom element because in the docs we show
examples as an iframe. Its interaction with lockng pointer was causing the page
to scroll etc.
*/
renderer?.domElement.addEventListener(
'wheel',
(e) => {
if (pointerLocked) {
e.preventDefault()
e.stopPropagation()
e.stopImmediatePropagation()
zoomedFov.set(clamp($zoomedFov + e.deltaY * 0.05, 0.5, baseFov * 0.5))
}
},
{
passive: false
}
)
$: mouseSensitivity = 0.00008 * clamp($zoomedFov * 0.5, 1, 20)
let phi = 0
let theta = -0.16
const qx = new Quaternion()
const qz = new Quaternion()
useTask(() => {
qx.setFromAxisAngle(new Vector3(0, -1, 0), phi)
qz.setFromAxisAngle(new Vector3(1, 0, 0), theta)
const cameraQuaternion = new Quaternion()
cameraQuaternion.multiply(qx)
cameraQuaternion.multiply(qz)
$camera.quaternion.copy(cameraQuaternion)
})
onDestroy(() => {
document.exitPointerLock()
})
</script>
<svelte:document
on:keydown={(e) => {
if (e.key === 's') scoping.set(!$scoping)
if (e.key === 'a') zoomedFov.set(Math.min($zoomedFov + 2, baseFov * 0.5))
if (e.key === 'd') zoomedFov.set(Math.max(0.5, $zoomedFov - 2))
}}
on:pointerlockchange={() => {
pointerLocked = document.pointerLockElement ? true : false
}}
on:click={async () => {
if (!pointerLocked) {
requestPointerLock(renderer?.domElement)
}
}}
on:mousemove={({ movementX, movementY }) => {
if (!pointerLocked) return
phi += movementX * mouseSensitivity
theta -= movementY * mouseSensitivity * 1.5
}}
/>
<script lang="ts">
import { T } from '@threlte/core'
// world
import { Sky } from '@threlte/extras'
import Ducks from './world/Ducks.svelte'
import Island from './world/Island.svelte'
import Water from './world/Water.svelte'
// scope
import Controls, { baseFov } from './Controls.svelte'
import LensView from './scope/LensView.svelte'
import Scope from './scope/Scope.svelte'
</script>
<T.PerspectiveCamera
makeDefault
position={[0, 1.5, 20]}
fov={baseFov}
>
<Scope let:ref>
<LensView scope={ref} />
</Scope>
</T.PerspectiveCamera>
<Controls />
<!-- World setup -->
<Sky
elevation={0.5}
azimuth={130}
/>
<Water />
<Island
scale={0.2}
position.x={-5}
position.y={-0.01}
position.z={0}
/>
<Ducks />
<script lang="ts">
import { T, useTask, useThrelte } from '@threlte/core'
import { useFBO, useTexture } from '@threlte/extras'
import { Group, PerspectiveCamera } from 'three'
import { baseFov, scoping, zoomedFov } from '../Controls.svelte'
import fragmentShader from './scope_fs.glsl?raw'
import vertexShader from './scope_vs.glsl?raw'
const { camera, renderer, scene, size } = useThrelte()
export let scope: Group
// render scene at a lower resolution but multiple samples for antialiasing
const renderTarget = useFBO($size.width * 0.5, $size.height * 0.5, {
samples: 8
})
$: aspect = $size.width / $size.height
useTask(() => {
if (!scope || !$scoping) return
const cam = $camera as PerspectiveCamera
scope.visible = false
cam.fov = $zoomedFov
cam.updateProjectionMatrix()
cam.matrixWorldNeedsUpdate = true
renderer.setRenderTarget(renderTarget)
renderer.render(scene, cam)
renderer.setRenderTarget(null)
cam.fov = baseFov
cam.updateProjectionMatrix()
scope.visible = true
})
const reticleTexture = useTexture('/textures/NightforceScopeReticle2.png')
</script>
<T.Mesh
position.z={19.5}
position.y={-0.1}
>
<T.CircleGeometry args={[1.8]} />
<T.ShaderMaterial
{fragmentShader}
{vertexShader}
uniforms={{
viewTexture: {
value: renderTarget.texture
},
reticleTexture: {
value: null
},
aspect: {
value: 1
}
}}
uniforms.reticleTexture.value={$reticleTexture}
uniforms.aspect.value={aspect}
/>
</T.Mesh>
<!--
Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf
Command: npx @threlte/gltf@2.0.1 scope.glb
Author: XarMeX (https://sketchfab.com/XarMeX)
License: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
Source: https://sketchfab.com/3d-models/sniper-scope-nightforce-v2-907abe0a96e243b3b83b6abe47f681b7
Title: Sniper Scope NightForce_V2
-->
<script lang="ts">
import * as THREE from 'three'
import { T, type Props, type Events, type Slots, forwardEventHandlers } from '@threlte/core'
import { useGltf } from '@threlte/extras'
import { tweened, type Tweened } from 'svelte/motion'
import { scoping } from '../Controls.svelte'
import { DEG2RAD } from 'three/src/math/MathUtils.js'
type $$Props = Props<THREE.Group>
type $$Events = Events<THREE.Group>
type $$Slots = Slots<THREE.Group> & { fallback: {}; error: { error: any }; inner: any }
export const ref = new THREE.Group()
const gltf = useGltf('/models/scope.glb')
const component = forwardEventHandlers()
const rotationX = tweened(-3)
const position: Tweened<THREE.Vector3Tuple> = tweened([0.4, -0.15, -1])
$: {
if ($scoping) {
rotationX.set(0)
position.set([0, 0, -0.496])
} else {
rotationX.set(-3)
position.set([0.4, -0.15, -1])
}
}
</script>
<T
is={ref}
dispose={false}
{...$$restProps}
bind:this={$component}
scale={0.02}
position={$position}
rotation.y={DEG2RAD * $rotationX}
>
{#await gltf}
<slot name="fallback" />
{:then gltf}
<T.Mesh
geometry={gltf.nodes.Object_2.geometry}
material={gltf.materials.initialShadingGroup}
rotation={[-Math.PI / 2, 0, 0]}
/>
<slot name="inner" />
{:catch error}
<slot
name="error"
{error}
/>
{/await}
<slot {ref} />
</T>
varying vec2 vUv;
uniform sampler2D viewTexture;
uniform sampler2D reticleTexture;
uniform float aspect;
// https://www.shadertoy.com/view/4lSGRw
vec2 distortUV(vec2 uv, float k, float kcube) {
vec2 t = uv - .5f;
float r2 = t.x * t.x + t.y * t.y;
float f = 0.f;
if (kcube == 0.0f) {
f = 1.f + r2 * k;
} else {
f = 1.f + r2 * (k + kcube * sqrt(r2));
}
vec2 nUv = f * t + .5f;
return nUv;
}
void main() {
float k = -1.1f;
float kcube = 0.5f;
float offset = .06f;
// Adjust UV ratio for sampling view texture
vec2 adjustedUv = vUv;
if (aspect > 1.0f) {
float scale = 1.0f / aspect;
adjustedUv.x = scale * (adjustedUv.x - 0.5f) + 0.5f;
} else {
float scale = aspect;
adjustedUv.y = scale * (adjustedUv.y - 0.5f) + 0.5f;
}
vec4 reticle = texture2D(reticleTexture, vUv);
// circular vignettte
vec2 vignetteUv = vUv - vec2(0.5f);
float circlularDist = length(vignetteUv) * 2.f;
float vig = 1.f - smoothstep(0.7f, 0.99f, circlularDist);
// aberration + fisheye-like distortion
float red = texture2D(viewTexture, distortUV(adjustedUv, k + offset, kcube)).r;
float green = texture2D(viewTexture, distortUV(adjustedUv, k, kcube)).g;
float blue = texture2D(viewTexture, distortUV(adjustedUv, k - offset, kcube)).b;
vec3 finalColor = mix(vec3(red, green, blue) * vig, reticle.rgb, smoothstep(0.f, 1.f, reticle.a * 2.f));
gl_FragColor = vec4(finalColor, 1.f);
#include <tonemapping_fragment>
#include <colorspace_fragment>
}
varying vec2 vUv;
varying vec3 vPosition;
void main() {
vec4 modelPosition = modelMatrix * vec4(position, 1.0f);
vec4 viewPosition = viewMatrix * modelPosition;
vec4 projectedPosition = projectionMatrix * viewPosition;
gl_Position = projectedPosition;
vUv = uv;
vPosition = (modelMatrix * vec4(position, 1.0f)).xyz;
}
<!--
Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf
Command: npx @threlte/gltf@1.0.0-next.13 E:\projects\2024\model\static\models\duck_floaty.glb --root /models/ --types --printwidth 120 --precision 2 --draco true --transform --resolution 1024 --simplify --weld 0.001 --ratio 0.0075 --error 1e-9
Author: raholder0909 (https://sketchfab.com/raholder0909)
License: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
Source: https://sketchfab.com/3d-models/duck-floaty-1467f79dc22e46c49e68a688865e9f70
Title: duck floaty
-->
<script lang="ts">
import type * as THREE from 'three'
import { Group } from 'three'
import { T, type Props, type Events, type Slots, forwardEventHandlers } from '@threlte/core'
import { useGltf, InstancedMeshes } from '@threlte/extras'
type $$Props = Props<THREE.Group>
type $$Events = Events<THREE.Group>
type $$Slots = Slots<THREE.Group> & { fallback: {}; error: { error: any } }
export const ref = new Group()
type GLTFResult = {
nodes: {
Object_4: THREE.Mesh
Object_6: THREE.Mesh
}
materials: {
bill: THREE.MeshStandardMaterial
duck_body: THREE.MeshStandardMaterial
}
}
const gltf = useGltf<GLTFResult>('/models/duck_floaty-transformed.glb', { useDraco: true })
const component = forwardEventHandlers()
const duckSpread = 200
</script>
<T
is={ref}
dispose={false}
{...$$restProps}
bind:this={$component}
frustumCulled={false}
>
{#await gltf}
<slot name="fallback" />
{:then gltf}
<InstancedMeshes
meshes={gltf.nodes}
let:components={{ Object_4, Object_6 }}
>
{#each { length: 200 } as _, i}
{@const posX = Math.random() * duckSpread - duckSpread / 2}
{@const posZ = Math.random() * duckSpread - 300}
<T.Group
position.x={posX}
position.z={posZ}
scale={0.1}
>
<Object_4
position={[0, 1.59, 2.54]}
scale={0.43}
/>
<Object_6 position={[0, -0.03, 0]} />
</T.Group>
{/each}
</InstancedMeshes>
{:catch error}
<slot
name="error"
{error}
/>
{/await}
<slot {ref} />
</T>
<!--
Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf
Command: npx @threlte/gltf@1.0.0-next.13 E:\projects\2024\model\static\models\issum_the_town_on_capital_isle.glb --root /models/ --types --printwidth 120 --precision 100 --draco true --transform --resolution 1024 --simplify --weld 0.001 --ratio 0.0075 --error 1e-9
Author: Olee (https://sketchfab.com/Olee)
License: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
Source: https://sketchfab.com/3d-models/issum-the-town-on-capital-isle-e433923a64d549fabb2d30635d643ab6
Title: Issum, The town on Capital Isle
-->
<script lang="ts">
import type * as THREE from 'three'
import { Group } from 'three'
import { T, type Props, type Events, type Slots, forwardEventHandlers } from '@threlte/core'
import { useGltf } from '@threlte/extras'
type $$Props = Props<THREE.Group>
type $$Events = Events<THREE.Group>
type $$Slots = Slots<THREE.Group> & { fallback: {}; error: { error: any } }
export const ref = new Group()
type GLTFResult = {
nodes: {
Plane_0: THREE.Mesh
Hide003_0: THREE.Mesh
['Sheep-ver1017_0']: THREE.Mesh
['Sheep-ver1016_0']: THREE.Mesh
['Sheep-ver1015_0']: THREE.Mesh
['Sheep-ver1014_0']: THREE.Mesh
['Sheep-ver1001_0']: THREE.Mesh
['Sheep-ver1002_0']: THREE.Mesh
['Sheep-ver1003_0']: THREE.Mesh
['Sheep-ver1004_0']: THREE.Mesh
['Sheep-ver1009_0']: THREE.Mesh
['Sheep-ver1008_0']: THREE.Mesh
['Sheep-ver1007_0']: THREE.Mesh
['Sheep-ver1006_0']: THREE.Mesh
['Sheep-ver1005_0']: THREE.Mesh
['Sheep-ver1018_0']: THREE.Mesh
['Sheep-ver1019_0']: THREE.Mesh
['Sheep-ver1020_0']: THREE.Mesh
['Sheep-ver1021_0']: THREE.Mesh
Golem_0: THREE.SkinnedMesh
mff_island_large_0: THREE.Mesh
mff_island_small_0: THREE.Mesh
House_4_AO001_0: THREE.Mesh
House_3_AO001_0: THREE.Mesh
House_1_AO001_0: THREE.Mesh
House_2_AO001_0: THREE.Mesh
Tower_1_AO001_0: THREE.Mesh
HouseBase_8_AO003_0: THREE.Mesh
HouseBase_7_AO003_0: THREE.Mesh
HouseBase_7_AO004_0: THREE.Mesh
Tower_2_AO001_0: THREE.Mesh
Tower_2_AO002_0: THREE.Mesh
House_2_AO002_0: THREE.Mesh
House_4_AO002_0: THREE.Mesh
House_3_AO002_0: THREE.Mesh
Shed_AO001_0: THREE.Mesh
['Mill-wind001_0']: THREE.Mesh
HouseBase_8_AO004_0: THREE.Mesh
Fencing_Wood_Clean_3_AO001_0: THREE.Mesh
Fencing_Wood_Clean_3_AO002_0: THREE.Mesh
Fencing_Wood_Green_2_AO001_0: THREE.Mesh
Fencing_Wood_Green_2_AO002_0: THREE.Mesh
Fencing_Wood_Green_2_AO003_0: THREE.Mesh
Fencing_Wood_Green_2_AO004_0: THREE.Mesh
Fencing_Wood_Green_2_AO005_0: THREE.Mesh
Fencing_Wood_Green_2_AO006_0: THREE.Mesh
Fencing_Wood_Green_2_AO007_0: THREE.Mesh
Fencing_Wood_Green_2_AO008_0: THREE.Mesh
Fencing_Wood_Green_2_AO009_0: THREE.Mesh
Fencing_Wood_Green_2_AO010_0: THREE.Mesh
Fencing_Wood_Clean_8_AO001_0: THREE.Mesh
Fencing_Wood_Clean_5_AO001_0: THREE.Mesh
Shed_AO002_0: THREE.Mesh
House_1_AO002_0: THREE.Mesh
mff_stone_path_0001_0: THREE.Mesh
mff_stone_path_1001_0: THREE.Mesh
mff_stone_path_0002_0: THREE.Mesh
mff_stone_path_1002_0: THREE.Mesh
Paving_1_AO001_0: THREE.Mesh
Paving_3_AO001_0: THREE.Mesh
Paving_4_AO001_0: THREE.Mesh
Paving_4_AO002_0: THREE.Mesh
Paving_1_AO002_0: THREE.Mesh
Paving_1_AO003_0: THREE.Mesh
Paving_1_AO004_0: THREE.Mesh
Paving_3_AO002_0: THREE.Mesh
Paving_1_AO005_0: THREE.Mesh
mff_stone_path_1003_0: THREE.Mesh
Paving_4_AO003_0: THREE.Mesh
Paving_4_AO004_0: THREE.Mesh
Paving_1_AO006_0: THREE.Mesh
Paving_4_AO005_0: THREE.Mesh
Cylinder000_0: THREE.Mesh
Cylinder000_1: THREE.Mesh
mff_tree_pine_2001_0: THREE.Mesh
mff_tree_pine_2002_0: THREE.Mesh
mff_tree_pine_2003_0: THREE.Mesh
mff_tree_pine_0001_0: THREE.Mesh
mff_tree_pine_1001_0: THREE.Mesh
mff_tree_pine_1002_0: THREE.Mesh
mff_tree_maple001_0: THREE.Mesh
mff_tree_maple002_0: THREE.Mesh
mff_tree_maple003_0: THREE.Mesh
mff_tree_maple004_0: THREE.Mesh
mff_tree_pine_0002_0: THREE.Mesh
mff_tree_pine_1003_0: THREE.Mesh
mff_tree_pine_1004_0: THREE.Mesh
mff_tree_pine_0003_0: THREE.Mesh
mff_tree_pine_2004_0: THREE.Mesh
['Sheep-ver1010_0']: THREE.Mesh
['Sheep-ver1011_0']: THREE.Mesh
['Sheep-ver1012_0']: THREE.Mesh
['Sheep-ver1013_0']: THREE.Mesh
TreeTrunk001_0: THREE.Mesh
TreeTrunk002_0: THREE.Mesh
Stones_1_AO001_0: THREE.Mesh
Stones_1_AO002_0: THREE.Mesh
mff_stone_mossy_0001_0: THREE.Mesh
mff_stone_mossy_0002_0: THREE.Mesh
Stones_4_AO001_0: THREE.Mesh
Stones_4_AO002_0: THREE.Mesh
Stones_4_AO003_0: THREE.Mesh
Stones_3_AO001_0: THREE.Mesh
Stones_3_AO002_0: THREE.Mesh
Stones_1_AO003_0: THREE.Mesh
Stones_1_AO004_0: THREE.Mesh
Stones_1_AO005_0: THREE.Mesh
Stones_4_AO004_0: THREE.Mesh
Cube000_0: THREE.Mesh
Paving_3_AO003_0: THREE.Mesh
Paving_1_AO007_0: THREE.Mesh
Stones_1_AO006_0: THREE.Mesh
Stones_4_AO005_0: THREE.Mesh
Stones_4_AO006_0: THREE.Mesh
Stones_1_AO007_0: THREE.Mesh
Stones_3_AO003_0: THREE.Mesh
mff_stone_mossy_0003_0: THREE.Mesh
Stones_1_AO008_0: THREE.Mesh
mff_stone_0001_0: THREE.Mesh
mff_stone_0002_0: THREE.Mesh
Stones_4_AO007_0: THREE.Mesh
mff_tree_pine_2005_0: THREE.Mesh
mff_tree_pine_1005_0: THREE.Mesh
tree9001_0: THREE.Mesh
tree9002_0: THREE.Mesh
tree9003_0: THREE.Mesh
mff_tree_pine_0004_0: THREE.Mesh
Stones_4_AO008_0: THREE.Mesh
mff_stone_0003_0: THREE.Mesh
mff_stone_0004_0: THREE.Mesh
mff_stone_0005_0: THREE.Mesh
mff_stone_0006_0: THREE.Mesh
mff_stone_0007_0: THREE.Mesh
Rock_1_AO001_0: THREE.Mesh
Stones_4_AO009_0: THREE.Mesh
mff_stone_0008_0: THREE.Mesh
mff_stone_mossy_0004_0: THREE.Mesh
mff_stone_0009_0: THREE.Mesh
Stones_1_AO009_0: THREE.Mesh
Stones_3_AO004_0: THREE.Mesh
Stones_3_AO005_0: THREE.Mesh
mff_stone_0010_0: THREE.Mesh
mff_stone_0011_0: THREE.Mesh
mff_stone_0012_0: THREE.Mesh
mff_stone_0013_0: THREE.Mesh
mff_tree_pine_1006_0: THREE.Mesh
TreeTrunk003_0: THREE.Mesh
TreeTrunk004_0: THREE.Mesh
['Deer-ver3001_0']: THREE.Mesh
Keel000_0: THREE.Mesh
VikingShipObjects000_0: THREE.Mesh
VikingShipObjects001_0: THREE.Mesh
VikingShipObjects006_0: THREE.Mesh
VikingShipObjects007_0: THREE.Mesh
VikingShipObjects008_0: THREE.Mesh
VikingShipObjects009_0: THREE.Mesh
VikingShipObjects010_0: THREE.Mesh
VikingShipObjects011_0: THREE.Mesh
VikingShipObjects012_0: THREE.Mesh
VikingShipObjects013_0: THREE.Mesh
VikingShipObjects014_0: THREE.Mesh
VikingShipObjects015_0: THREE.Mesh
mff_stone_0014_0: THREE.Mesh
mff_stone_0015_0: THREE.Mesh
VikingShipObjects016_0: THREE.Mesh
VikingShipObjects017_0: THREE.Mesh
VikingShipObjects018_0: THREE.Mesh
VikingShipObjects019_0: THREE.Mesh
VikingShipObjects020_0: THREE.Mesh
Stones_1_AO010_0: THREE.Mesh
Stones_1_AO011_0: THREE.Mesh
Stones_1_AO012_0: THREE.Mesh
VikingShipObjects021_0: THREE.Mesh
VikingShipObjects022_0: THREE.Mesh
VikingShipObjects023_0: THREE.Mesh
mff_stone_0016_0: THREE.Mesh
Stones_3_AO006_0: THREE.Mesh
VikingShipObjects024_0: THREE.Mesh
VikingShipObjects025_0: THREE.Mesh
Stones_3_AO007_0: THREE.Mesh
mff_stone_mossy_0005_0: THREE.Mesh
mff_stone_mossy_0006_0: THREE.Mesh
mff_stone_mossy_0007_0: THREE.Mesh
mff_tree_maple005_0: THREE.Mesh
tree9004_0: THREE.Mesh
mff_tree_pine_2006_0: THREE.Mesh
Stones_4_AO010_0: THREE.Mesh
mff_stone_0017_0: THREE.Mesh
mff_stone_0018_0: THREE.Mesh
mff_stone_0019_0: THREE.Mesh
mff_stone_0020_0: THREE.Mesh
Stones_4_AO011_0: THREE.Mesh
mff_stone_0021_0: THREE.Mesh
mff_stone_0022_0: THREE.Mesh
mff_stone_0023_0: THREE.Mesh
Stones_4_AO012_0: THREE.Mesh
mff_stone_0024_0: THREE.Mesh
Stones_3_AO008_0: THREE.Mesh
Stones_3_AO009_0: THREE.Mesh
mff_stone_0025_0: THREE.Mesh
mff_stone_0026_0: THREE.Mesh
mff_stone_0027_0: THREE.Mesh
mff_stone_0028_0: THREE.Mesh
Stones_1_AO013_0: THREE.Mesh
Stones_3_AO010_0: THREE.Mesh
mff_stone_0029_0: THREE.Mesh
Stone_Circle001_0: THREE.Mesh
HouseBase_7_AO019_0: THREE.Mesh
Well_AO001_0: THREE.Mesh
Stones_3_AO011_0: THREE.Mesh
mff_stone_0030_0: THREE.Mesh
mff_stone_0031_0: THREE.Mesh
mff_stone_0032_0: THREE.Mesh
Tower_3_AO001_0: THREE.Mesh
VikingShipObjects026_0: THREE.Mesh
VikingShipObjects027_0: THREE.Mesh
Stones_4_AO013_0: THREE.Mesh
Stones_1_AO014_0: THREE.Mesh
Stones_4_AO014_0: THREE.Mesh
['Castle-stairs001_0']: THREE.Mesh
['Castle-tower-middle-large001_0']: THREE.Mesh
['Castle-tower-top-ver1001_0']: THREE.Mesh
HouseBase_3_AO001_0: THREE.Mesh
['Castle-tower-small-ver2003_0']: THREE.Mesh
['Castle-tower-small-ver2004_0']: THREE.Mesh
['Castle-tower-small-ver2005_0']: THREE.Mesh
['Castle-tower-small-ver2006_0']: THREE.Mesh
['castle-wall-top-half003_0']: THREE.Mesh
['castle-wall-top-half004_0']: THREE.Mesh
['castle-wall-top-half005_0']: THREE.Mesh
['castle-wall-top-half006_0']: THREE.Mesh
['castle-wall-roof001_0']: THREE.Mesh
['Castle-gate-closed001_0']: THREE.Mesh
['castle-wall-roof002_0']: THREE.Mesh
['window-stone001_0']: THREE.Mesh
['window-stone001_1']: THREE.Mesh
['window-stone002_0']: THREE.Mesh
['window-stone002_1']: THREE.Mesh
['Castle-window-ver3001_0']: THREE.Mesh
['Castle-window-ver3001_1']: THREE.Mesh
['Castle-window-ver3002_0']: THREE.Mesh
['Castle-window-ver3002_1']: THREE.Mesh
['Castle-window-ver3003_0']: THREE.Mesh
['Castle-window-ver3003_1']: THREE.Mesh
['Castle-window-ver3004_0']: THREE.Mesh
['Castle-window-ver3004_1']: THREE.Mesh
['Castle-window-ver3005_0']: THREE.Mesh
['Castle-window-ver3005_1']: THREE.Mesh
['Castle-window-ver3006_0']: THREE.Mesh
['Castle-window-ver3006_1']: THREE.Mesh
Paving_3_AO004_0: THREE.Mesh
Stones_1_AO015_0: THREE.Mesh
Stones_1_AO016_0: THREE.Mesh
mff_stone_0033_0: THREE.Mesh
Stones_3_AO012_0: THREE.Mesh
Stones_3_AO013_0: THREE.Mesh
Stones_1_AO017_0: THREE.Mesh
['window-stone003_0']: THREE.Mesh
['window-stone003_1']: THREE.Mesh
['window-stone004_0']: THREE.Mesh
['window-stone004_1']: THREE.Mesh
['window-stone005_0']: THREE.Mesh
['window-stone005_1']: THREE.Mesh
['window-stone006_0']: THREE.Mesh
['window-stone006_1']: THREE.Mesh
Stones_4_AO015_0: THREE.Mesh
VikingShipObjects028_0: THREE.Mesh
['Castle-wall003_0']: THREE.Mesh
['Castle-wall005_0']: THREE.Mesh
['Castle-wall006_0']: THREE.Mesh
['Castle-wall007_0']: THREE.Mesh
['Castle-wall008_0']: THREE.Mesh
['Castle-wall009_0']: THREE.Mesh
['Castle-wall010_0']: THREE.Mesh
['Castle-wall011_0']: THREE.Mesh
['Castle-wall012_0']: THREE.Mesh
['Castle-wall013_0']: THREE.Mesh
['Castle-wall014_0']: THREE.Mesh
['Castle-wall015_0']: THREE.Mesh
['Castle-wall016_0']: THREE.Mesh
['Castle-wall017_0']: THREE.Mesh
['Castle-wall018_0']: THREE.Mesh
['Castle-wall019_0']: THREE.Mesh
['Castle-wall020_0']: THREE.Mesh
['Castle-wall021_0']: THREE.Mesh
['Castle-wall022_0']: THREE.Mesh
['Castle-wall023_0']: THREE.Mesh
['Castle-wall024_0']: THREE.Mesh
mff_stone_0034_0: THREE.Mesh
['Castle-tower-top-ver1002_0']: THREE.Mesh
['Castle-tower-middle-large002_0']: THREE.Mesh
['Castle-tower-middle-large003_0']: THREE.Mesh
['Castle-tower-top-ver1003_0']: THREE.Mesh
['Castle-tower-top-ver1004_0']: THREE.Mesh
['Castle-tower-middle-large004_0']: THREE.Mesh
['Castle-tower-middle-large005_0']: THREE.Mesh
['Castle-tower-top-ver1005_0']: THREE.Mesh
['Castle-tower-top-ver1006_0']: THREE.Mesh
['Castle-tower-middle-large006_0']: THREE.Mesh
['Castle-tower-middle-large007_0']: THREE.Mesh
['Castle-tower-top-ver1007_0']: THREE.Mesh
['Castle-tower-top-ver1008_0']: THREE.Mesh
['Castle-tower-middle-large008_0']: THREE.Mesh
['Castle-tower-top-ver1009_0']: THREE.Mesh
['Castle-tower-middle-large009_0']: THREE.Mesh
['castle-wall-top-half008_0']: THREE.Mesh
['Castle-gate003_0']: THREE.Mesh
['Castle-lattice-small001_0']: THREE.Mesh
['Castle-gate-closed002_0']: THREE.Mesh
['Castle-stairs002_0']: THREE.Mesh
['Castle-gate-closed003_0']: THREE.Mesh
['Castle-gate-closed004_0']: THREE.Mesh
['Castle-stairs003_0']: THREE.Mesh
['Shelter-half001_0']: THREE.Mesh
['Shelter-half002_0']: THREE.Mesh
['Shelter-half003_0']: THREE.Mesh
Cube001_0: THREE.Mesh
House_1_AO003_0: THREE.Mesh
House_2_AO003_0: THREE.Mesh
House_4_AO003_0: THREE.Mesh
House_2_AO004_0: THREE.Mesh
Tower_3_AO002_0: THREE.Mesh
House_3_AO003_0: THREE.Mesh
House_4_AO004_0: THREE.Mesh
House_2_AO005_0: THREE.Mesh
House_1_AO004_0: THREE.Mesh
House_1_AO005_0: THREE.Mesh
House_2_AO006_0: THREE.Mesh
House_1_AO006_0: THREE.Mesh
House_2_AO007_0: THREE.Mesh
House_1_AO007_0: THREE.Mesh
House_2_AO008_0: THREE.Mesh
House_4_AO005_0: THREE.Mesh
House_1_AO008_0: THREE.Mesh
House_1_AO009_0: THREE.Mesh
Tower_3_AO003_0: THREE.Mesh
House_4_AO006_0: THREE.Mesh
Well_AO002_0: THREE.Mesh
HouseBase_7_AO001_0: THREE.Mesh
Stone_Circle002_0: THREE.Mesh
WodenSet_1_AO001_0: THREE.Mesh
HouseBase_5_AO001_0: THREE.Mesh
['Bridge-wooden-dark001_0']: THREE.Mesh
Stones_3_AO014_0: THREE.Mesh
mff_stone_0035_0: THREE.Mesh
Stones_4_AO016_0: THREE.Mesh
mff_tree_pine_2007_0: THREE.Mesh
mff_tree_pine_2008_0: THREE.Mesh
['Castle-bridge001_0']: THREE.Mesh
['Castle-wall002_0']: THREE.Mesh
['Castle-bridge003_0']: THREE.Mesh
['Castle-wall025_0']: THREE.Mesh
mff_stone_0036_0: THREE.Mesh
mff_stone_0037_0: THREE.Mesh
Tower_1_AO002_0: THREE.Mesh
Tower_2_AO003_0: THREE.Mesh
mff_tree_pine_0005_0: THREE.Mesh
mff_tree_pine_0006_0: THREE.Mesh
mff_tree_maple006_0: THREE.Mesh
['Shelter-half004_0']: THREE.Mesh
['Shelter-half005_0']: THREE.Mesh
Tower_1_AO003_0: THREE.Mesh
Shelter001_0: THREE.Mesh
Shelter002_0: THREE.Mesh
Fencing_Wood_Clean_3_AO003_0: THREE.Mesh
Fencing_Wood_Clean_3_AO004_0: THREE.Mesh
Fencing_Wood_Clean_3_AO005_0: THREE.Mesh
Fencing_Wood_Clean_3_AO006_0: THREE.Mesh
Fencing_Wood_Clean_3_AO007_0: THREE.Mesh
Fencing_Wood_Clean_3_AO008_0: THREE.Mesh
Fencing_Wood_Clean_3_AO009_0: THREE.Mesh
Fencing_Wood_Clean_3_AO010_0: THREE.Mesh
Fencing_Wood_Clean_3_AO011_0: THREE.Mesh
Fencing_Wood_Clean_3_AO012_0: THREE.Mesh
Fencing_Wood_Clean_3_AO013_0: THREE.Mesh
Fencing_Wood_Clean_3_AO014_0: THREE.Mesh
Fencing_Wood_Clean_3_AO015_0: THREE.Mesh
Fencing_Wood_Clean_3_AO016_0: THREE.Mesh
Fencing_Wood_Clean_3_AO017_0: THREE.Mesh
Paving_4_AO006_0: THREE.Mesh
Fencing_Wood_Clean_3_AO019_0: THREE.Mesh
Fencing_Wood_Clean_3_AO020_0: THREE.Mesh
Fencing_Wood_Clean_3_AO021_0: THREE.Mesh
Fencing_Wood_Clean_3_AO022_0: THREE.Mesh
Fencing_Wood_Clean_3_AO023_0: THREE.Mesh
Fencing_Wood_Clean_3_AO024_0: THREE.Mesh
Fencing_Wood_Clean_3_AO025_0: THREE.Mesh
Fencing_Wood_Clean_3_AO026_0: THREE.Mesh
Fencing_Wood_Clean_3_AO027_0: THREE.Mesh
Fencing_Wood_Clean_3_AO028_0: THREE.Mesh
Fencing_Wood_Clean_3_AO029_0: THREE.Mesh
Fencing_Wood_Clean_3_AO030_0: THREE.Mesh
Fencing_Wood_Clean_3_AO031_0: THREE.Mesh
Fencing_Wood_Clean_3_AO032_0: THREE.Mesh
Fencing_Wood_Clean_3_AO033_0: THREE.Mesh
Fencing_Wood_Clean_3_AO034_0: THREE.Mesh
Fencing_Wood_Clean_3_AO035_0: THREE.Mesh
Fencing_Wood_Clean_3_AO036_0: THREE.Mesh
Fencing_Wood_Clean_3_AO037_0: THREE.Mesh
Fencing_Wood_Clean_3_AO038_0: THREE.Mesh
Fencing_Wood_Clean_3_AO039_0: THREE.Mesh
Fencing_Wood_Clean_3_AO040_0: THREE.Mesh
Fencing_Wood_Clean_3_AO041_0: THREE.Mesh
Fencing_Wood_Clean_3_AO042_0: THREE.Mesh
Fencing_Wood_Clean_3_AO043_0: THREE.Mesh
Fencing_Wood_Clean_3_AO044_0: THREE.Mesh
Fencing_Wood_Clean_3_AO045_0: THREE.Mesh
Fencing_Wood_Clean_3_AO046_0: THREE.Mesh
Fencing_Wood_Clean_3_AO047_0: THREE.Mesh
Fencing_Wood_Clean_3_AO048_0: THREE.Mesh
Fencing_Wood_Clean_3_AO049_0: THREE.Mesh
pCube13000_0: THREE.Mesh
pCube13001_0: THREE.Mesh
pCube13002_0: THREE.Mesh
pCube13005_0: THREE.Mesh
mff_tree_pine_2009_0: THREE.Mesh
mff_tree_pine_2010_0: THREE.Mesh
mff_tree_pine_1007_0: THREE.Mesh
mff_tree_pine_2011_0: THREE.Mesh
mff_tree_pine_1008_0: THREE.Mesh
mff_tree_pine_0007_0: THREE.Mesh
mff_tree_maple007_0: THREE.Mesh
mff_tree_maple008_0: THREE.Mesh
mff_tree_pine_0008_0: THREE.Mesh
mff_tree_pine_0009_0: THREE.Mesh
mff_tree_pine_1009_0: THREE.Mesh
mff_tree_maple009_0: THREE.Mesh
HouseBase_7_AO002_0: THREE.Mesh
VikingShipObjects035_0: THREE.Mesh
VikingShipObjects037_0: THREE.Mesh
VikingShipObjects038_0: THREE.Mesh
VikingShipObjects039_0: THREE.Mesh
VikingShipObjects041_0: THREE.Mesh
VikingShipObjects042_0: THREE.Mesh
VikingShipObjects043_0: THREE.Mesh
VikingShipObjects044_0: THREE.Mesh
VikingShipObjects045_0: THREE.Mesh
VikingShipObjects047_0: THREE.Mesh
VikingShipObjects048_0: THREE.Mesh
VikingShipObjects050_0: THREE.Mesh
VikingShipObjects134_0: THREE.Mesh
VikingShipObjects135_0: THREE.Mesh
VikingShipObjects136_0: THREE.Mesh
VikingShipObjects138_0: THREE.Mesh
VikingShipObjects139_0: THREE.Mesh
VikingShipObjects140_0: THREE.Mesh
VikingShipObjects141_0: THREE.Mesh
VikingShipObjects142_0: THREE.Mesh
VikingShipObjects143_0: THREE.Mesh
VikingShipObjects144_0: THREE.Mesh
VikingShipObjects145_0: THREE.Mesh
VikingShipObjects146_0: THREE.Mesh
VikingShipObjects147_0: THREE.Mesh
VikingShipObjects148_0: THREE.Mesh
VikingShipObjects149_0: THREE.Mesh
VikingShipObjects150_0: THREE.Mesh
VikingShipObjects151_0: THREE.Mesh
VikingShipObjects152_0: THREE.Mesh
VikingShipObjects153_0: THREE.Mesh
VikingShipObjects154_0: THREE.Mesh
VikingShipObjects155_0: THREE.Mesh
VikingShipObjects156_0: THREE.Mesh
VikingShipObjects157_0: THREE.Mesh
VikingShipObjects158_0: THREE.Mesh
VikingShipObjects159_0: THREE.Mesh
VikingShipObjects160_0: THREE.Mesh
VikingShipObjects161_0: THREE.Mesh
VikingShipObjects162_0: THREE.Mesh
VikingShipObjects163_0: THREE.Mesh
VikingShipObjects164_0: THREE.Mesh
VikingShipObjects165_0: THREE.Mesh
VikingShipObjects166_0: THREE.Mesh
VikingShipObjects167_0: THREE.Mesh
VikingShipObjects168_0: THREE.Mesh
VikingShipObjects169_0: THREE.Mesh
VikingShipObjects170_0: THREE.Mesh
VikingShipObjects171_0: THREE.Mesh
VikingShipObjects172_0: THREE.Mesh
VikingShipObjects173_0: THREE.Mesh
VikingShipObjects174_0: THREE.Mesh
VikingShipObjects175_0: THREE.Mesh
pCube119001_0: THREE.Mesh
pCube119002_0: THREE.Mesh
bench001_0: THREE.Mesh
bench002_0: THREE.Mesh
bench003_0: THREE.Mesh
bench004_0: THREE.Mesh
bench005_0: THREE.Mesh
bench006_0: THREE.Mesh
bench007_0: THREE.Mesh
bench008_0: THREE.Mesh
bench009_0: THREE.Mesh
bench010_0: THREE.Mesh
bench011_0: THREE.Mesh
archer_m_easy001_0: THREE.Mesh
Guest_m_3001_0: THREE.Mesh
Guest_m_4001_0: THREE.Mesh
Fireplace001_0: THREE.Mesh
VikingShipObjects176_0: THREE.Mesh
stall2001_0: THREE.Mesh
Throne_king001_0: THREE.Mesh
Throne_princess001_0: THREE.Mesh
Throne_queen001_0: THREE.Mesh
VikingShipObjects177_0: THREE.Mesh
VikingShipObjects178_0: THREE.Mesh
VikingShipObjects179_0: THREE.Mesh
VikingShipObjects180_0: THREE.Mesh
Fencing_Wood_Clean_3_AO018_0: THREE.Mesh
cup004002_0: THREE.Mesh
SFMC_geo12432_Main_grp001_0: THREE.Mesh
SFMC_geo12384_Main_grp001_0: THREE.Mesh
SFMC_geo12434_Main_grp001_0: THREE.Mesh
SFMC_geo12434_Main_grp002_0: THREE.Mesh
cup004003_0: THREE.Mesh
cup004004_0: THREE.Mesh
cup004005_0: THREE.Mesh
cup004006_0: THREE.Mesh
cup004007_0: THREE.Mesh
cup004008_0: THREE.Mesh
cup004009_0: THREE.Mesh
cup004010_0: THREE.Mesh
cup004011_0: THREE.Mesh
VikingShipObjects181_0: THREE.Mesh
VikingShipObjects182_0: THREE.Mesh
Guest_f_1001_0: THREE.Mesh
queen_posed001_0: THREE.Mesh
Guest_m_1001_0: THREE.Mesh
Guest_f_2001_0: THREE.Mesh
Guest_f_4001_0: THREE.Mesh
Guest_m_4002_0: THREE.Mesh
House_4_AO007_0: THREE.Mesh
Stones_3_AO015_0: THREE.Mesh
Stones_3_AO016_0: THREE.Mesh
mff_stone_0038_0: THREE.Mesh
mff_stone_0039_0: THREE.Mesh
House_3_AO004_0: THREE.Mesh
HouseBase_5_AO002_0: THREE.Mesh
['Deer-ver1001_0']: THREE.Mesh
['Deer-ver2001_0']: THREE.Mesh
['Sheep-ver3001_0']: THREE.Mesh
['Sheep-ver3002_0']: THREE.Mesh
['Sheep-ver3003_0']: THREE.Mesh
['Sheep-ver3004_0']: THREE.Mesh
['Sheep-ver3005_0']: THREE.Mesh
['Sheep-ver3006_0']: THREE.Mesh
SFMC_geo12435_Main_grp001_0: THREE.Mesh
SFMC_geo12435_Main_grp002_0: THREE.Mesh
SFMC_geo12435_Main_grp003_0: THREE.Mesh
archer_m_easy002_0: THREE.Mesh
Guest_m_3002_0: THREE.Mesh
Plane003_0: THREE.Mesh
['Bull-ver2001_0']: THREE.Mesh
['Bull-ver2002_0']: THREE.Mesh
Shed_AO003_0: THREE.Mesh
['Bull-ver1001_0']: THREE.Mesh
['Bull-ver3001_0']: THREE.Mesh
pCube13006_0: THREE.Mesh
pCube13007_0: THREE.Mesh
Paving_2_AO001_0: THREE.Mesh
Paving_3_AO005_0: THREE.Mesh
Paving_1_AO008_0: THREE.Mesh
Paving_2_AO002_0: THREE.Mesh
Paving_1_AO009_0: THREE.Mesh
Paving_4_AO007_0: THREE.Mesh
mff_stone_path_1004_0: THREE.Mesh
Shed_AO004_0: THREE.Mesh
Fencing_Wood_Clean_8_AO002_0: THREE.Mesh
Fencing_Wood_Clean_3_AO050_0: THREE.Mesh
Fencing_Wood_Clean_3_AO051_0: THREE.Mesh
Fencing_Wood_Clean_3_AO052_0: THREE.Mesh
Stones_1_AO018_0: THREE.Mesh
Fencing_Wood_Clean_8_AO003_0: THREE.Mesh
cup004001_0: THREE.Mesh
Fencing_Wood_Clean_3_AO053_0: THREE.Mesh
Fencing_Wood_Clean_3_AO054_0: THREE.Mesh
mff_tree_maple010_0: THREE.Mesh
mff_tree_pine_0010_0: THREE.Mesh
mff_tree_pine_1010_0: THREE.Mesh
Paving_2_AO003_0: THREE.Mesh
Paving_2_AO004_0: THREE.Mesh
Paving_4_AO008_0: THREE.Mesh
Paving_4_AO009_0: THREE.Mesh
Paving_2_AO005_0: THREE.Mesh
House_4_AO008_0: THREE.Mesh
Tower_3_AO004_0: THREE.Mesh
House_2_AO009_0: THREE.Mesh
Paving_4_AO010_0: THREE.Mesh
Paving_3_AO006_0: THREE.Mesh
Paving_2_AO006_0: THREE.Mesh
Paving_2_AO007_0: THREE.Mesh
Paving_2_AO008_0: THREE.Mesh
Plane004_0: THREE.Mesh
mff_stone_0040_0: THREE.Mesh
mff_stone_0041_0: THREE.Mesh
mff_stone_0042_0: THREE.Mesh
mff_stone_0043_0: THREE.Mesh
mff_stone_0044_0: THREE.Mesh
mff_stone_0045_0: THREE.Mesh
mff_stone_0046_0: THREE.Mesh
mff_stone_0047_0: THREE.Mesh
mff_stone_0048_0: THREE.Mesh
mff_stone_0049_0: THREE.Mesh
mff_stone_0050_0: THREE.Mesh
mff_stone_0051_0: THREE.Mesh
mff_stone_0052_0: THREE.Mesh
mff_stone_0053_0: THREE.Mesh
Sun_0: THREE.Mesh
Moon_0: THREE.Mesh
Stones_1_AO000_0: THREE.Mesh
VikingShipObjects002_0: THREE.Mesh
VikingShipObjects003_0: THREE.Mesh
SFMC_geo12384_Main_grp000_0: THREE.Mesh
SFMC_geo12384_Main_grp002_0: THREE.Mesh
Paving_3_AO000_0: THREE.Mesh
Paving_3_AO007_0: THREE.Mesh
Paving_1_AO000_0: THREE.Mesh
Paving_4_AO000_0: THREE.Mesh
CageMix_0: THREE.Mesh
CageMix_1: THREE.Mesh
mff_stone_path_0000_0: THREE.Mesh
pCube13003_0: THREE.Mesh
pCube13004_0: THREE.Mesh
pCube13008_0: THREE.Mesh
pCube13009_0: THREE.Mesh
mff_stone_0000_0: THREE.Mesh
mff_stone_0054_0: THREE.Mesh
mff_stone_0055_0: THREE.Mesh
mff_stone_0056_0: THREE.Mesh
mff_stone_0057_0: THREE.Mesh
stall2000_0: THREE.Mesh
Cube002_0: THREE.Mesh
bench000_0: THREE.Mesh
stall2002_0: THREE.Mesh
Cube003_0: THREE.Mesh
pCube13010_0: THREE.Mesh
mff_stone_0058_0: THREE.Mesh
Stones_4_AO000_0: THREE.Mesh
GolemArmature_rootJoint: THREE.Bone
}
materials: {
Wizard: THREE.MeshStandardMaterial
Objects: THREE.MeshStandardMaterial
['Material.007']: THREE.MeshStandardMaterial
['Material.012']: THREE.MeshStandardMaterial
medievalfantasyforest_unwrap: THREE.MeshStandardMaterial
House_4_AO_tex: THREE.MeshStandardMaterial
House_3_AO_tex: THREE.MeshStandardMaterial
House_1_AO_tex: THREE.MeshStandardMaterial
House_2_AO_tex: THREE.MeshStandardMaterial
Tower_tex_1: THREE.MeshStandardMaterial
StoneWall: THREE.MeshStandardMaterial
Tower_tex_2: THREE.MeshStandardMaterial
Material: THREE.MeshStandardMaterial
['Material.001']: THREE.MeshStandardMaterial
['Material.003']: THREE.MeshStandardMaterial
['Material.009']: THREE.MeshStandardMaterial
['well_material.001']: THREE.MeshStandardMaterial
['pulley_mat.001']: THREE.MeshStandardMaterial
['Material.012']: THREE.MeshStandardMaterial
['Material.013']: THREE.MeshStandardMaterial
['Material.017']: THREE.MeshStandardMaterial
['Material.008']: THREE.MeshStandardMaterial
Stone_Circle_Mat: THREE.MeshStandardMaterial
['Material.020']: THREE.MeshStandardMaterial
Tower_tex_3: THREE.MeshStandardMaterial
['Material.021']: THREE.MeshStandardMaterial
['Material.014']: THREE.MeshStandardMaterial
['Ravens.001']: THREE.MeshStandardMaterial
['Material.035']: THREE.MeshStandardMaterial
bench_mat: THREE.MeshStandardMaterial
['Material.033']: THREE.MeshStandardMaterial
['Material.026']: THREE.MeshStandardMaterial
['Material.025']: THREE.MeshStandardMaterial
['Material.037']: THREE.MeshStandardMaterial
['Material.038']: THREE.MeshStandardMaterial
['Material.036']: THREE.MeshStandardMaterial
['Material.034']: THREE.MeshStandardMaterial
['Material.032']: THREE.MeshStandardMaterial
['Material.024']: THREE.MeshStandardMaterial
['Material.028']: THREE.MeshStandardMaterial
['Material.031']: THREE.MeshStandardMaterial
['Material.029']: THREE.MeshStandardMaterial
['color.003']: THREE.MeshStandardMaterial
Water: THREE.MeshStandardMaterial
SunM: THREE.MeshStandardMaterial
MoonM: THREE.MeshStandardMaterial
}
}
const gltf = useGltf<GLTFResult>('/models/issum_the_town_on_capital_isle-transformed.glb', {
useDraco: true
})
const component = forwardEventHandlers()
</script>
<T
is={ref}
dispose={false}
{...$$restProps}
bind:this={$component}
>
{#await gltf}
<slot name="fallback" />
{:then gltf}
<T.Group rotation={[-Math.PI / 2, 0, 0]}>
<T.Group
position={[0.24123000000000003, -7.5024, 6.845809999999999]}
rotation={[0, 0, 0.15076272552981504]}
scale={[0.597234544881657, 0.597234544881657, 0.5972400000000001]}
>
<T is={gltf.nodes.GolemArmature_rootJoint} />
<T.SkinnedMesh
geometry={gltf.nodes.Golem_0.geometry}
material={gltf.materials['Material.012']}
skeleton={gltf.nodes.Golem_0.skeleton}
/>
</T.Group>
<T.Group
position={[1.4270599999999998, 18.33742, 7.4381900000000005]}
rotation={[0.025704200637448004, 0.12630121446799059, -0.04029270564498475]}
scale={[0.47847675680225055, 0.4784738593695585, 0.4784778500620484]}
>
<T.Mesh
geometry={gltf.nodes.Cylinder000_0.geometry}
material={gltf.materials['well_material.001']}
/>
<T.Mesh
geometry={gltf.nodes.Cylinder000_1.geometry}
material={gltf.materials['pulley_mat.001']}
/>
</T.Group>
<T.Group
position={[-10.94251, -4.27819, 12.269319999999999]}
scale={0.30000000000000004}
>
<T.Mesh
geometry={gltf.nodes['window-stone001_0'].geometry}
material={gltf.materials['Material.007']}
/>
<T.Mesh
geometry={gltf.nodes['window-stone001_1'].geometry}
material={gltf.materials['Material.007']}
/>
</T.Group>
<T.Group
position={[-10.045219999999999, -4.27819, 12.269319999999999]}
scale={0.30000000000000004}
>
<T.Mesh
geometry={gltf.nodes['window-stone002_0'].geometry}
material={gltf.materials['Material.007']}
/>
<T.Mesh
geometry={gltf.nodes['window-stone002_1'].geometry}
material={gltf.materials['Material.007']}
/>
</T.Group>
<T.Group
position={[-9.13283, -0.45482000000000006, 13.055530000000003]}
rotation={[0, 0, -2.638191576514229]}
scale={[0.29999534463054595, 0.29999534463054595, 0.30000000000000004]}
>
<T.Mesh
geometry={gltf.nodes['Castle-window-ver3001_0'].geometry}
material={gltf.materials['Material.007']}
/>
<T.Mesh
geometry={gltf.nodes['Castle-window-ver3001_1'].geometry}
material={gltf.materials['Material.007']}
/>
</T.Group>
<T.Group
position={[-8.70924, -