Browse Source

make VIEW vector available in fragment

clayjohn 6 years ago
parent
commit
2042d6214e

+ 2 - 1
drivers/gles2/shaders/scene.glsl

@@ -1392,6 +1392,7 @@ void main() {
 		discard;
 		discard;
 #endif
 #endif
 	highp vec3 vertex = vertex_interp;
 	highp vec3 vertex = vertex_interp;
+	vec3 view = -normalize(vertex_interp);
 	vec3 albedo = vec3(1.0);
 	vec3 albedo = vec3(1.0);
 	vec3 transmission = vec3(0.0);
 	vec3 transmission = vec3(0.0);
 	float metallic = 0.0;
 	float metallic = 0.0;
@@ -1465,7 +1466,7 @@ FRAGMENT_SHADER_CODE
 	vec3 diffuse_light = vec3(0.0, 0.0, 0.0);
 	vec3 diffuse_light = vec3(0.0, 0.0, 0.0);
 	vec3 ambient_light = vec3(0.0, 0.0, 0.0);
 	vec3 ambient_light = vec3(0.0, 0.0, 0.0);
 
 
-	vec3 eye_position = -normalize(vertex_interp);
+	vec3 eye_position = view;
 
 
 #if defined(ALPHA_SCISSOR_USED)
 #if defined(ALPHA_SCISSOR_USED)
 	if (alpha < alpha_scissor) {
 	if (alpha < alpha_scissor) {

+ 2 - 1
drivers/gles3/shaders/scene.glsl

@@ -1571,6 +1571,7 @@ void main() {
 
 
 	//lay out everything, whathever is unused is optimized away anyway
 	//lay out everything, whathever is unused is optimized away anyway
 	highp vec3 vertex = vertex_interp;
 	highp vec3 vertex = vertex_interp;
+	vec3 view = -normalize(vertex_interp);
 	vec3 albedo = vec3(1.0);
 	vec3 albedo = vec3(1.0);
 	vec3 transmission = vec3(0.0);
 	vec3 transmission = vec3(0.0);
 	float metallic = 0.0;
 	float metallic = 0.0;
@@ -1705,7 +1706,7 @@ FRAGMENT_SHADER_CODE
 	vec3 ambient_light;
 	vec3 ambient_light;
 	vec3 env_reflection_light = vec3(0.0, 0.0, 0.0);
 	vec3 env_reflection_light = vec3(0.0, 0.0, 0.0);
 
 
-	vec3 eye_vec = -normalize(vertex_interp);
+	vec3 eye_vec = view;
 
 
 #ifdef USE_RADIANCE_MAP
 #ifdef USE_RADIANCE_MAP
 
 

+ 1 - 0
servers/visual/shader_types.cpp

@@ -86,6 +86,7 @@ ShaderTypes::ShaderTypes() {
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["NORMAL"] = ShaderLanguage::TYPE_VEC3;
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["NORMAL"] = ShaderLanguage::TYPE_VEC3;
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["TANGENT"] = ShaderLanguage::TYPE_VEC3;
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["TANGENT"] = ShaderLanguage::TYPE_VEC3;
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["BINORMAL"] = ShaderLanguage::TYPE_VEC3;
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["BINORMAL"] = ShaderLanguage::TYPE_VEC3;
+	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["VIEW"] = constt(ShaderLanguage::TYPE_VEC3);
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["NORMALMAP"] = ShaderLanguage::TYPE_VEC3;
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["NORMALMAP"] = ShaderLanguage::TYPE_VEC3;
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["NORMALMAP_DEPTH"] = ShaderLanguage::TYPE_FLOAT;
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["NORMALMAP_DEPTH"] = ShaderLanguage::TYPE_FLOAT;
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["UV"] = constt(ShaderLanguage::TYPE_VEC2);
 	shader_modes[VS::SHADER_SPATIAL].functions["fragment"].built_ins["UV"] = constt(ShaderLanguage::TYPE_VEC2);