Commit graph

48 commits

Author SHA1 Message Date
Azaezel
dabd5eb15d shifted normDepth to pre-Createsurface so we can throw out any calcs as soon as we determine that the pixel is out of viewrange 2018-11-02 15:57:37 -05:00
Tim Barnes
6e17475f86 WIP shader work - not complete! 2018-11-02 09:08:45 +10:00
Tim Barnes
a44d885885 oops forgot poor skylight shader 2018-10-28 20:52:32 +10:00
Tim Barnes
9a39afa0eb reflection probe updates 2018-10-28 20:42:26 +10:00
Areloch
78b2bcde0c Added the temporary 'use HDR cubemaps' override to use the in-memory full HDR range prefilter and irradiance cubemaps instead of the saved LDR ones.
Also fixed the target order with the skylight shader so it renders to the right targets.
2018-10-26 01:19:14 -05:00
Azaezel
8fadf880a3 Merge branch 'PBR_Bins_Reordered' of https://github.com/Areloch/Torque3D into PBR_PR
# Conflicts:
#	Engine/source/gfx/D3D11/gfxD3D11Device.cpp
#	Engine/source/renderInstance/renderDeferredMgr.h
2018-10-25 14:30:12 -05:00
Areloch
e72f04648a Adjusts the lightbin manager to be a regular bin, and shifts ownership of both lighting targets to the deferred manager. Probes now render ahead of lights to make the additive order jive.
Also reordered the probe targets used so they match lights for consistency.
2018-10-24 23:43:12 -05:00
Azaezel
8538337a36 reset ligtht outputs to output color*shadowing as oposed to baking shadowing into the alpha chan now that we're ignoring that for lights specifically (though we're still keeping the alpha chan arround for varying-IBL input blending purposes 2018-10-24 20:55:48 -05:00
Azaezel
a5cad08ba6 Merge branch 'PBR_PR' of https://github.com/rextimmy/Torque3D into PBR_PR 2018-10-24 20:48:45 -05:00
Azaezel
83ef5db910 work on getting render bin ordering correct 2018-10-24 18:27:43 -05:00
Tim Barnes
ad4c115e00 clear gbuffer from code and not from a shader 2018-10-24 18:58:46 +10:00
Azaezel
ddb431181b take ambient occlusion into account for probe and skylight projections as well, given they are litterally an ambient source 2018-10-17 21:34:09 -05:00
Azaezel
eb46a8c0e7 take ao slot in the gbuffer into account by the simple expedient of multiplying the cast-shadow result by the channel 2018-10-17 21:06:24 -05:00
Azaezel
f5bab3f574 matinfo.b is smoothness, and matinfo.a metalness fr the gbuffer. 2018-10-16 22:20:07 -05:00
Areloch
ef81708e12 Corrected box influence logic for probes to accommodate rotations.
Also uncommented line so probe transform is passed along to the render manager.
2018-10-16 16:18:22 -05:00
Areloch
57f8549abe Shifted to the static-list arrangement for probe instance tracking to help performance as well as drastically streamline the data submission/material instance flow for probe rendering. 2018-10-07 17:32:23 -05:00
Areloch
9e88e9feca Getting the GL side up-to-date to match. 2018-10-06 17:50:15 -05:00
Areloch
f31445751f Updates and fixes to probe and lighting logic. 2018-09-17 01:52:18 -05:00
Areloch
b19a4b22c8 Implementation of reflection and skylight probes.
Moves lighting math to the diffuse/specular two-channel logic.
2018-09-16 22:15:07 -05:00
Areloch
b4a1d18f42 Core implementation of Physical Based Rendering. 2018-09-15 20:19:57 -05:00
Areloch
25686ed4be Implementation of sRGB image support. Overhauls the linearization setup to utilize the sRGB image types, as well as refactors the use of ColorF and ColorI to be properly internally consistent. ColorIs are used only for front-facing/editing/UI settings, and ColorFs, now renamed to LinearColorF to reduce confusion of purpose, are used for color info in the engine itself. This avoids confusing and expensive conversions back and forth between types and avoids botches with linearity. Majority work done by @rextimmy 2017-06-23 11:36:20 -05:00
Areloch
35ddfd53b2 Does the prepass->deferred rename for the full template as well to make it play nice while we prep for the swap over to the BaseGame template. 2017-05-08 18:33:14 -05:00
RexTimmy
dd64004eaf MacOS platform support. 2016-09-28 11:09:48 +10:00
Azaezel
b204518344 lightbuffer (aka birghtness and shadow) always comes last as a multiplier 2016-09-05 22:12:36 -05:00
rextimmy
59f1c331c1 Linux vix shader fixes 2016-06-21 17:02:44 +10:00
Azaezel
88356ae37f subsurface followup: cleanups and corrections for vectorlightP, fillins for spot, point, and opengl equivalents 2016-04-15 16:06:10 -05:00
Azaezel
00cc949011 reimplements a form of subsurface scattering 2016-04-15 00:20:55 -05:00
Areloch
60ffb8e902 Merge pull request #1568 from Azaezel/soSensitive9001
case sensitivity typofix
2016-04-10 09:28:47 -05:00
Azaezel
df3cb6cb44 case sensitivity typofix 2016-03-25 18:46:25 -05:00
rextimmy
3a9b50f702 Direct3D11 common shader changes. 2016-03-20 21:50:21 +10:00
Azaezel
8c5810adad The final step (barring any overlooked missing bits, requested refactors, and of course, rolling in dependencies already submitted as PRs) consists of:
renderPrePassMgr.cpp related:
A) shifting .addFeature( MFT_XYZ); calls from ProcessedShaderMaterial::_determineFeatures to ProcessedPrePassMaterial::_determineFeatures
B) mimicking the "// set the XXX if different" entries from RenderMeshMgr::render in RenderPrePassMgr::render
C) fleshing out ProcessedPrePassMaterial::getNumStages() so that it shares a 1:1 correlation with ProcessedShaderMaterial::getNumStages()
D) causing inline void Swizzle<T, mapLength>::ToBuffer( void *destination, const void *source, const dsize_t size )  to silently fail rather than fatally assert if a source or destination buffer is not yet ready to be filled. (support for #customTarget scripted render targets)

Reflections:
A) removing reflectRenderState.disableAdvancedLightingBins(true); entries. this would otherwise early out from prepass and provide no color data whatsoever.
B) removing the fd.features.addFeature( MFT_ForwardShading ); entry forcing all materials to be forward lit when reflected.
C) 2 things best described bluntly as working hacks:
C1) when reflected, a scattersky is rotated PI along it's z then x axis in order to draw properly.
C2) along similar lines, in terraincellmaterial, we shut off culling if it's a prepass material.

