Skip to content

Commit

Permalink
Coordinates system should now be simplified and easier to manipulate
Browse files Browse the repository at this point in the history
  • Loading branch information
vhiribarren committed Jan 8, 2024
1 parent 1831ffd commit 346b8d8
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 21 deletions.
30 changes: 12 additions & 18 deletions src/app/raymarching/value-noise-field/fragment.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,12 @@ float field_height(vec2 uv) {
vec3 raymarch_scene(vec3 ray_origin, vec3 ray_direction) {
float raymarch_dist = 0.0;
vec3 color = vec3(0.0, 0.0, 0.0);
float previous_y = 0.0;
float previous_z = 0.0;
float previous_dist = 0.0;
for (int i=0; i<u_raymarch_max_steps; i++ ) {
vec3 scan_pos = ray_origin + raymarch_dist * ray_direction;
float field_y = field_height(scan_pos.xz);
if (scan_pos.y <= field_y) {
float field_z = field_height(scan_pos.xy);
if (scan_pos.z <= field_z) {
return vec3(1.0 - float(i) / float(u_raymarch_max_steps));
}
if (u_with_gizmos) {
Expand All @@ -80,7 +80,7 @@ vec3 raymarch_scene(vec3 ray_origin, vec3 ray_direction) {
color = max(color, vec3(0.0, 1.0, 1.0));
}
}
previous_y = field_y;
previous_z = field_z;
previous_dist = raymarch_dist;
if (u_with_linear_steps) {
raymarch_dist += u_raymarch_delta * float(i) ; // Trick from https://iquilezles.org/articles/terrainmarching/
Expand All @@ -96,16 +96,16 @@ vec3 raymarch_scene(vec3 ray_origin, vec3 ray_direction) {
void main() {
vec2 size = gl_FragCoord.xy / v_uv;
float ratio = size.x / size.y;
vec2 canvas_local_pos = (v_uv -0.5) * 2.0; // center coordinates
canvas_local_pos *= vec2(ratio, 1.0); // fix width
vec2 canvas_local_pos = (v_uv -0.5) * 2.0; // center coordinates, y and x in [-1, 1]
canvas_local_pos *= vec2(ratio, 1.0); // fix width, x in [-ratio, ratio] to adapt screen

// Prepare camera rotation matrices
float yc = cos(radians(u_yaw));
float ys = sin(radians(u_yaw));
mat3 yam_rotation = mat3(
yc, 0.0, -ys,
0.0, 1.0, 0.0,
ys, 0.0, yc
yc, ys, 0.0,
-ys, yc, 0.0,
0.0, 0.0, 1.0
);
float pc = cos(radians(u_pitch));
float ps = sin(radians(u_pitch));
Expand All @@ -114,22 +114,16 @@ void main() {
0.0, pc, ps,
0.0, -ps, pc
);
mat3 camera_transform = yam_rotation * pitch_rotation;

// Camera parameters
float canvas_distance = u_focal_length;
vec3 camera_eye = vec3(u_shift_x, u_shift_y, u_shift_z);
vec3 camera_target = camera_eye + pitch_rotation * yam_rotation * vec3(0.0, 0.0, -canvas_distance);


// Transform canvas coordinates
vec3 camera_axis_z = normalize(camera_target - camera_eye);
vec3 camera_axis_x = normalize(cross(camera_axis_z, vec3(0.0, 1.0, 0.0)));
vec3 camera_axis_y = normalize(cross(camera_axis_x, camera_axis_z));
mat3x3 camera_transform = mat3x3(camera_axis_x, camera_axis_y, camera_axis_z);
vec3 camera_direction = camera_transform * vec3(0.0, 1.0, 0.0);

// Prepare rays
vec3 ray_origin = camera_eye;
vec3 ray_dir = normalize(camera_transform * vec3(canvas_local_pos, canvas_distance));
vec3 ray_dir = normalize(camera_transform * vec3(canvas_local_pos.x, canvas_distance, canvas_local_pos.y));

// Cast rays
vec3 color = raymarch_scene(ray_origin, ray_dir);
Expand Down
6 changes: 3 additions & 3 deletions src/app/raymarching/value-noise-field/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ function ValueNoiseRaymarchControl({controlUiTunnel}: FragmentLogic) {
const [gain, setGain] = useUniform("u_gain", 0.5);

const [raymarchMaxSteps, setRaymarchMaxSteps] = useUniform("u_raymarch_max_steps", 50);
const [raymarchDelta, setRaymarchDelta] = useUniform("u_raymarch_delta", 0.001);
const [raymarchDelta, setRaymarchDelta] = useUniform("u_raymarch_delta", 0.01);
const [withLinearSteps, setWithLinearSteps] = useUniform("u_with_linear_steps", true);

const [focalLength, setFocalLength] = useUniform("u_focal_length", 1.0);
const [shiftX, setShiftX] = useUniform("u_shift_x", 0.0);
const [shiftY, setShiftY] = useUniform("u_shift_y", 1.5);
const [shiftZ, setShiftZ] = useUniform("u_shift_z", -2.0);
const [shiftY, setShiftY] = useUniform("u_shift_y", 0.0);
const [shiftZ, setShiftZ] = useUniform("u_shift_z", 2.0);

const [pitch, setPitch] = useUniform("u_pitch", 0.0);
const [yaw, setYaw] = useUniform("u_yaw", 0.0);
Expand Down

0 comments on commit 346b8d8

Please sign in to comment.