@@ -280,7 +280,7 @@ const wood = TSL.Fn( ( [
280
280
darkGrainColor ,
281
281
lightGrainColor
282
282
] ) => {
283
-
283
+
284
284
const center = woodCenter ( p , centerSize ) ;
285
285
const mainWarp = spaceWarp ( spaceWarp ( p , center , largeWarpScale , largeGrainStretch ) , smallWarpStrength , smallWarpScale , 0.17 ) ;
286
286
const detailWarp = spaceWarp ( mainWarp , fineWarpStrength , fineWarpScale , 0.17 ) ;
@@ -296,6 +296,7 @@ const wood = TSL.Fn( ( [
296
296
const woodParams = {
297
297
teak : {
298
298
originOffset : { x : - 0.4 , y : 0 , z : 0 } ,
299
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
299
300
centerSize : 1.11 , largeWarpScale : 0.32 , largeGrainStretch : 0.24 , smallWarpStrength : 0.059 ,
300
301
smallWarpScale : 2 , fineWarpStrength : 0.006 , fineWarpScale : 32.8 , ringCount : 34 ,
301
302
ringBias : 0.03 , ringSizeVariance : 0.03 , ringVarianceScale : 4.4 , barkThickness : 0.3 ,
@@ -304,6 +305,7 @@ const woodParams = {
304
305
} ,
305
306
walnut : {
306
307
originOffset : { x : - 0.4 , y : 0 , z : 0 } ,
308
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
307
309
centerSize : 1.07 , largeWarpScale : 0.42 , largeGrainStretch : 0.34 , smallWarpStrength : 0.016 ,
308
310
smallWarpScale : 10.3 , fineWarpStrength : 0.028 , fineWarpScale : 12.7 , ringCount : 32 ,
309
311
ringBias : 0.08 , ringSizeVariance : 0.03 , ringVarianceScale : 5.5 , barkThickness : 0.98 ,
@@ -312,6 +314,7 @@ const woodParams = {
312
314
} ,
313
315
white_oak : {
314
316
originOffset : { x : - 0.4 , y : 0 , z : 0 } ,
317
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
315
318
centerSize : 1.23 , largeWarpScale : 0.21 , largeGrainStretch : 0.21 , smallWarpStrength : 0.034 ,
316
319
smallWarpScale : 2.44 , fineWarpStrength : 0.01 , fineWarpScale : 14.3 , ringCount : 34 ,
317
320
ringBias : 0.82 , ringSizeVariance : 0.16 , ringVarianceScale : 1.4 , barkThickness : 0.7 ,
@@ -320,6 +323,7 @@ const woodParams = {
320
323
} ,
321
324
pine : {
322
325
originOffset : { x : - 0.4 , y : 0 , z : - 0.2 } ,
326
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
323
327
centerSize : 1.23 , largeWarpScale : 0.21 , largeGrainStretch : 0.18 , smallWarpStrength : 0.041 ,
324
328
smallWarpScale : 2.44 , fineWarpStrength : 0.006 , fineWarpScale : 23.2 , ringCount : 24 ,
325
329
ringBias : 0.1 , ringSizeVariance : 0.07 , ringVarianceScale : 5 , barkThickness : 0.35 ,
@@ -328,6 +332,7 @@ const woodParams = {
328
332
} ,
329
333
poplar : {
330
334
originOffset : { x : - 0.4 , y : 0 , z : 0.2 } ,
335
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
331
336
centerSize : 1.43 , largeWarpScale : 0.33 , largeGrainStretch : 0.18 , smallWarpStrength : 0.04 ,
332
337
smallWarpScale : 4.3 , fineWarpStrength : 0.004 , fineWarpScale : 33.6 , ringCount : 37 ,
333
338
ringBias : 0.07 , ringSizeVariance : 0.03 , ringVarianceScale : 3.8 , barkThickness : 0.3 ,
@@ -336,6 +341,7 @@ const woodParams = {
336
341
} ,
337
342
maple : {
338
343
originOffset : { x : - 0.4 , y : 0.3 , z : - 0.2 } ,
344
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
339
345
centerSize : 1.4 , largeWarpScale : 0.38 , largeGrainStretch : 0.25 , smallWarpStrength : 0.067 ,
340
346
smallWarpScale : 2.5 , fineWarpStrength : 0.005 , fineWarpScale : 33.6 , ringCount : 35 ,
341
347
ringBias : 0.1 , ringSizeVariance : 0.07 , ringVarianceScale : 4.6 , barkThickness : 0.61 ,
@@ -344,6 +350,7 @@ const woodParams = {
344
350
} ,
345
351
red_oak : {
346
352
originOffset : { x : - 0.4 , y : 0 , z : 0.4 } ,
353
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
347
354
centerSize : 1.21 , largeWarpScale : 0.24 , largeGrainStretch : 0.25 , smallWarpStrength : 0.044 ,
348
355
smallWarpScale : 2.54 , fineWarpStrength : 0.01 , fineWarpScale : 14.5 , ringCount : 34 ,
349
356
ringBias : 0.92 , ringSizeVariance : 0.03 , ringVarianceScale : 5.6 , barkThickness : 1.01 ,
@@ -352,6 +359,7 @@ const woodParams = {
352
359
} ,
353
360
cherry : {
354
361
originOffset : { x : - 0.4 , y : 0.3 , z : 0 } ,
362
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
355
363
centerSize : 1.33 , largeWarpScale : 0.11 , largeGrainStretch : 0.33 , smallWarpStrength : 0.024 ,
356
364
smallWarpScale : 2.48 , fineWarpStrength : 0.01 , fineWarpScale : 15.3 , ringCount : 36 ,
357
365
ringBias : 0.02 , ringSizeVariance : 0.04 , ringVarianceScale : 6.5 , barkThickness : 0.09 ,
@@ -360,6 +368,7 @@ const woodParams = {
360
368
} ,
361
369
cedar : {
362
370
originOffset : { x : - 0.4 , y : 0.1 , z : 0.1 } ,
371
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
363
372
centerSize : 1.11 , largeWarpScale : 0.39 , largeGrainStretch : 0.12 , smallWarpStrength : 0.061 ,
364
373
smallWarpScale : 1.9 , fineWarpStrength : 0.006 , fineWarpScale : 4.8 , ringCount : 25 ,
365
374
ringBias : 0.01 , ringSizeVariance : 0.07 , ringVarianceScale : 6.7 , barkThickness : 0.1 ,
@@ -368,6 +377,7 @@ const woodParams = {
368
377
} ,
369
378
mahogany : {
370
379
originOffset : { x : - 0.4 , y : 0.2 , z : 0 } ,
380
+ grainRotation : { x : 0 , y : 0 , z : 0 } ,
371
381
centerSize : 1.25 , largeWarpScale : 0.26 , largeGrainStretch : 0.29 , smallWarpStrength : 0.044 ,
372
382
smallWarpScale : 2.54 , fineWarpStrength : 0.01 , fineWarpScale : 15.3 , ringCount : 38 ,
373
383
ringBias : 0.01 , ringSizeVariance : 0.33 , ringVarianceScale : 1.2 , barkThickness : 0.07 ,
@@ -405,7 +415,7 @@ export function GetWoodPreset( genus, finish ) {
405
415
406
416
}
407
417
408
- return { ...params , genus, finish, clearcoat, clearcoatRoughness, clearcoatDarken } ;
418
+ return { ...params , originOffset : new THREE . Vector3 ( ) . copy ( params . originOffset ) , grainRotation : new THREE . Vector3 ( ) . copy ( params . grainRotation ) , genus, finish, clearcoat, clearcoatRoughness, clearcoatDarken } ;
409
419
410
420
}
411
421
@@ -430,9 +440,11 @@ uniforms.cellScale = TSL.uniform( params.cellScale ).onObjectUpdate( ( { materia
430
440
uniforms . cellSize = TSL . uniform ( params . cellSize ) . onObjectUpdate ( ( { material } ) => material . cellSize ) ;
431
441
uniforms . darkGrainColor = TSL . uniform ( new THREE . Color ( params . darkGrainColor ) ) . onObjectUpdate ( ( { material } , self ) => self . value . set ( material . darkGrainColor ) ) ;
432
442
uniforms . lightGrainColor = TSL . uniform ( new THREE . Color ( params . lightGrainColor ) ) . onObjectUpdate ( ( { material } , self ) => self . value . set ( material . lightGrainColor ) ) ;
443
+ uniforms . originOffset = TSL . uniform ( new THREE . Vector3 ( ) . copy ( params . originOffset ) ) . onObjectUpdate ( ( { material } ) => material . originOffset ) ;
444
+ uniforms . grainRotation = TSL . uniform ( new THREE . Vector3 ( ) . copy ( params . grainRotation ) ) . onObjectUpdate ( ( { material } ) => material . grainRotation ) ;
433
445
434
446
const colorNode = wood (
435
- TSL . positionLocal . add ( TSL . vec3 ( params . originOffset . x , params . originOffset . y , params . originOffset . z ) ) ,
447
+ TSL . rotate ( TSL . positionLocal . add ( uniforms . originOffset ) , uniforms . grainRotation ) ,
436
448
uniforms . centerSize ,
437
449
uniforms . largeWarpScale ,
438
450
uniforms . largeGrainStretch ,
@@ -453,7 +465,7 @@ const colorNode = wood(
453
465
uniforms . lightGrainColor
454
466
) . mul ( params . clearcoatDarken ) ;
455
467
456
- export class WoodNodeMaterial extends THREE . MeshPhysicalNodeMaterial {
468
+ export class WoodNodeMaterial extends THREE . MeshPhysicalMaterial {
457
469
458
470
static get type ( ) {
459
471
@@ -492,4 +504,3 @@ export class WoodNodeMaterial extends THREE.MeshPhysicalNodeMaterial {
492
504
}
493
505
494
506
}
495
-
0 commit comments