3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubActions + Blender で GitHub Profile に 3D の草を生やしてみた!

Last updated at Posted at 2024-11-09

image.png

草が少なくてお恥ずかしい

これは何

GitHub Contributions (いわゆる草) をもとに 3D の草を生やし, 画像として出力する GitHub Actions を作りました. GitHub Profile に配置したりできます.
名前は, 安直ですが cgrass (Contribution to 3D Grass) にしました.

処理のざっくり説明

作成に当たって, GitHub Actions と Blender Python を使用しました.

Blender Python では, オブジェクトの配置やマテリアルの適用, レンダー部分を行います. 外部の blend ファイルを読み込み, オブジェクトやマテリアルをインポートできます. よって, オブジェクト自体は Blender 上で予め作成しておけば, Python 側の処理は単純にできます.

GitHub Actions では, Blender のインストールと Blender Python の実行を行います. Blender のインストールは 40 秒ほどかかりますが, キャッシュが効くので 2 度目以降は大丈夫です. Blender Python の実行には 30 秒ほどかかりますが, 仕方ないですね.

※この記事では実装に関することについては触れませんが, ソースコードは公開しています.

↓GitHub Repository

↓Marketplace

使い方

1. プロフィールページを作成します

GitHub で使用しているユーザネームと同じ名前のリポジトリを作成します.
GitHub のユーザネームが nrysk なら, そのまま nrysk というリポジトリを作成します.

2. ワークフローを作成します

.github/workflows/cgrass.yml という名前のファイルを作成します.

.github/workflows/cgrass.yaml
name: Generate Picture and Push to output branch

on:
    push:
        branches:
            - main
    schedule:
        - cron: '0 0 * * *' # 好きな時刻にしてください
    
permissions:
    contents: write

jobs:
    generate:
        runs-on: ubuntu-24.04

        steps:
          - name: Checkout
            uses: actions/checkout@v4

          - name: Generate Picture
            uses: nrysk/cgrass@v1.0.0
            with:
                github_username: ${{ github.repository_owner }}
                github_token: ${{ secrets.GITHUB_TOKEN }}
                output_path: output/output.png
                command: "theme"
                argument: "github"

          - name: Push output image to output branch
            uses: crazy-max/ghaction-github-pages@v4
            with:
                target_branch: output
                build_dir: output
                commit_message: "Generate Output Image"
            env:
                GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

push (GitHub 上なら Commit) をすると, GitHub Actions が動作します.
Action が完了すると, output ブランチに生成された画像が配置されます.
稀ですが, Segmentation Fault を起こした場合は, 再実行してください.

3. テーマを変更する

argument に渡す文字列を変更することで, テーマを切り替えられます.

.github/workflows/cgrass.yaml
  - name: Generate Picture
    uses: nrysk/cgrass@v1.0.0
    with:
        github_username: ${{ github.repository_owner }}
        github_token: ${{ secrets.GITHUB_TOKEN }}
        output_path: output/output.png
        command: "theme"
        argument: "github" # ここを変更する

github

github.png

github-nograss

github-nograss.png

planet

planet.png

planet-nograss

planet-nograss.png

4. プロフィールに画像を載せる

画像は output ブランチに生成されます. デフォルトでは output.png というファイルが生成されます.
プロフィールの README.md に以下を記述することで, 画像を表示できます.
<username> 部分はご自身のユーザ名で置き換えてください.

README.md
![Contribution to Grass](https://raw.githubusercontent.com/<username>/<username>/refs/heads/output/output.png)

これでできるはずです.

オリジナルテーマを作成する場合

command 部分を "themefile" とすることで, テーマファイルパスを直接指定することができます. argument にテーマファイルへのパスを設定してください.
例えば, プロジェクトルートに mytheme.toml を作成したとします.

.github/workflow/cgrass.yaml
  - name: Generate Picture
    uses: nrysk/cgrass@v1.0.0
    with:
        github_username: ${{ github.repository_owner }}
        github_token: ${{ secrets.GITHUB_TOKEN }}
        output_path: output/output.png
        command: "themefile" # ここを変更する
        argument: ${{ github.workspace }}/mytheme.toml # ここを変更する

テーマファイルの例は mytheme.toml から見られます.

テーマファイルで設定できること

現時点 (v1.0.0) では, 以下が変更できます.

  • 地面の色1
  • 地面の色2
  • 草の色1
  • 草の色2
  • 草の密度
  • 草の高さ倍率
  • 太陽の色
  • 太陽の強さ
  • 太陽の角度
  • レンダリングのサンプル回数

※地面と草は Contribution Level 毎に設定できます.

最後に

現時点では, 最小限の機能しか備えられておりません.
今後は

  • アニメーション
  • テーマファイル
  • テーマファイルを簡単に作れるサイト
  • Contribution の種類に応じて草の種類を変える
    などの機能を追加したいと考えています.

最後に, 感想など頂けると励みになります

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?