package Ġde . fab max . k ool . demo . pro ced ural Ċ Ċ import Ġde . fab max . k ool . math . Vec 3 f Ċ import Ġde . fab max . k ool . pipeline . Attribute Ċ import Ġde . fab max . k ool . pipeline . Gl sl Type Ċ import Ġde . fab max . k ool . pipeline . deferred . Deferred Pass Swap Listener Ċ import Ġde . fab max . k ool . pipeline . deferred . Deferred P asses Ċ import Ġde . fab max . k ool . pipeline . deferred . deferred P br Shader Ċ import Ġde . fab max . k ool . pipeline . ib l . Environment Maps Ċ import Ġde . fab max . k ool . pipeline . shader model . Ref r action Sampler Node Ċ import Ġde . fab max . k ool . pipeline . shader model . Stage Interface Node Ċ import Ġde . fab max . k ool . pipeline . shader model . fragment Stage Ċ import Ġde . fab max . k ool . pipeline . shader model . vertex Stage Ċ import Ġde . fab max . k ool . pipeline . sh ading . Alpha Mode Blend Ċ import Ġde . fab max . k ool . pipeline . sh ading . P br Material Config Ċ import Ġde . fab max . k ool . pipeline . sh ading . P br Shader Ċ import Ġde . fab max . k ool . pipeline . sh ading . pbr Shader Ċ import Ġde . fab max . k ool . scene . Group Ċ import Ġde . fab max . k ool . scene . color Mesh Ċ import Ġde . fab max . k ool . scene . geometry . Mesh Builder Ċ import Ġde . fab max . k ool . scene . mesh Ċ import Ġde . fab max . k ool . util . Color Ċ Ċ class ĠG las ( val Ġi bl : ĠEnvironment Maps ) Ġ: ĠGroup (), ĠDeferred Pass Swap Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgl as Shader : ĠP br Shader ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġgl as Shader Ġ= Ġgl as Shader () ĊĊĠĠĠĠĠĠĠ Ġ+ make W ine () ĊĠĠĠĠĠĠĠ Ġ+ make Body () ĊĠĠĠĠĠĠĠ Ġ+ make Sh aft () ĊĊĠĠĠĠĠĠĠ Ġtranslate ( 7 . 5 f , Ġ 0 f , Ġ 2 . 5 f ) ĊĠĠĠĠĠĠĠ Ġscale ( 0 . 9 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Swap ( previous P asses : ĠDeferred P asses , Ġcurrent P asses : ĠDeferred P asses ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgl as Shader . refr action Color Map ( current P asses . lighting Pass . color Texture ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Body () Ġ= Ġcolor Mesh Ġ{ ĊĠĠĠĠĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġgenerate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Body Geometry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeometry . remove De generated Triangles () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeometry . generate Normals () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshader Ġ= Ġp br Shader Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Image Based Lighting ( ib l ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrough ness Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Mode Ġ= ĠAlpha Mode Blend () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreflection Strength Ġ= Ġ 0 . 3 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Sh aft () Ġ= Ġmesh ( listOf ( Attribute . POSITION S , ĠAttribute . NORMAL S , ĠAttribute . COLORS , ĠTH ICK NESS )) Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Sh aft Geometry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeometry . remove De generated Triangles () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeometry . generate Normals () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġshader Ġ= Ġgl as Shader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake W ine () Ġ= Ġcolor Mesh Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake W ine Geometry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeometry . remove De generated Triangles () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeometry . generate Normals () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshader Ġ= Ġdeferred P br Shader Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrough ness Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġem iss ive Ġ= ĠColor ( 0 . 3 f , Ġ 0 f , Ġ 0 . 1 f ). to Linear (). with Alpha ( 0 . 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Static Al bedo ( Color ( 0 . 3 f , Ġ 0 f , Ġ 0 . 1 f ). mix ( Color . BLACK , Ġ 0 . 2 f ). to Linear ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMesh Builder . make Body Geometry () Ġ{ ĊĠĠĠĠĠĠĠ Ġrotate ( 9 0 f , ĠVec 3 f . NEG _ X _ AXIS ) ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . BLACK . with Alpha ( 0 . 1 f ). to Linear () ĊĊĠĠĠĠĠĠĠ Ġprofile Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Shape () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Extr ude Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 1 . 3 f , Ġ 9 . 1 f , Ġ 1 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 1 . 5 f , Ġ 9 . 3 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 3 . 9 7 f , Ġ 1 1 . 8 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 2 f , Ġ 1 2 . 1 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 4 5 f , Ġ 1 2 . 6 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 6 f , Ġ 1 3 . 1 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 6 5 f , Ġ 1 3 . 5 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 6 5 f , Ġ 1 4 . 5 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 5 8 f , Ġ 1 5 . 5 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 4 2 f , Ġ 1 7 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 0 f , Ġ 2 0 . 0 f , Ġ 1 f ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 3 . 5 f , Ġ 2 3 . 0 f , Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 3 . 4 7 5 f , Ġ 2 3 . 0 5 f , Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 3 . 4 5 f , Ġ 2 3 . 0 f , Ġ 0 . 5 f ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 3 . 9 5 f , Ġ 2 0 . 0 f , Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 3 7 f , Ġ 1 7 f , Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 6 f , Ġ 1 4 . 5 f , Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 6 f , Ġ 1 3 . 5 f , Ġ 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). reversed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Extr ude . forEach Ġ{ Ġep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Transform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale ( ep . r , Ġep . r , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( 0 f , Ġ 0 f , Ġep . h ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample ( inverse Orientation Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMesh Builder . make Sh aft Geometry () Ġ{ ĊĠĠĠĠĠĠĠ Ġrotate ( 9 0 f , ĠVec 3 f . NEG _ X _ AXIS ) ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . DARK _ GRAY . with Alpha ( 0 . 1 f ). to Linear () ĊĊĠĠĠĠĠĠĠ Ġprofile Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Shape () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġthickness Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Mod Fun Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Float Attribute ( TH ICK NESS )?. f Ġ= Ġthickness ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Transform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale ( 4 f , Ġ 4 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample And Fill Bottom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsha ft Extr ude Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 1 f , Ġ 0 . 1 f , Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 0 f , Ġ 0 . 2 f , Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 2 . 0 f , Ġ 0 . 5 f , Ġ 0 . 7 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 1 . 5 f , Ġ 0 . 6 5 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 1 . 0 f , Ġ 0 . 9 5 f , Ġ 1 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 0 . 7 5 f , Ġ 1 . 2 5 f , Ġ 2 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 0 . 5 f , Ġ 2 . 0 f , Ġ 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 0 . 4 f , Ġ 3 . 0 f , Ġ 2 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 0 . 4 f , Ġ 7 . 0 f , Ġ 2 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 0 . 5 f , Ġ 8 . 0 f , Ġ 2 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 0 . 6 f , Ġ 8 . 2 5 f , Ġ 2 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 0 . 9 f , Ġ 8 . 6 5 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 1 . 3 f , Ġ 9 . 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsha ft Extr ude . forEach Ġ{ Ġep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Transform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale ( ep . r , Ġep . r , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( 0 f , Ġ 0 f , Ġep . h ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthickness Ġ= Ġep . t ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMesh Builder . make W ine Geometry () Ġ{ ĊĠĠĠĠĠĠĠ Ġrotate ( 9 0 f , ĠVec 3 f . NEG _ X _ AXIS ) ĊĊĠĠĠĠĠĠĠ Ġprofile Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Shape () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Transform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( 0 f , Ġ 0 f , Ġ 1 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample And Fill Bottom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwine Extr ude Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 1 . 2 8 f , Ġ 9 . 1 f , Ġ 1 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 1 . 4 8 f , Ġ 9 . 3 f , Ġ 3 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 3 . 9 5 f , Ġ 1 1 . 8 f , Ġ 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 1 8 f , Ġ 1 2 . 1 f , Ġ 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 4 3 f , Ġ 1 2 . 6 f , Ġ 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 5 8 f , Ġ 1 3 . 1 f , Ġ 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 6 3 f , Ġ 1 3 . 5 f , Ġ 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 6 3 f , Ġ 1 3 . 5 f , Ġ 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 4 . 5 7 f , Ġ 1 3 . 4 f , Ġ 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 3 . 0 f , Ġ 1 3 . 4 f , Ġ 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 1 . 5 f , Ġ 1 3 . 4 f , Ġ 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx tr ude Props ( 0 . 5 f , Ġ 1 3 . 4 f , Ġ 7 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwine Extr ude . forEach Ġ{ Ġep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Transform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale ( ep . r , Ġep . r , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( 0 f , Ġ 0 f , Ġep . h ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Top () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgl as Shader (): ĠP br Shader Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgl as Cfg Ġ= ĠP br Material Config (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Image Based Lighting ( ib l ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrough ness Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Mode Ġ= ĠAlpha Mode Blend () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ref r action Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġgl as Model Ġ= ĠP br Shader . default P br Model ( glas Cfg ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġif Thickness : ĠStage Interface Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Stage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Thickness Ġ= Ġstage Interface Node (" if Thickness ", Ġattribute Node ( TH ICK NESS ). output ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Stage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre fr Sampler Ġ= Ġfind Node ByType < Ref r action Sampler Node >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre fr Sampler ?. in Material Thickness Ġ= Ġif Thickness . output ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠP br Shader ( glas Cfg , Ġgl as Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠEx tr ude Props ( val Ġr : ĠFloat , Ġval Ġh : ĠFloat , Ġval Ġt : ĠFloat ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTH ICK NESS Ġ= ĠAttribute (" a Mat Thickness ", ĠGl sl Type . FLOAT ) ĊĠĠĠ Ġ} Ċ }