rayshader icon indicating copy to clipboard operation
rayshader copied to clipboard

render_highquality animation. type="bezier" causes overlays to be ignored when frames gets large.

Open apsteinmetz opened this issue 10 months ago • 1 comments

The code below produces a render with the overlay ignored. The plot_3d() window looks fine. The render is correct if curve type="cubic" OR the number of frames is "small." I don't know what the cutoff number of frames is.

library(rayshader)
library(elevatr)
library(png)
library(sf)
library(terra)
library(raster)
library(osrm)
library(maptiles)
library(tidyverse)


start_point <- c(-74.2548014,41.0248253) # where skyline drive meets i-287
end_point <- c(-74.28869990,41.22772724) # north end of windermere ave. in Greenwood Lake
full_extent <- ext(-8278678.63106571, -8264262.03289493, 5015662.67345158, 5049556.38996736)
map_ras <- rast(extent = full_extent, crs="EPSG:3857")

# get basemap tiles
gwl_basemap <- maptiles::get_tiles(map_ras,
                                   provider="Thunderforest.Outdoors",
                                   crop = TRUE,
                                   zoom = 14,
                                   apikey = Sys.getenv("THUNDERFOREST_KEY"))


terra::writeRaster(gwl_basemap,"img/gwl_basemap.png",overwrite=TRUE)
gwl_png <- readPNG("img/gwl_basemap.png")


gwl_route_detailed <- osrm::osrmRoute(start_point,end_point,overview = "full") |> 
  st_transform(crs(map_ras))

raw_elevation <- get_elev_raster(raster(map_ras),z = 12)
elevation <- raw_elevation |> 
  rast() |> 
  terra::crop(map_ras)

elev_matrix <- elevation |> 
  raster_to_matrix()

route_overlay <- generate_line_overlay(gwl_route_detailed,
                                       map_ras,
                                       # dimensions same as image overlay, otherwise jaggy
                                       width = 1510,
                                       height = 3549,
                                       color = "red",
                                       linewidth = 2)

shadow_lamb <- lamb_shade(elev_matrix)
shadow_ray <- ray_shade(elev_matrix,lambert=FALSE)
shadow_ambient <- ambient_shade(elev_matrix)

elev_matrix |> 
  sphere_shade() |> 
  add_overlay(gwl_png,rescale_original = TRUE) |> 
  add_shadow(shadow_ray) |> 
  add_shadow(shadow_lamb) |> 
  add_shadow(shadow_ambient) |> 
  add_overlay(route_overlay) |> 
  plot_3d(elev_matrix,zscale = 7)

camera_coords <-
  convert_path_to_animation_coords(
    gwl_route_detailed,
    extent = full_extent,
    heightmap = elev_matrix,
    zscale = 7,
    resample_path_evenly = TRUE,
    offset = 10,
    offset_lookat = 10,
    altitude = 400,
    follow_camera = TRUE,
    follow_distance = 100,
    follow_fixed = FALSE,
    follow_angle = 15,
    damp_motion = TRUE,
    damp_magnitude = 1,
    type="bezier",
    curvature_adjust = "both",
    frames = 600,
  )
render_highquality(animation_camera_coords = camera_coords, width=800, height=800,
                   samples=128, line_radius=0.5, sample_method = "sobol_blue",
                   ambient_light = TRUE,
                   filename="frames/gwl_")

Here is the first frame:

gwl_1_bad

New coords with default curve type. Everything else the same.

camera_coords <-
  convert_path_to_animation_coords(
    gwl_route_detailed,
    extent = full_extent,
    heightmap = elev_matrix,
    zscale = 7,
    resample_path_evenly = TRUE,
    offset = 10,
    offset_lookat = 10,
    altitude = 400,
    follow_camera = TRUE,
    follow_distance = 100,
    follow_fixed = FALSE,
    follow_angle = 15,
    damp_motion = TRUE,
    damp_magnitude = 1,
    # type="bezier",
    # curvature_adjust = "both",
    frames = 600,
  )

gwl_1_good

> sessionInfo()
R version 4.3.0 (2023-04-21 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 11 x64 (build 22621)

Matrix products: default


locale:
[1] LC_COLLATE=English_United States.utf8  LC_CTYPE=English_United States.utf8    LC_MONETARY=English_United States.utf8
[4] LC_NUMERIC=C                           LC_TIME=English_United States.utf8    

time zone: America/New_York
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] raster_3.6-23    sp_2.0-0         lubridate_1.9.2  forcats_1.0.0    stringr_1.5.0    dplyr_1.1.2      purrr_1.0.2     
 [8] readr_2.1.4      tidyr_1.3.0      tibble_3.2.1     ggplot2_3.4.3    tidyverse_2.0.0  maptiles_0.5.0   osrm_4.1.1      
[15] terra_1.7-39     sf_1.0-14        png_0.1-8        elevatr_0.4.5    rayshader_0.36.1

loaded via a namespace (and not attached):
 [1] gtable_0.3.4          xfun_0.40             htmlwidgets_1.6.2     lattice_0.21-8        tzdb_0.4.0           
 [6] vctrs_0.6.3           tools_4.3.0           generics_0.1.3        curl_5.0.2            parallel_4.3.0       
[11] rgl_1.2.1             proxy_0.4-27          fansi_1.0.4           pkgconfig_2.0.3       KernSmooth_2.23-20   
[16] lifecycle_1.0.3       compiler_4.3.0        googlePolylines_0.8.3 tictoc_1.2            progress_1.2.2       
[21] munsell_0.5.0         codetools_0.2-19      htmltools_0.5.6       class_7.3-21          rayimage_0.9.1       
[26] pillar_1.9.0          crayon_1.5.2          slippymath_0.3.1      rsconnect_1.0.2       classInt_0.4-9       
[31] magick_2.7.5          iterators_1.0.14      foreach_1.5.2         tidyselect_1.2.0      digest_0.6.33        
[36] stringi_1.7.12        fastmap_1.1.1         grid_4.3.0            colorspace_2.1-0      cli_3.6.1            
[41] magrittr_2.0.3        base64enc_0.1-3       utf8_1.2.3            e1071_1.7-13          RcppSimdJson_0.1.10  
[46] withr_2.5.0           prettyunits_1.1.1     scales_1.2.1          timechange_0.2.0      rayrender_0.30.0     
[51] httr_1.4.7            progressr_0.14.0      hms_1.1.3             knitr_1.43            rayvertex_0.8.2      
[56] rgdal_1.6-7           doParallel_1.0.17     rlang_1.1.1           Rcpp_1.0.11           isoband_0.2.7        
[61] glue_1.6.2            DBI_1.1.3             mapiso_0.3.0          rstudioapi_0.15.0     jsonlite_1.8.7       
[66] R6_2.5.1              units_0.8-3  

apsteinmetz avatar Sep 01 '23 21:09 apsteinmetz