Depth textures

This commit is contained in:
Lubos Lenco 2016-03-11 15:07:41 +01:00
parent f4a609e221
commit 3d4d3bd169
5 changed files with 24 additions and 12 deletions

View file

@ -111,7 +111,7 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper):
filename_ext = ".json"
option_export_selection = bpy.props.BoolProperty(name = "Export Selection Only", description = "Export only selected objects", default = False)
option_sample_animation = bpy.props.BoolProperty(name = "Force Sampled Animation", description = "Always export animation as per-frame samples", default = True)
option_sample_animation = bpy.props.BoolProperty(name = "Force Sampled Animation", description = "Always export animation as per-frame samples", default = False)
option_geometry_only = bpy.props.BoolProperty(name = "Export Geometry Only", description = "Export only geometry data", default = True)
option_geometry_per_file = bpy.props.BoolProperty(name = "Export Geometry Per File", description = "Export each geometry to individual JSON files", default = False)
option_minimize = bpy.props.BoolProperty(name = "Export Minimized", description = "Export minimized JSON data", default = True)
@ -341,6 +341,7 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper):
else:
r = 1.0
tangent = (deltaPos1 * deltaUV2.y - deltaPos2 * deltaUV1.y) * r
# bitangent = (deltaPos2 * deltaUV1.x - deltaPos1 * deltaUV2.x) * r
return tangent
@staticmethod
@ -1548,6 +1549,7 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper):
triangle_count = int(len(ia) / 3)
vertex_count = int(len(posa) / 3)
tangents = [0] * vertex_count * 3
bitangents = [0] * vertex_count * 3
for i in range(0, triangle_count):
i0 = ia[i * 3 + 0]
i1 = ia[i * 3 + 1]
@ -1571,17 +1573,29 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper):
tangents[i2 * 3 + 0] += tangent.x
tangents[i2 * 3 + 1] += tangent.y
tangents[i2 * 3 + 2] += tangent.z
# bitangents[i0 * 3 + 0] += bitangent.x
# bitangents[i0 * 3 + 1] += bitangent.y
# bitangents[i0 * 3 + 2] += bitangent.z
# bitangents[i1 * 3 + 0] += bitangent.x
# bitangents[i1 * 3 + 1] += bitangent.y
# bitangents[i1 * 3 + 2] += bitangent.z
# bitangents[i2 * 3 + 0] += bitangent.x
# bitangents[i2 * 3 + 1] += bitangent.y
# bitangents[i2 * 3 + 2] += bitangent.z
# Orthogonalize
nora = na.values
for i in range(0, vertex_count):
# TODO: Slow
t = Vector((tangents[i * 3], tangents[i * 3 + 1], tangents[i * 3 + 2]))
# b = Vector((bitangents[i * 3], bitangents[i * 3 + 1], bitangents[i * 3 + 2]))
n = Vector((nora[i * 3], nora[i * 3 + 1], nora[i * 3 + 2]))
v = t - n * n.dot(t)
v.normalize()
# Calculate handedness
# tangent[a].w = (Dot(Cross(n, t), tan2[a]) < 0.0F) ? -1.0F : 1.0F;
# cnv = n.cross(v)
# if cnv.dot(b) < 0.0:
# v = v * -1.0
tangents[i * 3] = v.x
tangents[i * 3 + 1] = v.y
tangents[i * 3 + 2] = v.z

Binary file not shown.

View file

@ -84,7 +84,7 @@ class TargetNode(Node, CGPipelineTreeNode):
self.inputs.new('NodeSocketInt', "Width")
self.inputs.new('NodeSocketInt', "Height")
self.inputs.new('NodeSocketInt', "Color Buffers")
self.inputs.new('NodeSocketBool', "Depth")
self.inputs.new('NodeSocketBool', "Depth Buffer")
self.inputs.new('NodeSocketString', "Format")
self.outputs.new('NodeSocketShader', "Target")
@ -342,7 +342,7 @@ def get_render_targets(node_group):
target.width = n.inputs[1].default_value
target.height = n.inputs[2].default_value
target.color_buffers = n.inputs[3].default_value
target.depth = n.inputs[4].default_value
target.depth_buffer = n.inputs[4].default_value
target.format = n.inputs[5].default_value
render_targets.append(target)
return render_targets

View file

@ -66,7 +66,7 @@ in vec3 normal;
// }
float texture2DCompare(vec2 uv, float compare){
float depth = texture(shadowMap, uv).r;
float depth = (texture(shadowMap, uv).r - 0.5) * 2.0;
return step(compare, depth);
}
@ -102,18 +102,14 @@ float shadowTest(vec4 lPos, float dotNL) {
lPosH.y = 1.0 - ((-lPosH.y + 1.0) / (2.0));
return PCF(vec2(2048, 2048), lPosH.st, lPosH.z - 0.005);
// return VSM(lPosH.st, lPosH.z);
// shadow2DSampler
// return texture(shadowMap, vec3(lPosH.st, (lPosH.z - 0.005) / lPosH.w));
// Basic
// vec4 packedZValue = texture(shadowMap, lPosH.st);
// float distanceFromLight = packedZValue.r;
// float bias = 0.005;//clamp(0.005 * tan(acos(dotNL)), 0.0, 0.01);
// 1.0 = not in shadow, 0.0 = in shadow
// float distanceFromLight = texture(shadowMap, lPosH.st).r;
// float bias = 0.0;
// return float(distanceFromLight > lPosH.z - bias);
}

View file

@ -13,7 +13,9 @@ in vec4 position;
void main() {
float depth = position.z / position.w;
//depth += 0.005;
// depth += 0.005;
// gl_FragDepth = depth;
gl_FragColor = vec4(depth, 0.0, 0.0, 1.0);
// VSM