Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions worldeditor/bin/editor/materials/outline.shader
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,11 @@

#pragma flags

#define NO_INSTANCE
const int _instanceOffset = 0;

#include "ShaderLayout.h"
#include "Functions.h"

layout(binding = LOCAL) uniform Uniforms {
mat4 model;
vec4 color;
float width;
} uni;

layout(binding = UNIFORM) uniform sampler2D outlineMap;

layout(location = 0) in vec4 _vertex;
Expand All @@ -29,8 +23,10 @@ layout(location = 2) in vec4 _color;
layout(location = 0) out vec4 rgb;

void main(void) {
vec2 up = vec2(0.0, screenSizeNorm().y) * uni.width;
vec2 right = vec2(screenSizeNorm().x, 0.0) * uni.width;
#pragma instance

vec2 up = vec2(0.0, screenSizeNorm().y) * width;
vec2 right = vec2(screenSizeNorm().x, 0.0) * width;

float c = dot(texture(outlineMap, _uv0), vec4(1));
float t = dot(texture(outlineMap, _uv0 - up), vec4(1));
Expand All @@ -41,7 +37,7 @@ void main(void) {
vec2 n = vec2(-(t - b), (r - l));
float v = (length( n ) > 0.1) ? 1.0 : 0.0;

rgb = vec4(uni.color.xyz, v);
rgb = vec4(color.xyz, v);
}
]]></fragment>
<pass wireFrame="false" lightModel="Unlit" type="PostProcess" twoSided="true">
Expand Down
27 changes: 10 additions & 17 deletions worldeditor/bin/engine/materials/Blur.shader
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,10 @@

#pragma flags

#define NO_INSTANCE
const int _instanceOffset = 0;

#include "ShaderLayout.h"

layout(std140, binding = LOCAL) uniform InstanceData {
mat4 model;
vec2 direction;
vec2 size;
vec4 curve[8];
int steps;
float threshold;
} uni;

layout(binding = UNIFORM) uniform sampler2D rgbMap;

layout(location = 0) in vec4 _vertex;
Expand All @@ -33,16 +24,18 @@ layout(location = 2) in vec4 _color;

layout(location = 0) out vec4 rgb;

void main (void) {
vec4 sum = texture(rgbMap, _uv0) * uni.curve[0].x;
for(int i = 1; i < uni.steps; i++) {
vec2 offset = vec2(float(i)) * uni.size * uni.direction;
void main(void) {
#pragma instance

vec4 sum = texture(rgbMap, _uv0) * curve[0].x;
for(int i = 1; i < steps; i++) {
vec2 offset = vec2(float(i)) * size * direction;
int r = i / 4;
int b = int(mod(4, i));
sum += texture(rgbMap, _uv0 - offset) * uni.curve[r][b];
sum += texture(rgbMap, _uv0 + offset) * uni.curve[r][b];
sum += texture(rgbMap, _uv0 - offset) * curve[r][b];
sum += texture(rgbMap, _uv0 + offset) * curve[r][b];
}
rgb = max(sum - uni.threshold, 0.0);
rgb = max(sum - threshold, 0.0);
}
]]></fragment>
<pass wireFrame="false" lightModel="Unlit" type="PostProcess" twoSided="true">
Expand Down
30 changes: 12 additions & 18 deletions worldeditor/bin/engine/materials/DOF.shader
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,11 @@

#pragma flags

#define NO_INSTANCE
const int _instanceOffset = 0;

#include "ShaderLayout.h"
#include "Functions.h"

layout(std140, binding = LOCAL) uniform InstanceData {
mat4 model;
float focusDistance;
float focusScale;
float blurSize;
float skyDistance;
} uni;

