diff --git a/Sources/armory/renderpath/RenderPathCreator.hx b/Sources/armory/renderpath/RenderPathCreator.hx index cd7ae880..518070e1 100644 --- a/Sources/armory/renderpath/RenderPathCreator.hx +++ b/Sources/armory/renderpath/RenderPathCreator.hx @@ -27,9 +27,9 @@ class RenderPathCreator { #elseif (rp_renderer == "Deferred") RenderPathDeferred.init(path); path.commands = RenderPathDeferred.commands; - #elseif (rp_renderer == "Pathtracer") - RenderPathPathtracer.init(path); - path.commands = RenderPathPathtracer.commands; + #elseif (rp_renderer == "Raytracer") + RenderPathRaytracer.init(path); + path.commands = RenderPathRaytracer.commands; #end return path; } diff --git a/Sources/armory/renderpath/RenderPathPathtracer.hx b/Sources/armory/renderpath/RenderPathRaytracer.hx similarity index 98% rename from Sources/armory/renderpath/RenderPathPathtracer.hx rename to Sources/armory/renderpath/RenderPathRaytracer.hx index 83363407..72dc23a2 100644 --- a/Sources/armory/renderpath/RenderPathPathtracer.hx +++ b/Sources/armory/renderpath/RenderPathRaytracer.hx @@ -16,9 +16,9 @@ import kha.graphics5.TextureFormat; import iron.RenderPath; -class RenderPathPathtracer { +class RenderPathRaytracer { - #if (rp_renderer == "Pathtracer") + #if (rp_renderer == "Raytracer") static var path:RenderPath; static var ready = false; diff --git a/Sources/armory/system/Cycles.hx b/Sources/armory/system/Cycles.hx index fa35e905..f02e0e9a 100644 --- a/Sources/armory/system/Cycles.hx +++ b/Sources/armory/system/Cycles.hx @@ -1111,17 +1111,9 @@ class Cycles { frag.write_normal++; parse_teximage_vector = false; // Force texCoord for normal map image vector out_normaltan = parse_vector_input(inp); - // defplus = c_state.get_rp_renderer() == 'Deferred Plus' - // if not c_state.get_arm_export_tangents() or defplus: # Compute TBN matrix if (!arm_export_tangents) { - frag.write('vec3 texn = ($out_normaltan) * 2.0 - 1.0;'); frag.write('texn.y = -texn.y;'); - // frag.add_include('../../Shaders/std/normals.glsl') - - // if defplus: - // frag.write('mat3 TBN = cotangentFrame(n, -vVec, g2.xy, g2.zw);') - // else: if (!cotangentFrameWritten) { cotangentFrameWritten = true; frag.add_function(CyclesFunctions.str_cotangentFrame); diff --git a/blender/arm/make.py b/blender/arm/make.py index 6627bb8b..3d386f16 100755 --- a/blender/arm/make.py +++ b/blender/arm/make.py @@ -240,7 +240,7 @@ def compile(assets_only=False): cmd.append('--vr') cmd.append('webvr') - if arm.utils.get_rp().rp_renderer == 'Pathtracer': + if arm.utils.get_rp().rp_renderer == 'Raytracer': cmd.append('--raytrace') cmd.append('dxr') dxc_path = fp + '/HlslShaders/fxc.exe' diff --git a/blender/arm/material/cycles.py b/blender/arm/material/cycles.py index ea6872c5..f329a56c 100644 --- a/blender/arm/material/cycles.py +++ b/blender/arm/material/cycles.py @@ -895,15 +895,11 @@ def parse_normal_map_color_input(inp, strength_input=None): return normal_parsed = True frag.write_normal += 1 - defplus = get_rp_renderer() == 'Deferred Plus' - if not get_arm_export_tangents() or defplus or mat_get_material().arm_decal: # Compute TBN matrix + if not get_arm_export_tangents() or mat_get_material().arm_decal: # Compute TBN matrix frag.write('vec3 texn = ({0}) * 2.0 - 1.0;'.format(parse_vector_input(inp))) frag.write('texn.y = -texn.y;') frag.add_include('std/normals.glsl') - if defplus: - frag.write('mat3 TBN = cotangentFrame(n, -vVec, g2.xy, g2.zw);') - else: - frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);') + frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);') frag.write('n = TBN * normalize(texn);') else: frag.write('vec3 n = ({0}) * 2.0 - 1.0;'.format(parse_vector_input(inp))) diff --git a/blender/arm/material/make_mesh.py b/blender/arm/material/make_mesh.py index 2825bbdc..6deed112 100644 --- a/blender/arm/material/make_mesh.py +++ b/blender/arm/material/make_mesh.py @@ -53,10 +53,8 @@ def make(context_id): make_forward(con_mesh) elif rid == 'Deferred': make_deferred(con_mesh) - # elif rid == 'Deferred Plus': - # make_deferred_plus(con_mesh) - elif rid == 'Pathtracer': - make_pathtracer(con_mesh) + elif rid == 'Raytracer': + make_raytracer(con_mesh) make_finalize(con_mesh) @@ -406,45 +404,7 @@ def make_deferred(con_mesh): return con_mesh -# def make_deferred_plus(con_mesh): -# vert = con_mesh.make_vert() -# frag = con_mesh.make_frag() - -# frag.add_out('vec4[3] fragColor') - -# vert.add_uniform('mat3 N', '_normalMatrix') -# vert.write_attrib('vec4 spos = vec4(pos, 1.0);') - -# frag.ins = vert.outs -# vert.add_uniform('mat4 WVP', '_worldViewProjectionMatrix') -# vert.write('gl_Position = WVP * spos;') - -# frag.add_include('compiled.inc') - -# vert.add_out('vec2 texCoord') - -# con_mesh.add_elem('tex', 2) #### Add using cycles.py -# if con_mesh.is_elem('tex'): -# vert.write_attrib('texCoord = tex;') -# else: -# vert.write_attrib('texCoord = vec2(0.0);') - -# vert.add_out('vec3 wnormal') -# write_norpos(con_mesh, vert) -# frag.write_attrib('vec3 n = normalize(wnormal);') - -# frag.add_uniform('float materialID', link='_objectInfoMaterialIndex') - -# # Pack gbuffer -# frag.add_include('std/gbuffer.glsl') -# frag.write('n /= (abs(n.x) + abs(n.y) + abs(n.z));') -# frag.write('n.xy = n.z >= 0.0 ? n.xy : octahedronWrap(n.xy);') -# frag.write('fragColor[0] = vec4(n.xy, fract(texCoord));') -# frag.write('fragColor[1] = vec4(materialID, 0.0, 0.0, 0.0);') -# frag.write('fragColor[2] = vec4(dFdx(texCoord), dFdy(texCoord));') -# # + tangent space - -def make_pathtracer(con_mesh): +def make_raytracer(con_mesh): wrd = bpy.data.worlds['Arm'] vert = con_mesh.make_vert() frag = con_mesh.make_frag() diff --git a/blender/arm/material/make_rect.py b/blender/arm/material/make_rect.py deleted file mode 100644 index 4cc51769..00000000 --- a/blender/arm/material/make_rect.py +++ /dev/null @@ -1,140 +0,0 @@ -import bpy -import arm.make_state as state -import arm.material.mat_state as mat_state -import arm.material.mat_utils as mat_utils -import arm.material.cycles as cycles -import arm.material.make_skin as make_skin -import arm.material.make_tess as make_tess -import arm.utils - -is_displacement = False - -def make(context_id): - con_rect = mat_state.data.add_context({ 'name': context_id, 'depth_write': False, 'compare_mode': 'equal', 'cull_mode': 'none' }) - - make_rect(con_rect) - - return con_rect - -def make_rect(con_rect): - wrd = bpy.data.worlds['Arm'] - vert = con_rect.make_vert() - frag = con_rect.make_frag() - - vert.vstruct_as_vsin = False # Rect structure is used instead - - vert.add_in('vec2 pos') - vert.add_out('vec2 texCoordRect') - vert.add_out('vec3 viewRay') - vert.add_uniform('float materialID', link='_objectInfoMaterialIndex') - vert.add_uniform('mat4 invVP', link='_inverseViewProjectionMatrix') - vert.add_uniform('vec3 eye', link='_cameraPosition') - vert.write('const vec2 madd = vec2(0.5, 0.5);') - vert.write('texCoordRect = pos.xy * madd + madd;') - vert.write('const float fstep = 1.0 / 16777216.0; // 24bit') - # vert.write('const float fstep = 1.0 / 65536.0; // 16bit') - vert.write('gl_Position = vec4(pos.xy, (materialID * fstep) * 2.0 - 1.0, 1.0);') - vert.write('vec4 v = vec4(pos.xy, 1.0, 1.0);') - vert.write('v = vec4(invVP * v);') - vert.write('v.xyz /= v.w;') - vert.write('viewRay = v.xyz - eye;') - - frag.ins = vert.outs - frag.add_out('vec4 fragColor') - frag.add_include('compiled.inc') - frag.add_include('std/brdf.glsl') - frag.add_include('std/math.glsl') - frag.add_include('std/gbuffer.glsl') - frag.add_include('std/shirr.glsl') - frag.add_include('std/shadows.glsl') - - frag.add_uniform('sampler2D gbuffer0') - frag.add_uniform('sampler2D gbuffer1') - frag.add_uniform('sampler2D gbuffer2') - frag.add_uniform('sampler2D gbufferD') - frag.add_uniform('sampler2D ssaotex') - frag.add_uniform('sampler2D shadowMap') - frag.add_uniform('sampler2D shadowMapCube') - frag.add_uniform('mat4 LWVP', link='_biasLightWorldViewProjectionMatrix') - frag.add_uniform('vec3 eye', link='_cameraPosition') - frag.add_uniform('vec3 eyeLook', link='_cameraLook') - frag.add_uniform('vec3 lightPos', link='_lightPosition') - frag.add_uniform('vec3 lightColor', link='_lightColor') - frag.add_uniform('int lightShadow', link='_lightCastShadow') - frag.add_uniform('vec2 lightProj', link='_lightPlaneProj') - frag.add_uniform('float shadowsBias', link='_lightShadowsBias') - # TODO: ifdef - frag.add_uniform('float envmapStrength', link='_envmapStrength') - frag.add_uniform('vec4 shirr[7]', link='_envmapIrradiance', included=True) - frag.add_uniform('sampler2D senvmapRadiance', link='_envmapRadiance') - frag.add_uniform('sampler2D senvmapBrdf', link='_envmapBrdf') - frag.add_uniform('int envmapNumMipmaps', link='_envmapNumMipmaps') - - frag.write_pre = True - frag.write('vec4 g0 = texture(gbuffer0, texCoordRect);') - frag.write('vec4 g1 = texture(gbuffer1, texCoordRect);') - frag.write('vec4 g2 = texture(gbuffer2, texCoordRect);') - frag.write('float depth = texture(gbufferD, texCoordRect).r * 2.0 - 1.0;') - - frag.write('vec3 n;') - frag.write('n.z = 1.0 - abs(g0.x) - abs(g0.y);') - frag.write('n.xy = n.z >= 0.0 ? g0.xy : octahedronWrap(g0.xy);') - frag.write('n = normalize(n);') - frag.write('vec2 texCoord = g0.zw;'); - frag.add_uniform('vec2 cameraProj', link='_cameraPlaneProj') - frag.write('vec3 wposition = getPos(eye, eyeLook, viewRay, depth, cameraProj);') - frag.write('vec3 vVec = normalize(eye - wposition);') - frag.write_pre = False - - frag.write('float dotNV = dot(n, vVec);') - frag.write('vec3 lp = lightPos - wposition;') - frag.write('vec3 l = normalize(lp);') - frag.write('float dotNL = max(dot(n, l), 0.0);') - frag.write('vec3 h = normalize(vVec + l);') - frag.write('float dotNH = dot(n, h);') - frag.write('float dotVH = dot(vVec, h);') - frag.write('float visibility = 1.0;') - - frag.write('vec3 basecol;') - frag.write('float roughness;') - frag.write('float metallic;') - frag.write('float occlusion;') - frag.write('float specular;') - - mat_state.texture_grad = True - cycles.parse(mat_state.nodes, con_rect, vert, frag, None, None, None, parse_opacity=False, parse_displacement=False) - mat_state.texture_grad = False - - frag.write('vec3 albedo = surfaceAlbedo(basecol, metallic);') - frag.write('vec3 f0 = surfaceF0(basecol, metallic);') - - # Shadows - frag.write('if (lightShadow == 1) {') - frag.write(' vec4 lPos = LWVP * vec4(wposition, 1.0);') - frag.write(' lPos.xyz /= lPos.w;') - frag.write(' if (lPos.x > 0.0 && lPos.y > 0.0 && lPos.x < 1.0 && lPos.y < 1.0) visibility = PCF(lPos.xy, lPos.z - shadowsBias);;') - frag.write('}') - frag.write('else if (lightShadow == 2) {') - frag.write(' visibility = PCFCube(shadowMapCube, lp, -l, shadowsBias, lightProj, n);') - frag.write('}') - - frag.write('visibility *= attenuate(distance(wposition, lightPos));') - - frag.write('fragColor.rgb = lambertDiffuseBRDF(albedo, dotNL) + specularBRDF(f0, roughness, dotNL, dotNH, dotNV, dotVH) * specular;') - frag.write('fragColor.rgb *= lightColor;') - frag.write('fragColor.rgb *= visibility;') - - # Env - frag.write('vec2 envBRDF = texture(senvmapBrdf, vec2(roughness, 1.0 - dotNV)).xy;') - frag.write('vec3 envl = shIrradiance(n) / PI;') - - frag.write('vec3 reflectionWorld = reflect(-vVec, n);') - frag.write('float lod = getMipFromRoughness(roughness, envmapNumMipmaps);') - frag.write('vec3 prefilteredColor = textureLod(senvmapRadiance, envMapEquirect(reflectionWorld), lod).rgb;') - - frag.write('envl.rgb *= albedo;') - frag.write('envl.rgb += prefilteredColor * (f0 * envBRDF.x + envBRDF.y);') - frag.write('envl.rgb *= texture(ssaotex, texCoordRect).r;') - frag.write('envl.rgb *= envmapStrength * occlusion;') - - frag.write('fragColor.rgb += envl;') diff --git a/blender/arm/material/make_shader.py b/blender/arm/material/make_shader.py index 27b11244..3f40069c 100644 --- a/blender/arm/material/make_shader.py +++ b/blender/arm/material/make_shader.py @@ -7,7 +7,6 @@ import arm.material.mat_state as mat_state from arm.material.shader import ShaderData import arm.material.cycles as cycles import arm.material.make_mesh as make_mesh -import arm.material.make_rect as make_rect import arm.material.make_transluc as make_transluc import arm.material.make_overlay as make_overlay import arm.material.make_depth as make_depth @@ -77,9 +76,6 @@ def build(material, mat_users, mat_armusers): elif rp == 'mesh': con = make_mesh.make(rp) - elif rp == 'rect': - con = make_rect.make(rp) - elif rp == 'shadowmap': con = make_depth.make(rp, rpasses, shadowmap=True) diff --git a/blender/arm/material/mat_utils.py b/blender/arm/material/mat_utils.py index 03931374..e50a692b 100644 --- a/blender/arm/material/mat_utils.py +++ b/blender/arm/material/mat_utils.py @@ -41,8 +41,6 @@ def get_rpasses(material): ar.append(con) if (rpdat.rp_gi == 'Voxel GI' or rpdat.rp_gi == 'Voxel AO') and has_voxels: ar.append('voxel') - if rpdat.rp_renderer == 'Deferred Plus': - ar.append('rect') if rpdat.rp_renderer == 'Forward' and rpdat.rp_depthprepass and not material.arm_blending and not material.arm_particle_flag: ar.append('depth') diff --git a/blender/arm/props_renderpath.py b/blender/arm/props_renderpath.py index 37241047..6b1ab290 100644 --- a/blender/arm/props_renderpath.py +++ b/blender/arm/props_renderpath.py @@ -258,8 +258,7 @@ class ArmRPListItem(bpy.types.PropertyGroup): rp_renderer = EnumProperty( items=[('Forward', 'Forward', 'Forward'), ('Deferred', 'Deferred', 'Deferred'), - # ('Deferred Plus', 'Deferred Plus', 'Deferred Plus'), - # ('Pathtracer', 'Pathtracer', 'Pathtracer'), + # ('Raytracer', 'Raytracer', 'Raytracer'), ], name="Renderer", description="Renderer type", default='Deferred', update=update_renderpath) rp_depthprepass = BoolProperty(name="Depth Prepass", description="Depth Prepass for mesh context", default=True, update=update_renderpath) diff --git a/blender/arm/props_ui.py b/blender/arm/props_ui.py index 4853a845..4c9b552e 100644 --- a/blender/arm/props_ui.py +++ b/blender/arm/props_ui.py @@ -732,7 +732,7 @@ class ArmRenderPathPanel(bpy.types.Panel): self.label(layout, text='Renderer') box = self.box(layout) row = self.row(box) - self.prop(row, rpdat, 'rp_renderer', expand=True) + self.prop(row, rpdat, 'rp_renderer') col = self.column(box, enabled=(rpdat.rp_renderer == 'Forward')) self.prop(col, rpdat, 'rp_depthprepass') self.prop(col, rpdat, 'arm_material_model')