LuxCore: new features

Discussion related to the implementation of new features & algorithms to the Core Engine.

Moderators: Dade, jromang, tomb, zcott, coordinators

Re: LuxCore: new features

Postby neo2068 » Tue Nov 15, 2016 1:14 am

I fixed the bug with multiple densitygrids but with biased path it aborts rendering with CL_OUT_OF_RESSOURCES on my GTX 780 and GTX 560. With path I get a CL_INVALID_BINARY error.

smoke OCL-CPU2.jpg

Code: Select all
Starting export...
[SDL][17.047] Camera type: perspective
[SDL][17.047] Camera position: Point[1.75046, -1.56039, 0.290355]
[SDL][17.047] Camera target: Point[1.23477, -0.713546, 0.420453]
[SDL][17.047] Camera clipping plane disabled
Converting volume: air
Converting volume: smoke
[Cube] Beginning smoke export (channel: fire)
[Cube] Smoke export of channel fire took 0.027s
[Cube] Beginning smoke export (channel: density)
[Cube] Smoke export of channel density took 0.024s
Converting object Suzanne
Converting material: monkey
Converting object Plane
Converting material: ground
Converting object Cube
Converting material: Material
Converting lightgroup "" (ID: 0)
Export finished (1.4s)
[SDL][18.531] Texture definition: fire
[SDL][18.547] Texture definition: emission
[SDL][18.547] Texture definition: emission_colorramp
[SDL][18.547] Texture definition: density
[SDL][18.563] Texture definition: scatter
[SDL][18.563] Texture definition: scatter_colorramp
[SDL][18.563] Texture definition: smoke_vol_emissionscale
[SDL][18.563] Volume definition: air_vol
[SDL][18.563] Volume definition: smoke_vol
[SDL][18.563] Material definition: monkey_mat
[SDL][18.563] Material definition: ground_mat
[SDL][18.563] Material definition: Material_mat
[SDL][18.563] Scene objects count: 3
[SDL][18.563] Light definition: Lamp_sun
[SDL][18.563] Light definition: Lamp_sky
[LuxCore][18.578] Configuration:
[LuxCore][18.578]   film.filter.type = "BLACKMANHARRIS"
[LuxCore][18.578]   film.filter.width = 1.5
[LuxCore][18.578]   sampler.type = "SOBOL"
[LuxCore][18.578]   renderengine.type = "PATHOCL"
[LuxCore][18.578]   path.maxdepth = 129
[LuxCore][18.578]   path.clamping.variance.maxvalue = 500
[LuxCore][18.578]   path.clamping.pdf.value = 0
[LuxCore][18.578]   path.forceblackbackground.enable = 0
[LuxCore][18.578]   lightstrategy.type = "LOG_POWER"
[LuxCore][18.578]   renderengine.seed = 1
[LuxCore][18.578]   opencl.cpu.use = 1
[LuxCore][18.594]   opencl.gpu.use = 1
[LuxCore][18.594]   opencl.devices.select = "1000"
[LuxCore][18.594]   film.opencl.enable = 0
[LuxCore][18.594]   opencl.kernelcache = "PERSISTENT"
[LuxCore][18.594]   film.width = 800
[LuxCore][18.594]   film.height = 800
[LuxCore][18.594]   accelerator.instances.enable = 1
[LuxCore][18.594]   film.outputs.1.type = "RGB_TONEMAPPED"
[LuxCore][18.594]   film.outputs.1.filename = "E:/Temp/smoke_test.Scene.00028_RGB_TONEMAPPED_.png"
[LuxCore][18.594]   scene.epsilon.min = 1.0000000000000001e-005
[LuxCore][18.594]   biaspathocl.devices.maxtiles = "1"
[LuxCore][18.594]   film.imagepipeline.0.type = "TONEMAP_LINEAR"
[LuxCore][18.594]   film.imagepipeline.0.scale = 0.44444444444444442
[LuxCore][18.594]   film.radiancescales.0.enabled = 1
[LuxCore][18.594]   film.radiancescales.0.globalscale = 1
[LuxCore][18.594] Film resolution: 800x800
[SDL][18.594] Film output definition: RGB_IMAGEPIPELINE [image.png]
[SDL][18.594] Image pipeline: film.imagepipeline
[SDL][18.594] Image pipeline step 0: TONEMAP_LINEAR
[SDL][18.594] Film output definition: RGB_TONEMAPPED [E:/Temp/smoke_test.Scene.00028_RGB_TONEMAPPED_.png]
[LuxRays][18.641] OpenCL Platform 0: NVIDIA Corporation
[LuxRays][18.641] OpenCL Platform 1: Intel(R) Corporation
[LuxRays][18.641] OpenCL Platform 2: Advanced Micro Devices, Inc.
[LuxRays][18.641] Device 0 name: NativeThread
[LuxRays][18.641] Device 0 type: NATIVE_THREAD
[LuxRays][18.641] Device 0 compute units: 1
[LuxRays][18.641] Device 0 preferred float vector width: 4
[LuxRays][18.641] Device 0 max allocable memory: 0MBytes
[LuxRays][18.641] Device 0 max allocable memory block size: 0MBytes
[LuxRays][18.641] Device 1 name: GeForce GTX 780
[LuxRays][18.641] Device 1 type: OPENCL_GPU
[LuxRays][18.641] Device 1 compute units: 12
[LuxRays][18.641] Device 1 preferred float vector width: 1
[LuxRays][18.656] Device 1 max allocable memory: 3072MBytes
[LuxRays][18.656] Device 1 max allocable memory block size: 768MBytes
[LuxRays][18.656] Device 2 name: GeForce GTX 560
[LuxRays][18.656] Device 2 type: OPENCL_GPU
[LuxRays][18.656] Device 2 compute units: 7
[LuxRays][18.656] Device 2 preferred float vector width: 1
[LuxRays][18.656] Device 2 max allocable memory: 1024MBytes
[LuxRays][18.656] Device 2 max allocable memory block size: 256MBytes
[LuxRays][18.656] Device 3 name: Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz
[LuxRays][18.656] Device 3 type: OPENCL_CPU
[LuxRays][18.656] Device 3 compute units: 12
[LuxRays][18.656] Device 3 preferred float vector width: 8
[LuxRays][18.656] Device 3 max allocable memory: 32668MBytes
[LuxRays][18.656] Device 3 max allocable memory block size: 8167MBytes
[LuxRays][18.656] Device 4 name: Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz
[LuxRays][18.656] Device 4 type: OPENCL_CPU
[LuxRays][18.656] Device 4 compute units: 12
[LuxRays][18.672] Device 4 preferred float vector width: 8
[LuxRays][18.672] Device 4 max allocable memory: 32668MBytes
[LuxRays][18.672] Device 4 max allocable memory block size: 8167MBytes
[LuxRays][18.672] Preprocessing DataSet
[LuxRays][18.672] Total vertex count: 7986
[LuxRays][18.672] Total triangle count: 15758
[LuxRays][18.672] Preprocessing DataSet done
[LuxRays][18.688] Creating 1 intersection device(s)
[LuxRays][18.688] Allocating intersection device 0: GeForce GTX 780 (Type = OPENCL_GPU)
[LuxCore][18.688] OpenCL Devices used:
[LuxCore][18.688] [GeForce GTX 780 Intersect]
[LuxCore][18.688]   Device OpenCL version: OpenCL 1.2 CUDA
[LuxRays][18.688] Adding DataSet accelerator: BVH
[LuxRays][18.688] Total vertex count: 7986
[LuxRays][18.688] Total triangle count: 15758
[LuxRays][18.688] BVH Dataset preprocessing time: 0ms
[LuxRays][18.688] BVH builder: EMBREE_BINNED_SAH
[LuxRays][18.703] BVH build hierarchy time: 14ms
[LuxRays][18.703] BVH total build time: 14ms
[LuxRays][18.703] Total BVH memory usage: 984Kbytes
[LuxCore][18.703] Configuring 1 CPU render threads
[Lux 2016-Nov-15 08:04:23] Starting the rendering process...
[LuxRays][18.813] [Device GeForce GTX 780 Intersect] BVH mesh vertices buffer size: 93Kbytes
[LuxRays][18.813] [Device GeForce GTX 780 Intersect] BVH nodes buffer size: 984Kbytes
[LuxCore][18.813] [PathOCLRenderEngine] OpenCL task count: 524288
[LuxCore][18.813] [PathOCLBaseRenderEngine] OpenCL max. page memory size: 786432Kbytes
[LuxCore][18.828] Compile Geometry
[LuxCore][18.828] Scene geometry compilation time: 0ms
[LuxCore][18.828] Compile 17 Textures
[LuxCore][18.828] Textures compilation time: 0ms
[LuxCore][18.828] Compile 5 Materials
[LuxCore][18.828] Material compilation time: 0ms
[LuxCore][18.828] Compile Lights
[LuxCore][18.828] Lights compilation time: 0ms
[LuxCore][18.828] Compile ImageMaps
[LuxCore][18.828] Image maps page(s) count: 0
[LuxCore][18.828] Texture maps compilation time: 0ms
[LuxCore][18.828] Compile Densitygrids
[LuxCore][18.828] DensityGrid 0:
[LuxCore][18.828]    Dimensions: 96 x 96 x 96
[LuxCore][18.828]    PageIndex: 0
[LuxCore][18.828]    Voxelsindex: 0
[LuxCore][18.828]    WrapMode: 1
[LuxCore][18.844] DensityGrid 1:
[LuxCore][18.844]    Dimensions: 96 x 96 x 96
[LuxCore][18.844]    PageIndex: 0
[LuxCore][18.844]    Voxelsindex: 884736
[LuxCore][18.844]    WrapMode: 1
[LuxCore][18.844] Density grids page(s) count: 1
[LuxCore][18.844]  Density page 0 size: 6912Kbytes
[LuxCore][18.844] Density grids compilation time: 16ms
[LuxCore][18.844] Always enabled OpenCL code:
[LuxCore][18.844] Compile Geometry
[LuxCore][18.844] Scene geometry compilation time: 0ms
[LuxCore][18.844] Compile 17 Textures
[LuxCore][18.844] Textures compilation time: 0ms
[LuxCore][18.859] Compile 5 Materials
[LuxCore][18.859] Material compilation time: 0ms
[LuxCore][18.859] Compile Lights
[LuxCore][18.859] Lights compilation time: 0ms
[LuxCore][18.859] Compile ImageMaps
[LuxCore][18.859] Image maps page(s) count: 0
[LuxCore][18.859] Texture maps compilation time: 0ms
[LuxCore][18.859] Compile Densitygrids
[LuxCore][18.859] DensityGrid 0:
[LuxCore][18.859]    Dimensions: 96 x 96 x 96
[LuxCore][18.859]    PageIndex: 0
[LuxCore][18.859]    Voxelsindex: 0
[LuxCore][18.859]    WrapMode: 1
[LuxCore][18.859] DensityGrid 1:
[LuxCore][18.859]    Dimensions: 96 x 96 x 96
[LuxCore][18.859]    PageIndex: 0
[LuxCore][18.859]    Voxelsindex: 884736
[LuxCore][18.875]    WrapMode: 1
[LuxCore][18.875] Density grids page(s) count: 1
[LuxCore][18.875]  Density page 0 size: 6912Kbytes
[LuxCore][18.875] Density grids compilation time: 16ms
[LuxCore][18.875] Starting 1 PathOCL render threads
[LuxRays][18.891] [Device GeForce GTX 780 Intersect] RADIANCE_PER_PIXEL_NORMALIZEDs[0] buffer size: 10000Kbytes
[LuxRays][18.891] [Device GeForce GTX 780 Intersect] RADIANCE_PER_PIXEL_NORMALIZEDs[0] buffer size: 10000Kbytes
[LuxRays][18.891] [Device GeForce GTX 780 Intersect] Camera buffer size: 5444bytes
[LuxRays][18.891] [Device GeForce GTX 780 Intersect] Normals buffer size: 93Kbytes
[LuxRays][18.891] [Device GeForce GTX 780 Intersect] Vertices buffer size: 93Kbytes
[LuxRays][18.891] [Device GeForce GTX 780 Intersect] Triangles buffer size: 184Kbytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] Mesh description buffer size: 456bytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] DensityGrid descriptions buffer size: 48bytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] DensityGrids buffer size: 6912Kbytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] Textures buffer size: 4624bytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] Materials buffer size: 660bytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] Scene objects buffer size: 24bytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] Lights buffer size: 648bytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] Env. light indices buffer size: 8bytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] Light offsets buffer size: 12bytes
[LuxRays][18.906] [Device GeForce GTX 780 Intersect] LightsDistribution buffer size: 24bytes
[LuxRays][18.922] [Device GeForce GTX 780 Intersect] InfiniteLightSourcesDistribution buffer size: 24bytes
[LuxRays][18.922] [Device GeForce GTX 780 Intersect] Ray buffer size: 24576Kbytes
[LuxRays][18.922] [Device GeForce GTX 780 Intersect] RayHit buffer size: 10240Kbytes
[LuxCore][18.922] [PathOCLStateKernelBaseRenderThread::0] Size of a GPUTask: 356bytes
[LuxRays][18.922] [Device GeForce GTX 780 Intersect] GPUTask buffer size: 182272Kbytes
[LuxCore][18.922] [PathOCLStateKernelBaseRenderThread::0] Size of a GPUTask DirectLight: 72bytes
[LuxRays][18.922] [Device GeForce GTX 780 Intersect] GPUTaskDirectLight buffer size: 36864Kbytes
[LuxCore][18.922] [PathOCLStateKernelBaseRenderThread::0] Size of a GPUTask State: 232bytes
[LuxRays][18.922] [Device GeForce GTX 780 Intersect] GPUTaskState buffer size: 118784Kbytes
[LuxRays][18.922] [Device GeForce GTX 780 Intersect] GPUTask Stats buffer size: 2048Kbytes
[LuxCore][18.922] [PathOCLStateKernelBaseRenderThread::0] Size of a Sample: 48bytes
[LuxRays][18.922] [Device GeForce GTX 780 Intersect] Sample buffer size: 24576Kbytes
[LuxCore][18.938] [PathOCLStateKernelBaseRenderThread::0] Sample dimensions: 1167
[LuxCore][18.938] [PathOCLStateKernelBaseRenderThread::0] Size of a SampleData: 0bytes
[LuxRays][18.938] [Device GeForce GTX 780 Intersect] SampleData buffer size: 1bytes
[LuxRays][18.938] [Device GeForce GTX 780 Intersect] PathVolumeInfo buffer size: 22528Kbytes
[LuxRays][18.938] [Device GeForce GTX 780 Intersect] DirectLightVolumeInfo buffer size: 22528Kbytes
[LuxRays][18.938] [Device GeForce GTX 780 Intersect] Pixel Filter Distribution buffer size: 132Kbytes
[LuxCore][18.953] [PathOCLBaseRenderThread::0] Defined symbols:  -D LUXRAYS_OPENCL_KERNEL -D SLG_OPENCL_KERNEL -D RENDER_ENGINE_PATHOCL -D PARAM_RAY_EPSILON_MIN=1.000000e-005f -D PARAM_RAY_EPSILON_MAX=1.000000e-001f -D PARAM_LIGHT_WORLD_RADIUS_SCALE=1.000000e+001f -D PARAM_ACCEL_BVH -D PARAM_FILM_RADIANCE_GROUP_0 -D PARAM_FILM_RADIANCE_GROUP_COUNT=1 -D PARAM_ENABLE_TEX_CONST_FLOAT -D PARAM_ENABLE_TEX_CONST_FLOAT3 -D PARAM_ENABLE_TEX_IMAGEMAP -D PARAM_ENABLE_TEX_DENSITYGRID -D PARAM_ENABLE_TEX_SCALE -D PARAM_ENABLE_TEX_MIX -D PARAM_ENABLE_TEX_BAND -D PARAM_ENABLE_TEX_NORMALMAP -D PARAM_ENABLE_TEX_FRESNELCOLOR -D PARAM_ENABLE_TEX_FRESNELCONST -D PARAM_ENABLE_MAT_MATTE -D PARAM_ENABLE_MAT_NULL -D PARAM_ENABLE_MAT_CLEAR_VOL -D PARAM_ENABLE_MAT_HETEROGENEOUS_VOL -D PARAM_HAS_PASSTHROUGH -D PARAM_CAMERA_TYPE=0 -D PARAM_HAS_SKYLIGHT2 -D PARAM_HAS_SUNLIGHT -D PARAM_HAS_ENVLIGHTS -D PARAM_HAS_DENSITYGRIDS -D PARAM_DENSITYGRIDS_PAGE_0 -D PARAM_DENSITYGRIDS_COUNT=1 -D PARAM_HAS_VOLUMES -D SCENE_DEFAULT_VOLUME_INDEX=4294967295 -D PARAM_MAX_PATH_DEPTH=129 -D PARAM_MAX_PATH_DEPTH_DIFFUSE=129 -D PARAM_MAX_PATH_DEPTH_GLOSSY=129 -D PARAM_MAX_PATH_DEPTH_SPECULAR=129 -D PARAM_RR_DEPTH=3 -D PARAM_RR_CAP=5.000000e-001f -D PARAM_SQRT_VARIANCE_CLAMP_MAX_VALUE=5.000000e+002f -D PARAM_PDF_CLAMP_VALUE=0.000000e+000f -D PARAM_IMAGE_FILTER_TYPE=5 -D PARAM_IMAGE_FILTER_WIDTH_X=1.500000e+000f -D PARAM_IMAGE_FILTER_WIDTH_Y=1.500000e+000f -D PARAM_IMAGE_FILTER_PIXEL_WIDTH_X=1 -D PARAM_IMAGE_FILTER_PIXEL_WIDTH_Y=1 -D PARAM_SAMPLER_TYPE=2 -D PARAM_SAMPLER_SOBOL_RNG0=8.534878e-002f -D PARAM_SAMPLER_SOBOL_RNG1=3.454906e-002f -D PARAM_SAMPLER_SOBOL_STARTOFFSET=32 -D PARAM_SAMPLER_SOBOL_MAXDEPTH=6
[LuxCore][18.984] [PathOCLBaseRenderThread::0] Compiling kernels
[LuxCore][61.281] [PathOCLBaseRenderThread::0] PathOCL kernel compilation error
ERROR clBuildProgram[CL_INVALID_BINARY]:
ptxas error   : File uses too much global constant data (0x283b8 bytes, 0x10000 max)
i7 5820K, 32 GB RAM, NVIDIA Geforce GTX 780 + GTX 560, Windows 10 64bit, Blender 2.77a
neo2068
Developer
 
