"回転する地球義”でアニメーションロゴをつくってみた

## はじめに

以下の記事で全球の温度変化を平面マップ上でアニメーションする方法を紹介しました。

https://cci-labo.hateblo.jp/entry/2023/09/05/144433

地球は球形なので球として可視化したい！と、方法を探していたら、このような動画を発見。

https://youtu.be/K0iGObU1-TQ

GIMPならインストールしてあるのでできる！
まずは手始めに本研究室のロゴを回転させてみました。

## 背景マップの作成

Natural Earthデータを利用して、背景図を作ります。

![basemap.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/299d11bd-3105-bf60-a0b8-a6b05701d607.jpeg)

「プロジェクト」→「インポートとエクスポート」→「地図を画像にエクスポート」で地図を画像として保存します。

<img width=300 alt="QGIS_save_image.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/93f7fa04-22f0-41c6-df40-9678854f619d.jpeg">

## ロゴの描画とアスペクトの変更

GIMPに読み込み、ロゴを描画します。

![GIMP_base_logo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/280b198b-1ed0-c1eb-dfb5-9bdb2a42e4e6.jpeg)

縦横サイズが同じ画像に変換します。　ここでは、マップの縦軸に合わせて、472x472pxの画像に変換しました。

<img width=300 alt="GIMP_Sclae_image.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/f14270f3-431c-4e7a-5b06-9c32ff18c2e0.jpeg">

![GIMP_logo_scaled.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/dc82ad00-5de7-5a0a-3b7a-c08f21d9e4ae.jpeg)

## 球体へ貼り付け
「Filters」→「Map」→「Map Object」でMap to Objectウィンドウを立ち上げます。

1. Opthonsタブの設定
    - Map to: Sphere
    - Transparent background にチェック
    - Create new layerにチェック
    - Enable antialiasingにチェック
    - Depth : 3.0
    - Threshold : 0.25
    <img width=300 alt="GIMP_Mapobject_Options.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/efe6a8a0-b426-a157-6422-51c275d92448.jpeg">

1. Lightタブの設定
    - Lightsource type : Point light
    - Lightsource color : 白
    - Position: X:0.5 Y:0.5 Z:20
    <img width=300 alt="GIMP_Mapobject_Light.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/4d9b311a-3779-5670-1af1-d2c5eea22436.jpeg">

1. Materialタブの設定
    - Intensity Lebels:
        - Ambient: 0.5
        - Diffuse: 0.8
    - Refrectivity:
        - Diffuse: 0.4
        - Specular: 0.0
        - Highlight: 27.0
    <img width=300 alt="GIMP_Mapobject_Material.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/4bac40ea-6ea4-37f8-f78d-3e6ac7c21ce1.jpeg">

1. Orientationタブの設定
    - Position: X:0.5 Y:0.5 Z:0.9
    - Rotation: X:0.0 Y:-180.0 Z:30.0
    <img width=300 alt="GIMP_Mapobject_Orient.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/b75ddfa3-fb27-5305-1af4-2eb7ae1b26cf.jpeg">

マップが球に貼り付けられます。
あとは0.5度ずつずらしたレイヤを作っていきます。

## 球体への貼り付け作業を自動化する

とはいえ、0.5刻みで360度分、720レイヤをマウスでポチポチするのは辛いので、自動で処理するスクリプトを作成しました。

```scheme:LnogLatMap_to_RoteteEarth.scm
(define (script-fu-rotateearth img src-layer)

    (define (undo-group fn)
        (gimp-image-undo-group-start img)
        (fn)
        (gimp-image-undo-group-end img)
    )

    (let ((rotate_y -180.0)
          (new_layer 0))
        (while (< rotate_y 180.0) 
            (set! new_layer (car(gimp-layer-copy src-layer TRUE)))
            (gimp-layer-set-name new_layer (string-append "sphere " (number->string rotate_y)))
            (gimp-image-add-layer img new_layer 0)
            (plug-in-map-object 1 img new_layer 
                1  ; Type of mapping (0=plane,1=sphere,2=box,3=cylinder)
                0.5 0.5 20.0 ; viewpoint
                0.5 0.5 0.0  ; object pos
                0 0 0 0 0 0  ; axis
                0 rotate_y 30 ; axis rotation
                0 '(255 255 255) ; light souce
                0.5 0.5 10 ; light position
                -1 -1 1 ; light direction
                0.5 0.8 ; Intensity Lebels
                0.4 0 27.0 ; Refrectivity
                TRUE FALSE FALSE TRUE ; Opthons
                0.48 ; radius
                0.5 0.5 0.5 ;box size
                1.0 -1 -1 -1 -1 -1 -1 -1 -1 ;box setting
            )
            (set! rotate_y (+ rotate_y 0.5))
        )
    )
)

(script-fu-register
 "script-fu-rotateearth"                        ;func name
 "RotateEarth"                                  ;menu label
 "正距円筒図法のマップから回転する地球を作成"  ;description
 "ccilobo"                             ;author
 "copyright 2023, ccilabo"        ;copyright notice
 "Sep 4, 2023"                          ;date created
 ""                     ;image type that the script works on
 SF-IMAGE       "Image" 0
 SF-DRAWABLE    "Drawable" 0
 )

(script-fu-menu-register "script-fu-rotateearth" "<Image>/Script-Fu/CCILabo")
```

GIMPのマニュアルに従い、

https://docs.gimp.org/2.10/ja/gimp-scripting.html

~/.config/GIMP/2.10/scripts/　にLnogLatMap_to_RoteteEarth.scmとして保存してから「Filters」→「Script-Fu」→「Refresh Scripots」でGIMPに登録しました。

# 回転する地球儀アニメーションの作成

貼り付けるマップを作り、「Script-Fu」→「CCILabo」→「RotateEarth」を実行すると、720コマのレイヤが作成されます。

![GIMP_layers.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/7c1e3b1a-7a40-a726-3627-c99a3e3cd965.jpeg)

ベースレイヤを削除してから「Filters」→「Animation」→「Optimize (for GIF)」でアニメーションGIF用の最適化フイルタをかけます。

背景レイヤを追加して、GIF形式で保存します。

<img width=300 alt="GIMP_save_AS_GIF.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/ff6e7e76-449f-11a5-c365-77a8a2cc1f32.jpeg">
<img width=200 alt="GIMP_export_image_as_gif.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/7567ed27-07be-d289-4e09-2876640e3644.jpeg">

GIFアニメーションができました！

![logo_gray_space_05deg_reduce.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511025/178a7343-55bf-9663-9b22-5b5f91dfe7fd.gif)

##  
　
（個人）気候変化情報研究室では、できるだけ簡単に、将来、地域の気候がどのように変化するかを示すグラフ・地図を作成する方法を開発し、紹介しています。
興味のある方はぜひ読んでみてくださいね～。

https://cci-labo.hateblo.jp/