; 44 / Observatory reflection deck. Run in Extended mode. ; Original bespoke Blender assets; see assets/README.txt. Include "common.bb" BeginShowcase "planar-reflection","44 / Observatory reflection deck","The moving courier is behind the camera. M selects mirror, pool or facing mirrors; V compares an opaque SSR reference." ; Four deck slabs leave a real hole for the recessed reflecting basin. Block -13,-.2,0,8.1,.2,24,39,51,61:Block 13,-.2,0,8.1,.2,24,39,51,61 Block 0,-.2,-13.575,4.9,.2,10.425,39,51,61:Block 0,-.2,13.575,4.9,.2,10.425,39,51,61 frameModel=Model("observatory_frame",0,0,7):StandardMaterials frameModel Model "observatory_pool",0,0,0 planarMirror=PlanarFace(10.38,5.32,.43):RotateEntity planarMirror,-90,0,0:PositionEntity planarMirror,0,3.55,7 planarMirrorPlane=CreatePivot():RotateEntity planarMirrorPlane,-90,0,0:PositionEntity planarMirrorPlane,0,3.55,7 EntityShader planarMirror,shader:ShaderColor shader,"FallbackColor",20,40,55 planarMirrorHandle=CreatePlanarReflection(camera,planarMirrorPlane):EntityPlanarReflection planarMirror,planarMirrorHandle planarPool=PlanarFace(8.5,5,.45):PositionEntity planarPool,0,.15,0 planarPoolPlane=CreatePivot():PositionEntity planarPoolPlane,0,.15,0 planarWaterShader=LoadShader("builtin:water"):EntityShader planarPool,planarWaterShader ShaderTexture planarWaterShader,"NormalMapA",StudyTexture("waves") ShaderTexture planarWaterShader,"NormalMapB",StudyTexture("waves") ShaderFloat planarWaterShader,"WaveSpeed",.02 ShaderColor planarWaterShader,"ShallowColor",32,100,115:ShaderColor planarWaterShader,"DeepColor",10,30,45 ShaderColor planarWaterShader,"FallbackColor",24,45,60 ShaderFloat planarWaterShader,"Reflection",1:ShaderFloat planarWaterShader,"ReflectionDistortion",.025 ShaderFloat planarWaterShader,"Refraction",.06:ShaderFloat planarWaterShader,"FoamWidth",.08:ShaderFloat planarWaterShader,"FoamStrength",.25 ShaderFloat planarWaterShader,"Transmission",.6:ShaderFloat planarWaterShader,"DepthFade",2.2 planarPoolHandle=CreatePlanarReflection(camera,planarPoolPlane):EntityPlanarReflection planarPool,planarPoolHandle PlanarReflectionEnabled planarPoolHandle,False ; The facing receiver supplies its explicit teal fallback in the first bounce. planarFacingFrame=Model("observatory_frame",0,0,-15,1,180):HideEntity planarFacingFrame planarFacing=PlanarFace(10.38,5.32,.43):RotateEntity planarFacing,90,0,0:PositionEntity planarFacing,0,3.55,-15 planarFacingPlane=CreatePivot():RotateEntity planarFacingPlane,90,0,0:PositionEntity planarFacingPlane,0,3.55,-15 planarFacingShader=CopyShader(shader):ShaderColor planarFacingShader,"FallbackColor",30,115,108 EntityShader planarFacing,planarFacingShader planarFacingHandle=CreatePlanarReflection(camera,planarFacingPlane):EntityPlanarReflection planarFacing,planarFacingHandle PlanarReflectionEnabled planarFacingHandle,False:HideEntity planarFacing planarSSRShader=LoadShader("builtin:ssr"):ShaderFloat planarSSRShader,"Strength",.85 ShaderFloat planarSSRShader,"MaxDistance",40:ShaderFloat planarSSRShader,"Thickness",.1:ShaderFloat planarSSRShader,"TemporalWeight",0 CameraEffect camera,planarSSRShader:CameraEffectEnabled camera,planarSSRShader,False ; Clutter and asymmetric detail remain useful when seen only in reflection. planarCourier=Model("courier",-3,1.3,-10.5,1.4,25) label=PlanarSign(2.1,.8,"planar_courier_label"):EntityParent label,planarCourier,False PositionEntity label,0,2.35,.2 Model "arch",0,0,-13,2.1 label=PlanarSign(6,1,"planar_hangar_sign"):PositionEntity label,0,5.8,-12.6 Model "pump",4.1,0,-9,.9,40:Model "valve",-6,0,-11,1.1,30 Model "obelisk",5.7,0,-14,1.1,20:Model "lantern",-5.5,0,-6.5,1.1 planarSentinel=Model("sentinel",-5.8,0,3.3,1.1,15) Model "amphora",4.1,.35,2.8,.8,15:Model "fern",-4,.25,3.5,1.2 Model "rocks",-6.7,0,6.5,.75:Model "rocks",6.6,0,6,.8,70 For side=-1 To 1 Step 2 Lamp side*5.9,0,4.8,.85,110,225,230,1.5 For marker=0 To 4:Block side*6,.015,-4+marker*2,.1,.02,.5,197,150,60:Next Next sun=CreateSkyBox(environment):SkyBoxIntensity sun,.55 SetPlanarMode 1 Control "Strength",1,0,1,0.1,False RunShowcase()