Posts: 741
Joined: Sun May 03, 2009 2:11 am
Location: Germany

Re: LuxCore: new features

Postby Dade » Tue Nov 15, 2016 5:22 am

neo2068 wrote:I fixed the bug with multiple densitygrids but with biased path it aborts rendering with CL_OUT_OF_RESSOURCES on my GTX 780 and GTX 560. With path I get a CL_INVALID_BINARY error.


It looks like you are out of constant memory:

Code: Select all
ptxas error   : File uses too much global constant data (0x283b8 bytes, 0x10000 max)


If you push the code on a branch, I can check what is going wrong. I assume the problem is not strictly related to BIASPATHOCL but happens with PATHOCL too :?:
User avatar
Dade
Developer
 
Posts: 8318
Joined: Sat Apr 19, 2008 6:04 pm
Location: Italy

Re: LuxCore: new features

Postby neo2068 » Tue Nov 15, 2016 1:43 pm

Dade, I pushed the code in the densitygrid branch. The problem occurs with PATHOCL. With BIASPATHOCL it compiles and renders at least a few tiles and crashes then. I attached my test scene. The grid has a resolution of 96x96x96 cells. With a coarser grid it renders fine, e.g. 48.
Attachments
smoke_test.blend
(2.07 MiB) Downloaded 31 times
i7 5820K, 32 GB RAM, NVIDIA Geforce GTX 780 + GTX 560, Windows 10 64bit, Blender 2.77a
neo2068
Developer
 
