Fix wpos write

This commit is contained in:
Lubos Lenco 2017-03-23 12:01:25 +01:00
parent d7be94d6e1
commit 140e69fde8
7 changed files with 50 additions and 28 deletions

View file

@ -126,9 +126,9 @@ vec2 getProjectedCoord(vec3 hitCoord) {
}
float getDeltaDepth(vec3 hitCoord) {
vec2 texCoord = getProjectedCoord(hitCoord);
vec4 g0 = texture(gbuffer0, texCoord);
float depth = texture(gbufferD, texCoord).r * 2.0 - 1.0;
// TODO: store_depth
// vec4 g0 = texture(gbuffer0, texCoord);
// float depth = (1.0 - g0.a) * 2.0 - 1.0;
vec3 wpos = getPos2(invVP, depth, texCoord);
float d1 = length(eye - wpos);

View file

@ -38,7 +38,6 @@ def build_node_tree(node_group):
# Make sure root node exists
roots = get_root_nodes(node_group)
created_nodes = []
print(roots)
for rn in roots:
name = '_' + rn.name.replace('.', '_').replace(' ', '')
buildNode(node_group, rn, f, created_nodes)

View file

@ -33,22 +33,36 @@ def make_finalize(con_mesh):
if frag.contains('dotNV') and not frag.contains('float dotNV'):
frag.prepend('float dotNV = max(dot(n, vVec), 0.0);')
write_wpos = False
if frag.contains('vVec') and not frag.contains('vec3 vVec'):
if is_displacement:
tese.add_out('vec3 eyeDir')
tese.add_uniform('vec3 eye', '_cameraPosition')
tese.write('eyeDir = eye - wposition;')
else:
vert.add_out('vec3 eyeDir')
vert.add_uniform('vec3 eye', '_cameraPosition')
vert.write('eyeDir = eye - wposition;')
write_wpos = True
frag.prepend('vec3 vVec = normalize(eyeDir);')
export_wpos = False
if frag.contains('wposition') and not frag.contains('vec3 wposition'):
if not is_displacement: # Displacement always outputs wposition
vert.add_uniform('mat4 W', '_worldMatrix')
vert.add_out('vec3 wposition')
vert.write('wposition = vec4(W * spos).xyz;')
export_wpos = True
if export_wpos:
vert.add_uniform('mat4 W', '_worldMatrix')
vert.add_out('vec3 wposition')
vert.write_pre = True
vert.write('wposition = vec4(W * spos).xyz;')
vert.write_pre = False
elif write_wpos:
vert.add_uniform('mat4 W', '_worldMatrix')
vert.write_pre = True
vert.write('vec3 wposition = vec4(W * spos).xyz;')
vert.write_pre = False
def make_base(con_mesh, parse_opacity):
global is_displacement
@ -60,9 +74,7 @@ def make_base(con_mesh, parse_opacity):
tese = None
vert.add_uniform('mat3 N', '_normalMatrix')
vert.write_pre = True
vert.write('vec4 spos = vec4(pos, 1.0);')
vert.write_pre = False
vert.write_main_header('vec4 spos = vec4(pos, 1.0);')
if mat_utils.disp_linked(mat_state.output_node):
is_displacement = True
@ -147,7 +159,7 @@ def make_base(con_mesh, parse_opacity):
vert.add_out('vec3 wnormal')
write_norpos(vert)
frag.write_pre = True
frag.write('vec3 n = normalize(wnormal);')
frag.write_main_header('vec3 n = normalize(wnormal);')
frag.write_pre = False
if tese != None:

View file

@ -3,6 +3,7 @@ import arm.material.mat_state as mat_state
import arm.material.mat_utils as mat_utils
import arm.material.make_skin as make_skin
import arm.material.make_tess as make_tess
import arm.material.make_mesh as make_mesh
def make(context_id, rpasses):
con_shadowmap = mat_state.data.add_context({ 'name': context_id, 'depth_write': True, 'compare_mode': 'less', 'cull_mode': 'clockwise', 'color_write_red': False, 'color_write_green': False, 'color_write_blue': False, 'color_write_alpha': False })
@ -14,7 +15,7 @@ def make(context_id, rpasses):
tese = None
# frag.add_out('vec4 fragColor')
vert.write('vec4 spos = vec4(pos, 1.0);')
vert.write_main_header('vec4 spos = vec4(pos, 1.0);')
# TODO: pass vbuf with proper struct
vert.write('vec3 t1 = nor; // TODO: Temp for d3d')
@ -109,4 +110,6 @@ def make(context_id, rpasses):
# frag.write('fragColor = vec4(0.0);')
make_mesh.make_finalize(con_shadowmap)
return con_shadowmap

View file

@ -13,6 +13,7 @@ class Shader:
self.functions = {}
self.main = ''
self.main_pre = ''
self.main_header = ''
self.header = ''
self.write_pre = False
self.tab = 1
@ -56,7 +57,7 @@ class Shader:
return (s in self.main or s in self.main_pre or s in self.ins)
def prepend(self, s):
self.main_pre = s + self.main_pre
self.main_pre = s + '\n' + self.main_pre
def write(self, s):
if self.write_pre:
@ -67,6 +68,9 @@ class Shader:
def write_header(self, s):
self.header += s + '\n'
def write_main_header(self, s):
self.main_header += s + '\n'
def get(self):
s = '#version 450\n'
@ -116,6 +120,7 @@ class Shader:
for f in self.functions:
s += self.functions[f]
s += 'void main() {\n'
s += self.main_header
s += self.main_pre
s += self.main
s += '}\n'

View file

@ -11,6 +11,7 @@ import arm.assets as assets
import arm.log as log
import arm.utils
import arm.make
import arm.make_renderer as make_renderer
try:
import barmory
except ImportError:
@ -167,33 +168,33 @@ def init_properties():
name="Runtime", description="Player runtime used when launching in new window", default='Krom', update=assets.invalidate_shader_cache)
bpy.types.World.arm_loadbar = BoolProperty(name="Load Bar", description="Show asset loading progress on published builds", default=True)
bpy.types.World.arm_gapi_win = EnumProperty(
items = [('opengl2', 'Auto', 'opengl2'),
('opengl2', 'OpenGL', 'opengl2'),
items = [('opengl', 'Auto', 'opengl'),
('opengl', 'OpenGL', 'opengl'),
('vulkan', 'Vulkan', 'vulkan'),
('direct3d9', 'Direct3D9', 'direct3d9'),
('direct3d11', 'Direct3D11', 'direct3d11'),
('direct3d12', 'Direct3D12', 'direct3d12')],
name="Graphics API", default='opengl2', description='Based on currently selected target', update=update_gapi_win)
name="Graphics API", default='opengl', description='Based on currently selected target', update=update_gapi_win)
bpy.types.World.arm_gapi_linux = EnumProperty(
items = [('opengl2', 'Auto', 'opengl2'),
('opengl2', 'OpenGL', 'opengl2'),
items = [('opengl', 'Auto', 'opengl'),
('opengl', 'OpenGL', 'opengl'),
('vulkan', 'Vulkan', 'vulkan')],
name="Graphics API", default='opengl2', description='Based on currently selected target', update=update_gapi_linux)
name="Graphics API", default='opengl', description='Based on currently selected target', update=update_gapi_linux)
bpy.types.World.arm_gapi_android = EnumProperty(
items = [('opengl2', 'Auto', 'opengl2'),
('opengl2', 'OpenGL', 'opengl2'),
items = [('opengl', 'Auto', 'opengl'),
('opengl', 'OpenGL', 'opengl'),
('vulkan', 'Vulkan', 'vulkan')],
name="Graphics API", default='opengl2', description='Based on currently selected target', update=update_gapi_android)
name="Graphics API", default='opengl', description='Based on currently selected target', update=update_gapi_android)
bpy.types.World.arm_gapi_mac = EnumProperty(
items = [('opengl2', 'Auto', 'opengl2'),
('opengl2', 'OpenGL', 'opengl2'),
items = [('opengl', 'Auto', 'opengl'),
('opengl', 'OpenGL', 'opengl'),
('metal', 'Metal', 'metal')],
name="Graphics API", default='opengl2', description='Based on currently selected target', update=update_gapi_mac)
name="Graphics API", default='opengl', description='Based on currently selected target', update=update_gapi_mac)
bpy.types.World.arm_gapi_ios = EnumProperty(
items = [('opengl2', 'Auto', 'opengl2'),
('opengl2', 'OpenGL', 'opengl2'),
items = [('opengl', 'Auto', 'opengl'),
('opengl', 'OpenGL', 'opengl'),
('metal', 'Metal', 'metal')],
name="Graphics API", default='opengl2', description='Based on currently selected target', update=update_gapi_ios)
name="Graphics API", default='opengl', description='Based on currently selected target', update=update_gapi_ios)
bpy.types.World.arm_gapi_html5 = EnumProperty(
items = [('webgl', 'Auto', 'webgl'),
('webgl', 'WebGL', 'webgl')],
@ -449,7 +450,7 @@ def init_properties():
('Auto', 'Auto', 'Auto')],
name="Anisotropic Filtering", description="Texture filtering", default='On')
bpy.types.World.force_no_culling = bpy.props.BoolProperty(name="Force No Culling", default=False)
bpy.types.World.tessellation_enabled = bpy.props.BoolProperty(name="Tessellation", description="Enable tessellation for height maps on supported targets", default=True)
bpy.types.World.tessellation_enabled = bpy.props.BoolProperty(name="Tessellation", description="Enable tessellation for height maps on supported targets", default=True, update=assets.invalidate_shader_cache)
# Lighting flags
bpy.types.World.diffuse_model = EnumProperty(
items=[('Lambert', 'Lambert', 'Lambert'),
@ -553,6 +554,8 @@ def init_properties_on_load():
print('Project updated to sdk v' + arm_version)
wrd.arm_version = arm_version
arm.make.clean_project()
if len(bpy.data.cameras) > 0:
make_renderer.make_renderer(bpy.data.cameras[0])
# Set url for embedded player
if arm.utils.with_krom():

View file

@ -199,7 +199,7 @@ def check_sdkpath(self):
return True
def tess_enabled(target):
return target == 'krom' or target == 'native'
return (target == 'krom' or target == 'native') and bpy.data.worlds['Arm'].tessellation_enabled
def is_object_animation_enabled(bobject):
# Checks if animation is present and enabled