Skip to content

Latest commit

 

History

History
127 lines (102 loc) · 4.93 KB

README.md

File metadata and controls

127 lines (102 loc) · 4.93 KB


Wooden PBR Engine is software ray-tracing researching engine for rendering 3D scenes based on C++17, SIMD Math Library, Data-Oriented ECS Design.
Technologies:
C++17, Data-Oriented ECS, Allocators, SIMD Math

Paper(RU):
https://drive.google.com/file/d/1mX7miJLeN_xeZ3ocKnfiUIN57I690-i9/view?usp=sharing

Implemented features:

  • Basic geometry shapes meshes generator
  • Exporter models data from some formats
  • Area lights, Infinite area light
  • Texturing
  • Billinear, Anisotropic samplers
  • Filter functions for reconstruction
  • Uniform, Stratified sampler
  • Uniform sampling different geometric surfaces
  • Dielectric, conductor fresnel
  • BRDF, BSDF, Micro-surface distribution
  • Linear Bounding Volume Hierarchy - hybrid building method based on surface area heuristic + fast morton code 3d volume separation
  • Multiple Importance sampling
  • Several materials (plastic, metal)
  • Blackbody emitters

In progress:

  • Metropolis sampling
  • Photon mapping
  • Volume rendering
  • Subsurface scattering
  • Multilayer materials
  • Scene parser

Libraries:
Data Driven ECS: https://github.com/Mishok43/WoodenECS
Math: https://github.com/Mishok43/WoodenMath
Allocators: https://github.com/Mishok43/WoodenAllocators

Based on:
Physically Based Rendering from Theory To Implementation
Computer architecture a quantitative approach

Features

Passes

''' for (uint32_t k = 0; k < pow(res /32, 2); k++) {

	JOB_RUN(JobGenerateFilmTiles)
	JOB_RUN(JobCreateCameraSamples)
	JOB_RUN(JobSamplerStratifiedGenerateSampels1D)
	JOB_RUN(JobSamplerStratifiedGenerateSampels2D)
	for (uint32_t j = 0; j < NSAMPLERS_PER_PIXEL; j++)
	{

		JOB_RUN(JobSamplerUpdateCameraSamples)
		JOB_RUN(JobCameraPerspGenerateRaysDifferential)
		runCollisionSystem();
		JOB_RUN(JobScatteringRequestEmittedLight)
		JOB_RUN(JobLightInfiniteAreaLeCompute)
		JOB_RUN(JobScatteringAccumulateEmittedLight)
		JOB_RUN(JobComputeDifferentialsForSurfInter)
		JOB_RUN(JobMapUVRequestsGenerate)
		JOB_RUN(JobSphereProcessMapUVRequests)
		JOB_RUN(JobTriangleProcessMapUVRequests)

		JOB_RUN(JobGenerateBSDFRequests)
		JOB_RUN(JobGenerateBSDFMaterialMetal)
		JOB_RUN(JobGenerateBSDFMaterialDielectric)
		JOB_RUN(JobGenerateBSDFMaterialPerfectGlass)

		JOB_RUN(JobBSDFComputeTransform)
		JOB_RUN(JobScatteringSampleLight)
		for (uint32_t i = 0; i < 1; i++)
		{
			JOB_RUN(JobScatteringSampleLightLI)

				JOB_RUN(JobSphereLightProcessSamplingRequests)
				JOB_RUN(JobLightInfiniteAreaLiSample);

				JOB_RUN(JobScatteringCastShadowRays)
				runCollisionSystem();
			JOB_RUN(JobScatteringProcessShadowRay)
				JOB_RUN(JobBSDFConductorMicrofaceCompute)
				JOB_RUN(JobBSDFSpecularReflectionCompute)
				JOB_RUN(JobBSDFDielectricMicrofaceCompute)

				JOB_RUN(JobScatteringIntegrateImportanceLight)

				JOB_RUN(JobScatteringSampleBSDF)
				JOB_RUN(JobBSDFConductorMicrofaceSample)
				JOB_RUN(JobBSDFSpecularReflectionSample)
				JOB_RUN(JobBSDFDielectricMicrofaceSample)

				JOB_RUN(JobScatteringCastShadowRaysWithInteraction)
				runCollisionSystem();
				JOB_RUN(JobScatteringProcessShadowRayWithInteraction)

				JOB_RUN(JobSphereLightProcessComputeRequests)
				JOB_RUN(JobLightInfiniteAreaLiCompute);

				JOB_RUN(JobScatteringIntegrateImportanceBSDF)
		}
		JOB_RUN(JobScatteringFinish)
		JOB_RUN(JobAccumalateLIFromSamples)
	}

	JOB_RUN(JobOutputFilmTitles)
}
	JOB_RUN(JobOutputFilm)

'''

Enviroment map

Experiments

Benchmark | CPU and Memory Usage

Data Oriented RT Bandwith

Object Oriented RT Bandwith