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
''' 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)
'''
Data Oriented RT Bandwith Object Oriented RT Bandwith