mirror of
https://github.com/overte-org/overte.git
synced 2025-04-26 00:56:17 +02:00
Need to pull master, just updated all the deferred shaders to use scribe func declare blocks to avoid long shaders... didn;t validate the current clip to eye position evaluation
This commit is contained in:
parent
9f8d6a78cc
commit
dc8756e465
16 changed files with 149 additions and 32 deletions
|
@ -27,6 +27,7 @@ uniform sampler2D depthMap;
|
||||||
|
|
||||||
struct DeferredTransform {
|
struct DeferredTransform {
|
||||||
|
|
||||||
|
mat4 projection;
|
||||||
mat4 viewInverse;
|
mat4 viewInverse;
|
||||||
|
|
||||||
// the distance to the near clip plane
|
// the distance to the near clip plane
|
||||||
|
@ -54,12 +55,22 @@ float getStereoSide(DeferredTransform deferredTransform) {
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 evalEyePositionFromZ(DeferredTransform deferredTransform, float depthVal, vec2 texcoord) {
|
vec4 evalEyePositionFromZ(DeferredTransform deferredTransform, float depthVal, vec2 texcoord) {
|
||||||
|
vec3 nPos = vec3(texcoord.xy * 2.0f - 1.0f, depthVal * 2.0f - 1.0f);
|
||||||
|
|
||||||
|
float Ze = -deferredTransform.projection[3][2] / (nPos.z + deferredTransform.projection[2][2]);
|
||||||
|
float Xe = (nPos.x - Ze * deferredTransform.projection[2][0] - deferredTransform.projection[3][0]) / deferredTransform.projection[0][0];
|
||||||
|
float Ye = (nPos.y - Ze * deferredTransform.projection[2][1] - deferredTransform.projection[3][1]) / deferredTransform.projection[1][1];
|
||||||
|
|
||||||
vec2 nearVal_depthScale = deferredTransform.nearVal_depthScale_stereoMode_spare0.xy;
|
vec2 nearVal_depthScale = deferredTransform.nearVal_depthScale_stereoMode_spare0.xy;
|
||||||
vec2 depthTexCoordOffset = deferredTransform.depthTexCoordOffset_scale.xy;
|
vec2 depthTexCoordOffset = deferredTransform.depthTexCoordOffset_scale.xy;
|
||||||
vec2 depthTexCoordScale = deferredTransform.depthTexCoordOffset_scale.zw;
|
vec2 depthTexCoordScale = deferredTransform.depthTexCoordOffset_scale.zw;
|
||||||
|
|
||||||
// compute the view space position using the depth
|
// compute the view space position using the depth
|
||||||
float z = nearVal_depthScale.x / (depthVal * nearVal_depthScale.y - 1.0);
|
float z = nearVal_depthScale.x / (depthVal * nearVal_depthScale.y - 1.0);
|
||||||
|
if (texcoord.x > 0.0f) {
|
||||||
|
z = Ze;
|
||||||
|
return vec4(Xe, Ye, Ze, 1.0f);
|
||||||
|
}
|
||||||
return vec4((depthTexCoordOffset + texcoord * depthTexCoordScale) * z, z, 1.0);
|
return vec4((depthTexCoordOffset + texcoord * depthTexCoordScale) * z, z, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
|
|
||||||
<@include DeferredLighting.slh@>
|
<@include DeferredLighting.slh@>
|
||||||
|
|
||||||
|
<@func declareSkyboxMap()@>
|
||||||
|
|
||||||
uniform samplerCube skyboxMap;
|
uniform samplerCube skyboxMap;
|
||||||
|
|
||||||
vec4 evalSkyboxLight(vec3 direction, float lod) {
|
vec4 evalSkyboxLight(vec3 direction, float lod) {
|
||||||
|
@ -22,6 +24,9 @@ vec4 evalSkyboxLight(vec3 direction, float lod) {
|
||||||
return skytexel;
|
return skytexel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<@endfunc@>
|
||||||
|
|
||||||
|
<@func declareSphericalHarmonics()@>
|
||||||
struct SphericalHarmonics {
|
struct SphericalHarmonics {
|
||||||
vec4 L00;
|
vec4 L00;
|
||||||
vec4 L1m1;
|
vec4 L1m1;
|
||||||
|
@ -59,10 +64,12 @@ vec4 evalSphericalLight(SphericalHarmonics sh, vec3 direction ) {
|
||||||
// Need one SH
|
// Need one SH
|
||||||
uniform SphericalHarmonics ambientSphere;
|
uniform SphericalHarmonics ambientSphere;
|
||||||
|
|
||||||
|
<@endfunc@>
|
||||||
|
|
||||||
// Everything about light
|
// Everything about light
|
||||||
<@include model/Light.slh@>
|
<@include model/Light.slh@>
|
||||||
|
|
||||||
|
<@func declareEvalAmbientGlobalColor()@>
|
||||||
vec3 evalAmbienGlobalColor(mat4 invViewMat, float shadowAttenuation, vec3 position, vec3 normal, vec3 diffuse, vec3 specular, float gloss) {
|
vec3 evalAmbienGlobalColor(mat4 invViewMat, float shadowAttenuation, vec3 position, vec3 normal, vec3 diffuse, vec3 specular, float gloss) {
|
||||||
|
|
||||||
// Need the light now
|
// Need the light now
|
||||||
|
@ -80,6 +87,12 @@ vec3 evalAmbienGlobalColor(mat4 invViewMat, float shadowAttenuation, vec3 positi
|
||||||
|
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
<@endfunc@>
|
||||||
|
|
||||||
|
<@func declareEvalAmbientSphereGlobalColor()@>
|
||||||
|
|
||||||
|
<$declareSphericalHarmonics()$>
|
||||||
|
|
||||||
vec3 evalAmbienSphereGlobalColor(mat4 invViewMat, float shadowAttenuation, vec3 position, vec3 normal, vec3 diffuse, vec3 specular, float gloss) {
|
vec3 evalAmbienSphereGlobalColor(mat4 invViewMat, float shadowAttenuation, vec3 position, vec3 normal, vec3 diffuse, vec3 specular, float gloss) {
|
||||||
// Need the light now
|
// Need the light now
|
||||||
Light light = getLight();
|
Light light = getLight();
|
||||||
|
@ -97,6 +110,12 @@ vec3 evalAmbienSphereGlobalColor(mat4 invViewMat, float shadowAttenuation, vec3
|
||||||
|
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
<@endfunc@>
|
||||||
|
|
||||||
|
<@func declareEvalSkyboxGlobalColor()@>
|
||||||
|
|
||||||
|
<$declareSkyboxMap()$>
|
||||||
|
<$declareSphericalHarmonics()$>
|
||||||
|
|
||||||
vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, vec3 position, vec3 normal, vec3 diffuse, vec3 specular, float gloss) {
|
vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, vec3 position, vec3 normal, vec3 diffuse, vec3 specular, float gloss) {
|
||||||
// Need the light now
|
// Need the light now
|
||||||
|
@ -114,7 +133,9 @@ vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, vec3 positi
|
||||||
|
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
<@endfunc@>
|
||||||
|
|
||||||
|
<@func declareEvalLightmappedColor()@>
|
||||||
vec3 evalLightmappedColor(mat4 invViewMat, float shadowAttenuation, vec3 normal, vec3 diffuse, vec3 lightmap) {
|
vec3 evalLightmappedColor(mat4 invViewMat, float shadowAttenuation, vec3 normal, vec3 diffuse, vec3 lightmap) {
|
||||||
|
|
||||||
Light light = getLight();
|
Light light = getLight();
|
||||||
|
@ -139,5 +160,6 @@ vec3 evalLightmappedColor(mat4 invViewMat, float shadowAttenuation, vec3 normal,
|
||||||
|
|
||||||
return diffuse * (ambientLight + diffuseLight);
|
return diffuse * (ambientLight + diffuseLight);
|
||||||
}
|
}
|
||||||
|
<@endfunc@>
|
||||||
|
|
||||||
<@endif@>
|
<@endif@>
|
||||||
|
|
|
@ -308,8 +308,10 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
float tMin = args->_viewport.y / (float)framebufferSize.height();
|
float tMin = args->_viewport.y / (float)framebufferSize.height();
|
||||||
float tHeight = args->_viewport.w / (float)framebufferSize.height();
|
float tHeight = args->_viewport.w / (float)framebufferSize.height();
|
||||||
|
|
||||||
bool useSkyboxCubemap = (_skybox) && (_skybox->getCubemap());
|
auto monoViewport = args->_viewport;
|
||||||
|
|
||||||
|
|
||||||
|
// The view furstum is the mono frustum base
|
||||||
auto viewFrustum = args->_viewFrustum;
|
auto viewFrustum = args->_viewFrustum;
|
||||||
|
|
||||||
float left, right, bottom, top, nearVal, farVal;
|
float left, right, bottom, top, nearVal, farVal;
|
||||||
|
@ -322,19 +324,27 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
float depthTexCoordOffsetS = left * nearScale - sMin * depthTexCoordScaleS;
|
float depthTexCoordOffsetS = left * nearScale - sMin * depthTexCoordScaleS;
|
||||||
float depthTexCoordOffsetT = bottom * nearScale - tMin * depthTexCoordScaleT;
|
float depthTexCoordOffsetT = bottom * nearScale - tMin * depthTexCoordScaleT;
|
||||||
|
|
||||||
|
// Eval the mono projection
|
||||||
mat4 monoProjMat;
|
mat4 monoProjMat;
|
||||||
viewFrustum->evalProjectionMatrix(monoProjMat);
|
viewFrustum->evalProjectionMatrix(monoProjMat);
|
||||||
|
|
||||||
|
// The mono view transform
|
||||||
Transform monoViewTransform;
|
Transform monoViewTransform;
|
||||||
viewFrustum->evalViewTransform(monoViewTransform);
|
viewFrustum->evalViewTransform(monoViewTransform);
|
||||||
|
|
||||||
|
// THe mono view matrix coming from the mono view transform
|
||||||
|
glm::mat4 monoViewMat;
|
||||||
|
monoViewTransform.getMatrix(monoViewMat);
|
||||||
|
|
||||||
bool isStereo = args->_context->isStereo();
|
bool isStereo = args->_context->isStereo();
|
||||||
int numPasses = 1;
|
int numPasses = 1;
|
||||||
|
|
||||||
mat4 projMats[2];
|
mat4 projMats[2];
|
||||||
Transform viewTransforms[2];
|
ivec4 viewports[2];
|
||||||
vec4 viewports[2];
|
vec4 clipQuad[2];
|
||||||
vec2 screenBottomLeftCorners[2];
|
vec2 screenBottomLeftCorners[2];
|
||||||
vec2 screenTopRightCorners[2];
|
vec2 screenTopRightCorners[2];
|
||||||
|
vec4 fetchTexcoordRects[2];
|
||||||
|
|
||||||
DeferredTransform deferredTransforms[2];
|
DeferredTransform deferredTransforms[2];
|
||||||
|
|
||||||
|
@ -345,18 +355,25 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
args->_context->getStereoProjections(projMats);
|
args->_context->getStereoProjections(projMats);
|
||||||
args->_context->getStereoViews(eyeViews);
|
args->_context->getStereoViews(eyeViews);
|
||||||
|
|
||||||
glm::mat4 monoViewMat;
|
|
||||||
monoViewTransform.getMatrix(monoViewMat);
|
|
||||||
|
|
||||||
float halfWidth = 0.5 * sWidth;
|
float halfWidth = 0.5 * sWidth;
|
||||||
|
|
||||||
for (int i = 0; i < numPasses; i++) {
|
for (int i = 0; i < numPasses; i++) {
|
||||||
|
// In stereo, the 2 sides are layout side by side in the mono viewport and their width is half
|
||||||
|
int sideWidth = monoViewport.z * 0.5;
|
||||||
|
viewports[i] = ivec4(monoViewport.x + (i * sideWidth), monoViewport.y, sideWidth, monoViewport.w);
|
||||||
|
|
||||||
auto sideViewMat = eyeViews[i] * monoViewMat;
|
auto sideViewMat = eyeViews[i] * monoViewMat;
|
||||||
|
|
||||||
viewTransforms[i].evalFromRawMatrix(sideViewMat);
|
|
||||||
|
|
||||||
deferredTransforms[i]._viewInverse = sideViewMat;
|
|
||||||
|
projMats[i] = projMats[i] * eyeViews[i];
|
||||||
|
|
||||||
|
deferredTransforms[i]._projection = projMats[i];
|
||||||
|
|
||||||
|
deferredTransforms[i]._viewInverse = monoViewMat;
|
||||||
|
|
||||||
deferredTransforms[i].nearVal = nearVal;
|
deferredTransforms[i].nearVal = nearVal;
|
||||||
deferredTransforms[i].depthScale = depthScale;
|
deferredTransforms[i].depthScale = depthScale;
|
||||||
deferredTransforms[i].isStereo = (i == 0 ? -1.0f : 1.0f);
|
deferredTransforms[i].isStereo = (i == 0 ? -1.0f : 1.0f);
|
||||||
|
@ -364,16 +381,22 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
deferredTransforms[i].depthTexCoordScale = glm::vec2(depthTexCoordScaleS, depthTexCoordScaleT);
|
deferredTransforms[i].depthTexCoordScale = glm::vec2(depthTexCoordScaleS, depthTexCoordScaleT);
|
||||||
|
|
||||||
|
|
||||||
viewports[i] = glm::vec4(sMin + i * halfWidth, tMin, halfWidth, tHeight);
|
clipQuad[i] = glm::vec4(sMin + i * halfWidth, tMin, halfWidth, tHeight);
|
||||||
screenBottomLeftCorners[i] = glm::vec2(-1.0f + i * 1.0f, -1.0f);
|
screenBottomLeftCorners[i] = glm::vec2(-1.0f + i * 1.0f, -1.0f);
|
||||||
screenTopRightCorners[i] = glm::vec2(i * 1.0f, 1.0f);
|
screenTopRightCorners[i] = glm::vec2(i * 1.0f, 1.0f);
|
||||||
|
|
||||||
|
fetchTexcoordRects[i] = glm::vec4(sMin + i * halfWidth, tMin, halfWidth, tHeight);
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
viewports[0] = monoViewport;
|
||||||
|
|
||||||
projMats[0] = monoProjMat;
|
projMats[0] = monoProjMat;
|
||||||
|
|
||||||
viewTransforms[0] = monoViewTransform;
|
deferredTransforms[0]._projection = monoProjMat;
|
||||||
|
|
||||||
viewTransforms[0].getMatrix(deferredTransforms[0]._viewInverse);
|
deferredTransforms[0]._viewInverse = monoViewMat;
|
||||||
|
|
||||||
deferredTransforms[0].nearVal = nearVal;
|
deferredTransforms[0].nearVal = nearVal;
|
||||||
deferredTransforms[0].depthScale = depthScale;
|
deferredTransforms[0].depthScale = depthScale;
|
||||||
|
@ -382,9 +405,11 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
deferredTransforms[0].depthTexCoordScale = glm::vec2(depthTexCoordScaleS, depthTexCoordScaleT);
|
deferredTransforms[0].depthTexCoordScale = glm::vec2(depthTexCoordScaleS, depthTexCoordScaleT);
|
||||||
|
|
||||||
|
|
||||||
viewports[0] = glm::vec4(sMin, tMin, sWidth, tHeight);
|
clipQuad[0] = glm::vec4(sMin, tMin, sWidth, tHeight);
|
||||||
screenBottomLeftCorners[0] = glm::vec2(-1.0f, -1.0f);
|
screenBottomLeftCorners[0] = glm::vec2(-1.0f, -1.0f);
|
||||||
screenTopRightCorners[0] = glm::vec2(1.0f, 1.0f);
|
screenTopRightCorners[0] = glm::vec2(1.0f, 1.0f);
|
||||||
|
|
||||||
|
fetchTexcoordRects[0] = glm::vec4(sMin, tMin, sWidth, tHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto eyePoint = viewFrustum->getPosition();
|
auto eyePoint = viewFrustum->getPosition();
|
||||||
|
@ -392,22 +417,30 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
|
|
||||||
|
|
||||||
for (int side = 0; side < numPasses; side++) {
|
for (int side = 0; side < numPasses; side++) {
|
||||||
|
// Render in this side's viewport
|
||||||
|
batch.setViewportTransform(viewports[side]);
|
||||||
|
batch.setStateScissorRect(viewports[side]);
|
||||||
|
|
||||||
|
// Sync and Bind the correct DeferredTransform ubo
|
||||||
_deferredTransformBuffer[side]._buffer->setSubData(0, sizeof(DeferredTransform), (const gpu::Byte*) &deferredTransforms[side]);
|
_deferredTransformBuffer[side]._buffer->setSubData(0, sizeof(DeferredTransform), (const gpu::Byte*) &deferredTransforms[side]);
|
||||||
|
|
||||||
batch.setUniformBuffer(_directionalLightLocations->deferredTransformBuffer, _deferredTransformBuffer[side]);
|
batch.setUniformBuffer(_directionalLightLocations->deferredTransformBuffer, _deferredTransformBuffer[side]);
|
||||||
|
|
||||||
|
|
||||||
/* glm::vec2 topLeft(-1.0f, -1.0f);
|
|
||||||
|
glm::vec2 topLeft(-1.0f, -1.0f);
|
||||||
glm::vec2 bottomRight(1.0f, 1.0f);
|
glm::vec2 bottomRight(1.0f, 1.0f);
|
||||||
glm::vec2 texCoordTopLeft(sMin, tMin);
|
/* glm::vec2 texCoordTopLeft(sMin, tMin);
|
||||||
glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight);*/
|
glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight);*/
|
||||||
glm::vec2 topLeft = screenBottomLeftCorners[side];
|
/* glm::vec2 topLeft = screenBottomLeftCorners[side];
|
||||||
glm::vec2 bottomRight = screenTopRightCorners[side];
|
glm::vec2 bottomRight = screenTopRightCorners[side];*/
|
||||||
glm::vec2 texCoordTopLeft(viewports[side].x, viewports[side].y);
|
glm::vec2 texCoordTopLeft(clipQuad[side].x, clipQuad[side].y);
|
||||||
glm::vec2 texCoordBottomRight(viewports[side].x + viewports[side].z, viewports[side].y + viewports[side].w);
|
glm::vec2 texCoordBottomRight(clipQuad[side].x + clipQuad[side].z, clipQuad[side].y + clipQuad[side].w);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// First Global directional light and ambient pass
|
// First Global directional light and ambient pass
|
||||||
|
bool useSkyboxCubemap = (_skybox) && (_skybox->getCubemap());
|
||||||
|
|
||||||
auto& program = _directionalLight;
|
auto& program = _directionalLight;
|
||||||
LightLocationsPtr locations = _directionalLightLocations;
|
LightLocationsPtr locations = _directionalLightLocations;
|
||||||
|
|
||||||
|
@ -485,11 +518,13 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
Transform model;
|
/* Transform model;
|
||||||
model.setTranslation(glm::vec3(sMin, tMin, 0.0));
|
model.setTranslation(glm::vec3(sMin, tMin, 0.0));
|
||||||
model.setScale(glm::vec3(sWidth, tHeight, 1.0));
|
model.setScale(glm::vec3(sWidth, tHeight, 1.0));
|
||||||
batch.setModelTransform(model);
|
batch.setModelTransform(model);
|
||||||
|
*/
|
||||||
|
|
||||||
|
batch.setModelTransform(Transform());
|
||||||
batch.setProjectionTransform(glm::mat4());
|
batch.setProjectionTransform(glm::mat4());
|
||||||
batch.setViewTransform(Transform());
|
batch.setViewTransform(Transform());
|
||||||
|
|
||||||
|
@ -510,11 +545,11 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
batch.setResourceTexture(4, nullptr);
|
batch.setResourceTexture(4, nullptr);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
glm::vec4 sCoefficients(sWidth / 2.0f, 0.0f, 0.0f, sMin + sWidth / 2.0f);
|
|
||||||
glm::vec4 tCoefficients(0.0f, tHeight / 2.0f, 0.0f, tMin + tHeight / 2.0f);
|
|
||||||
auto texcoordMat = glm::mat4();
|
auto texcoordMat = glm::mat4();
|
||||||
texcoordMat[0] = glm::vec4(sWidth / 2.0f, 0.0f, 0.0f, sMin + sWidth / 2.0f);
|
/* texcoordMat[0] = glm::vec4(sWidth / 2.0f, 0.0f, 0.0f, sMin + sWidth / 2.0f);
|
||||||
texcoordMat[1] = glm::vec4(0.0f, tHeight / 2.0f, 0.0f, tMin + tHeight / 2.0f);
|
texcoordMat[1] = glm::vec4(0.0f, tHeight / 2.0f, 0.0f, tMin + tHeight / 2.0f);
|
||||||
|
*/ texcoordMat[0] = glm::vec4(fetchTexcoordRects[side].z / 2.0f, 0.0f, 0.0f, fetchTexcoordRects[side].x + fetchTexcoordRects[side].z / 2.0f);
|
||||||
|
texcoordMat[1] = glm::vec4(0.0f, fetchTexcoordRects[side].w / 2.0f, 0.0f, fetchTexcoordRects[side].y + fetchTexcoordRects[side].w / 2.0f);
|
||||||
texcoordMat[2] = glm::vec4(0.0f, 0.0f, 1.0f, 0.0f);
|
texcoordMat[2] = glm::vec4(0.0f, 0.0f, 1.0f, 0.0f);
|
||||||
texcoordMat[3] = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
texcoordMat[3] = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
|
||||||
|
@ -524,7 +559,7 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||||
|
|
||||||
batch.setProjectionTransform(projMats[side]);
|
batch.setProjectionTransform(projMats[side]);
|
||||||
batch.setViewTransform(viewTransforms[side]);
|
batch.setViewTransform(monoViewTransform);
|
||||||
|
|
||||||
if (!_pointLights.empty()) {
|
if (!_pointLights.empty()) {
|
||||||
batch.setPipeline(_pointLight);
|
batch.setPipeline(_pointLight);
|
||||||
|
@ -557,7 +592,7 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
DependencyManager::get<GeometryCache>()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
DependencyManager::get<GeometryCache>()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
||||||
|
|
||||||
batch.setProjectionTransform(projMats[side]);
|
batch.setProjectionTransform(projMats[side]);
|
||||||
batch.setViewTransform(viewTransforms[side]);
|
batch.setViewTransform(monoViewTransform);
|
||||||
} else {
|
} else {
|
||||||
Transform model;
|
Transform model;
|
||||||
model.setTranslation(glm::vec3(light->getPosition().x, light->getPosition().y, light->getPosition().z));
|
model.setTranslation(glm::vec3(light->getPosition().x, light->getPosition().y, light->getPosition().z));
|
||||||
|
@ -608,7 +643,7 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
DependencyManager::get<GeometryCache>()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
DependencyManager::get<GeometryCache>()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
||||||
|
|
||||||
batch.setProjectionTransform( projMats[side]);
|
batch.setProjectionTransform( projMats[side]);
|
||||||
batch.setViewTransform(viewTransforms[side]);
|
batch.setViewTransform(monoViewTransform);
|
||||||
} else {
|
} else {
|
||||||
coneParam.w = 1.0f;
|
coneParam.w = 1.0f;
|
||||||
batch._glUniform4fv(_spotLightLocations->coneParam, 1, reinterpret_cast< const float* >(&coneParam));
|
batch._glUniform4fv(_spotLightLocations->coneParam, 1, reinterpret_cast< const float* >(&coneParam));
|
||||||
|
|
|
@ -157,6 +157,7 @@ private:
|
||||||
class DeferredTransform {
|
class DeferredTransform {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
glm::mat4 _projection;
|
||||||
glm::mat4 _viewInverse;
|
glm::mat4 _viewInverse;
|
||||||
|
|
||||||
float nearVal{ 1.0f };
|
float nearVal{ 1.0f };
|
||||||
|
|
|
@ -111,7 +111,7 @@ float evalShadowAttenuation(vec4 shadowTexcoord) {
|
||||||
return evalShadowAttenuationBasic(shadowTexcoord);
|
return evalShadowAttenuationBasic(shadowTexcoord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<!
|
||||||
vec3 debugShadowMap(float shadowAttenuation, vec4 shadowTexcoord) {
|
vec3 debugShadowMap(float shadowAttenuation, vec4 shadowTexcoord) {
|
||||||
vec3 colorArray[4];
|
vec3 colorArray[4];
|
||||||
colorArray[0].xyz = vec3(1.0, 1.0, 1.0);
|
colorArray[0].xyz = vec3(1.0, 1.0, 1.0);
|
||||||
|
@ -128,5 +128,6 @@ vec3 debugShadowMap(float shadowAttenuation, vec4 shadowTexcoord) {
|
||||||
return shadowAttenuation * colorArray[int(shadowTexcoord.w)];
|
return shadowAttenuation * colorArray[int(shadowTexcoord.w)];
|
||||||
// return shadowAttenuation * vec3(2.0*(shadowTexcoord.xy - offsetArray[int(shadowTexcoord.w)]), 0);
|
// return shadowAttenuation * vec3(2.0*(shadowTexcoord.xy - offsetArray[int(shadowTexcoord.w)]), 0);
|
||||||
}
|
}
|
||||||
|
!>
|
||||||
|
|
||||||
<@endif@>
|
<@endif@>
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
<@include DeferredGlobalLight.slh@>
|
<@include DeferredGlobalLight.slh@>
|
||||||
|
|
||||||
|
<$declareEvalLightmappedColor()$>
|
||||||
|
<$declareEvalAmbientSphereGlobalColor()$>
|
||||||
|
|
||||||
in vec2 _texCoord0;
|
in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
<@include DeferredGlobalLight.slh@>
|
<@include DeferredGlobalLight.slh@>
|
||||||
|
|
||||||
|
<$declareEvalLightmappedColor()$>
|
||||||
|
<$declareEvalAmbientSphereGlobalColor()$>
|
||||||
|
|
||||||
// Everything about shadow
|
// Everything about shadow
|
||||||
<@include Shadow.slh@>
|
<@include Shadow.slh@>
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
<@include DeferredBuffer.slh@>
|
<@include DeferredBuffer.slh@>
|
||||||
|
|
||||||
<@include DeferredGlobalLight.slh@>
|
<@include DeferredGlobalLight.slh@>
|
||||||
|
<$declareEvalLightmappedColor()$>
|
||||||
|
<$declareEvalAmbientSphereGlobalColor()$>
|
||||||
|
|
||||||
// Everything about shadow
|
// Everything about shadow
|
||||||
<@include Shadow.slh@>
|
<@include Shadow.slh@>
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
<@include DeferredGlobalLight.slh@>
|
<@include DeferredGlobalLight.slh@>
|
||||||
|
|
||||||
|
<$declareEvalLightmappedColor()$>
|
||||||
|
<$declareEvalAmbientGlobalColor()$>
|
||||||
|
|
||||||
in vec2 _texCoord0;
|
in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
<@include DeferredGlobalLight.slh@>
|
<@include DeferredGlobalLight.slh@>
|
||||||
|
|
||||||
|
<$declareEvalLightmappedColor()$>
|
||||||
|
<$declareEvalAmbientGlobalColor()$>
|
||||||
|
|
||||||
// Everything about shadow
|
// Everything about shadow
|
||||||
<@include Shadow.slh@>
|
<@include Shadow.slh@>
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
<@include DeferredGlobalLight.slh@>
|
<@include DeferredGlobalLight.slh@>
|
||||||
|
|
||||||
|
<$declareEvalLightmappedColor()$>
|
||||||
|
<$declareEvalAmbientGlobalColor()$>
|
||||||
|
|
||||||
// Everything about shadow
|
// Everything about shadow
|
||||||
<@include Shadow.slh@>
|
<@include Shadow.slh@>
|
||||||
|
|
||||||
|
|
|
@ -3,20 +3,23 @@
|
||||||
// Generated on <$_SCRIBE_DATE$>
|
// Generated on <$_SCRIBE_DATE$>
|
||||||
//
|
//
|
||||||
// directional_light.frag
|
// directional_light.frag
|
||||||
// fragment shader
|
<!// fragment shader
|
||||||
//
|
//
|
||||||
// Created by Sam Gateau on 5/8/2015.
|
// Created by Sam Gateau on 5/8/2015.
|
||||||
// Copyright 2014 High Fidelity, Inc.
|
// Copyright 2014 High Fidelity, Inc.
|
||||||
//
|
//
|
||||||
// Distributed under the Apache License, Version 2.0.
|
// Distributed under the Apache License, Version 2.0.
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//!>
|
||||||
|
|
||||||
// Everything about deferred buffer
|
// Everything about deferred buffer
|
||||||
<@include DeferredBuffer.slh@>
|
<@include DeferredBuffer.slh@>
|
||||||
|
|
||||||
<@include DeferredGlobalLight.slh@>
|
<@include DeferredGlobalLight.slh@>
|
||||||
|
|
||||||
|
<$declareEvalLightmappedColor()$>
|
||||||
|
<$declareEvalSkyboxGlobalColor()$>
|
||||||
|
|
||||||
in vec2 _texCoord0;
|
in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
|
@ -47,4 +50,13 @@ void main(void) {
|
||||||
|
|
||||||
_fragColor = vec4(color, frag.normalVal.a);
|
_fragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Debug Stereo
|
||||||
|
if (getStereoMode(deferredTransform)) {
|
||||||
|
float side = getStereoSide(deferredTransform);
|
||||||
|
// _fragColor = vec4(-side, 0.0, side, 1.0);
|
||||||
|
//_fragColor = vec4(_texCoord0, 0.0, 1.0);
|
||||||
|
// _fragColor = vec4(frag.position.xyz, 1.0);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
<@include DeferredGlobalLight.slh@>
|
<@include DeferredGlobalLight.slh@>
|
||||||
|
|
||||||
|
<$declareEvalLightmappedColor()$>
|
||||||
|
<$declareEvalSkyboxGlobalColor()$>
|
||||||
|
|
||||||
// Everything about shadow
|
// Everything about shadow
|
||||||
<@include Shadow.slh@>
|
<@include Shadow.slh@>
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
<@include DeferredGlobalLight.slh@>
|
<@include DeferredGlobalLight.slh@>
|
||||||
|
|
||||||
|
<$declareEvalLightmappedColor()$>
|
||||||
|
<$declareEvalSkyboxGlobalColor()$>
|
||||||
|
|
||||||
// Everything about shadow
|
// Everything about shadow
|
||||||
<@include Shadow.slh@>
|
<@include Shadow.slh@>
|
||||||
|
|
||||||
|
|
|
@ -26,11 +26,13 @@ in vec4 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
|
|
||||||
// Grab the fragment data from the uv
|
// Grab the fragment data from the uv
|
||||||
vec2 texCoord = _texCoord0.st / _texCoord0.q;
|
vec2 texCoord = _texCoord0.st / _texCoord0.q;
|
||||||
DeferredFragment frag = unpackDeferredFragment(texCoord);
|
DeferredFragment frag = unpackDeferredFragment(texCoord);
|
||||||
|
|
||||||
mat4 invViewMat = getDeferredTransform().viewInverse;
|
mat4 invViewMat = deferredTransform.viewInverse;
|
||||||
|
|
||||||
// Kill if in front of the light volume
|
// Kill if in front of the light volume
|
||||||
float depth = frag.depthVal;
|
float depth = frag.depthVal;
|
||||||
|
@ -75,4 +77,12 @@ void main(void) {
|
||||||
_fragColor = vec4(edgeCoord * edgeCoord * getLightShowContour(light) * getLightColor(light), 0.0);
|
_fragColor = vec4(edgeCoord * edgeCoord * getLightShowContour(light) * getLightColor(light), 0.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Debug Stereo
|
||||||
|
if (getStereoMode(deferredTransform)) {
|
||||||
|
float side = getStereoSide(deferredTransform);
|
||||||
|
// _fragColor = vec4(-side, 0.0, side, 1.0);
|
||||||
|
// _fragColor = vec4(texCoord, 0.0, 1.0);
|
||||||
|
_fragColor = vec4(frag.position.xyz, 1.0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,10 +87,12 @@ void main(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Debug Stereo
|
||||||
if (getStereoMode(deferredTransform)) {
|
if (getStereoMode(deferredTransform)) {
|
||||||
float side = getStereoSide(deferredTransform);
|
float side = getStereoSide(deferredTransform);
|
||||||
_fragColor = vec4(-side, 0.0, side, 1.0);
|
// _fragColor = vec4(-side, 0.0, side, 1.0);
|
||||||
|
// _fragColor = vec4(texCoord, 0.0, 1.0);
|
||||||
|
_fragColor = vec4(frag.position.xyz, 1.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue