Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-03-03EEVEE: Deferred: Large refactorClément Foucault
This changes drastically the implementation to leverage arbitrary writes in order to reduce complexity, memory usage and increase speed. Since we are no longer dependent on the framebuffer requirement, we can allocate bigger size texture that fits all views and avoid the extra. Transparency, holdout and emissions are no longer deferred and are now composited using dual source blending. The indirect lighting and raytracing is still not functional but will also gets a large refactor on its own
2022-02-25EEVEE: Simplify Hi-Z pass by porting it to a single pass compute shaderClément Foucault
2022-02-19Merge branch 'master' into eevee-rewriteClément Foucault
2022-02-15Merge branch 'master' into eevee-rewriteClément Foucault
# Conflicts: # source/blender/draw/engines/eevee/eevee_bloom.c # source/blender/draw/engines/eevee/eevee_cryptomatte.c # source/blender/draw/engines/eevee/eevee_data.c # source/blender/draw/engines/eevee/eevee_depth_of_field.c # source/blender/draw/engines/eevee/eevee_effects.c # source/blender/draw/engines/eevee/eevee_engine.c # source/blender/draw/engines/eevee/eevee_lightcache.c # source/blender/draw/engines/eevee/eevee_lightprobes.c # source/blender/draw/engines/eevee/eevee_lights.c # source/blender/draw/engines/eevee/eevee_lookdev.c # source/blender/draw/engines/eevee/eevee_lut_gen.c # source/blender/draw/engines/eevee/eevee_materials.c # source/blender/draw/engines/eevee/eevee_mist.c # source/blender/draw/engines/eevee/eevee_motion_blur.c # source/blender/draw/engines/eevee/eevee_occlusion.c # source/blender/draw/engines/eevee/eevee_private.h # source/blender/draw/engines/eevee/eevee_render.c # source/blender/draw/engines/eevee/eevee_renderpasses.c # source/blender/draw/engines/eevee/eevee_sampling.c # source/blender/draw/engines/eevee/eevee_screen_raytrace.c # source/blender/draw/engines/eevee/eevee_shaders.c # source/blender/draw/engines/eevee/eevee_shadows.c # source/blender/draw/engines/eevee/eevee_shadows_cascade.c # source/blender/draw/engines/eevee/eevee_shadows_cube.c # source/blender/draw/engines/eevee/eevee_subsurface.c # source/blender/draw/engines/eevee/eevee_temporal_sampling.c # source/blender/draw/engines/eevee/eevee_volumes.c # source/blender/gpu/intern/gpu_codegen.c # source/blender/gpu/intern/gpu_material_library.c # source/blender/gpu/opengl/gl_compute.cc # source/blender/makesrna/intern/rna_material.c
2022-01-27EEVEE: Make use of float4x4 instead of float[4][4] and rename vectorsClément Foucault
This follows the type defined in `gpu_shader_shared_utils.h`.
2021-12-04EEVEE: Light: Port light culling to GPUClément Foucault
This removes the light count limit for the forward shaded object. This also provides a more efficient way of computing the culling directly on the GPU. Moreover, this avoids doing multiple lighting passes for high light counts in the deferred pipeline, improving performance.
2021-11-09EEVEE: Shadow: Implement Virtual ShadowmappingClément Foucault
This is a total refactor of how shadows are handled. We use Virtual shadow maps with different Level of details to ensure a somewhat evenly distributed precision. The shadow test is a really crude shadow test that will be improved in further commit. There is a pool of 4096 Tilemaps that are distributed between shadowed ligths. These tilemaps are 16x16 each and reference shadow map pages that are allocated in an atlas. Pages are only allocated if needed (i.e: visible for rendering an object). Page management is done on GPU using compute shaders to reduce CPU task. On CPU only one draw pass per updated tilemaps is issued. This reduces the memory requirement of shadowmapping large scenes with many lights.
2021-11-05EEVEE: Raytracing: Add back screen space raytracingClément Foucault
The new pipeline is now cleaner and allows for deferred refraction. The refractions are more accurate but are not denoised for now. More research needs to be done in this area. There is no feedback buffer for now, so reflections of metallic surfaces will appear black. The same restriction on refractive materials still holds true. They will not appear in screen space tracing of other non refractive surfaces. However, refractive surfaces (non-blended) can now reflect themselves and the other surfaces with screen space reflections. Half res tracing is not implemented back yet.
2021-10-24EEVEE: Port back HiZbufferClément Foucault
Pretty much identical. Texture format is now always `GPU_R32F` to remove some workarounds.
2021-10-08EEVEE: Subsurface Scattering: New implementationClément Foucault
This new implementation follows the technique described in "Efficient screen space subsurface scattering Siggraph 2018". Compared to the old implementation it fixes a lot of issues at the cost of it being slower. This fixes: - Light leaking between different objects. - Light leaking between different surfaces with different depths. - SSS radii are now "texturable" per pixel. No SSS surfaces limits. - Noise should be lower. - Precomputation is only done once for all SSS surfaces which lowers the per material storage and precomputation time. Implementation is also simpler as it is only a one pass processing. We differ from the reference presentation by not precomputing the RGB weights per samples. We actually compute them on the fly in order to support varying SSS radii. Notes: - SSS IOR and SSS anisotropy are not supported. - Object level light leak prevention might not work for high number of objects in the scene (> 1024). In this case light leak might occur. Adding or deleting (hidding) objects in the scene might change which objects can leak.
2021-07-01EEVEE: Hair: Add back shaded hair supportClément Foucault
Same implementation as before but it is less intrusive towards the shading Node glsl code. Hair shaders also now supports displacement.
2021-06-06EEVEE: LookDev: Move rendering to view render.Clément Foucault
This makes is possible to have AA and correct blending of the forward rendered spheres. However, to avoid distorded spheres we need to not support Lookdev in panoramic projection mode. Also remove support for LookDev when using render border for now.
2021-06-06EEVEE: LookDev: Add back overlay supportClément Foucault
This differs a bit from old implementation. - Instead of manually adjusting the viewport we correctly place the sphere in the vertex shader. - Rendering happens after TAA accumulation: This is because we now support panoramic cameras and TAA would distort the spheres.
2021-06-05EEVEE: Lookdev: Add back lighting supportClément Foucault
This does not include reference spheres rendering. The approach is a bit different than before. Now we use a `bNodeTree` to control the rendering of lookdev. This generates a `GPUMaterial` that is stored per `Instance`. This way rendering lookdev is just updating the temp light cache using this material as world material. Removing the use of custom shader. This introduces a small hack in order to bind the studiolight hdri after the nodetree glsl parsing. The background display however is still using a custom shader in order to sample the world cubemap with different roughness. The view space option of the studiolight is now faster by using a transform before shading instead of rebaking the lightprobe constantly. This should not have any particular impact on render time.
2021-06-03EEVEE: LightCache: Port bakingClément Foucault
Some things differs from old implementation. - Object visibility is filtered correctly without using a visibility callback (which is to be removed). The implementation is also more high level using less low level tricks. A dedicated LightProbeView is created for each lightprobe cubeface to render using all pipeline (deferred and forward). There is still a few things not working.
2021-05-28EEVEE: Lightprobe: Add simple world probe rendering and downsamplingClément Foucault
2021-05-28EEVEE: Add back world nodetree supportClément Foucault
Only for background for now. Support is now not using defines and just use the correct globals and uniforms to keep the same values as before.
2021-05-26EEVEE: Rework multi material handlingClément Foucault
Shading groups are now created by the material_array_get functions instead of passing a reference to be filled later. This avoids having to wait later to maybe create a sub shading group. This also simplifies different geomety type handling.
2021-05-24EEVEE: GPencil: Add basic support for gpencil geometryClément Foucault
This adds support for rendering gpencil objects. There is a lot of features to implement specially the ones requiring per object uniforms.
2021-05-21GPU/EEVEE: Refactor codegen and nodetree supportClément Foucault
This is the first step towards the new evaluation scheme of EEVEE closures. This commit contains: - Removal of GPU_SOURCE_BUILTIN type, prefering global instead. This avoid many boilerplate code since most of the old builtins are now datas that are always present (i.e: view matrices, normals). - Rewritting of codegen in C++ to use `std::stringstream`. - Added a callback to let engine decide what to do with codegen code. This remove a lot of needs for defines because of code order dependency. The engine can insert the nodetree code in custom ways to create advance effects (i.e: add displacement or vertex lighting). Engine now returns final shader strings. - Closure nodes evaluation replacment is a placeholder for now.
2021-05-18EEVEE: Material: Add basic material logicClément Foucault
This is a port of the old material grouping. This is a bit more clean as we use containers for each passes and other structures. Nodetree is generated without major error for simple materials but it is not yet used as closures are not outputed.
2021-05-03EEVEE: Implementation of volume renderingClément Foucault
This adds the transparency and volume handling in the deferred render pipeline. Implementation is still unfinished. To have better naming convention, I renamed object shader to surface.
2021-04-30EEVEE: Initial implementation of deferred shadingClément Foucault
This introduce a fat Gbuffer layout that groups closure data in groups of similar BSDF. The goal is to have at least one sample for each group to avoid too much code complexity and expected worse performance. There is a lot of room for buffer reuse to reduce memory usage but it is not considered a priority for now.
2021-04-27EEVEE: Film/Sampling: Add smooth transitionClément Foucault
Add a smooth transition to avoid flickering of stochastic effects such as soft shadows. This use a simple blend method to progressively reveal the render after some low sample count to avoid most of the flickering. Parameters are hardcoded for now.
2021-04-26EEVEE: Shadow: Add back shadow caster trackingClément Foucault
Compared to previous implementation this does track dupli objects. There is a few optimizations left like using bitfield instead of bool arrays.
2021-04-26EEVEE: Shadow: Simplify the shadow moduleClément Foucault
Now the shadows are linked to a `Light` object. The `Light` object is linked to an `ObjectKey` to ensure persistence and deletion tracking. The Uniform data are packed so that there is 1 `ShadowPunctualData` per light in a `LightBatch`. This means there is only a shadowmap limit to the number of `Shadow` in a scene.
2021-04-25EEVEE: Use C++ vector typesClément Foucault
2021-04-23EEVEE: Shadow: Add Point light shadows support backClément Foucault
Difference with previous implementation: - Better texture space usage of cone and area light shadow. - Shadows are packed in an atlas. Reducing requirements for future features. - Sampling is simpler because shadow matrix does everything.
2021-04-21EEVEE: Check updates using recalc flag only an object maps.Clément Foucault
This avoids having to reset accumulation if nothing affecting eevee changes.
2021-04-15EEVEE: Refactor: Split implementation to .cc fileClément Foucault
This also wrap GPUFrameBuffer & GPUTexture inside eevee:Framebuffer and eevee:Texture to improve managment. Another cleanup was to put all members of `Instance` public to avoid much complexity in accessing the data with modules dependencies. Also split velocity View related data to `class Velocity` and rename previous `Velocity` to `VelocityModule`