1
1
2
- import * as THREE from 'three'
2
+ // import * as THREE from 'three'
3
+ import * as THREE from '../../packages/three/three.module-r120'
3
4
import { EffectComposer } from '../../packages/three/postprocessing/EffectComposer'
4
5
import { RenderPass } from '../../packages/three/postprocessing/RenderPass'
5
6
import { OutlinePass } from '../../packages/three/postprocessing/OutlinePass'
6
7
import { Reflector } from '../../packages/three/core/Reflector'
7
8
import { EXRLoader } from '../../packages/three/EXRLoader'
9
+ import { PMREMGenerator } from '../../packages/three/extra/PMREMGenerator'
8
10
9
11
import * as ECS from '../../packages/ecs-js/index'
10
12
@@ -22,6 +24,8 @@ import xgeom from '../xmath/geom'
22
24
23
25
const any = [ 'Obj3' ] ;
24
26
27
+ var __renderer__11_ ; // for debug
28
+
25
29
/**@class Thrender
26
30
* @classdesc
27
31
* X renderer of ecs subsystem based on Three.js renderer.
@@ -434,9 +438,10 @@ export default class Thrender extends ECS.System {
434
438
addObj3 ( scene , a , e ) ;
435
439
break ;
436
440
case AssetType . skyBox :
437
- mat = Thrender . create3Material ( uniforms , e . Visual . vtype , e . Visual . paras , e . Obj3 ) ;
438
- var m = Thrender . createObj3mesh ( e . Obj3 , e . Obj3 . geom , mat , e . Visual ) ;
439
- addObj3 ( scene , m , e ) ;
441
+ mat = Thrender . create3Material ( uniforms , e . Visual . vtype ,
442
+ e . Visual . paras , e . Obj3 , scene ) ;
443
+ //var m = Thrender.createObj3mesh(e.Obj3, e.Obj3.geom, mat, e.Visual);
444
+ // addObj3(scene, m, e);
440
445
break ;
441
446
case AssetType . reflector3js :
442
447
var g = Thrender . geometryCase ( e . Obj3 . geom , e . Obj3 . box ,
@@ -585,6 +590,43 @@ export default class Thrender extends ECS.System {
585
590
// Three.js directional light and map co-orperate with a few special
586
591
// materials' uniforms
587
592
uniforms = Object . assign ( uniforms , THREE . ShaderLib . shadow . uniforms ) ;
593
+
594
+ /* r110 style:
595
+ Uniforms.lights = {
596
+ ambientLightColor: { value: [] },
597
+ lightProbe: { value: [] },
598
+
599
+ directionalLights: { value: [], properties: {
600
+ direction: {},
601
+ color: {},
602
+
603
+ shadow: {},
604
+ shadowBias: {},
605
+ shadowRadius: {},
606
+ shadowMapSize: {}
607
+ } },
608
+ ...
609
+ }
610
+ r120 style:
611
+ directionalLights: { value: [], properties: {
612
+ direction: {},
613
+ color: {}
614
+ } },
615
+ This difference makes x-visual's shaders following r110 failed.
616
+ */
617
+ uniforms = THREE . UniformsUtils . merge (
618
+ [ uniforms ,
619
+ { directionalLights : { value : [ ] , properties : {
620
+ direction : { } ,
621
+ color : { } ,
622
+
623
+ shadow : { } ,
624
+ shadowBias : { } ,
625
+ shadowRadius : { } ,
626
+ shadowMapSize : { }
627
+ } } }
628
+ ] ) ;
629
+
588
630
delete uniforms . vertexShader ;
589
631
delete uniforms . fragmentShader ;
590
632
}
@@ -618,7 +660,7 @@ export default class Thrender extends ECS.System {
618
660
619
661
// TODO merge with mesh branch after debugged
620
662
static create3Material ( uniforms = { } , vtype , vparas , obj3 , scene ) {
621
- let def = { scene } ;
663
+ let def = { } ;
622
664
let u_tex = GlUniform . uTex ( vparas ) ;
623
665
624
666
def . map = GlUniform . tex0 ( ) ; //new ramTexture(3, 4, {alpha: alp});
@@ -660,40 +702,58 @@ export default class Thrender extends ECS.System {
660
702
if ( vtype === AssetType . mesh )
661
703
mat = new THREE . MeshPhongMaterial ( def ) ;
662
704
else if ( vtype === AssetType . skyBox ) {
663
- def [ "USE_MAP" ] = "" ;
705
+ //def["USE_MAP"] = "";
706
+ def . scene = scene ;
664
707
mat = new THREE . MeshBasicMaterial ( def ) ;
665
708
if ( Array . isArray ( u_tex ) && u_tex . length === 6 ) {
666
709
// cube
667
710
throw new XError ( "Sky box + cube textures, You really need this?" ) ;
668
711
}
669
712
else {
670
713
// Equirectangle
714
+ let pth = 'assets/' + ( Array . isArray ( u_tex ) ? u_tex [ 0 ] : u_tex ) ;
715
+ console . log ( pth ) ;
671
716
new EXRLoader ( )
672
- . setDataType ( THREE . UnsignedByteType )
717
+ . setDataType ( THREE . FloatType )
673
718
. load (
674
- Array . isArray ( u_tex ) ? u_tex [ 0 ] : u_tex ,
719
+ pth ,
675
720
function ( ) {
676
721
var _def = def ;
677
722
var _mat = mat ;
678
723
return function ( texture ) {
679
- /*
680
- */
681
724
let skyTarget = pmremGenerator . fromEquirectangular ( texture ) ;
682
725
// _def.map = cubeTarget.texture;
683
- if ( _def . scene )
684
- _def . scene . background = skyTarget . texture ;
685
- // _mat.map = skyTarget.texture;
726
+ // if (_def.scene)
727
+ // _def.scene.background = skyTarget.texture;
728
+ _mat . map = skyTarget . texture ;
686
729
687
730
texture . dispose ( ) ;
688
-
731
+
689
732
// let mtr = new THREE.MeshBasicMaterial( { map: texture } );
690
733
// _def.scene.background = mtr;
691
734
// _def.scene.background = texture;
692
735
// texture.needsUpdate = true;
693
736
}
694
737
} ( ) ) ;
738
+
739
+ var pmremGenerator = new PMREMGenerator ( __renderer__11_ ) ;
740
+ pmremGenerator . compileCubemapShader ( ) ;
741
+
742
+ /*
743
+ let loader = new THREE.TextureLoader();
744
+ let texture = loader.load(
745
+ '../assets/tex/sky-blue.jpg',
746
+ function() {
747
+ var _def = def;
748
+ var _mat = mat;
749
+ return function ( texture ) {
750
+ let rt = new THREE.WebGLCubeRenderTarget(texture.image.height);
751
+ rt.fromEquirectangularTexture(__renderer__11_, texture);
752
+ _def.scene.background = rt;
753
+ }
754
+ }());
755
+ */
695
756
}
696
- // mat = new THREE.MeshPhongMaterial(def);
697
757
}
698
758
else // mesh_basic
699
759
mat = new THREE . MeshBasicMaterial ( def ) ;
@@ -1423,11 +1483,12 @@ export default class Thrender extends ECS.System {
1423
1483
{ canvas : canvas , alpha : true , antialias : true } ,
1424
1484
x . options . renderer )
1425
1485
var renderer = new THREE . WebGLRenderer ( opt ) ;
1486
+ __renderer__11_ = renderer ;
1426
1487
1427
1488
renderer . shadowMap . enabled = true ;
1428
1489
// renderer.shadowMap.type = opt.shadowMap.type;
1429
1490
// renderer.shadowMapCullFace = THREE.CullFaceBack;
1430
- renderer . toneMappingExposure = 1. ;
1491
+ // renderer.toneMappingExposure = 1.;
1431
1492
1432
1493
if ( ! x . options . shadow )
1433
1494
x . options . shadow = { } ;
0 commit comments