Add skybox

This commit is contained in:
Imbris 2020-12-06 12:43:31 -05:00 committed by Avi Weinstock
parent b486048d0c
commit 9da50b3f4d
8 changed files with 16 additions and 55 deletions

View File

@ -12,4 +12,4 @@ tracy-world-server = "-Zunstable-options run --bin veloren-server-cli --features
test-voxygen = "run --bin veloren-voxygen --no-default-features --features gl,simd" test-voxygen = "run --bin veloren-voxygen --no-default-features --features gl,simd"
tracy-voxygen = "-Zunstable-options run --bin veloren-voxygen --no-default-features --features tracy,gl,simd --profile no_overflow" tracy-voxygen = "-Zunstable-options run --bin veloren-voxygen --no-default-features --features tracy,gl,simd --profile no_overflow"
server = "run --bin veloren-server-cli" server = "run --bin veloren-server-cli"
dbg-voxygen = "run --bin veloren-voxygen -Zunstable-options --profile debuginfo"

View File

@ -42,16 +42,9 @@ uniform u_locals {
layout(location = 0) out vec4 tgt_color; layout(location = 0) out vec4 tgt_color;
float depth_at(vec2 uv) {
float buf_depth = texture(sampler2D(t_src_depth, s_src_depth), uv).x;
vec4 clip_space = vec4(uv * 2.0 - 1.0, buf_depth, 1.0);
vec4 view_space = proj_mat_inv * clip_space;
view_space /= view_space.w;
return -view_space.z;
}
vec3 wpos_at(vec2 uv) { vec3 wpos_at(vec2 uv) {
float buf_depth = texture(sampler2D(t_src_depth, s_src_depth), uv).x * 2.0 - 1.0; float buf_depth = texture(sampler2D(t_src_depth, s_src_depth), uv).x;
mat4 inv = view_mat_inv * proj_mat_inv;//inverse(all_mat); mat4 inv = view_mat_inv * proj_mat_inv;//inverse(all_mat);
vec4 clip_space = vec4((uv * 2.0 - 1.0) * vec2(1, -1), buf_depth, 1.0); vec4 clip_space = vec4((uv * 2.0 - 1.0) * vec2(1, -1), buf_depth, 1.0);
vec4 view_space = inv * clip_space; vec4 view_space = inv * clip_space;

View File

@ -149,30 +149,6 @@ vec3 _illuminate(float max_light, vec3 view_dir, /*vec3 max_light, */vec3 emitte
// return /*srgb_to_linear*/(/*0.5*//*0.125 * */vec3(pow(color.x, gamma), pow(color.y, gamma), pow(color.z, gamma))); // return /*srgb_to_linear*/(/*0.5*//*0.125 * */vec3(pow(color.x, gamma), pow(color.y, gamma), pow(color.z, gamma)));
} }
/*
float depth_at(vec2 uv) {
float buf_depth = texture(src_depth, uv).x;
vec4 clip_space = vec4(uv * 2.0 - 1.0, buf_depth, 1.0);
vec4 view_space = proj_mat_inv * clip_space;
view_space /= view_space.w;
return -view_space.z;
}
vec3 wpos_at(vec2 uv) {
float buf_depth = texture(src_depth, uv).x * 2.0 - 1.0;
mat4 inv = view_mat_inv * proj_mat_inv;//inverse(all_mat);
vec4 clip_space = vec4(uv * 2.0 - 1.0, buf_depth, 1.0);
vec4 view_space = inv * clip_space;
view_space /= view_space.w;
if (buf_depth == 1.0) {
vec3 direction = normalize(view_space.xyz);
return direction.xyz * 100000.0 + cam_pos.xyz;
} else {
return view_space.xyz;
}
}
*/
void main() { void main() {
// TODO: precompute in the vertex shader? // TODO: precompute in the vertex shader?
vec2 uv = (f_pos + 1.0) * 0.5; vec2 uv = (f_pos + 1.0) * 0.5;

View File

@ -23,19 +23,13 @@ layout(location = 0) in vec3 v_pos;
layout(location = 0) out vec3 f_pos; layout(location = 0) out vec3 f_pos;
void main() { void main() {
/* vec3 v_pos = v_pos;
v_pos.y = -v_pos.y; */
f_pos = v_pos; f_pos = v_pos;
// TODO: is this todo below still valid? is cam_pos jittery
// TODO: Make this position-independent to avoid rounding error jittering // TODO: Make this position-independent to avoid rounding error jittering
gl_Position = gl_Position =
/* proj_mat *
view_mat * */
all_mat * all_mat *
/* proj_mat * vec4(v_pos + cam_pos.xyz, 1);
view_mat * */
vec4(/*100000 * */v_pos + cam_pos.xyz, 1);
// vec4(v_pos * (100000.0/* + 0.5*/) + cam_pos.xyz, 1);
// gl_Position = vec4(gl_Position.xy, sign(gl_Position.z) * gl_Position.w, gl_Position.w); // gl_Position = vec4(gl_Position.xy, sign(gl_Position.z) * gl_Position.w, gl_Position.w);
gl_Position.z = gl_Position.w; gl_Position.z = gl_Position.w;
// gl_Position.z = gl_Position.w - 0.000001;//0.0; // gl_Position.z = gl_Position.w - 0.000001;//0.0;

View File

@ -5,7 +5,7 @@ use super::{
instances::Instances, instances::Instances,
model::{DynamicModel, Model, SubModel}, model::{DynamicModel, Model, SubModel},
pipelines::{ pipelines::{
clouds, figure, fluid, particle, postprocess, sprite, terrain, ui, ColLights, clouds, figure, fluid, particle, postprocess, skybox, sprite, terrain, ui, ColLights,
GlobalsBindGroup, Light, Shadow, GlobalsBindGroup, Light, Shadow,
}, },
}, },
@ -137,18 +137,12 @@ pub struct FirstPassDrawer<'a> {
} }
impl<'a> FirstPassDrawer<'a> { impl<'a> FirstPassDrawer<'a> {
/*pub fn draw_skybox<'b: 'a>( pub fn draw_skybox<'b: 'a>(&mut self, model: &'b Model<skybox::Vertex>) {
&mut self,
model: &'b Model,
globals: &'b Consts<Globals>,
verts: Range<u32>,
) {
self.render_pass self.render_pass
.set_pipeline(&self.renderer.skybox_pipeline.pipeline); .set_pipeline(&self.renderer.skybox_pipeline.pipeline);
self.render_pass.set_bind_group(0, &globals.bind_group, &[]); self.render_pass.set_vertex_buffer(0, model.buf().slice(..));
self.render_pass.set_vertex_buffer(0, &model.vbuf, 0, 0); self.render_pass.draw(0..model.len() as u32, 0..1);
self.render_pass.draw(verts, 0..1); }
}*/
pub fn draw_figure<'b: 'a>( pub fn draw_figure<'b: 'a>(
&mut self, &mut self,

View File

@ -140,7 +140,7 @@ impl Camera {
self.dependents.proj_mat_inv = self.dependents.proj_mat.inverted(); self.dependents.proj_mat_inv = self.dependents.proj_mat.inverted();
// TODO: Make this more efficient. // TODO: Make this more efficient.
self.dependents.cam_pos = Vec3::from(self.dependents.view_mat.inverted() * Vec4::unit_w()); self.dependents.cam_pos = Vec3::from(self.dependents.view_mat_inv * Vec4::unit_w());
self.frustum = Frustum::from_modelview_projection( self.frustum = Frustum::from_modelview_projection(
(self.dependents.proj_mat (self.dependents.proj_mat
* self.dependents.view_mat * self.dependents.view_mat
@ -148,7 +148,7 @@ impl Camera {
.into_col_arrays(), .into_col_arrays(),
); );
self.dependents.cam_dir = Vec3::from(self.dependents.view_mat.inverted() * -Vec4::unit_z()); self.dependents.cam_dir = Vec3::from(self.dependents.view_mat_inv * -Vec4::unit_z());
} }
pub fn frustum(&self) -> &Frustum<f32> { &self.frustum } pub fn frustum(&self) -> &Frustum<f32> { &self.frustum }

View File

@ -1034,7 +1034,7 @@ impl Scene {
self.lod.render(renderer, global);*/ self.lod.render(renderer, global);*/
// Render the skybox. // Render the skybox.
// TODO: renderer.render_skybox(&self.skybox.model, global, lod); drawer.draw_skybox(&self.skybox.model);
/*self.terrain.render_translucent( /*self.terrain.render_translucent(
renderer, renderer,

View File

@ -353,6 +353,10 @@ impl Scene {
body: Option<humanoid::Body>, body: Option<humanoid::Body>,
inventory: Option<&Inventory>, inventory: Option<&Inventory>,
) { ) {
// TODO: can probably be drawn last but it crashes when drawn first and we
// should figure that out
// drawer.draw_skybox(&self.skybox.model);
if let Some(body) = body { if let Some(body) = body {
let model = &self.figure_model_cache.get_model( let model = &self.figure_model_cache.get_model(
&self.col_lights, &self.col_lights,