Skip to content

Commit b83b1c9

Browse files
committed
Added self-shadows to physical rendering. Fixed material propagation to black on color change.
1 parent 4f5b6ef commit b83b1c9

File tree

4 files changed

+20
-36
lines changed

4 files changed

+20
-36
lines changed

js/LDRColorMaterials.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ LDR.Colors.createRandomTexture = function(damage, waves, waveSize, speckle) {
430430

431431
LDR.Colors.envMapPrefix = 'textures/cube/';
432432
LDR.Colors.textureMaterialPrefix = 'textures/materials/';
433-
LDR.Colors.listeningMaterials = {trans:[], // Only one trans material.
433+
LDR.Colors.listeningMaterials = {trans:[], // Only one trans texture.
434434
opaque:[], // -||-
435435
pearl:[],
436436
rubber:[],
@@ -627,7 +627,7 @@ LDR.Colors.buildStandardMaterial = function(colorID, texmap) {
627627
}
628628
else if(colorID === 0) {
629629
registerTextureListener = m => LDR.Colors.listeningMaterials.opaque.push(m);
630-
params.specular = 0xFFFFFF; // Increase glare
630+
params.specular = 0xDFDFDF; // Increase glare
631631
params.shininess = 82;
632632
params.reflectivity = 0.9;
633633
}

js/LDRLoader.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2201,7 +2201,7 @@ THREE.LDRPartType.prototype.generateThreePart = function(loader, c, p, r, cull,
22012201
material = LDR.Colors.buildStandardMaterial(tc);
22022202
}
22032203
let mesh = new THREE.Mesh(g.clone(), material); // Using clone to ensure matrix in next line doesn't affect other usages of the geometry.
2204-
mesh.castShadow = loader.physicalRenderingAge !== 0;
2204+
mesh.receiveShadow = mesh.castShadow = loader.physicalRenderingAge !== 0;
22052205
mesh.geometry.applyMatrix4(m4);
22062206
//mesh.applyMatrix4(m4); // Doesn't work for all LDraw parts as the matrix needs to be decomposable to position, quaternion and scale. Some rotation matrices in LDraw parts are not decomposable.
22072207
mc.addMesh(tc, mesh, pd);

js/Scene.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ ENV.Scene = function(canvas, color) {
4646
// Light and background:
4747
this.hemisphereLight = new THREE.HemisphereLight(0xF4F4FB, 0x30302B, 0.65);
4848
this.scene.add(this.hemisphereLight);
49-
this.scene.background = new THREE.Color(0xDDDDDD);//A0A0A2);
49+
this.scene.background = new THREE.Color(0xFBF3FF);
5050
}
5151

5252
ENV.Scene.prototype.setUpGui = function(setModelColorOriginal) {
@@ -128,6 +128,9 @@ ENV.Scene.prototype.setUpGui = function(setModelColorOriginal) {
128128
M.envMapIntensity = m.envMapIntensity;
129129
M.transparent = m.transparent;
130130
M.opacity = m.opacity;
131+
M.shininess = m.shininess;
132+
M.reflectivity = m.reflectivity;
133+
M.specular = m.specular;
131134

132135
LDR.Colors.loadTextures(() => {M.normalMap = m.normalMap; M.needsUpdate = true; self.render();});
133136
setModelColorOriginal && setModelColorOriginal(idx);
@@ -220,18 +223,18 @@ ENV.Scene.prototype.addPointLight = function() {
220223

221224
ENV.Scene.prototype.addDirectionalLight = function() {
222225
const dist = this.size.w*1.5;
223-
const y = this.size.h*2;
226+
const y = this.size.h;
224227
const diam = this.size.diam;
225228

226229
let light = new THREE.DirectionalLight(0xF6E3FF, 0.4); // color, intensity
227-
light.position.set(0.3*dist, 0.3*dist, -0.1*dist);
230+
light.position.set(-0.05*dist, y, -0.02*dist);
228231
light.lookAt(0,0,0);
229232

230233
light.castShadow = true;
231234
light.shadow.mapSize.width = Math.floor(3*diam); // Adjust according to size!
232235
light.shadow.mapSize.height = Math.floor(3*diam);
233236
light.shadow.camera.near = 0.5;
234-
light.shadow.camera.far = 3*(dist+y);
237+
light.shadow.camera.far = 3.5*(dist+y);
235238
light.shadow.camera.left = -diam;
236239
light.shadow.camera.right = diam;
237240
light.shadow.camera.top = diam;

sample_physical.htm

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,15 @@
1919
<script src="js/three.min.js"></script>
2020
<script src="js/OrbitControls.js"></script>
2121
<script src="js/dat.gui.min.js"></script>
22+
<script src="js/CopyShader.js"></script>
23+
<script src="js/Pass.js"></script>
24+
<script src="js/OutlinePass.js"></script>
25+
<script src="js/ShaderPass.js"></script>
26+
<script src="js/RenderPass.js"></script>
27+
<script src="js/MaskPass.js"></script>
28+
<script src="js/EffectComposer.js"></script>
2229
<script src="js/colors.js"></script>
2330
<script src="js/Scene.js"></script>
24-
<script src="js/ClientStorage.js"></script>
2531
<script src="js/LDROptions.js"></script>
2632
<script src="js/LDRShaders.js"></script>
2733
<script src="js/LDRGenerator.js"></script>
@@ -38,10 +44,7 @@
3844
let model = 'models/corvette_full.mpd';
3945
//let model = '6091.dat'; // Has overlap of line and conditional line causing trouble for the normal calculation.
4046
//let model = '85080.dat'; // Has conditional lines partially overlapping with hard corners, also causing issues for normal calculation.
41-
//let model = 'models/mf.mpd';
42-
//let model = 'models/texmap_dish.ldr';
43-
//let model = 'models/488_strip.mpd';
44-
//let model = 'models/test0.ldr';
47+
//let model = '3024.dat';
4548

4649
// Materials:
4750
//let model = 'models/luminance.ldr';
@@ -96,31 +99,9 @@
9699
animateConstruction();
97100
}
98101

99-
LDR.Options.lineContrast = 2; // No lines.
100-
LDR.Options.studs = 2; // Logos are made using textures
102+
LDR.Studs.makeGenerators('', 0, 2); // 0 for no high contrast. 2 for logo on texture.
101103

102-
let storage; // Make custom storage that attempts to generate parts before fetching them.
103-
LDR.Studs.makeGenerators('', 0, 2);
104-
storage = {
105-
retrievePartsFromStorage: (loader, toBeFetched, onDone) => {
106-
let retrieved = [];
107-
function attemptGeneratorFirst(id) {
108-
let pt = LDR.Generator.make(id);
109-
if(pt) {
110-
loader.partTypes[id] = pt;
111-
pt.steps.forEach(step => step.subModels.forEach(sm => attemptGeneratorFirst(sm.ID)));
112-
retrieved.push(id);
113-
}
114-
else {
115-
loader.load(id);
116-
}
117-
}
118-
toBeFetched.forEach(attemptGeneratorFirst);
119-
onDone(retrieved);
120-
}
121-
};
122-
123-
ldrLoader = new THREE.LDRLoader(onLoad, storage, {physicalRenderingAge:20});
104+
ldrLoader = new THREE.LDRLoader(onLoad, null, {physicalRenderingAge:20});
124105
ldrLoader.load(model);
125106
</script>
126107
</body>

0 commit comments

Comments
 (0)