23
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MIERUNEAdvent Calendar 2024

Day 2

雲海を見てみたい(Rのrayshaderを試してみる)

Last updated at Posted at 2024-12-01

はじめに

みたことありますか?雲海。

眼下に広がる壮大な雲の海。是非とも人生に一度は見てみたい光景ですよね。

気象条件が揃うと日本でもさまざまな場所で見られます。
北海道ならトマムや斜路湖周辺も雲海が見られるスポットとして有名です。
今年8月に会社の人たちと屈斜路湖行くことがあったので雲海を見られるか期待したのですが、残念ながら見事に地表面を拝む結果となりました。

IMG_6961.JPG
(綺麗に晴れ渡った屈斜路湖)

どうしても雲海を見たい。
そんな時に紹介したいのが、Rのライブラリ「rayshader」。
rayshaderは地形データの3D表現に長けたライブラリです 。
image.png

地形の立体表現のほか、影や雲の表現も可能なのです。
今回はrayshaderの使い方をまとめながら、屈斜路湖の雲海を再現してみたいと思います。

マップの作成

library(rayshader)

localtif = raster::raster("dem.tif")

# マトリックスの作成
elmat = raster_to_matrix(localtif)

# 画像の出力
elmat %>%
  sphere_shade(texture = "desert",sunangle=0 ,zscale = 1) %>%
  plot_map()

image.png

水域の表現

elmat %>%
  sphere_shade(texture = "desert",sunangle=0 ,zscale = 1) %>%
  add_water(detect_water(elmat,zscale=1), color = "desert") %>%
  plot_map()

  • sunangle:太陽の方位
  • zscale:高さのスケール
  • sphere_shadeのtextureとadd_waterのcolor:配色の指定。imhof1,imhof2,imhof3,imhof4,desert, bw,unicornが使えます

image.png

影をつける

elmat %>%
  sphere_shade(texture = "desert") %>%
  add_water(detect_water(elmat), color = "desert") %>%
  add_shadow(ray_shade(elmat, sunaltitude=0,sunangle=200), 0.41) %>%
  plot_map()

image.png

3Dビューアーで表示

3Dビューアーで表示することで、マウスでグリグリ動かすことができるようになります。

elmat %>%
  sphere_shade(texture = "desert") %>%
  add_water(detect_water(elmat), color = "desert") %>%
  add_shadow(ray_shade(elmat, zscale = 3), 0.5) %>%
  plot_3d(elmat, zscale = 20,baseshape = "rectangle",fov = 0, theta = 135, zoom = 0.75, phi = 45, windowsize = c(300, 300))

image.png

baseshapeは、rectanglecirclehexから基盤の形状を変更できます。

image.png

雲表現

雲の表現はrender_cloudsで追加することができます。

elmat %>%
  sphere_shade(texture = "desert") %>%
  add_water(detect_water(elmat), color = "desert") %>%
  add_shadow(ambient_shade(elmat), 0) %>%
  plot_3d(elmat, zscale = 20,baseshape = "hex",fov = 0, theta = 135, zoom = 0.75, phi = 45, windowsize = c(300, 300))
render_clouds(elmat, zscale = 6, start_altitude = 100, end_altitude = 200, sun_altitude = 45, attenuation_coef = 2, offset_y = 200,cloud_cover = 0.45, frequency = 0.01, scale_y=3, fractal_levels = 32, clear_clouds = T,baseshape = "hex")

image.png

  • zscale = 5
  • start_altitude:雲の最下層高度
  • end_altitude:雲の最上層高度
  • sun_altitude:太陽高度(0〜90で指定)
  • cloud_cover = 雲の多さ(0~1で指定)
  • scale_y=3, fractal_levels = デフォルトは16。値が高いほど構造が細かくなるが、計算に時間がかかります
    そのほかのパラメータについてはドキュメントをご覧ください。

地図の装飾

# スケールバー
render_scalebar(limits=c(0, 5, 10),label_unit = "km",position = "W", y=50,scale_length = c(0.3,0.9))

#コンパス
render_compass(position = "N",altitude = 200)

image.png

以上、rayshader活用して、無事に屈斜路湖の雲海を拝むことができました。

image.png

めでたし、めでたし
(いつかはちゃんと本物の雲海を見てみたいな)

23
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?