Skies: scattersky is given a pair of rotations for reflection purposes, all sky objects are given a z value for depth testing.
2016-02-16 02:50:49 -06:00
Azaezel
5ed06fff9d Script:
by and large, Opengl branch compatibility alterations, though do again note the inclusion of
   sampler["lightBuffer"] = "#lightinfo";
   sampler["colorBuffer"] = "#color";
   sampler["matInfoBuffer"] = "#matinfo";

and
   samplerNames[5] = "$lightBuffer";
   samplerNames[6] = "$colorBuffer";
   samplerNames[7] = "$matInfoBuffer";
entries. This is where the engine knows to pass along a given rendertarget for input into a predefined shader, as opposed to the prior phase's output to targets within procedural ones.

Shader:
the XXXLight.hlsl/glsls account for alterations in inputs, check for emissive and translucency, apply Felix's Normal Mapped Ambient. and pass the results along to  AL_DeferredOutput for final computation before returning the result.
the lighting.hlsl/.glsl consissts of removal of the overridden engine-specific phong specular variant, and defines the  AL_DeferredOutput  method, which equates to the previously used pixspecular feature defined along the lines of
http://books.google.com/books?id=GY-AAwAAQBAJ&pg=PA112&lpg=PA112&dq=blinn+phong+specular+gloss+hlsl&source=bl&ots=q9SKJkmWHB&sig=uLIHX10Zul0X0LL2ehSMq7IFBIM&hl=en&sa=X&ei=DbcsVPeWEdW1yASDy4LYDw&ved=0CB4Q6AEwAA#v=onepage&q=gloss%20&f=false

also includes visualizers

Long term impact: This area, along with the \game\shaders\common\lighting\advanced\lightingUtils.hlsl/.glsl pair will be where we plug in properly attenuated Cook-Torrence later, presuming the impact is not to hefty.
2016-02-16 02:29:54 -06:00
Azaezel
5b5c6b9907 Deferred Shading
Phase 1: buffers
engine:
provides the following hooks and methods
A) render target "color", and "matinfo". these correspond to texture[0] = "#color";  texture[2] = "#matinfo"; entries in scripts
B) utilizes the independentMrtBitDepth method added GarageGames#857 to set color to an 8RGBA if cards support it
C) adds an RenderPrePassMgr::_initShaders() method to support void RenderPrePassMgr::clearBuffers(). This operates as a pseudo-postfx by rendering a veiwspace plane which fills the screen, then calls a shader which fills both the introduced rendertarget buffers and the prepass buffer to relevant defaults (white with full alpha for prepass, black with full alpha for color and material respectively)

script:
\game\tools\worldEditor\main.cs adds additional hooks similar to GarageGames#863 for colorbuffer, specular map, and backbuffer display
\game\core\scripts\client\lighting\advanced\deferredShading.cs adds the clearbuffer shader, visualizers, and the ShaderData( AL_DeferredShader )  +  PostEffect( AL_DeferredShading ) which combine the various buffers into the output which reaches the screen under normal conditions, as well as the extended debug visualizers.
again, note the lines

   texture[0] = "#color";
   texture[1] = "#lightinfo";
   texture[2] = "#matinfo";
   target = "$backBuffer";
in particular for the core tie-in.

shader:
\game\shaders\common\lighting\advanced\deferredColorShaderP.hlsl
\game\shaders\common\lighting\advanced\gl\deferredClearGBufferP.glsl
the previously mentioned shaders which clear the buffers to specified colors

\game\shaders\common\lighting\advanced\deferredShadingP.hlsl
\game\shaders\common\lighting\advanced\gl\deferredShadingP.glsl
the tie-in shaders

the rest are visualizers

purpose: to expose methodology that allows one to render color, lighting and material information such as specular and gloss which effect the result of both when combined

long term intent: the previous prepass lighting methodology while serviceable, unfortunately had the side effect of throwing out raw color information required by more modern pipelines and methodologies. This preserves that data while also allowing the manipulation to occur only on a screenspace (or reflected speudo-screenspace) basis.
2016-02-16 01:50:58 -06:00
Azaezel
24f7dc8314 rtparams(#) needs to match the ssaomask register 2015-11-02 23:01:43 -06:00
Azaezel
2753f562e8 shadow caching
SPECIAL NOTE: highly suggest https://github.com/GarageGames/Torque3D/pull/1441 or a variation thereof to prevent debug spew and false-postives for occlusion results.

With significant research, development and prototyping assistance from both @andr3wmac (shaders and partial hook work), and @LuisAntonRebollo (additional culling)

System operates as follows:
1) materials are given an additional castDynamicShadows boolean entry. (Default at time of writing is true by request. Personal usage at time of writing defaults to false. value is default-initialized in materialDefinition.cpp. script/gui exposed)
2) lights are given a staticRefreshFreq and dynamicRefreshFreq (in milliseconds). script/gui exposed
3) materials are (effectively) sorted into dynamic and static shadowmap render lists based on flag. (see shadowMapPass.cpp)
4) initial shadowmaps are generated for each light and 'list'.
5) as each refreshFreq times out, the relevant shadowmap for a given light is refreshed.

Special notes:
dynamicRefreshFreq for all lights is set to a (script exposed) 8MS refresh timer.
StaticRefreshFreq for the lions share of lights defaults to 250 MS (1/4 of a second)
scattersky's embedded light, which is intended to operate in a mobile manner, defaults to 8
to reiterate, these are all customizable per-light via script/inspector gui in the case of alternate project needs.
2015-10-13 18:12:19 -05:00
Azaezel
2f33de3615 case sensitivity fixe for linux 2015-08-06 04:00:56 -05:00
Daniel Buckmaster
009bff7f88 Merge pull request #863 from Azaezel/GlowbufferVisualizer
glow buffer debug visualiser
2015-07-01 22:24:16 +10:00
Azaezel
462aeefb36 opengl crashfix: cannot self-multiply a uniform. use a temp-variable. 2015-05-16 14:11:40 +10:00
Anis
3937afdc19 Update vectorLightP.glsl 2015-01-28 23:43:29 +01:00
Luis Anton Rebollo
84d072f25c Merge pull request #1027 from bpay/ambient-normals
Allow normals on shadowed surfaces
2015-01-24 23:05:51 +01:00
LuisAntonRebollo
aa35157eef PlatformSDL implementation. 2015-01-19 01:17:37 +01:00
LuisAntonRebollo
b0efd865d9 Use factor of ambient light with camera direction for allow normals on shadowed surfaces. 2014-12-09 19:46:06 -05:00
LuisAntonRebollo
ed0febea39 Clean GLSL fragment shader out. 2014-11-30 23:00:18 +01:00
Azaezel
f18dd9e438 glow buffer debug visualiser
pure script, there will be several of these using identical methodology for deferred. displays a given buffer via the
 texture[0] = "#glowbuffer"; entry,
passed along to a given shader via the
samplerNames[0] = "glowBuffer";entry
which corresponds to an expected variable name and register.

as much documentation for later as tool
2014-10-24 10:04:17 -05:00
LuisAntonRebollo
6aea37b407 Changes to GLSL files for OpenGL 2014-04-13 19:55:45 +02:00
DavidWyand-GG
17113d3ba5 Blinn-Phong Specular Changes
Based on the work done here:
http://www.garagegames.com/community/blogs/view/21032
2013-10-29 15:10:23 -04:00
DavidWyand-GG
b32e7688c2 Side by side rendering
- Side by side rendering implemented throughout the graphics pipeline.
- New GuiTSCtrl renderStyle property is set to "stereo side by side" to
activate.
- You set an IDisplayDevice on the GameConnection to define any vertical
FOV, projection offset, and stereo eye offset properties required for
the stereo rendering (no display device included with this commit).
- Full and Empty templates updated with correct scripts and shaders.
2013-04-09 15:19:18 -04:00
DavidWyand-GG
f439dc8dcd Full Template for ticket #1 2012-09-19 11:54:25 -04:00