Posts: 741
Joined: Sun May 03, 2009 2:11 am
Location: Germany

Re: LuxCore: new features

Postby Dade » Mon Feb 20, 2017 8:11 am

I have removed smallluxgpu4 example from the source as it is totally surpassed by LuxCoreUI. GLUT and GLEW are not required anymore to compile the source.

R.I.P. SLG
User avatar
Dade
Developer
 
Posts: 8318
Joined: Sat Apr 19, 2008 6:04 pm
Location: Italy

Re: LuxCore: new features

Postby sharlybg » Mon Feb 20, 2017 8:54 am

I'm seing lot of move in the luxcore dev side.Just want to know if we can do this:
please can someone have time to add portals support ? there is a real need to accelerate realistic indoor rendering using path tracing on GPUs without fake portals method ( emitter plane on windows ). true portals with HDRI give better results.

--- one things do someone also know how Fstorm guys can increase portals strength (results are pretty impressive) ?
i7 6700k + 32 Gb DDR4 + 2X R9 390 sapphir nitro.
User avatar
sharlybg
 
Posts: 687
Joined: Tue Nov 02, 2010 10:22 am
Location: Ivory coast

Re: LuxCore: new features

Postby B.Y.O.B. » Mon Feb 20, 2017 9:06 am

sharlybg wrote:--- one things do someone also know how Fstorm guys can increase portals strength (results are pretty impressive) ?

