Compare commits
No commits in common. "cb500033c06e041e976558593fb8dbd879077c26" and "b59d0b1a1019d45efe587f2e9e2a5c89501a2adb" have entirely different histories.
cb500033c0
...
b59d0b1a10
|
|
@ -1,4 +1,4 @@
|
|||
use std::{env, error::Error};
|
||||
use std::error::Error;
|
||||
|
||||
use glam::{mat3, vec2, vec3, Mat3, Vec3};
|
||||
use image::buffer::ConvertBuffer;
|
||||
|
|
@ -16,8 +16,6 @@ fn make_viewport(m: Mat3) -> [Vertex; 4] {
|
|||
}
|
||||
|
||||
fn main() {
|
||||
let args: Vec<_> = env::args().collect();
|
||||
let extent = args.get(1).and_then(|s| s.parse().ok()).unwrap_or(EXTENT);
|
||||
let (device, queue) = pollster::block_on(init_gpu()).unwrap();
|
||||
|
||||
let format = wgpu::TextureFormat::Rgba8UnormSrgb;
|
||||
|
|
@ -32,16 +30,16 @@ fn main() {
|
|||
let faces = [
|
||||
mat3(-Vec3::Z, -Vec3::Y, Vec3::X),
|
||||
mat3(Vec3::Z, -Vec3::Y, -Vec3::X),
|
||||
mat3(Vec3::X, -Vec3::Z, -Vec3::Y),
|
||||
mat3(Vec3::X, Vec3::Z, Vec3::Y),
|
||||
mat3(Vec3::X, -Vec3::Z, -Vec3::Y),
|
||||
mat3(Vec3::X, -Vec3::Y, Vec3::Z),
|
||||
mat3(-Vec3::X, -Vec3::Y, -Vec3::Z),
|
||||
];
|
||||
let output = device.create_texture(&wgpu::TextureDescriptor {
|
||||
label: None,
|
||||
size: wgpu::Extent3d {
|
||||
width: extent,
|
||||
height: extent,
|
||||
width: EXTENT,
|
||||
height: EXTENT,
|
||||
depth_or_array_layers: 6,
|
||||
},
|
||||
mip_level_count: 1,
|
||||
|
|
@ -54,7 +52,7 @@ fn main() {
|
|||
let buffers = faces.map(|_| {
|
||||
device.create_buffer(&wgpu::BufferDescriptor {
|
||||
label: None,
|
||||
size: (4 * extent * extent) as u64,
|
||||
size: (4 * EXTENT * EXTENT) as u64,
|
||||
usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::MAP_READ,
|
||||
mapped_at_creation: false,
|
||||
})
|
||||
|
|
@ -99,13 +97,13 @@ fn main() {
|
|||
buffer: &buffer,
|
||||
layout: wgpu::ImageDataLayout {
|
||||
offset: 0,
|
||||
bytes_per_row: Some(4 * extent),
|
||||
rows_per_image: Some(extent),
|
||||
bytes_per_row: Some(4 * EXTENT),
|
||||
rows_per_image: Some(EXTENT),
|
||||
},
|
||||
},
|
||||
wgpu::Extent3d {
|
||||
width: extent,
|
||||
height: extent,
|
||||
width: EXTENT,
|
||||
height: EXTENT,
|
||||
depth_or_array_layers: 1,
|
||||
},
|
||||
);
|
||||
|
|
@ -119,7 +117,7 @@ fn main() {
|
|||
for (face, buf) in buffers.iter().enumerate() {
|
||||
s.spawn(move || {
|
||||
let img =
|
||||
image::RgbaImage::from_raw(extent, extent, buf.slice(..).get_mapped_range().to_vec()).unwrap();
|
||||
image::RgbaImage::from_raw(EXTENT, EXTENT, buf.slice(..).get_mapped_range().to_vec()).unwrap();
|
||||
let img: image::RgbImage = img.convert();
|
||||
img.save(format!("textures/env{face}.jpeg")).unwrap();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use std::error::Error;
|
||||
|
||||
use glam::{uvec2, vec2, vec3};
|
||||
use glam::{vec2, vec3};
|
||||
use image::ImageReader;
|
||||
use present::Presenter;
|
||||
use trace::{Tracer, TracerData, TracerEnv, Vertex};
|
||||
|
|
@ -17,13 +17,18 @@ mod trace;
|
|||
pub use trace::Sphere;
|
||||
|
||||
fn make_viewport(w: u32, h: u32) -> [Vertex; 4] {
|
||||
let size = uvec2(w, h).as_vec2();
|
||||
let size = size.normalize();
|
||||
let (w, h) = (size.x, size.y);
|
||||
let w = w as f32;
|
||||
let h = h as f32;
|
||||
let (w, h) = (1.0f32.max(w / h), 1.0f32.max(h / w));
|
||||
let r = 1.0f32;
|
||||
let screen_coord = [vec2(-1., -1.), vec2(1., -1.), vec2(-1., 1.), vec2(1., 1.)];
|
||||
let eye = vec3(-r, 0., 0.);
|
||||
let world_coord = [vec3(0., -w, -h), vec3(0., w, -h), vec3(0., -w, h), vec3(0., w, h)];
|
||||
let screen_coord = [vec2(-h, -w), vec2(h, -w), vec2(-h, w), vec2(h, w)];
|
||||
let eye = vec3(-r, 0.0, 0.0);
|
||||
let world_coord = [
|
||||
vec3(0.0, -1.0, -1.0),
|
||||
vec3(0.0, 1.0, -1.0),
|
||||
vec3(0.0, -1.0, 1.0),
|
||||
vec3(0.0, 1.0, 1.0),
|
||||
];
|
||||
[0, 1, 2, 3].map(|k| Vertex {
|
||||
eye,
|
||||
world: world_coord[k],
|
||||
|
|
|
|||
|
|
@ -12,20 +12,14 @@ struct Varying {
|
|||
|
||||
@vertex
|
||||
fn on_vertex(in: Vertex) -> Varying {
|
||||
let uv = in.screen;
|
||||
let xy = vec2(2. * uv.x - 1., 1. - 2. * uv.y);
|
||||
return Varying(uv, vec4(xy, 0., 1.));
|
||||
return Varying(in.screen, vec4(2.0 * in.screen - 1.0, 0.0, 1.0));
|
||||
}
|
||||
|
||||
@fragment
|
||||
fn on_fragment(in: Varying) -> @location(0) vec4f {
|
||||
let pixel = textureSample(tex, smp, in.tex);
|
||||
return vec4(rational_tone_map(pixel.xyz), 1.0);
|
||||
}
|
||||
|
||||
fn rational_tone_map(hdr: vec3<f32>) -> vec3<f32> {
|
||||
let hdr = textureSample(tex, smp, in.tex).xyz;
|
||||
let luminosity = dot(hdr, vec3(0.2126, 0.7152, 0.0722));
|
||||
let color = hdr / luminosity;
|
||||
let luma = luminosity / (luminosity + 1.0);
|
||||
return luma * color;
|
||||
return vec4(luma * color, 1.0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user