layout(binding = UNIFORM) uniform sampler2D highMap;
layout(binding = UNIFORM + 1) uniform sampler2D lowMap;
layout(binding = UNIFORM + 2) uniform sampler2D depthMap;
Expand All @@ -51,32 +43,34 @@ const vec2 circleOffsets[] = {
const float radScale = 0.5f;
const float goldenAngle = 2.39996323f;

float cocSize(float depth) {
float coc = clamp((depth - uni.focusDistance) * uni.focusScale, -1.0f, 1.0f);
return abs(coc) * uni.blurSize;
float cocSize(float depth, float focusDistance, float focusScale, float blurSize) {
float coc = clamp((depth - focusDistance) * focusScale, -1.0f, 1.0f);
return abs(coc) * blurSize;
}

void main(void) {
#pragma instance

color = texture(highMap, _uv0);

float centerDepth = getLinearDepth(texture(depthMap, _uv0).x, nearClipPlane(), farClipPlane());
if(centerDepth < uni.skyDistance) {
float centerSize = cocSize(centerDepth);
if(centerDepth < skyDistance) {
float centerSize = cocSize(centerDepth, focusDistance, focusScale, blurSize);

float t = 1.0f;
float radius = radScale;
for(float ang = 0.0f; radius < uni.blurSize; ang += goldenAngle) {
for(float ang = 0.0f; radius < blurSize; ang += goldenAngle) {
vec2 tc = _uv0 + vec2(cos(ang), sin(ang)) * screenSizeNorm() * radius;

vec3 sampleColor = texture(lowMap, tc).xyz;
float sampleDepth = getLinearDepth(texture(depthMap, tc).x, nearClipPlane(), farClipPlane());

float sampleSize = cocSize(sampleDepth);
float sampleSize = cocSize(sampleDepth, focusDistance, focusScale, blurSize);
if(sampleDepth > centerDepth) {
sampleSize = clamp(sampleSize, 0.0, centerSize * 2.0f);
sampleSize = clamp(sampleSize, 0.0f, centerSize * 2.0f);
}

float m = smoothstep(radius - 0.5, radius + 0.5, sampleSize);
float m = smoothstep(radius - 0.5f, radius + 0.5f, sampleSize);
color.xyz += mix(color.xyz / t, sampleColor, m);

t += 1.0f;
Expand Down
14 changes: 6 additions & 8 deletions worldeditor/bin/engine/materials/DirectLight.shader
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,13 @@ layout(location = 3) in vec3 normal;
layout(location = 4) in vec3 tangent;

layout(location = 0) out vec4 _vertex;
layout(location = 1) flat out int _instanceOffset;
layout(location = 2) flat out mat4 _screenToWorld;
layout(location = 1) flat out mat4 _screenToWorld;

const int _instanceOffset = 0;

#include "ShaderLayout.h"

void main(void) {
_instanceOffset = 0;

#pragma instance

_vertex = vec4(vertex * 2.0, 1.0);
_screenToWorld = cameraScreenToWorld();
gl_Position = _vertex;
Expand All @@ -48,8 +45,9 @@ void main(void) {
#pragma flags

layout(location = 0) in vec4 _vertex;
layout(location = 1) flat in int _instanceOffset;
layout(location = 2) flat in mat4 _screenToWorld;
layout(location = 1) flat in mat4 _screenToWorld;

const int _instanceOffset = 0;

#include "ShaderLayout.h"
#include "Functions.h"
Expand Down
22 changes: 8 additions & 14 deletions worldeditor/bin/engine/materials/SSAO.shader
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

#pragma flags

#define NO_INSTANCE
const int _instanceOffset = 0;

#include "ShaderLayout.h"

Expand Down Expand Up @@ -42,19 +42,11 @@ void main(void) {

#pragma flags

#define NO_INSTANCE
const int _instanceOffset = 0;

#include "ShaderLayout.h"
#include "Functions.h"

layout(std140, binding = LOCAL) uniform InstanceData {
mat4 model;
float radius;
float bias;
float power;
vec3 samplesKernel[MAX_SAMPLE_COUNT];
} uni;

layout(binding = UNIFORM) uniform sampler2D depthMap;
layout(binding = UNIFORM + 1) uniform sampler2D normalsMap;
layout(binding = UNIFORM + 2) uniform sampler2D noiseMap;
Expand All @@ -66,6 +58,8 @@ layout(location = 2) flat in mat4 _projectionInv;
layout(location = 0) out vec4 color;

void main(void) {
#pragma instance

vec2 scale = vec2(screenSize().x / 4.0f, screenSize().y / 4.0f);

float depth = texture(depthMap, _uv0).x;
Expand All @@ -85,8 +79,8 @@ void main(void) {

float ssao = 0.0f;
for(int i = 0; i < MAX_SAMPLE_COUNT; i++) {
vec3 samp = tbn * uni.samplesKernel[i];
samp = viewPos + samp * uni.radius;
vec3 samp = tbn * samplesKernel[i];
samp = viewPos + samp * radius;

vec4 offset = projectionMatrix() * vec4(samp, 1.0f);
offset.xyz /= offset.w;
Expand All @@ -95,8 +89,8 @@ void main(void) {
float sampleDepth = texture(depthMap, offset.xy).x;
sampleDepth = getWorld(_projectionInv, offset.xy, sampleDepth).z;

float rangeCheck = smoothstep(0.0f, 1.0f, uni.radius / abs(viewPos.z - sampleDepth));
ssao += step(samp.z + uni.bias, sampleDepth) * rangeCheck;
float rangeCheck = smoothstep(0.0f, 1.0f, radius / abs(viewPos.z - sampleDepth));
ssao += step(samp.z + bias, sampleDepth) * rangeCheck;
}
color = vec4(vec3(1.0f - ssao / MAX_SAMPLE_COUNT), 1.0f);
return;
Expand Down
Loading