What exactly does this "portal strength" do? Does it change the look of the image?
User avatar
B.Y.O.B.
Developer
 
Posts: 5095
Joined: Wed Nov 10, 2010 4:10 pm
Location: Germany

Re: LuxCore: new features

Postby Dade » Mon Feb 20, 2017 9:40 am

sharlybg wrote:please can someone have time to add portals support ? there is a real need to accelerate realistic indoor rendering using path tracing on GPUs without fake portals method ( emitter plane on windows ). true portals with HDRI give better results.


I have implemented portals in a commercial GPU renderer and they are sincerely a bit overrated. I mean: they makes wonders when you use only a Sky light source or a LDR image for infinite light however they are plain useless as soon as you use Sun or an HDR. The problem is that you always use Sun/Sky combo or an HDR for indoor renderings so I consider portals quite useless in practice.

I'm talking of portals in "LuxRender speaking" (i.e. for instance, the concept of portals in the old Radiance or Indigo render is totally different). We should probably discuss first of what kind of portals are we talking about.
User avatar
Dade
Developer
 
Posts: 8318
Joined: Sat Apr 19, 2008 6:04 pm
Location: Italy

Re: LuxCore: new features

Postby sharlybg » Mon Feb 20, 2017 9:42 am

look a almost the end of the tutorial to see how it work. It seem that portals there works like a shader.

