Compare commits

..

1 Commits

7 changed files with 500 additions and 4456 deletions

Binary file not shown.

View File

@ -4,14 +4,13 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Benedek László - IH1RZJ - masodik beadandó: Lego Batman</title> <title>Benedek László - IH1RZJ - első beadandó: Lego Batman</title>
<script async src="./dist/es-module-shims.js"></script> <script async src="./dist/es-module-shims.js"></script>
<script type="importmap"> <script type="importmap">
{ {
"imports": { "imports": {
"three": "./js-r167/build/three.module.min.js", "three": "./js-r167/build/three.module.min.js",
"TrackballControls": "./js-r167/examples/jsm/controls/TrackballControls.js", "TrackballControls": "./js-r167/examples/jsm/controls/TrackballControls.js"
"OBJLoader": "./js-r167/examples/jsm/loaders/OBJLoader.js"
} }
} }
</script> </script>
@ -36,16 +35,11 @@
<script type="module"> <script type="module">
import * as THREE from "three"; import * as THREE from "three";
import { TrackballControls } from "TrackballControls"; import { TrackballControls } from "TrackballControls";
import { OBJLoader } from "OBJLoader";
class SceneLoader { class SceneLoader {
static FromJson(data) { static FromJson(data) {
let _scene = new THREE.Scene(); let _scene = new THREE.Scene();
let geometries = {};
let materials = {};
let objects = {};
const geometryTypes = { const geometryTypes = {
"CircleGeometry": THREE.CircleGeometry, "CircleGeometry": THREE.CircleGeometry,
"PlaneGeometry": THREE.PlaneGeometry, "PlaneGeometry": THREE.PlaneGeometry,
@ -57,109 +51,54 @@
}; };
const materialTypes = { const materialTypes = {
"MeshBasicMaterial": THREE.MeshBasicMaterial, "MeshBasicMaterial": THREE.MeshBasicMaterial
"MeshLambertMaterial": THREE.MeshLambertMaterial,
"MeshPhongMaterial": THREE.MeshPhongMaterial,
"MeshStandardMaterial": THREE.MeshStandardMaterial
}; };
let geometries = {};
let materials = {};
let meshes = {};
for (let [key, value] of Object.entries(data.geometries)) { for (let [key, value] of Object.entries(data.geometries)) {
geometries[key] = new geometryTypes[value.type](...value.options); geometries[key] = new geometryTypes[value.type](...value.options);
} }
for (let [key, value] of Object.entries(data.materials)) { for (let [key, value] of Object.entries(data.materials)) {
materials[key] = new materialTypes[value.type](value.options); materials[key] = new materialTypes[value.type](value.options);
if (value.texture) {
materials[key].map = new THREE.TextureLoader().load(value.texture.path);
if (value.texture.repeat == true) {
materials[key].map.wrapS = THREE.RepeatWrapping;
materials[key].map.wrapT = THREE.RepeatWrapping;
}
}
} }
function createObject(data, name) { function createMesh(data) {
const objectConstructors = { let mesh;
"empty": data => new THREE.Object3D(),
"OBJ": data => {
let empty = new THREE.Object3D();
let loader = new OBJLoader();
loader.load(
data.url,
result => {
result.traverse(element => {
if (element instanceof THREE.Mesh) {
element.material = materials[data.material];
if (data.castShadow) element.castShadow = data.castShadow;
if (data.receiveShadow) element.receiveShadow = data.receiveShadow;
empty.add(element);
}
})
});
return empty;
},
"Mesh": data => new THREE.Mesh(geometries[data.geometry], materials[data.material]),
"LineSegments": data => new THREE.LineSegments(geometries[data.geometry], materials[data.material]),
"AmbientLight": data => new THREE.AmbientLight(data.color ? data.color : 0xffffff, data.intensity ? data.intensity : 1),
"PointLight": data => {
let object = new THREE.PointLight(data.color ? data.color : 0xffffff, data.intensity ? data.intensity : 1);
object.distance = data.distance ? data.distance : 100;
return object;
},
"SpotLight": data => {
let object = new THREE.SpotLight(data.color ? data.color : 0xffffff, data.intensity ? data.intensity : 1);
object.angle = THREE.MathUtils.degToRad(data.angle ? data.angle : 45);
if (data.position) object.position.set(...data.position);
object.target = objects[data.target];
object.distance = data.distance ? data.distance : 100;
return object;
},
"DirectionalLight": data => {
let object = new THREE.DirectionalLight(data.color ? data.color : 0xffffff, data.intensity ? data.intensity : 1);
if (data.position) object.position.set(...data.position);
object.target = objects[data.target];
object.distance = data.distance ? data.distance : 100;
object.shadow.camera.left = -50;
object.shadow.camera.right = 50;
object.shadow.camera.bottom = -50;
object.shadow.camera.top = 50;
return object;
},
"HemisphereLight": data => new THREE.HemisphereLight(data.color ? data.color : 0xffffff, data.groundColor ? data.groundColor : 0x00ff00, data.intensity ? data.intensity : 1),
"PointLightHelper": data => new THREE.PointLightHelper(objects[data.target], data.sphereSize ? data.sphereSize : 5),
"SpotLightHelper": data => new THREE.SpotLightHelper(objects[data.target]),
"DirectionalLightHelper": data => new THREE.DirectionalLightHelper(objects[data.target], data.planeSize ? data.planeSize : 10),
"HemisphereLightHelper": data => new THREE.HemisphereLightHelper(objects[data.target], data.sphereSize ? data.sphereSize : 5),
"AxesHelper": data => new THREE.AxesHelper(data.helperSize ? data.helperSize : 10),
"ArrowHelper": data => new THREE.ArrowHelper(...(data.direction ? data.direction : [1, 0, 0]), ...(data.origin ? data.origin : [0, 0, 0]), data.length ? data.length : 10, data.color ? data.color : 0xff00ff),
"ShadowCameraHelper": data => new THREE.CameraHelper(objects[data.target].shadow.camera),
};
// create object
let type = data.type ? data.type : "Mesh"; let type = data.type ? data.type : "Mesh";
let object = (objects[name] = objectConstructors[type](data));
if (data.position) object.position.set(...data.position); switch (type) {
if (data.rotation) object.rotation.set(...Array.from(data.rotation, x => THREE.MathUtils.degToRad(x))); case "empty":
if (data.scale) object.scale.set(...data.scale); mesh = new THREE.Object3D();
if (data.castShadow) object.castShadow = data.castShadow; break;
if (data.receiveShadow) object.receiveShadow = data.receiveShadow; case "Mesh":
if (data.animation) object.animation = data.animation; mesh = new THREE.Mesh(geometries[data.geometry], materials[data.material]);
break;
case "LineSegments":
mesh = new THREE.LineSegments(geometries[data.geometry], materials[data.material]);
break;
default:
throw "unknown mesh type";
}
if (data.position) mesh.position.set(...data.position);
if (data.rotation) mesh.rotation.set(...Array.from(data.rotation, x => THREE.MathUtils.degToRad(x)));
if (data.scale) mesh.scale.set(...data.scale);
// add children to parent
if (data.children) { if (data.children) {
for (let [key, value] of Object.entries(data.children)) { for (let [key, value] of Object.entries(data.children)) {
object.add(createObject(value, key)); mesh.add(createMesh(value));
} }
} }
return object; return mesh;
} }
for (let [key, value] of Object.entries(data.objects)) { for (let [key, value] of Object.entries(data.meshes)) {
_scene.add(createObject(value, key)); _scene.add(meshes[key] = createMesh(value));
} }
return _scene; return _scene;
@ -167,23 +106,20 @@
}; };
const fov = 75; const fov = 75;
const near = 0.1; const near = 0.01;
const far = 10000; const far = 1000;
const rotateSpeed = 5.0; const rotateSpeed = 5.0;
const panSpeed = 1.0; const panSpeed = 1.0;
const loop = true; let canvas, renderer, scene, camera, controls;
let canvas, renderer, scene, camera, controls, clock; init().then(animate());
init().then(loop && animate());
async function init() { async function init() {
canvas = document.querySelector("#canvas"); canvas = document.querySelector("#canvas");
renderer = new THREE.WebGLRenderer({ antialias: true, canvas: canvas, alpha: true }); renderer = new THREE.WebGLRenderer({ antialias: true, canvas: canvas, alpha: true });
renderer.shadowMap.enabled = true;
renderer.setSize(window.innerWidth, window.innerHeight); renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor("black"); renderer.setClearColor(0xadadad);
camera = new THREE.PerspectiveCamera(fov, window.innerWidth / window.innerHeight, near, far); camera = new THREE.PerspectiveCamera(fov, window.innerWidth / window.innerHeight, near, far);
camera.position.set(0, 10, 50); camera.position.set(0, 10, 50);
@ -192,16 +128,12 @@
controls.rotateSpeed = rotateSpeed; controls.rotateSpeed = rotateSpeed;
controls.panSpeed = panSpeed; controls.panSpeed = panSpeed;
clock = new THREE.Clock();
scene = await fetch("scene.json") scene = await fetch("scene.json")
.then((response) => response.json()) .then((response) => response.json())
.catch(reason => console.log(`fetch failed: ${reason}`)) .catch(reason => console.log(`fetch failed: ${reason}`))
.then((json) => SceneLoader.FromJson(json)); .then((json) => SceneLoader.FromJson(json));
window.addEventListener("resize", handleWindowResize, false); window.addEventListener("resize", handleWindowResize, false);
render();
} }
function handleWindowResize() { function handleWindowResize() {
@ -217,19 +149,6 @@
function animate() { function animate() {
requestAnimationFrame(animate); requestAnimationFrame(animate);
controls.update(); controls.update();
let delta = clock.getDelta();
let time = clock.getElapsedTime();
scene.traverse((element)=>{
if (element.animation) {
(() => {
eval(element.animation);
})
.call({ element: element, delta: delta, time: time });
}
})
render(); render();
} }

View File

@ -1,57 +0,0 @@
# Blender modellezési lépések
1. Default Cube kitörlése
2. Referenciaképek importálása
3. Láb modellje
- új cube mesh
- referenciához igazítom (move, scale)
- loopcut, extrude -> láb fuggőleges része
- új cylinder mesh -> láb teteje
- cylinder aljának törlése
- cylinder és a láb többi részének összekötése új face-ek létrehozásával
- origin áthelyezése
- modell duplikálása és tükrözése -> másik láb
4. Test modellje
- új cube mesh, de csak a test egyik oldalához
- referenciához igazítás
- mirror modifier
- felső lap scale
- élek lekerekítése
5. Kar modellje
- új uv sphere mesh
- aljának törlése
- alsó körív extrude, könyöknél újabb extrude és forgatás
- könyöknél lekerekítés
- henger végének lezárása új face-el
- duplikálás és tükrözés
6. Kéz modellje
- új cylinder mesh
- scale, rotate, move
- új cylinder a maroknak
- inset
- duplikálás és tükrözés
7. Fej modellje
- új cylinder mesh
- extrude és scale a referencia követésével
- lekerekítés
8. Sisak modellje
- új sphere mesh
- félbevágom és tükrözöm modifierrel
- scale
- proportional editing referencia alapján
- extrude az orrnál
- knife tool -> szem kivágása
- szem inset és extrude
- száj kivágása knide toollal
- subdivision surface
9. Köpeny modellje
- új plain mesh
- knife tool -> referencia körbevágása
- remesh, solidify, subdivision modifier
- pinning vertex group a nyak körül
- collision a testre
- cloth simulation
10. Fények hozzáadása
11. Materialok beállítása
12. Kamera beállítása
13. Póz beállítása

3801
batman.obj

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,5 @@
{ {
"geometries": { "geometries": {
"ground": {
"type": "PlaneGeometry",
"options": [
200,
200
]
},
"feet": { "feet": {
"type": "BoxGeometry", "type": "BoxGeometry",
"options": [ "options": [
@ -104,89 +97,46 @@
} }
}, },
"materials": { "materials": {
"purple_frame": {
"type": "MeshBasicMaterial",
"options": {
"color": "rgb(255, 0, 255)",
"wireframe": true
}
},
"black": { "black": {
"type": "MeshStandardMaterial", "type": "MeshBasicMaterial",
"options": { "options": {
"color": "rgb(0, 0, 0)", "color": "rgb(0, 0, 0)",
"roughness": 0.1 "wireframe": false
} }
}, },
"yellow": { "white_frame": {
"type": "MeshStandardMaterial", "type": "MeshBasicMaterial",
"options": { "options": {
"color": "rgb(253, 255, 0)", "color": "rgb(255, 255, 255)",
"roughness": 0.1, "wireframe": true
"metalness": 1
}
},
"blue": {
"type": "MeshStandardMaterial",
"options": {
"color": "rgb(80, 92, 124)",
"roughness": 0.1
}
},
"dark_blue": {
"type": "MeshStandardMaterial",
"options": {
"color": "rgb(40, 46, 60)",
"roughness": 0.1
} }
}, },
"skin": { "skin": {
"type": "MeshStandardMaterial", "type": "MeshBasicMaterial",
"options": { "options": {
"color": "rgb(246, 215, 179)", "color": "rgb(246, 215, 179)",
"roughness": 0.6 "wireframe": false
}
},
"ground": {
"type": "MeshStandardMaterial",
"options": {
"color": "rgb(94, 85, 56)",
"roughness": 0.8
},
"texture": {
"path": "textures/mud.jpg",
"repeat": true
}
},
"moon": {
"type": "MeshBasicMaterial",
"options": { },
"texture": {
"path": "textures/moon.jpg"
} }
} }
}, },
"objects": { "meshes": {
"batman_logo": {
"type": "OBJ",
"url": "batman.obj",
"material": "yellow",
"position": [
0,
50,
50
],
"scale": [
10,
10,
10
],
"castShadow": true,
"animation": "element.rotation.y += delta"
},
"batman": {
"children": {
"hip": { "hip": {
"castShadow": true,
"geometry": "hip", "geometry": "hip",
"material": "black", "material": "black",
"children": { "children": {
"hip_wireframe": {
"type": "LineSegments",
"geometry": "hip",
"material": "white_frame"
},
"r_thigh": { "r_thigh": {
"animation": "element.rotation.x = Math.sin(time*10)",
"castShadow": true,
"geometry": "thigh", "geometry": "thigh",
"material": "black", "material": "black",
"position": [ "position": [
@ -205,8 +155,12 @@
1 1
], ],
"children": { "children": {
"r_thigh_wireframe": {
"type": "LineSegments",
"geometry": "thigh",
"material": "white_frame"
},
"r_leg": { "r_leg": {
"castShadow": true,
"geometry": "leg", "geometry": "leg",
"material": "black", "material": "black",
"position": [ "position": [
@ -220,23 +174,37 @@
-90 -90
], ],
"children": { "children": {
"r_leg_wireframe": {
"type": "LineSegments",
"geometry": "leg",
"material": "white_frame"
},
"r_feet": { "r_feet": {
"castShadow": true,
"geometry": "feet", "geometry": "feet",
"material": "black", "material": "black",
"position": [ "position": [
0, 0,
-5.75, -5.75,
1.125 1.125
] ],
"scale": [
1.00001,
1,
1
],
"children": {
"r_feet_wireframe": {
"type": "LineSegments",
"geometry": "feet",
"material": "white_frame"
}
}
} }
} }
} }
} }
}, },
"l_thigh": { "l_thigh": {
"animation": "element.rotation.x = -Math.sin(time*10)",
"castShadow": true,
"geometry": "thigh", "geometry": "thigh",
"material": "black", "material": "black",
"position": [ "position": [
@ -255,8 +223,12 @@
1 1
], ],
"children": { "children": {
"l_thigh_wireframe": {
"type": "LineSegments",
"geometry": "thigh",
"material": "white_frame"
},
"l_leg": { "l_leg": {
"castShadow": true,
"geometry": "leg", "geometry": "leg",
"material": "black", "material": "black",
"position": [ "position": [
@ -270,15 +242,31 @@
-90 -90
], ],
"children": { "children": {
"l_leg_wireframe": {
"type": "LineSegments",
"geometry": "leg",
"material": "white_frame"
},
"l_feet": { "l_feet": {
"castShadow": true,
"geometry": "feet", "geometry": "feet",
"material": "black", "material": "black",
"position": [ "position": [
0, 0,
-5.75, -5.75,
1.125 1.125
] ],
"scale": [
1.00001,
1,
1
],
"children": {
"l_feet_wireframe": {
"type": "LineSegments",
"geometry": "feet",
"material": "white_frame"
}
}
} }
} }
} }
@ -288,8 +276,6 @@
"type": "empty", "type": "empty",
"children": { "children": {
"r_shoulder": { "r_shoulder": {
"animation": "element.rotation.x = -Math.sin(time*10)",
"castShadow": true,
"geometry": "arm_joint", "geometry": "arm_joint",
"material": "black", "material": "black",
"position": [ "position": [
@ -303,8 +289,12 @@
-20 -20
], ],
"children": { "children": {
"r_shoulder_wireframe": {
"type": "LineSegments",
"geometry": "arm_joint",
"material": "white_frame"
},
"r_upper_arm": { "r_upper_arm": {
"castShadow": true,
"geometry": "arm", "geometry": "arm",
"material": "black", "material": "black",
"position": [ "position": [
@ -312,9 +302,18 @@
-2.75, -2.75,
0 0
], ],
"scale": [
1.00001,
1,
1
],
"children": { "children": {
"r_upper_arm_wireframe": {
"type": "LineSegments",
"geometry": "arm",
"material": "white_frame"
},
"r_elbow": { "r_elbow": {
"castShadow": true,
"geometry": "arm_joint", "geometry": "arm_joint",
"material": "black", "material": "black",
"position": [ "position": [
@ -328,8 +327,12 @@
0 0
], ],
"children": { "children": {
"r_elbow_wireframe": {
"type": "LineSegments",
"geometry": "arm_joint",
"material": "white_frame"
},
"r_lower_arm": { "r_lower_arm": {
"castShadow": true,
"geometry": "arm", "geometry": "arm",
"material": "black", "material": "black",
"position": [ "position": [
@ -337,7 +340,17 @@
-2.75, -2.75,
0 0
], ],
"scale": [
1.00001,
1,
1
],
"children": { "children": {
"r_lower_arm_wireframe": {
"type": "LineSegments",
"geometry": "arm",
"material": "white_frame"
},
"r_wrist_helper": { "r_wrist_helper": {
"type": "empty", "type": "empty",
"position": [ "position": [
@ -345,9 +358,13 @@
-3, -3,
0 0
], ],
"scale": [
1.00001,
1,
1
],
"children": { "children": {
"r_hand": { "r_hand": {
"castShadow": true,
"geometry": "hand", "geometry": "hand",
"material": "black", "material": "black",
"position": [ "position": [
@ -364,17 +381,35 @@
1, 1,
1, 1,
9 9
] ],
"children": {
"r_hand_wireframe": {
"type": "LineSegments",
"geometry": "hand",
"material": "white_frame"
}
}
}, },
"r_wrist": { "r_wrist": {
"castShadow": true,
"geometry": "arm", "geometry": "arm",
"material": "black", "material": "black",
"position": [
0.00001,
0,
0
],
"scale": [ "scale": [
0.5, 0.5,
0.25, 0.25,
0.5 0.5
] ],
"children": {
"r_wrist_wireframe": {
"type": "LineSegments",
"geometry": "arm",
"material": "white_frame"
}
}
} }
} }
} }
@ -387,8 +422,6 @@
} }
}, },
"l_shoulder": { "l_shoulder": {
"animation": "element.rotation.x = Math.sin(time*10)",
"castShadow": true,
"geometry": "arm_joint", "geometry": "arm_joint",
"material": "black", "material": "black",
"position": [ "position": [
@ -402,8 +435,12 @@
20 20
], ],
"children": { "children": {
"l_shoudler_wireframe": {
"type": "LineSegments",
"geometry": "arm_joint",
"material": "white_frame"
},
"l_upper_arm": { "l_upper_arm": {
"castShadow": true,
"geometry": "arm", "geometry": "arm",
"material": "black", "material": "black",
"position": [ "position": [
@ -411,9 +448,18 @@
-2.75, -2.75,
0 0
], ],
"scale": [
1.00001,
1,
1
],
"children": { "children": {
"l_upper_arm_wireframe": {
"type": "LineSegments",
"geometry": "arm",
"material": "white_frame"
},
"l_elbow": { "l_elbow": {
"castShadow": true,
"geometry": "arm_joint", "geometry": "arm_joint",
"material": "black", "material": "black",
"position": [ "position": [
@ -427,8 +473,12 @@
0 0
], ],
"children": { "children": {
"l_elbow_wireframe": {
"type": "LineSegments",
"geometry": "arm_joint",
"material": "white_frame"
},
"l_lower_arm": { "l_lower_arm": {
"castShadow": true,
"geometry": "arm", "geometry": "arm",
"material": "black", "material": "black",
"position": [ "position": [
@ -436,7 +486,17 @@
-2.75, -2.75,
0 0
], ],
"scale": [
1.00001,
1,
1
],
"children": { "children": {
"l_lower_arm_wireframe": {
"type": "LineSegments",
"geometry": "arm",
"material": "white_frame"
},
"r_wrist_helper": { "r_wrist_helper": {
"type": "empty", "type": "empty",
"position": [ "position": [
@ -444,9 +504,13 @@
-3, -3,
0 0
], ],
"scale": [
1.00001,
1,
1
],
"children": { "children": {
"l_hand": { "l_hand": {
"castShadow": true,
"geometry": "hand", "geometry": "hand",
"material": "black", "material": "black",
"position": [ "position": [
@ -463,17 +527,35 @@
1, 1,
1, 1,
9 9
] ],
"children": {
"l_hand_wireframe": {
"type": "LineSegments",
"geometry": "hand",
"material": "white_frame"
}
}
}, },
"l_wrist": { "l_wrist": {
"castShadow": true,
"geometry": "arm", "geometry": "arm",
"material": "black", "material": "black",
"position": [
0.00001,
0,
0
],
"scale": [ "scale": [
0.5, 0.5,
0.25, 0.25,
0.5 0.5
] ],
"children": {
"l_wrist_wireframe": {
"type": "LineSegments",
"geometry": "arm",
"material": "white_frame"
}
}
} }
} }
} }
@ -486,7 +568,6 @@
} }
}, },
"neck": { "neck": {
"castShadow": true,
"geometry": "neck", "geometry": "neck",
"material": "skin", "material": "skin",
"position": [ "position": [
@ -494,14 +575,29 @@
19.05, 19.05,
0 0
], ],
"scale": [
1.00001,
1,
1
],
"children": { "children": {
"neck_wireframe": {
"type": "LineSegments",
"geometry": "neck",
"material": "white_frame"
},
"head": { "head": {
"castShadow": true,
"geometry": "head", "geometry": "head",
"material": "skin" "material": "skin",
"children": {
"head_wireframe": {
"type": "LineSegments",
"geometry": "head",
"material": "white_frame"
}
}
}, },
"chin": { "chin": {
"castShadow": true,
"geometry": "head_border", "geometry": "head_border",
"material": "skin", "material": "skin",
"position": [ "position": [
@ -515,20 +611,35 @@
0 0
], ],
"children": { "children": {
"chin_wireframe": {
"type": "LineSegments",
"geometry": "head_border",
"material": "white_frame"
},
"head_cap_bottom": { "head_cap_bottom": {
"castShadow": true,
"geometry": "head_cap", "geometry": "head_cap",
"material": "skin", "material": "skin",
"position": [ "position": [
0, 0,
0, 0,
1 1
] ],
"scale": [
1.00001,
1,
1
],
"children": {
"head_cap_bottom_wireframe": {
"type": "LineSegments",
"geometry": "head_cap",
"material": "white_frame"
}
}
} }
} }
}, },
"scalp": { "scalp": {
"castShadow": true,
"geometry": "head_border", "geometry": "head_border",
"material": "skin", "material": "skin",
"position": [ "position": [
@ -542,8 +653,12 @@
0 0
], ],
"children": { "children": {
"scalp_wireframe": {
"type": "LineSegments",
"geometry": "head_border",
"material": "white_frame"
},
"head_cap_top": { "head_cap_top": {
"castShadow": true,
"geometry": "head_cap", "geometry": "head_cap",
"material": "skin", "material": "skin",
"position": [ "position": [
@ -551,11 +666,18 @@
0, 0,
-1 -1
], ],
"rotation": [ "scale": [
0, 1.00001,
180, 1,
0 1
] ],
"children": {
"head_cap_top_wireframe": {
"type": "LineSegments",
"geometry": "head_cap",
"material": "white_frame"
}
}
} }
} }
} }
@ -570,7 +692,6 @@
], ],
"children": { "children": {
"body": { "body": {
"castShadow": true,
"geometry": "body", "geometry": "body",
"material": "black", "material": "black",
"position": [ "position": [
@ -582,156 +703,18 @@
0, 0,
45, 45,
0 0
]
}
}
}
}
}
}
}
}
},
"ground": {
"animation": "element.material.map.offset.y -= delta",
"geometry": "ground",
"material": "ground",
"rotation": [
-90,
0,
0
], ],
"position": [
0,
-14,
0
],
"receiveShadow": true
},
"targets": {
"children": { "children": {
"backlight_tagret": { "body_wireframe": {
"type": "AxesHelper", "type": "LineSegments",
"position": [ "geometry": "body",
0, "material": "white_frame"
10, }
10 }
] }
}
} }
} }
},
"moon": {
"geometry": "ground",
"material": "moon",
"scale": [
0.7,
0.7,
0.7
],
"position": [
300,
300,
-300
],
"rotation": [
45, -45, 0
]
},
"lights": {
"children": {
"front_light": {
"type": "SpotLight",
"position": [
0,
-13,
30
],
"intensity": 10000,
"target": "chin",
"color": "rgb(150, 0, 0)"
},
"front_light_helper": {
"type": "SpotLightHelper",
"target": "front_light"
},
"right_backlight": {
"type": "DirectionalLight",
"target": "backlight_tagret",
"position": [
50,
30,
-5
],
"color": "rgb(252, 132, 3)",
"castShadow": true
},
"right_backlight_helper": {
"type": "DirectionalLightHelper",
"target": "right_backlight"
},
"left_backlight": {
"type": "DirectionalLight",
"target": "backlight_tagret",
"position": [
-50,
30,
-5
],
"color": "rgb(3, 15, 252)",
"castShadow": true
},
"left_backlight_helper": {
"type": "DirectionalLightHelper",
"target": "left_backlight"
},
"ambient": {
"type": "AmbientLight",
"intensity": 0.3
},
"right_pointlight": {
"type": "PointLight",
"position": [
20,
10,
-30
],
"color": "orange",
"intensity": 10000
},
"right_pointlight_helper": {
"type": "PointLightHelper",
"target": "right_pointlight"
},
"left_pointlight": {
"type": "PointLight",
"position": [
-20,
10,
-30
],
"color": "darkblue",
"intensity": 10000
},
"left_pointlight_helper": {
"type": "PointLightHelper",
"target": "left_pointlight"
},
"batlight": {
"type": "SpotLight",
"position": [
0,
80,
50
],
"angle": 20,
"intensity": 5000000,
"color": "rgb(195, 163, 33)",
"castShadow": true,
"target": "batman_logo"
},
"batlight_helper": {
"type": "SpotLightHelper",
"target": "batlight"
} }
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB