Fixed ping-pong.

This commit is contained in:
Lubos Lenco 2016-04-16 18:57:32 +02:00
parent d5010e4bc3
commit f290684ca4
7 changed files with 71 additions and 42 deletions

View file

@ -70,8 +70,8 @@ class FirstPersonController extends Trait {
// Look
// if (!locked) {
if (Input.touch) {
camera.rotate(new Vec4(1, 0, 0), Input.deltaY / 300);
transform.rotate(new Vec4(0, 0, 1), -Input.deltaX / 300);
camera.rotate(new Vec4(1, 0, 0), Input.deltaY / 200);
transform.rotate(new Vec4(0, 0, 1), -Input.deltaX / 200);
body.syncTransform();
}

View file

@ -336,24 +336,41 @@ def make_set_target(stage, node_group, node, target_index=1):
targetNode = findNodeByLink(node_group, node, node.inputs[target_index])
if targetNode.bl_idname == 'TargetNodeType':
postfix = ''
if targetNode.inputs[7].default_value == True:
if make_set_target.pong_target_stage != None:
if make_set_target.is_last_target_pong == True:
make_set_target.is_last_two_targets_pong = True
make_set_target.pong = not make_set_target.pong
else:
make_set_target.is_last_two_targets_pong = False
make_set_target.last_pong_target_pong = make_set_target.pong
if make_set_target.pong == True:
postfix = '_pong'
make_set_target.pong_target_stage = stage
make_set_target.pong_target_param_index = len(stage.params)
make_set_target.is_last_target_pong = True
else:
make_set_target.pong_target_stage = None
if make_set_target.is_last_two_targets_pong == True:
make_set_target.pong = not make_set_target.pong
make_set_target.is_last_target_pong = False
if make_set_target.is_last_two_targets_pong == True:
make_set_target.is_last_two_chain_broken = True
make_set_target.is_last_two_targets_pong = False
targetId = targetNode.inputs[0].default_value + postfix
else: # Framebuffer
if make_set_target.pong_target_stage != None:
if make_set_target.is_last_two_targets_pong == True:
make_set_target.pong = not make_set_target.pong
make_set_target.is_last_two_targets_pong = False
targetId = ''
stage.params.append(targetId)
make_set_target.pong_target_stage = None
make_set_target.pong_target_param_index = 0
make_set_target.pong = False
make_set_target.is_last_target_pong = False
make_set_target.is_last_two_targets_pong = False
make_set_target.is_last_two_chain_broken = False
make_set_target.last_pong_target_pong = False
def make_clear_target(stage, node_group, node):
stage.command = 'clear_target'
@ -373,10 +390,14 @@ def make_bind_target(stage, node_group, node, target_index=1, constant_index=2):
targetNode = findNodeByLink(node_group, node, node.inputs[target_index])
if targetNode.bl_idname == 'TargetNodeType':
postfix = ''
if targetNode.inputs[7].default_value == True:
if make_set_target.pong_target_stage != None:
if make_set_target.pong == False:
if targetNode.inputs[7].default_value == True:
if make_set_target.is_last_target_pong == False:
if make_set_target.last_pong_target_pong == True:
postfix = '_pong'
elif make_set_target.pong == False:
postfix = '_pong'
targetId = targetNode.inputs[0].default_value + postfix
stage.params.append(targetId)
stage.params.append(node.inputs[constant_index].default_value)

View file

@ -87,15 +87,12 @@ void main() {
float depth = mvpposition.z / mvpposition.w;
// occlusion
// occlusion - pack with mask
// n /= (abs(n.x) + abs(n.y) + abs(n.z));
// n.xy = n.z >= 0.0 ? n.xy : octahedronWrap(n.xy);
// n.xy = n.xy * 0.5 + 0.5;
n /= (abs(n.x) + abs(n.y) + abs(n.z));
n.xy = n.z >= 0.0 ? n.xy : octahedronWrap(n.xy);
// gl_FragData[0] = vec4(n.xy, 1.0, depth);
gl_FragData[0] = vec4(n.xyz, depth);
gl_FragData[0] = vec4(n.xy, mask, depth);
gl_FragData[1] = vec4(position.xyz, roughness);
gl_FragData[2] = vec4(baseColor.rgb, metalness);
gl_FragData[3] = vec4(mask, 0.0, 0.0, 0.0);
}

View file

@ -144,13 +144,13 @@ void main() {
vec4 g2 = texture(gbuffer2, texCoord); // Base color, metalness
float ao = texture(ssaotex, texCoord).r;
// vec2 enc = g0.rg;
// vec3 n;
// n.z = 1.0 - abs(enc.x) - abs(enc.y);
// n.xy = n.z >= 0.0 ? enc.xy : octahedronWrap(enc.xy);
// n = normalize(n);
vec2 enc = g0.rg;
vec3 n;
n.z = 1.0 - abs(enc.x) - abs(enc.y);
n.xy = n.z >= 0.0 ? enc.xy : octahedronWrap(enc.xy);
n = normalize(n);
vec3 n = g0.rgb;
// vec3 n = g0.rgb;
vec3 p = g1.rgb;
//n = normalize(n);
vec3 baseColor = g2.rgb;

View file

@ -9,7 +9,7 @@ precision mediump float;
uniform sampler2D gbuffer0;
uniform sampler2D gbuffer1;
uniform sampler2D gbuffer2;
uniform sampler2D gbuffer3;
// uniform sampler2D gbuffer3;
uniform sampler2D tex;
uniform mat4 prevVP;
@ -43,7 +43,7 @@ void main() {
vec4 color = texture(tex, texCoord);
// Do not blur masked objects
if (texture(gbuffer3, texCoord).r == 1.0) {
if (texture(gbuffer0, texCoord).b == 1.0) {
gl_FragColor = color;
return;
}
@ -61,49 +61,49 @@ void main() {
// color += texture(tex, offset);
offset += velocity;
if (texture(gbuffer3, offset).r != 1.0) {
if (texture(gbuffer0, offset).b != 1.0) {
color += texture(tex, offset);
processed++;
}
offset += velocity;
if (texture(gbuffer3, offset).r != 1.0) {
if (texture(gbuffer0, offset).b != 1.0) {
color += texture(tex, offset);
processed++;
}
offset += velocity;
if (texture(gbuffer3, offset).r != 1.0) {
if (texture(gbuffer0, offset).b != 1.0) {
color += texture(tex, offset);
processed++;
}
offset += velocity;
if (texture(gbuffer3, offset).r != 1.0) {
if (texture(gbuffer0, offset).b != 1.0) {
color += texture(tex, offset);
processed++;
}
offset += velocity;
if (texture(gbuffer3, offset).r != 1.0) {
if (texture(gbuffer0, offset).b != 1.0) {
color += texture(tex, offset);
processed++;
}
offset += velocity;
if (texture(gbuffer3, offset).r != 1.0) {
if (texture(gbuffer0, offset).b != 1.0) {
color += texture(tex, offset);
processed++;
}
offset += velocity;
if (texture(gbuffer3, offset).r != 1.0) {
if (texture(gbuffer0, offset).b != 1.0) {
color += texture(tex, offset);
processed++;
}
offset += velocity;
if (texture(gbuffer3, offset).r != 1.0) {
if (texture(gbuffer0, offset).b != 1.0) {
color += texture(tex, offset);
processed++;
}

View file

@ -70,13 +70,13 @@ void main() {
vec4 g0 = texture(gbuffer0, texCoord);
vec4 g1 = texture(gbuffer1, texCoord);
// vec2 enc = g0.rg;
// vec3 N;
// N.z = 1.0 - abs(enc.x) - abs(enc.y);
// N.xy = N.z >= 0.0 ? enc.xy : octahedronWrap(enc.xy);
// N = normalize(N);
vec2 enc = g0.rg;
vec3 N;
N.z = 1.0 - abs(enc.x) - abs(enc.y);
N.xy = N.z >= 0.0 ? enc.xy : octahedronWrap(enc.xy);
N = normalize(N);
vec3 N = g0.rgb;
// vec3 N = g0.rgb;
vec3 P = g1.rgb;
// Get the current pixel's positiom

View file

@ -161,6 +161,10 @@ vec4 rayCast(vec3 dir) {
return vec4(0.0, 0.0, 0.0, 0.0);
}
vec2 octahedronWrap(vec2 v) {
return (1.0 - abs(v.yx)) * (vec2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0));
}
void main() {
float roughness = texture(gbuffer1, texCoord).a;
float reflectivity = 1.0 - roughness;
@ -168,7 +172,14 @@ void main() {
discard;
}
vec4 viewNormal = vec4(texture(gbuffer0, texCoord).rgb, 1.0);
vec4 g0 = vec4(texture(gbuffer0, texCoord).rgb, 1.0);
vec2 enc = g0.rg;
vec3 n;
n.z = 1.0 - abs(enc.x) - abs(enc.y);
n.xy = n.z >= 0.0 ? enc.xy : octahedronWrap(enc.xy);
n = normalize(n);
vec4 viewNormal = vec4(n, 1.0);//vec4(texture(gbuffer0, texCoord).rgb, 1.0);
if (viewNormal.z <= 0.9) discard; // Only up facing surfaces for now
viewNormal = tiV * normalize(viewNormal);