https://www.behance.net/gallery/45985237/Reading-Corner-Fstorm-Tutorial
i7 6700k + 32 Gb DDR4 + 2X R9 390 sapphir nitro.
User avatar
sharlybg
 
Posts: 687
Joined: Tue Nov 02, 2010 10:22 am
Location: Ivory coast

Re: LuxCore: new features

Postby B.Y.O.B. » Mon Feb 20, 2017 10:20 am

Dade wrote:I'm talking of portals in "LuxRender speaking" (i.e. for instance, the concept of portals in the old Radiance or Indigo render is totally different). We should probably discuss first of what kind of portals are we talking about.

Is there a portal concept that is useful in practice?
The best one I could find so far seems to be this one: https://benedikt-bitterli.me/pmems.html (at least to me).
User avatar
B.Y.O.B.
Developer
 
Posts: 5095
Joined: Wed Nov 10, 2010 4:10 pm
Location: Germany

Re: LuxCore: new features

Postby Dade » Mon Feb 20, 2017 4:02 pm

B.Y.O.B. wrote:Is there a portal concept that is useful in practice?


For instance, old Radiance was sampling the light incoming into the portal during the pre-processing phase in order to build a "virtual light" for the portal: low light resolution details but very fast rendering. I think Indigo does something similar :?:

B.Y.O.B. wrote:The best one I could find so far seems to be this one: https://benedikt-bitterli.me/pmems.html (at least to me).


Yes, the paper describes the problem with HDR lights I was talking about and a solution.
User avatar
Dade
Developer
 
Posts: 8318
Joined: Sat Apr 19, 2008 6:04 pm
Location: Italy

PreviousNext

Return to Architecture & Design

Who is online

Users browsing this forum: No registered users and 3 guests