Cleanup uniforms and defines

This commit is contained in:
Lubos Lenco 2017-12-20 22:56:22 +01:00
parent f9f8d4c7d5
commit da3c472850
14 changed files with 139 additions and 170 deletions

View file

@ -3,7 +3,6 @@
#include "compiled.glsl"
uniform sampler2D tex;
uniform vec2 texStep;
in vec2 texCoord;
out vec4 fragColor;

View file

@ -6,12 +6,7 @@
"depth_write": false,
"compare_mode": "always",
"cull_mode": "none",
"links": [
{
"name": "texStep",
"link": "_windowSizeInv"
}
],
"links": [],
"texture_params": [],
"vertex_shader": "../include/pass.vert.glsl",
"fragment_shader": "bloom_pass.frag.glsl"

View file

@ -9,8 +9,6 @@
uniform sampler2D tex;
uniform sampler2D gbufferD;
uniform sampler2D gbuffer0;
uniform sampler2D gbuffer1;
#ifdef _CLensTex
uniform sampler2D lensTexture;
@ -81,7 +79,7 @@ out vec4 fragColor;
// }
vec3 applyFog(vec3 rgb, float distance) {
// float fogAmount = 1.0 - exp(-distance * compoFogAmountA);
float fogAmount = 1.0 - exp(-distance * 0.0055);
float fogAmount = 1.0 - exp(-distance * (compoFogAmountA / 100));
return mix(rgb, compoFogColor, fogAmount);
}
#endif

View file

@ -173,7 +173,6 @@ void main() {
#endif
#ifdef _LampClouds
visibility *= texture(texClouds, vec2(p.xy / 100.0 + time / 80.0)).r * dot(n, vec3(0,0,1));
#endif

View file

@ -12,8 +12,6 @@ uniform sampler2D gbuffer1; // Basecol
uniform mat4 P;
uniform mat4 tiV;
uniform vec3 eye;
uniform vec3 eyeLook;
uniform vec2 cameraProj;
// const int ssgiStrength = 1.0;

View file

@ -67,10 +67,6 @@ float PCFCube(const vec3 lp, vec3 ml, const float bias, const vec2 lightProj, co
float shadowTest(const vec3 lPos, const float shadowsBias, const vec2 smSize) {
// float cosAngle = max(1.0 - dotNL, 0.0);
// vec3 noff = n * shadowsBias * cosAngle;
// vec4 lPos = LWVP * vec4(p + noff, 1.0);
// Out of bounds
if (lPos.x < 0.0 || lPos.y < 0.0 || lPos.x > 1.0 || lPos.y > 1.0) return 1.0;
@ -110,6 +106,7 @@ mat4 getCascadeMat(const float d, out int casi, out int casIndex) {
// ..
}
// float shadowTestCascade(float dotNL, vec3 n, const vec3 eye, const vec3 p, const float shadowsBias, const vec2 smSize) {
float shadowTestCascade(const vec3 eye, const vec3 p, const float shadowsBias, const vec2 smSize) {
const int c = shadowmapCascades;
float d = distance(eye, p);
@ -118,7 +115,12 @@ float shadowTestCascade(const vec3 eye, const vec3 p, const float shadowsBias, c
int casIndex;
mat4 LWVP = getCascadeMat(d, casi, casIndex);
// float cosAngle = max(1.0 - dotNL, 0.0);
// vec3 noff = n * shadowsBias * cosAngle;
// vec4 lPos = LWVP * vec4(p + noff, 1.0);
vec4 lPos = LWVP * vec4(p, 1.0);
float visibility = 1.0;
if (lPos.w > 0.0) visibility = shadowTest(lPos.xyz / lPos.w, shadowsBias, smSize);

View file

@ -36,8 +36,9 @@
uniform sampler2D envmap;
#endif
// uniform sampler2D gbufferD;
#ifdef _EnvStr
uniform float envmapStrength;
#endif
// in vec2 texCoord;
in vec3 normal;
@ -94,51 +95,10 @@ vec2 traceCloud(vec3 pos, vec3 dir) {
vec3 add = dir * ((end - beg) / steps);
vec2 shadeSum = vec2(0.0);
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
shadeSum = doCloudTrace(add, shadeSum); if (shadeSum.y >= 1.0) return shadeSum;
for (int i = 0; i < 45; i++) {
shadeSum = doCloudTrace(add, shadeSum);
if (shadeSum.y >= 1.0) return shadeSum;
}
return shadeSum;
}
// GPU PRO 7 - Real-time Volumetric Cloudscapes

View file

@ -97,7 +97,8 @@
},
{
"name": "envmapStrength",
"link": "_envmapStrength"
"link": "_envmapStrength",
"ifdef": ["_EnvStr"]
}
],
"texture_params": [],

View file

@ -965,7 +965,13 @@ class RenderPathCreator {
path.setTarget("buf");
}
#end
path.bindTarget("tex", "tex");
#if rp_compositordepth
{
path.bindTarget("_main", "gbufferD");
}
#end
#if rp_compositornodes
{
@ -1197,8 +1203,10 @@ class RenderPathCreator {
#end
}
static inline function getSuperSampling():Int {
#if (rp_supersampling == 2)
static inline function getSuperSampling():Float {
#if (rp_supersampling == 1.5)
return 1.5;
#elseif (rp_supersampling == 2)
return 2;
#elseif (rp_supersampling == 4)
return 4;

View file

@ -4,11 +4,118 @@ import arm.utils
import arm.log as log
import arm.make_state as state
def add_world_defs():
wrd = bpy.data.worlds['Arm']
rpdat = arm.utils.get_rp()
# Screen-space ray-traced shadows
if rpdat.arm_ssrs:
wrd.world_defs += '_SSRS'
if wrd.arm_two_sided_area_lamp:
wrd.world_defs += '_TwoSidedAreaLamp'
# Store contexts
if rpdat.rp_hdr == False:
wrd.world_defs += '_LDR'
# Alternative models
if rpdat.arm_diffuse_model == 'OrenNayar':
wrd.world_defs += '_OrenNayar'
# TODO: Lamp texture test..
if wrd.arm_lamp_texture != '':
wrd.world_defs += '_LampColTex'
if wrd.arm_lamp_ies_texture != '':
wrd.world_defs += '_LampIES'
assets.add_embedded_data('iestexture.png')
if wrd.arm_lamp_clouds_texture != '':
wrd.world_defs += '_LampClouds'
assets.add_embedded_data('cloudstexture.png')
voxelgi = False
voxelao = False
if rpdat.rp_renderer == 'Deferred':
assets.add_khafile_def('arm_deferred')
# Shadows
if rpdat.rp_shadowmap_cascades != '1':
wrd.world_defs += '_CSM'
assets.add_khafile_def('arm_csm')
if rpdat.rp_shadowmap == 'Off':
wrd.world_defs += '_NoShadows'
assets.add_khafile_def('arm_no_shadows')
# GI
has_voxels = state.in_viewport == False or bpy.app.version >= (2, 80, 1)
if has_voxels:
if rpdat.rp_gi == 'Voxel GI':
voxelgi = True
elif rpdat.rp_gi == 'Voxel AO':
voxelao = True
# SS
# if rpdat.rp_dfrs:
# wrd.world_defs += '_DFRS'
# assets.add_khafile_def('arm_sdf')
# if rpdat.rp_dfao:
# wrd.world_defs += '_DFAO'
# assets.add_khafile_def('arm_sdf')
# if rpdat.rp_dfgi:
# wrd.world_defs += '_DFGI'
# assets.add_khafile_def('arm_sdf')
# wrd.world_defs += '_Rad' # Always do radiance for gi
# wrd.world_defs += '_Irr'
if rpdat.rp_ssgi == 'RTGI' or rpdat.rp_ssgi == 'RTAO':
if rpdat.rp_ssgi == 'RTGI':
wrd.world_defs += '_RTGI'
if wrd.arm_ssgi_rays == '9':
wrd.world_defs += '_SSGICone9'
if rpdat.rp_autoexposure:
wrd.world_defs += '_AutoExposure'
if voxelgi or voxelao:
assets.add_khafile_def('arm_voxelgi')
wrd.world_defs += '_VoxelCones' + wrd.arm_voxelgi_cones
if rpdat.arm_voxelgi_revoxelize:
assets.add_khafile_def('arm_voxelgi_revox')
if rpdat.arm_voxelgi_camera:
wrd.world_defs += '_VoxelGICam'
if rpdat.arm_voxelgi_temporal:
assets.add_khafile_def('arm_voxelgi_temporal')
wrd.world_defs += '_VoxelGITemporal'
wrd.world_defs += '_Rad' # Always do radiance for voxels
wrd.world_defs += '_Irr'
if voxelgi:
wrd.world_defs += '_VoxelGI'
if rpdat.arm_voxelgi_shadows:
wrd.world_defs += '_VoxelGIDirect'
wrd.world_defs += '_VoxelGIShadow'
if rpdat.arm_voxelgi_refraction:
wrd.world_defs += '_VoxelGIDirect'
wrd.world_defs += '_VoxelGIRefract'
if rpdat.arm_voxelgi_emission:
wrd.world_defs += '_VoxelGIEmission'
elif voxelao:
wrd.world_defs += '_VoxelAO'
if arm.utils.get_gapi().startswith('direct3d'): # Flip Y axis in drawQuad command
wrd.world_defs += '_InvY'
# Area lamps
for lamp in bpy.data.lamps:
if lamp.type == 'AREA':
wrd.world_defs += '_LTC'
assets.add_khafile_def('arm_ltc')
break
def build():
assets_path = arm.utils.get_sdk_path() + 'armory/Assets/'
wrd = bpy.data.worlds['Arm']
rpdat = arm.utils.get_rp()
add_world_defs()
mobile_mat = rpdat.arm_material_model == 'Mobile' or rpdat.arm_material_model == 'Solid'
if not mobile_mat:
# Always include
@ -57,6 +164,7 @@ def build():
compo_depth = True
if compo_depth:
wrd.compo_defs += '_CDepth'
assets.add_khafile_def('rp_compositordepth')
if wrd.arm_lens_texture != '':
wrd.compo_defs += '_CLensTex'
assets.add_embedded_data('lenstexture.jpg')
@ -66,7 +174,7 @@ def build():
wrd.compo_defs += '_CVignette'
if wrd.arm_lensflare:
wrd.compo_defs += '_CGlare'
if wrd.arm_lut:
if wrd.arm_lut_texture != '':
wrd.compo_defs += '_CLUT'
assets.add_embedded_data('luttexture.jpg')
assets.add_shader_pass('compositor_pass')

View file

@ -55,106 +55,8 @@ def build_node_tree(world):
if rpdat.arm_clouds:
wrd.world_defs += '_EnvClouds'
# Screen-space ray-traced shadows
if rpdat.arm_ssrs:
wrd.world_defs += '_SSRS'
if wrd.arm_two_sided_area_lamp:
wrd.world_defs += '_TwoSidedAreaLamp'
# Store contexts
if rpdat.rp_hdr == False:
wrd.world_defs += '_LDR'
# Alternative models
if rpdat.arm_diffuse_model == 'OrenNayar':
wrd.world_defs += '_OrenNayar'
# TODO: Lamp texture test..
if wrd.arm_lamp_texture != '':
wrd.world_defs += '_LampColTex'
if wrd.arm_lamp_ies_texture != '':
wrd.world_defs += '_LampIES'
assets.add_embedded_data('iestexture.png')
if wrd.arm_lamp_clouds_texture != '':
wrd.world_defs += '_LampClouds'
assets.add_embedded_data('cloudstexture.png')
voxelgi = False
voxelao = False
if rpdat.rp_renderer == 'Deferred':
assets.add_khafile_def('arm_deferred')
# Shadows
if rpdat.rp_shadowmap_cascades != '1':
wrd.world_defs += '_CSM'
assets.add_khafile_def('arm_csm')
if rpdat.rp_shadowmap == 'Off':
wrd.world_defs += '_NoShadows'
assets.add_khafile_def('arm_no_shadows')
# GI
has_voxels = state.in_viewport == False or bpy.app.version >= (2, 80, 1)
if has_voxels:
if rpdat.rp_gi == 'Voxel GI':
voxelgi = True
elif rpdat.rp_gi == 'Voxel AO':
voxelao = True
# SS
# if rpdat.rp_dfrs:
# wrd.world_defs += '_DFRS'
# assets.add_khafile_def('arm_sdf')
# if rpdat.rp_dfao:
# wrd.world_defs += '_DFAO'
# assets.add_khafile_def('arm_sdf')
# if rpdat.rp_dfgi:
# wrd.world_defs += '_DFGI'
# assets.add_khafile_def('arm_sdf')
# wrd.world_defs += '_Rad' # Always do radiance for gi
# wrd.world_defs += '_Irr'
if rpdat.rp_ssgi == 'RTGI' or rpdat.rp_ssgi == 'RTAO':
if rpdat.rp_ssgi == 'RTGI':
wrd.world_defs += '_RTGI'
if wrd.arm_ssgi_rays == '9':
wrd.world_defs += '_SSGICone9'
if rpdat.rp_autoexposure:
wrd.world_defs += '_AutoExposure'
if voxelgi or voxelao:
assets.add_khafile_def('arm_voxelgi')
wrd.world_defs += '_VoxelCones' + wrd.arm_voxelgi_cones
if rpdat.arm_voxelgi_revoxelize:
assets.add_khafile_def('arm_voxelgi_revox')
if rpdat.arm_voxelgi_camera:
wrd.world_defs += '_VoxelGICam'
if rpdat.arm_voxelgi_temporal:
assets.add_khafile_def('arm_voxelgi_temporal')
wrd.world_defs += '_VoxelGITemporal'
wrd.world_defs += '_Rad' # Always do radiance for voxels
wrd.world_defs += '_Irr'
if voxelgi:
wrd.world_defs += '_VoxelGI'
if rpdat.arm_voxelgi_shadows:
wrd.world_defs += '_VoxelGIDirect'
wrd.world_defs += '_VoxelGIShadow'
if rpdat.arm_voxelgi_refraction:
wrd.world_defs += '_VoxelGIDirect'
wrd.world_defs += '_VoxelGIRefract'
if rpdat.arm_voxelgi_emission:
wrd.world_defs += '_VoxelGIEmission'
elif voxelao:
wrd.world_defs += '_VoxelAO'
if arm.utils.get_gapi().startswith('direct3d'): # Flip Y axis in drawQuad command
wrd.world_defs += '_InvY'
# Area lamps
for lamp in bpy.data.lamps:
if lamp.type == 'AREA':
wrd.world_defs += '_LTC'
assets.add_khafile_def('arm_ltc')
break
if '_EnvSky' in wrd.world_defs or '_EnvTex' in wrd.world_defs or '_EnvImg' in wrd.world_defs or '_EnvClouds' in wrd.world_defs:
wrd.world_defs += '_EnvStr'
def parse_world_output(world, node):
if node.inputs[0].is_linked:

View file

@ -328,8 +328,7 @@ def init_properties():
bpy.types.World.arm_fisheye = bpy.props.BoolProperty(name="Fish Eye", default=False, update=assets.invalidate_shader_cache)
bpy.types.World.arm_vignette = bpy.props.BoolProperty(name="Vignette", default=False, update=assets.invalidate_shader_cache)
bpy.types.World.arm_lensflare = bpy.props.BoolProperty(name="Lens Flare", default=False, update=assets.invalidate_shader_cache)
bpy.types.World.arm_lut = bpy.props.BoolProperty(name="LUT Lookup Table", default=False, update=assets.invalidate_shader_cache)
bpy.types.World.arm_lut_texture = bpy.props.StringProperty(name="LUT Texture", default="", update=assets.invalidate_shader_cache)
bpy.types.World.arm_lut_texture = bpy.props.StringProperty(name="LUT Texture", description="Color Grading", default="", update=assets.invalidate_shader_cache)
# Skin
bpy.types.World.arm_skin = EnumProperty(
items=[('GPU (Dual-Quat)', 'GPU (Dual-Quat)', 'GPU (Dual-Quat)'),

View file

@ -335,6 +335,7 @@ class ArmRPListItem(bpy.types.PropertyGroup):
name="Cascades", description="Shadow map cascades", default='4', update=udpate_shadowmap_cascades)
rp_supersampling = EnumProperty(
items=[('1', '1', '1'),
('1.5', '1.5', '1.5'),
('2', '2', '2'),
('4', '4', '4')],
name="Super Sampling", description="Screen resolution multiplier", default='1', update=update_renderpath)

View file

@ -1132,7 +1132,6 @@ class ArmRenderPropsPanel(bpy.types.Panel):
layout.prop(wrd, 'arm_lensflare')
layout.prop(wrd, 'arm_autoexposure_strength')
layout.prop(wrd, 'arm_lens_texture')
layout.prop(wrd, 'arm_lut')
layout.prop(wrd, 'arm_lut_texture')
class ArmGenLodButton(bpy.types.Operator):