Revert "Added skybox to renderer and reflections to shader. Builds and runs. Flickering with many objects in scene, assuming swap chain issue."
This reverts commit 3231ed9190.
This commit is contained in:
parent
3231ed9190
commit
6685277e29
10 changed files with 1438 additions and 1818 deletions
|
|
@ -4,26 +4,16 @@ struct Environment {
|
|||
dir: vec4<f32>,
|
||||
}
|
||||
|
||||
struct Eye {
|
||||
// from camera to screen
|
||||
proj: mat4x4<f32>,
|
||||
// from screen to camera
|
||||
inv: mat4x4<f32>,
|
||||
// world to camera
|
||||
struct View {
|
||||
view: mat4x4<f32>,
|
||||
// camera transform
|
||||
frame: mat4x4<f32>,
|
||||
}
|
||||
|
||||
// Vertex shader
|
||||
@group(0) @binding(0)
|
||||
var<uniform> eye: Eye;
|
||||
var<uniform> view: View;
|
||||
@group(0) @binding(1)
|
||||
var<uniform> environment: Environment;
|
||||
@group(0) @binding(2)
|
||||
var sky_sampler: sampler;
|
||||
@group(0) @binding(3)
|
||||
var sky_texture: texture_2d<f32>;
|
||||
|
||||
struct VertexInput {
|
||||
@location(0) position: vec3<f32>,
|
||||
|
|
@ -70,7 +60,7 @@ fn vs_main(
|
|||
out.world_normal = model_rot_matrix * model.normal;
|
||||
var world_position: vec4<f32> = model_matrix * vec4<f32>(model.position, 1.0);
|
||||
out.world_position = world_position.xyz;
|
||||
out.clip_position = eye.proj * eye.view * world_position;
|
||||
out.clip_position = view.view * world_position;
|
||||
return out;
|
||||
}
|
||||
|
||||
|
|
@ -85,79 +75,23 @@ var t_normal: texture_2d<f32>;
|
|||
@group(1) @binding(3)
|
||||
var t_rough: texture_2d<f32>;
|
||||
|
||||
fn sky_aspect(look: vec3<f32>) -> vec4<f32> {
|
||||
var pi = 3.14159;
|
||||
let u_angle = atan2(look.x,look.z);
|
||||
let u = (u_angle/pi) + 0.5; // from -pi/2 -> pi/2 into 0 -> 1
|
||||
let v_angle = atan2(-look.y,sqrt(look.x * look.x + look.z * look.z));
|
||||
let v = (v_angle/pi) + 0.5;//(v_angle/pi) + 0.5; // from -pi/2 -> pi/2 into 0 -> 1
|
||||
let uv = vec2<f32>(u,v); // Get UV on skybox
|
||||
return textureSample(sky_texture, sky_sampler, uv);
|
||||
}
|
||||
|
||||
fn rotation(mat: mat4x4<f32>) -> mat3x3<f32> {
|
||||
return mat3x3<f32>(
|
||||
mat[0].xyz,
|
||||
mat[1].xyz,
|
||||
mat[2].xyz,
|
||||
);
|
||||
}
|
||||
|
||||
fn translation(mat: mat4x4<f32>) -> vec4<f32> {
|
||||
//return vec4<f32>(mat[0][3],mat[1][3],mat[2][3],mat[3][3]);
|
||||
return mat[3];
|
||||
}
|
||||
|
||||
@fragment
|
||||
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
|
||||
let object_color: vec4<f32> = textureSample(t_diffuse, s_diffuse, in.tex_coords);
|
||||
let object_normal: vec4<f32> = textureSample(t_normal, s_diffuse, in.tex_coords);
|
||||
|
||||
let diffuse_color = object_color.xyz;
|
||||
let specular_color = vec3<f32>(0.0,0.0,0.0);
|
||||
let reflection = sky_aspect(reflect(normalize(in.world_position-translation(eye.frame).xyz),normalize(in.world_normal)));
|
||||
let tangent_normal = object_normal.xyz * 2.0 - 1.0;
|
||||
let light_dir = normalize(environment.dir.xyz);
|
||||
let view_dir = normalize(view.frame[3].xyz - in.world_position);
|
||||
let half_dir = normalize(view_dir + light_dir);
|
||||
|
||||
//let result = (environment.ambient.xyz + diffuse_color + specular_color) * object_color.xyz;
|
||||
let diffuse_strength = max(dot(tangent_normal, light_dir), 0.0);
|
||||
let diffuse_color = environment.light.xyz * diffuse_strength;
|
||||
|
||||
//let light_dir = normalize(environment.dir.xyz);
|
||||
//let view_dir = normalize(eye.frame[3].xyz - in.world_position);
|
||||
//let half_dir = normalize(view_dir + light_dir);
|
||||
|
||||
//let diffuse_strength = max(dot(tangent_normal, light_dir), 0.0);
|
||||
//let diffuse_color = environment.light.xyz * diffuse_strength;
|
||||
|
||||
//let specular_strength = pow(max(dot(tangent_normal, half_dir), 0.0), 32.0);
|
||||
//let specular_color = specular_strength * environment.light.xyz;
|
||||
let specular_strength = pow(max(dot(tangent_normal, half_dir), 0.0), 32.0);
|
||||
let specular_color = specular_strength * environment.light.xyz;
|
||||
|
||||
let result = (environment.ambient.xyz + diffuse_color.xyz + specular_color.xyz) * object_color.xyz;
|
||||
|
||||
return vec4<f32>(reflection.xyz,object_color.a);
|
||||
}
|
||||
|
||||
struct SkyOutput {
|
||||
@builtin(position) position: vec4<f32>,
|
||||
@location(0) pos: vec4<f32> // unadulterated by WGSL
|
||||
}
|
||||
|
||||
const TRI_VERTICES = array(
|
||||
vec4(-1.0, -1.0, 1.0, 1.0),
|
||||
vec4(-1.0, 1.0, 1.0, 1.0),
|
||||
vec4( 1.0, -1.0, 1.0, 1.0),
|
||||
vec4( 1.0, 1.0, 1.0, 1.0),
|
||||
vec4(-1.0, 1.0, 1.0, 1.0),
|
||||
vec4( 1.0, -1.0, 1.0, 1.0),
|
||||
);
|
||||
|
||||
@vertex
|
||||
fn vs_sky(@builtin(vertex_index) index: u32) -> SkyOutput {
|
||||
var out: SkyOutput;
|
||||
out.position = TRI_VERTICES[index];
|
||||
out.pos = out.position;
|
||||
return out;
|
||||
}
|
||||
|
||||
@fragment
|
||||
fn fs_sky(in: SkyOutput) -> @location(0) vec4<f32> {
|
||||
let look = rotation(eye.frame) * in.pos.xyz;
|
||||
return sky_aspect(look);
|
||||
}
|
||||
return vec4<f32>(result.xyz,object_color.a);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue