利用者:Hypersomniac/PBR viewport/Technical details

提供: wiki
移動先: 案内検索

Minor Features / Improvement Ideas :

-Time parameter or a Frame number variable that gets updated by shader uniforms. This way we could have pretty simple way to animate shader.

-The Displace output could be used as Vertex Position Offset along their normal inside the vertex shader.

-Debug pass : As in cycles we should have a mean to isolate lighting components either for compositing or debugging. Like Diffuse/Glossy/Transmission/Emission. Maybe MRT could be our friend here.

-Cubemap Storage : This is a point of concern. Do we save the cubemaps ? Where ? If they are fast to recompute then I think it's not worth it. We should however, be capable of exporting the generated cubemaps. But custom/exported cubemaps should not contains the prefiltered mipmaps.

-Faster Compilation time / async : Do not let some slow action freeze blender's UI. Like shader compilation or cubemap prefiltering.

-Separate shader file : We should organize the glsl Shading code into more little files that would be stitched together when starting blender. That way everything works as intended. Translucency & subsurface still need to be investigated.

-Unlock getting HDR output for compositing.

Planning

I will separate the whole work into chunks that can be reviewed easily. Also sorted by priority from a user/dev perspective.


- Add a button / interface that enable the new high quality shading mode. My initial Idea was to use a checkbox when in material shading mode when under cycles render engine.
- Unclamp Hdr textures inside gpu_draw.c
- Add a bsdf interface inside gpu_material.c.
- Add a file that handles all probe specific function gpu_probe.c
- Add a function that renders the world probe (view3d_draw.c)
- Split Glsl shading files
- Add spherical harmonics computation
- Add the filtered importance sampling inside the brdfs.
- Add scene lamps loop. Add basic lighting functions.
- Add support for LUTs
- Add support for LTC (ggx area light)
- Add prefiltered Cubemap
- Add Object probes
- Add prepass depth and backface
- Add Ambient Occlusion (will bypass the post process one when in high quality mode)
- Add temporal reprojection of last frame inside a reflection buffer and preblur it
- Add HiZ Cone traced reflections
- Add planar reflections

Architecture:

- gpu_pbr.c : Contains all functions related to screen buffers and the GPUPBR that holds the LUTs and screen buffers texutres that the view3D needs.
- gpu_probe.c : Contains all functions related to probes rendering, filtering, and spherical harmonics computations. Define the GPUProbe type and create the probes.
- gpu_material.c : Add all light functions logic with light node tree injection and Bsdfs interface. Also contains the binding of PBR related textures used in the shader.
- view3d_draw.c : Add all probe and buffer rendering / refreshing logic. gpu_pbr_update is call before drawing a frame and take care that all probes are updated.
- gpu_texture.c : Add LUTs creation and Cubemap creation.