[{"data":1,"prerenderedAt":9322},["ShallowReactive",2],{"tag-count-blender-ja":3,"tag-blender-ja":4,"tags-sidebar-ja":18,"posts-tag-blender-ja-1":70,"tags-header-ja":9278,"tags-footer-ja":9300},15,{"id":5,"title":6,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":10,"meta":11,"navigation":12,"pageType":13,"path":14,"seo":15,"slug":10,"stem":16,"__hash__":17},"jsonPages/ja/tags/blender.json","Blender",null,"json","ja","blender",{"name":6},true,"tags","/ja/tags/blender",{},"ja/tags/blender","s4z5DotSr1p7Mg14_r6HHutTMqzvNFonyD_A2quT8xI",[19,22,30,38,46,54,62],{"id":5,"title":6,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":10,"meta":20,"navigation":12,"pageType":13,"path":14,"seo":21,"slug":10,"stem":16,"__hash__":17},{"name":6},{},{"id":23,"title":24,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":24,"meta":25,"navigation":12,"pageType":13,"path":26,"seo":27,"slug":24,"stem":28,"__hash__":29},"jsonPages/ja/tags/company.json","会社",{"name":24},"/ja/tags/company",{},"ja/tags/company","YM2CkWfBFOJet05_Rb6Ucf5-TzUendAmWVqASlGfSKc",{"id":31,"title":32,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":32,"meta":33,"navigation":12,"pageType":13,"path":34,"seo":35,"slug":32,"stem":36,"__hash__":37},"jsonPages/ja/tags/customer-stories.json","お客様事例",{"name":32},"/ja/tags/customer-stories",{},"ja/tags/customer-stories","uoSx-JR1O8hK5nH3Hk2ElbjvRitYGnTpIYQzQc9eT4Q",{"id":39,"title":40,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":40,"meta":41,"navigation":12,"pageType":13,"path":42,"seo":43,"slug":40,"stem":44,"__hash__":45},"jsonPages/ja/tags/glossary.json","用語集",{"name":40},"/ja/tags/glossary",{},"ja/tags/glossary","vyZu5vN-1gRjGuTaZNOLMCGduYntrw6VCvpmmA402Pc",{"id":47,"title":48,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":48,"meta":49,"navigation":12,"pageType":13,"path":50,"seo":51,"slug":48,"stem":52,"__hash__":53},"jsonPages/ja/tags/pipeline.json","パイプライン",{"name":48},"/ja/tags/pipeline",{},"ja/tags/pipeline","jgDgq8M2lQc4oHTpgVOGiCVHPE1MjJwO_3Q5kmuENAQ",{"id":55,"title":56,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":56,"meta":57,"navigation":12,"pageType":13,"path":58,"seo":59,"slug":56,"stem":60,"__hash__":61},"jsonPages/ja/tags/production-management.json","制作管理",{"name":56},"/ja/tags/production-management",{},"ja/tags/production-management","iiB4szWmr7_hZx-aVOXQy70yVrJIogzwYVRgejcnp_M",{"id":63,"title":64,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":64,"meta":65,"navigation":12,"pageType":13,"path":66,"seo":67,"slug":64,"stem":68,"__hash__":69},"jsonPages/ja/tags/resources.json","リソース",{"name":64},"/ja/tags/resources",{},"ja/tags/resources","tvx-FMl8FURm9Nc35OyIlHW5PaVLDJOJL6U0LSm5syI",[71,638,1433,1939,2663,3270,3996,4844,5584,6054,6577,7434,8006,8411,8690],{"id":72,"title":73,"authors":74,"body":80,"description":235,"extension":617,"feature_image":618,"html":7,"meta":619,"navigation":12,"path":623,"published_at":624,"seo":625,"slug":626,"stem":627,"tags":628,"__hash__":637,"updated_at":620,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/self-hosted-blender-render-farm/index.md","Flamencoを使って2026年に自宅ホスティングのBlenderレンダーファームを構築する",[75],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},"630632b2ca5910003d4a70af","Basile Samel","basile","https://blog.cg-wire.com/author/basile/",{"type":81,"value":82,"toc":606},"minimark",[83,100,104,107,110,113,116,127,130,135,138,151,162,169,176,178,182,190,196,199,201,205,208,224,241,243,247,272,275,285,288,296,298,302,309,312,315,323,329,331,335,338,368,378,384,404,407,416,418,422,425,431,443,446,484,494,501,518,520,523,533,536,549,551,555,561,564,567,570,577,595],[84,85,90,95],"div",{"className":86},[87,88,89],"kg-card","kg-callout-card","kg-callout-card-yellow",[84,91,94],{"className":92},[93],"kg-callout-emoji","🖥️",[84,96,99],{"className":97},[98],"kg-callout-text","クラウドに触れることなく、アイドル状態のマシンを強力なBlenderレンダーファームに変えましょう。",[101,102,103],"p",{},"レンダリングのせいで期限をほとんど逃しかけたのは、最後にいつでしたか？",[101,105,106],{},"Blenderを開くたびに、作業用ワークステーションの音が離陸準備をするジェットエンジンのようになり、何ヶ月分もの制作物がたった1つの進捗バーに人質にされます。",[101,108,109],{},"一方で、昔の大学ノートPCは箱の中でホコリをかぶっています。強力ではありませんがGPUはあります。RAMもあります。パニックしながら、まったく何もせずにいるだけの完全に機能するPCです。",[101,111,112],{},"「レンダーファーム」という概念は、1人規模のスタジオにとっては少し怖く聞こえるかもしれません。冷房の効いた部屋にサーバーラックが並び、高価なライセンス、そしてIPアドレスについて叫ぶIT担当者…そんな光景を想像するかもしれません。",[101,114,115],{},"しかし、現代のBlenderのエコシステムでは、それはもう現実ではありません。",[101,117,118,119,126],{},"この記事では、",[120,121,122,123],"strong",{},"古いデバイスを",[120,124,125],{},"Flamenco","で統一されたレンダリングシステムにする方法を説明します。ネットワーク設定の難しさを解きほぐし、数時間で複数のマシンでレンダリングできるようにします。",[128,129],"hr",{},[131,132,134],"h2",{"id":133},"why-self-host-a-render-farm","なぜレンダーファームをセルフホストするのか？",[101,136,137],{},"イーサネットケーブルを挿す前に、そもそもなぜやるべきなのかを話しましょう。「クラウドのファームに全部送ればいいのでは？」と思うかもしれません。クラウドファームは素晴らしいですが、ローカルのセルフホストレンダーファームは、ワークフローを3つの基本的な点で変えます。",[101,139,140,141,146,147,150],{},"クラウドファームにお金を払うとき、あなたは「最終出力」に対して支払っています。",[142,143,145],"a",{"href":144},"https://blog.cg-wire.com/blender-kitsu-low-res-preview/","心理的にテストレンダリングをしにくくなります","。",[120,148,149],{},"すべてが100%完璧だと確信できるまで「レンダー」を押すのが怖くなる","のです。",[101,152,153,154,146,158,161],{},"ファームを自分で所有していると、レンダリングのコストは電気代です。",[142,155,157],{"href":156},"https://blog.cg-wire.com/getting-started-with-blender-rendering/","タイミングやライティングを確認するために、解像度50%のラフなアニメーションをレンダリングできます",[120,159,160],{},"この自由によって、より速く反復できます。","当てずっぽうをやめて、テストを始められます。",[101,163,164,165,168],{},"時には、NDAのある技術クライアント向けの商業プロジェクトに取り組んでいて、製品名すら口にしてはいけないほど厳格な場合があります。",[120,166,167],{},"それらのアセットを第三者のクラウドサーバー（たとえ安全なものでも）にアップロードすると、厳格なNDA契約に違反する可能性があります。","データをローカルネットワーク（LAN）に保持しておけば、あなたがそう言うまで、スタジオからピクセルが外に出ることはありません。",[101,170,171,172,175],{},"2GBのプロジェクトファイルをクラウドにアップロードし、レンダリングが終わるのを待ち、フレームをダウンロードして、物理キャッシュを焼き忘れていたと気づく――その苦痛には特有のものがあります。",[120,173,174],{},"Flamencoのようなローカルファームなら、ミスを見つけたら「キャンセル」を押して直し、もう一度「レンダー」を押せば済みます。アップロード時間もダウンロード時間もありません。","まるでワークステーションの延長のように感じられます。",[128,177],{},[131,179,181],{"id":180},"what-is-blender-flamenco","Blender Flamencoとは？",[101,183,184,185,189],{},"スクラッチからレンダーファームを立ち上げるには ",[142,186,188],{"href":187},"https://blog.cg-wire.com/blender-programmatic-rendering/","かつては複雑なスクリプトが必要でした","し、または高価なサードパーティソフトウェアが必要でした。ところが今は、Blender Flamencoがあります。",[101,191,192,195],{},[120,193,194],{},"FlamencoはBlenderのオープンソースのレンダーファームです。","セットアップはとても簡単です。マネージャーが脳になってやるべきタスクのリスト（レンダリングするフレーム）を保持し、他のコンピュータに何をすべきかを伝えます。ワーカーは追加のノートPCやデスクトップです。ワーカーはマネージャーの指示を聞き、フレームを要求し、レンダリングして保存し、次のフレームをまた要求します。",[101,197,198],{},"Flamencoはゼロ設定で動くように設計されています。ほぼ自動でネットワーク上を見つけてくれます。Blenderをインストールできるなら、Flamencoもセットアップできます。",[128,200],{},[131,202,204],{"id":203},"_1-the-setup","1. セットアップ",[101,206,207],{},"このチュートリアルでは、マネージャーとワーカーの両方をデスクトップPCで兼ねる、最もシンプルな構成から始めます。後でノートPCを追加する方法も見ていきます。",[209,210,211,218],"ol",{},[212,213,214,217],"li",{},[120,215,216],{},"Blenderをインストール"," - コンピュータにBlenderがインストールされていることを確認してください。",[212,219,220,223],{},[120,221,222],{},"Flamencoをダウンロード"," - FlamencoのWebサイトにアクセスし、ご利用のOS用のパッケージをダウンロードします。フォルダに展開してください。",[225,226,229],"figure",{"className":227},[87,228],"kg-image-card",[230,231],"img",{"src":232,"className":233,"alt":235,"loading":236,"width":237,"height":238,"srcSet":239,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-cec7140f-c6aa-4e18-83fb-be86e5a39ac7.png",[234],"kg-image","","lazy",1064,721,"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-cec7140f-c6aa-4e18-83fb-be86e5a39ac7.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2026/01/data-src-image-cec7140f-c6aa-4e18-83fb-be86e5a39ac7.png 1000w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-cec7140f-c6aa-4e18-83fb-be86e5a39ac7.png 1064w","(min-width: 720px) 720px",[128,242],{},[131,244,246],{"id":245},"_2-run-flamenco-manager","2. Flamenco Managerを起動する",[209,248,249,252,259,262,265],{},[212,250,251],{},"展開したFlamencoフォルダを開きます。",[212,253,254,258],{},[255,256,257],"code",{},"flamenco-manager","をダブルクリックします。",[212,260,261],{},"いくつかのテキストログとともに、ターミナルウィンドウがポップアップします。",[212,263,264],{},"設定ウィザードを進めて、レンダリングするためにblendファイルをアップロードするジョブフォルダを作成します。",[212,266,267,268,271],{},"少ししてから、Webブラウザが自動的に ",[255,269,270],{},"http://localhost:8080"," を開くはずです。これがFlamencoのWebインターフェースです。",[101,273,274],{},"フレンドリーなダークテーマのダッシュボードが表示されたら、おめでとうございます。あなたはすでにサーバー管理者の半分を達成しています。Managerが起動しています。",[225,276,278],{"className":277},[87,228],[230,279],{"src":280,"className":281,"alt":235,"loading":236,"width":282,"height":283,"srcSet":284,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-ac803a05-e189-4c17-9fe9-d5749f916aa0.png",[234],1319,821,"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-ac803a05-e189-4c17-9fe9-d5749f916aa0.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2026/01/data-src-image-ac803a05-e189-4c17-9fe9-d5749f916aa0.png 1000w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-ac803a05-e189-4c17-9fe9-d5749f916aa0.png 1319w",[101,286,287],{},"マネージャーはアドオンのダウンロードを促します。それを今やってください。ステップ4で必要になります。",[225,289,291],{"className":290},[87,228],[230,292],{"src":293,"className":294,"alt":235,"loading":236,"width":237,"height":238,"srcSet":295,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-ccd6a3fb-4abd-469e-a566-5adfddf76196.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-ccd6a3fb-4abd-469e-a566-5adfddf76196.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2026/01/data-src-image-ccd6a3fb-4abd-469e-a566-5adfddf76196.png 1000w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-ccd6a3fb-4abd-469e-a566-5adfddf76196.png 1064w",[128,297],{},[131,299,301],{"id":300},"_3-the-worker","3. ワーカー",[101,303,304,305,308],{},"次に、マネージャーを動かしたままにして、",[255,306,307],{},"flamenco-worker","をダブルクリックしてください。",[101,310,311],{},"以上です。",[101,313,314],{},"ワーカーはローカルネットワークをスキャンし、同じコンピュータ上で動いているManagerを見つけて自己紹介します。デスクトップのWebブラウザ（Managerの画面）を見てみると、「Workers」タブに「Idle」として表示され、出番を待っているはずです。",[225,316,318],{"className":317},[87,228],[230,319],{"src":320,"className":321,"alt":235,"loading":236,"width":282,"height":283,"srcSet":322,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-6bad58f1-615a-4a7b-8aff-38f07279ebe0.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-6bad58f1-615a-4a7b-8aff-38f07279ebe0.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2026/01/data-src-image-6bad58f1-615a-4a7b-8aff-38f07279ebe0.png 1000w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-6bad58f1-615a-4a7b-8aff-38f07279ebe0.png 1319w",[101,324,325,326,328],{},"デスクトップでも",[255,327,307],{},"を動かしてください。メインPCは同時にレンダリングと管理を行えます。",[128,330],{},[131,332,334],{"id":333},"_4-add-the-blend-file-and-render","4. blendファイルを追加してレンダリングする",[101,336,337],{},"準備は整いました。さあ、作業に入りましょう！",[209,339,340,346,352,358],{},[212,341,342,343,146],{},"デスクトップで",[120,344,345],{},"Blenderを開く",[212,347,348,351],{},[120,349,350],{},"アドオンを有効化"," - 編集 > 設定 > アドオン > ディスクからインストールへ移動します。マネージャーのセットアップ中にダウンロードしたflamencoのzipファイルを検索してください。",[212,353,354,357],{},[120,355,356],{},"Managerを紐付ける"," - Flamencoアドオンの設定で、マネージャーのURLをコピー＆ペーストします。",[212,359,360,363,364,367],{},[120,361,362],{},"ファイルを保存する"," - 設定されたジョブフォルダに",[255,365,366],{},".blend","ファイルを保存します。",[225,369,371],{"className":370},[87,228],[230,372],{"src":373,"className":374,"alt":235,"loading":236,"width":375,"height":376,"srcSet":377,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-88504c81-44cf-4d32-a374-0b2dc6746b56.png",[234],724,732,"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-88504c81-44cf-4d32-a374-0b2dc6746b56.png 600w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-88504c81-44cf-4d32-a374-0b2dc6746b56.png 724w",[101,379,380,381,383],{},"Blenderのレンダー プロパティタブで、下にスクロールして",[120,382,125],{},"パネルを表示します。",[209,385,386,392,398],{},[212,387,388,391],{},[120,389,390],{},"「Fetch Job Types」","をクリック。",[212,393,394,397],{},[120,395,396],{},"「Simple Render」","を選択。",[212,399,400,403],{},[120,401,402],{},"「Submit to Flamenco」","を押す。",[101,405,406],{},"次に、Webブラウザへ切り替えます。ジョブが表示されるはずです。「Workers」リストのステータスバーが緑に変わります。デスクトップは、一度に1フレームずつレンダリング用に取得します。",[225,408,410],{"className":409},[87,228],[230,411],{"src":412,"className":413,"alt":235,"loading":236,"width":282,"height":414,"srcSet":415,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-6e7fa2fb-b997-4f6f-ba60-bcc3c70d5bb0.png",[234],918,"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-6e7fa2fb-b997-4f6f-ba60-bcc3c70d5bb0.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2026/01/data-src-image-6e7fa2fb-b997-4f6f-ba60-bcc3c70d5bb0.png 1000w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-6e7fa2fb-b997-4f6f-ba60-bcc3c70d5bb0.png 1319w",[128,417],{},[131,419,421],{"id":420},"_5-bringing-in-the-laptop","5. ノートPCを追加する",[101,423,424],{},"次に、ホコリをかぶったノートPCをファームに追加します。",[101,426,427,428],{},"ここであなたに伝えたい、最も実行可能なアドバイスが1つあります。それは90%の初心者が失敗するポイントでもあります：",[120,429,430],{},"すべてのコンピュータが、同じ場所にあるファイルが見えていなければなりません。",[101,432,433,434,437,438,442],{},"デスクトップでテクスチャが ",[255,435,436],{},"C:\\Users\\Dave\\Texture.png"," にあるなら、ノートPCはそのパスに",[439,440,441],"em",{},"アクセスできません","。ノートPCにはDaveというユーザーが存在しないうえ、Cドライブにもそのファイルがありません。",[101,444,445],{},"必要なのは共有ネットワークフォルダで、通常はNASを使います。OSによって手順は似ていますが、少しだけ違います：",[209,447,448,451,458,471],{},[212,449,450],{},"イーサネットケーブルでデスクトップとノートPCを接続",[212,452,453,454,457],{},"デスクトップ上にNASフォルダを作成し、名前を",[255,455,456],{},"RenderFarm","にする。",[212,459,460,461,464,465,464,468,470],{},"右クリック > ",[120,462,463],{},"プロパティ"," > ",[120,466,467],{},"共有",[120,469,467],{},"。ユーザーに読み取り/書き込みの権限を付与する。",[212,472,473,476,477,480,481,483],{},[120,474,475],{},"ネットワークドライブを割り当てる：","デスクトップで、このフォルダをドライブレターに割り当てます。たとえば",[255,478,479],{},"Z:","。ノートPCでは、デスクトップのネットワーク共有に移動し、これを**同じレター ",[255,482,479],{},"** に割り当てます。",[101,485,486,487,490,491,493],{},"これで、Blenderファイルを",[255,488,489],{},"Z:\\RenderFarm\\MyProject.blend","として保存すれば、両方のコンピュータが",[255,492,489],{},"としてそれを見られます。パスは絶対で、同一です。",[101,495,496,497,500],{},"デスクトップは起動したままにして、",[120,498,499],{},"コンピュータB（ノートPC）","へ移ってください。",[209,502,503,508,511,514],{},[212,504,505,507],{},[255,506,479],{},"ドライブ（またはセットアップした共有ストレージ）がアクセス可能か確認します。念のため、その中のファイルを開いてみてください。",[212,509,510],{},"ノートPCでFlamencoフォルダをインストールして開きます。",[212,512,513],{},"デスクトップと同じBlenderバージョンがインストールされていることを確認します。",[212,515,516,258],{},[255,517,307],{},[101,519,311],{},[101,521,522],{},"ワーカーはローカルネットワークをスキャンし、デスクトップで動いているManagerを見つけます。",[225,524,526],{"className":525},[87,228],[230,527],{"src":528,"className":529,"alt":235,"loading":236,"width":530,"height":531,"srcSet":532,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-90501d50-29c3-4d8f-9b54-511e6c674739.png",[234],1504,932,"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-90501d50-29c3-4d8f-9b54-511e6c674739.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2026/01/data-src-image-90501d50-29c3-4d8f-9b54-511e6c674739.png 1000w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-90501d50-29c3-4d8f-9b54-511e6c674739.png 1504w",[101,534,535],{},"Flamencoが、コンピュータ間でジョブを自動的にオーケストレーションします。",[101,537,538,539,543,544,548],{},"NASにアクセスできない、またはNASを購入したくない場合は、Linuxのワークステーションに無料のSambaサーバーをインストールする方法を検討できます。Flamencoは非同期サービスを扱えないため、クラウドストレージは使えません（独自のジョブタイプを作成する場合を除く）。そのやり方については",[142,540,542],{"href":541},"https://blog.cg-wire.com/","将来の記事","で、Kitsuを非同期の",[142,545,547],{"href":546},"https://blog.cg-wire.com/animation-asset-storage/","アセットストレージサーバー","として使う方法を見ていきます。",[128,550],{},[131,552,554],{"id":553},"conclusion-knowing-when-to-scale","まとめ：いつスケールするべきかを知る",[101,556,557,558],{},"ハードウェアのセットアップ、重要な共有ストレージの考え方、そしてソフトウェアのインストールまで解説しました。ここまで実施できたなら、",[120,559,560],{},"自宅で機能するレンダーファームが完成し、ホコリをかぶったノートPCは今やチームの生産的なメンバーになっています。",[101,562,563],{},"Flamencoは、セルフホストレンダリングへの参入障壁を非常に低くしてくれます。プライバシーを尊重し、電気代以外はコストがかからず、すでに持っているハードウェアの性能を余すところなく引き出せます。",[101,565,566],{},"ただし、1人で達成できる範囲には限界があります。",[101,568,569],{},"いずれ、デスクトップ＋ノートPCの組み合わせでは足りない期限にぶつかるでしょう。たとえば、24時間で重たいボリューメトリクスのある4Kシーケンスをレンダリングする必要があり、自宅ファームの見積もりでは完了まで3週間かかる、という状況です。これがセルフホスティングの天井です。",[101,571,572,573,576],{},"この壁に当たったら、さらに5台のコンピュータを買う必要はありません。",[120,574,575],{},"CPU/GPUノードを何百台も即座に利用できるサービス、Ranch Computingへ切り替えるタイミングです。","自宅ファームは、テスト、プレビュー、軽めのプロジェクトに最適な素晴らしい日常ドライバーです。一方で、クラウドのレンダーファームは、クライアント向けの高品質な成果物を素早くレンダリングするのに非常に役立ちます。",[84,578,580,584],{"className":579},[87,88,89],[84,581,583],{"className":582},[93],"📽️",[84,585,587,588,594],{"className":586},[98],"アニメーション制作のプロセスについてもっと知りたい方は",[142,589,593],{"href":590,"rel":591},"https://www.cg-wire.com/community?ref=blog.cg-wire.com",[592],"noreferrer","ぜひDiscordコミュニティに参加することを検討してください","！ベストプラクティスを共有する1,000人以上の専門家とつながれ、時には対面イベントも企画しています。ぜひ歓迎します！ 😊",[84,596,600],{"className":597},[87,598,599],"kg-button-card","kg-align-center",[142,601,605],{"href":590,"className":602},[603,604],"kg-btn","kg-btn-accent","Discordコミュニティに参加する",{"title":235,"searchDepth":607,"depth":607,"links":608},2,[609,610,611,612,613,614,615,616],{"id":133,"depth":607,"text":134},{"id":180,"depth":607,"text":181},{"id":203,"depth":607,"text":204},{"id":245,"depth":607,"text":246},{"id":300,"depth":607,"text":301},{"id":333,"depth":607,"text":334},{"id":420,"depth":607,"text":421},{"id":553,"depth":607,"text":554},"md","https://images.unsplash.com/photo-1683322499436-f4383dd59f5a?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDd8fGRhdGElMjBjZW50ZXJ8ZW58MHx8fHwxNzY3NjE4NDAxfDA&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":620,"featured_at":621,"visibility":622},"2026-02-20T06:04:52.000+01:00","false","public","/blog-i18n/ja/self-hosted-blender-render-farm","2026-01-19T10:00:41.000+01:00",{"title":73,"description":235},"self-hosted-blender-render-farm","blog-i18n/ja/self-hosted-blender-render-farm/index",[629,634],{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},"5fff0e54653a0c003924f7f2","Pipeline Automation","pipeline","https://blog.cg-wire.com/tag/pipeline/",{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"69c20ddbcb09d8000107cfe5","https://blog.cg-wire.com/tag/blender/","8mcpjtvbYb0aFNMIG1CN_zWjvqBTKM3gs6SXZZk4xBA",{"id":639,"title":640,"authors":641,"body":643,"description":235,"extension":617,"feature_image":1421,"html":7,"meta":1422,"navigation":12,"path":1424,"published_at":1425,"seo":1426,"slug":1427,"stem":1428,"tags":1429,"__hash__":1432,"updated_at":1423,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-shaders-explained/index.md","Blenderシェーダーの扱い方（2026）：ノード＆スクリプト",[642],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":644,"toc":1403},[645,656,663,666,669,675,677,683,686,696,701,724,727,742,752,754,760,763,766,769,776,791,798,801,803,809,816,825,832,835,873,879,882,890,896,899,937,943,946,966,972,975,1001,1007,1010,1036,1042,1045,1071,1077,1080,1088,1094,1097,1111,1113,1119,1125,1128,1131,1163,1170,1173,1196,1199,1223,1226,1260,1264,1267,1312,1315,1325,1331,1339,1342,1344,1350,1357,1368,1382,1397],[84,646,648,652],{"className":647},[87,88,89],[84,649,651],{"className":650},[93],"🎨",[84,653,655],{"className":654},[98],"シェーダーは魔法ではありません。制御でき、自動化もできる「視覚的なレシピ」です。",[101,657,658,659,662],{},"「",[439,660,661],{},"shader","（シェーダー）」という言葉を初めて聞いたとき、不安になるのは簡単です。誰かがGLSLの話をし始め、GPUが汗をかき始めるように感じて、気づけば読めないコードの壁を想像し、PCファンが助けを求めて叫んでいる――そんな気分になるでしょう。",[101,664,665],{},"o早い段階で誰も教えてくれないのはここです。シェーダーを扱うのに数学者やグラフィックスプログラマーである必要はありません。低レベルのGPUコードを書くことも、光の物理の裏にあるすべての式を理解することも求められていません。Blenderは、あなたにそれを期待していません。代わりに、ノードをくれます。コードというよりレゴのように振る舞う「視覚的な組み立て部品」です。つなげていくだけで結果がすぐ見えて、納得できる感触になるまで調整できます。",[101,667,668],{},"シェーダーをコードというより「レシピ」と考えてください。値、テクスチャ、ロジックを混ぜ合わせて、サーフェスが光にどう反応すべきかを記述します。時には既知のレシピに従い、時には即興で試し、時には何が起きるか見るためにあえて壊してみます。それが、あなたが学ぶ方法です。",[101,670,671,674],{},[120,672,673],{},"この記事では、シェーディングが実際に何であるかを解き明かし、そこにまとわりつく恐怖心を取り払い、Blenderのノードシステムを使って（あるいは少しのスクリプトで）アニメーション制作パイプラインのためにシェーダーをプロシージャルに操作する方法を探ります。"," そして最後には、シェーディングが「立ち入ってはいけない部屋」のように感じることはなくなっているはずです。",[128,676],{},[131,678,680],{"id":679},"whats-a-shader",[120,681,682],{},"シェーダーとは？",[101,684,685],{},"シェーダーを理解するには、「色」について考えるのをやめて「物理」について考え始める必要があります。",[101,687,688,695],{},[142,689,691],{"href":690},"https://blog.cg-wire.com/hard-surface-modeling/",[692,693,694],"u",{},"現実世界で木の椅子を赤く塗る","とき、あなたが変えているのは単なる色ではありません。光と相互作用する「マテリアルの層」を追加しているのです。その赤いペイントには、特定のラフネス（どれだけ光を散乱させるか）、特定のスペキュラリティ（どれだけツヤがあるか）、そして特定の屈折率があります。",[101,697,698],{},[120,699,700],{},"シェーダーとは、その光の相互作用をコンピューターがどうシミュレートするかを指示する一連の命令です。",[225,702,705,712],{"className":703},[87,228,704],"kg-card-hascaption",[230,706],{"src":707,"className":708,"alt":235,"loading":236,"width":709,"height":710,"srcSet":711,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-296bf085-924e-40f9-92fc-346c5dc31de0.png",[234],1600,1067,"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-296bf085-924e-40f9-92fc-346c5dc31de0.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2026/01/data-src-image-296bf085-924e-40f9-92fc-346c5dc31de0.png 1000w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-296bf085-924e-40f9-92fc-346c5dc31de0.png 1600w",[713,714,715],"figcaption",{},[716,717,718],"i",{},[439,719,723],{"className":720,"style":722},[721],"italic","white-space: pre-wrap;","出典: TurboSquid",[101,725,726],{},"デジタルの太陽からの光の1本のレイが、あなたのオブジェクト表面に当たると、シェーダーが介入して次のように問いかけます。",[728,729,730,733,736,739],"ul",{},[212,731,732],{},"「跳ね返りますか？」（反射）",[212,734,735],{},"「通り抜けますか？」（透過／ガラス）",[212,737,738],{},"「中に閉じ込められますか？」（吸収）",[212,740,741],{},"「皮膚の下へ散っていきますか？」（サブサーフェス・スキャタリング）",[101,743,744,745],{},"濡れた石畳の通りをモデリングしているなら、単純な画像テクスチャだけで平坦な写真のように見せられます。しかしシェーダーは、ひび割れの中の水が完璧に反射して滑らかである一方、石はラフで鈍いことをレンダラーに伝えます。光は、濡れている部分と乾いている部分で別々に跳ね返るよう指示されます。",[142,746,748,749],{"href":747},"https://blog.cg-wire.com/how-light-shapes-emotion-in-animation/"," ",[692,750,751],{},"光は現実の形を変える。",[128,753],{},[131,755,757],{"id":756},"why-you-must-master-shader-nodes",[120,758,759],{},"シェーダーノードを習得しなければならない理由",[101,761,762],{},"「じゃあ、ただテクスチャをダウンロードすればいいのでは？」と聞きたくなるかもしれません。",[101,764,765],{},"フォトスキャンは素晴らしいですが、プロシージャルシェーディングには、静止画像ではかなわない3つの“超能力”があります。",[101,767,768],{},"画像テクスチャ（JPGやPNG）を使う場合、あなたはピクセルに制限されます。壁に近づきすぎてズームすると、ぼやけます。",[101,770,771,772,775],{},"シェーダーは数学を使います。",[120,773,774],{},"数学には解像度の上限がありません。","金属のプロシージャルな傷にズームして、微細な溝が見えるところまで行っても、輪郭はシャープなままです。あなたが誇りを持てるモデルで、きれいなトポロジーや良いプロポーションがあっても、シェーダーなしだと平面的に見えてしまいます。",[101,777,778,779,782,783,786,787,790],{},"Blenderのシェーダーノードは、",[120,780,781],{},"一貫したやり方でテクスチャを簡単に微調整できる","ようにします。たとえば宇宙船をテクスチャリングしているとしましょう。テクスチャマップで船体に錆を描きます。アートディレクターがやって来て「いいね。でも船が古すぎる。錆を50%減らして。」と言います。もし手で描いていたなら、最初からやり直すか、何時間も消す作業に追われます。シェーダーノードなら、あなたが作った「Rust Amount（錆の量）」の値を見つけて、",[255,784,785],{},"1.0","から",[255,788,789],{},"0.5","へスライドさせるだけです。以上です。",[101,792,793,794,797],{},"静止テクスチャは固まって見えますが、",[120,795,796],{},"シェーダーはアニメーションもできます","。フレーム番号に応じて岩の上に苔が時間とともに生えていくようにセットアップできますし、あるいは当たるほどシールドが明るく発光するようにもできます。シェーダーは、マテリアルが環境に反応することを可能にします。",[101,799,800],{},"これらすべての理由から、シェーダーノードを“使いこなせるようになること”は、厳しい納期のある制作現場で働くプロのアーティストにとって、非常に大きな解放（アンロック）になります。",[128,802],{},[131,804,806],{"id":805},"the-different-types-of-shader-nodes",[120,807,808],{},"シェーダーノードの種類",[101,810,811,812,815],{},"Blenderのノードシステムはフローチャートのように動きます。ノードを追加するには",[255,813,814],{},"Add（追加）","をクリックし、それらを接続します。データは左から右へ流れます。各機能をどう活かすかを理解するには、用意されているさまざまなノードの種類を理解する必要があります。",[225,817,819],{"className":818},[87,228],[230,820],{"src":821,"className":822,"alt":235,"loading":236,"width":709,"height":823,"srcSet":824,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-2573386d-adc9-4979-a848-89d1cae3645e.png",[234],900,"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-2573386d-adc9-4979-a848-89d1cae3645e.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2026/01/data-src-image-2573386d-adc9-4979-a848-89d1cae3645e.png 1000w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-2573386d-adc9-4979-a848-89d1cae3645e.png 1600w",[826,827,829],"h3",{"id":828},"_1-input-nodes",[120,830,831],{},"1. 入力ノード",[101,833,834],{},"入力ノードは、シーン・オブジェクト・ジオメトリ、またはユーザー定義の値から、シェーダーネットワークへデータを供給します。",[728,836,837,843,849,855,861,867],{},[212,838,839,842],{},[120,840,841],{},"Texture Coordinate（テクスチャ座標）"," - UV、オブジェクト、生成、カメラ座標を提供 + UV出力を使って、UV展開モデルに画像テクスチャを正しくマッピングする",[212,844,845,848],{},[120,846,847],{},"Geometry（ジオメトリ）"," - 法線や“とがり具合”などの幾何情報を出力 + “Pointiness（とがり）”を使って窪みに汚れが溜まるようにする",[212,850,851,854],{},[120,852,853],{},"Fresnel（フレネル）"," - 視線角に基づく反射率を計算 + ガラスのエッジでより強い反射を作る",[212,856,857,860],{},[120,858,859],{},"Object Info（オブジェクト情報）"," - ランダム値やオブジェクトカラーなど、オブジェクトごとのデータを提供 + Random出力を使って各オブジェクトを少しずつ違う色にする",[212,862,863,866],{},[120,864,865],{},"Value（値）"," - 定数の数値を出力 + 単一のスライダーでラフネスを制御する",[212,868,869,872],{},[120,870,871],{},"Color（カラー）"," - 定数の色を出力 + スタイル化されたマテリアルのベースカラーとして使う",[826,874,876],{"id":875},"_2-output-nodes",[120,877,878],{},"2. 出力ノード",[101,880,881],{},"出力ノードはシェーダーの最終結果を定義し、ノードネットワークをBlenderのレンダリングシステムへ接続します。",[728,883,884],{},[212,885,886,889],{},[120,887,888],{},"Material Output（マテリアル出力）"," - 最終的な表面、ボリューム、ディスプレースメント情報を出力 + Surface入力にPrincipled BSDFを接続する",[826,891,893],{"id":892},"_3-shader-nodes",[120,894,895],{},"3. シェーダーノード",[101,897,898],{},"シェーダーノードは、反射・屈折・発光など、光がサーフェスとどう相互作用するかを定義します。",[728,900,901,907,913,919,925,931],{},[212,902,903,906],{},[120,904,905],{},"Principled BSDF（プリンシプルBSDF）"," - 物理ベースのオールインワン表面シェーダー + 現実的な金属、プラスチック、肌などのマテリアルを作る",[212,908,909,912],{},[120,910,911],{},"Diffuse BSDF（ディフューズBSDF）"," - マットで反射しないサーフェスを生成 + チョーク、粘土、研磨していない石に使う",[212,914,915,918],{},[120,916,917],{},"Glossy BSDF（グロッシーBSDF）"," - 鏡のような反射を生成 + 磨かれた金属や鏡に使う",[212,920,921,924],{},[120,922,923],{},"Glass BSDF（ガラスBSDF）"," - 屈折と反射を組み合わせる + 窓やガラスボトルに使う",[212,926,927,930],{},[120,928,929],{},"Emission（エミッション）"," - サーフェスから光を放出 + スクリーン、LED、ネオンサインに使う",[212,932,933,936],{},[120,934,935],{},"Mix Shader（ミックスシェーダー）"," - 2つのシェーダー出力をブレンド + 摩耗した金属にはディフューズとグロッシーを混ぜる",[826,938,940],{"id":939},"_4-displacement-nodes",[120,941,942],{},"4. ディスプレースメントノード",[101,944,945],{},"ディスプレースメントノードは、ジオメトリまたはシェーディングの法線を変更して、サーフェスのディテールを変えます。",[728,947,948,954,960],{},[212,949,950,953],{},[120,951,952],{},"Displacement（ディスプレースメント）"," - 本当のジオメトリのディスプレースメントを実行 + 高さマップを使ってレンガ壁に実在の奥行きを作る（Cycles）",[212,955,956,959],{},[120,957,958],{},"Bump（バンプ）"," - 法線の微調整で表面ディテールをシミュレート + ジオメトリを増やさずに微細な傷を追加する",[212,961,962,965],{},[120,963,964],{},"Normal Map（法線マップ）"," - 法線テクスチャを使える法線データへ変換 + ゲームアセットからベイクした法線マップを適用する",[826,967,969],{"id":968},"_5-color-nodes",[120,970,971],{},"5. カラーノード",[101,973,974],{},"カラーノードは、シェーダーネットワーク内で色情報を調整したり、ブレンドしたり、変換したりします。",[728,976,977,983,989,995],{},[212,978,979,982],{},[120,980,981],{},"Mix Color（ミックスカラー）"," - 2つの色またはテクスチャをブレンド + 清いベースカラーに汚れテクスチャを混ぜる",[212,984,985,988],{},[120,986,987],{},"RGB Curves（RGBカーブ）"," - コントラストとカラーバランスを調整 + 画像を再編集せずにテクスチャのコントラストを高める",[212,990,991,994],{},[120,992,993],{},"Hue/Saturation（色相/彩度）"," - 色相、彩度、値を変更 + テクスチャを塗り直さずにマテリアルを青く色付けする",[212,996,997,1000],{},[120,998,999],{},"Invert（反転）"," - 色の値を逆にする + ラフネスマップを反転してツヤ感のマップを作る",[826,1002,1004],{"id":1003},"_6-texture-nodes",[120,1005,1006],{},"6. テクスチャノード",[101,1008,1009],{},"テクスチャノードは、マテリアル用の画像またはプロシージャルなテクスチャを生成／読み込みします。",[728,1011,1012,1018,1024,1030],{},[212,1013,1014,1017],{},[120,1015,1016],{},"Image Texture（画像テクスチャ）"," - 外部の画像ファイルを読み込む + PBRマテリアルのためにアルベドマップを使う",[212,1019,1020,1023],{},[120,1021,1022],{},"Noise Texture（ノイズテクスチャ）"," - 滑らかなプロシージャルノイズを生成 + プラスチックに微妙なラフネスの変化を加える",[212,1025,1026,1029],{},[120,1027,1028],{},"Voronoi Texture（ボロノイテクスチャ）"," - セル状のパターンを生成 + ひび割れ、スケール、石タイルを作る",[212,1031,1032,1035],{},[120,1033,1034],{},"Gradient Texture（グラデーションテクスチャ）"," - 滑らかなグラデーションを出力 + マテリアルのブレンド用マスクとして使う",[826,1037,1039],{"id":1038},"_7-utility-nodes",[120,1040,1041],{},"7. ユーティリティノード",[101,1043,1044],{},"ユーティリティノードは、数学的演算やデータ変換を行います。",[728,1046,1047,1053,1059,1065],{},[212,1048,1049,1052],{},[120,1050,1051],{},"Mapping（マッピング）"," - テクスチャ座標を変換 + テクスチャパターンをスケール／回転する",[212,1054,1055,1058],{},[120,1056,1057],{},"Math（数学）"," - 数値演算を実行 + 極端になりすぎないようラフネス値をクランプする",[212,1060,1061,1064],{},[120,1062,1063],{},"Vector Math（ベクターマス）"," - ベクターに基づく計算を実行 + 法線や方向ベクターを変更する",[212,1066,1067,1070],{},[120,1068,1069],{},"Clamp（クランプ）"," - 指定した範囲に値を制限 + 過剰に明るいエミッション値を防ぐ",[826,1072,1074],{"id":1073},"_8-group-nodes",[120,1075,1076],{},"8. グループノード",[101,1078,1079],{},"グループノードは複数のノードを、再利用できる整理されたコンポーネントとしてまとめます。",[728,1081,1082],{},[212,1083,1084,1087],{},[120,1085,1086],{},"Node Group（ノードグループ）"," - 複雑なノードセットアップをカプセル化 + 複数のアセットで使い回せる「Rust Shader（錆シェーダー）」を作る",[826,1089,1091],{"id":1090},"_9-layout-nodes",[120,1092,1093],{},"9. レイアウトノード",[101,1095,1096],{},"レイアウトノードはノードグラフを見やすく整理するためのもので、レンダリング結果には影響しません。",[728,1098,1099,1105],{},[212,1100,1101,1104],{},[120,1102,1103],{},"Frame（フレーム）"," - 関連するノードを見た目でグループ化 + テクスチャ関連ノードをまとめて囲う",[212,1106,1107,1110],{},[120,1108,1109],{},"Reroute（リルート）"," - 読みやすさのためにノード接続を迂回させる + 重なり合ったノードのノード（見た目の配線）を整理する",[128,1112],{},[131,1114,1116],{"id":1115},"the-next-level-scripting-your-shaders",[120,1117,1118],{},"次のレベル：シェーダーをスクリプトで扱う",[101,1120,1121,1122],{},"手でノードをつなげるのに慣れてくると、木、プラスチック、ゴールド、あらゆる種類のマテリアルを作れます。ですが、",[120,1123,1124],{},"500個ものユニークなオブジェクトがあるシーンで、それぞれに“少しの調整”を加えつつ、摩耗した金属マテリアルのランダムなバリエーションを生成する必要があるとしたら？",[101,1126,1127],{},"そこで重要になるのがPythonスクリプトです。プロジェクト内のすべてのマテリアルが、同じノード構造に従うことを保証できます。「このマテリアルを赤にして、ただしオブジェクトごとにランダムな数値で色相を少しずつ変える」といったスクリプトを書くことができます。",[101,1129,1130],{},"さっそく手を動かしましょう。このガイドでは、新しいマテリアルを作り、Principled BSDFを追加し、色を制御するためのノイズテクスチャを生成して、それらを一つにつなげるPythonスクリプトを書きます。",[84,1132,1135,1139],{"className":1133},[87,88,1134],"kg-callout-card-blue",[84,1136,1138],{"className":1137},[93],"💡",[84,1140,1142,1148,1151,1153,1154,1156,1158,1159],{"className":1141},[98],[1143,1144,1145],"b",{},[120,1146,1147],{"style":722},"動くサンプルを探していますか？",[1149,1150],"br",{},[1149,1152],{},"このガイドで紹介しているサンプル統合の完全なソースコードは、GitHubで確認できます：",[1149,1155],{},[1149,1157],{},"🔗 ",[142,1160,1162],{"href":1161},"https://github.com/cgwire/blog-tutorials/tree/main/blender-shaders?ref=blog.cg-wire.com","https://github.com/cgwire/blog-tutorials/tree/main/blender-shaders",[101,1164,1165,1166,1169],{},"Blenderで",[439,1167,1168],{},"Scripting","タブを開き、新しいテキストブロックを作成して、手順に沿って進めてください。",[101,1171,1172],{},"まずはライブラリをインポートして、Blenderに新しいマテリアルを作りたいことを伝える必要があります。",[1174,1175,1176,1190],"pre",{},[255,1177,1180,1181,1184,1187],{"className":1178},[1179],"language-python","import random\n",[101,1182,1183],{},"import bpy",[101,1185,1186],{},"def create_procedural_material(mat_name):\n    mat = bpy.data.materials.new(name=mat_name)",[101,1188,1189],{},"    mat.use_nodes = True\n    nodes = mat.node_tree.nodes\n    links = mat.node_tree.links",[101,1191,1192],{},[255,1193,1195],{"className":1194},[1179],"    nodes.clear()",[101,1197,1198],{},"次に、ノードを追加します。「Add」メニューからアイテムを引っ張り出すのと同じだと思ってください。プログラムで：",[1174,1200,1201,1208],{},[255,1202,1204,1205],{"className":1203},[1179],"    node_output = nodes.new(type='ShaderNodeOutputMaterial')\n    node_output.location = (400, 0)",[101,1206,1207],{},"    node_principled = nodes.new(type='ShaderNodeBsdfPrincipled')\n    node_principled.location = (0, 0)",[101,1209,1210],{},[255,1211,1213,1214,1218,1219,1222],{"className":1212},[1179],"    node_principled.inputs",[1215,1216,1217],"span",{},"'Roughness'",".default_value = 0.2\n    node_principled.inputs",[1215,1220,1221],{},"'Metallic'",".default_value = 1.0",[101,1224,1225],{},"では、面白くしていきます。ノイズテクスチャとColorRamp（カラ―ランプ）を追加して、ランダムな色のパターンを生成します。",[1174,1227,1228,1250],{},[255,1229,1231,1232,1235,1236,1239,1240,1243],{"className":1230},[1179],"node_noise = nodes.new(type='ShaderNodeTexNoise')\n    node_noise.location = (-600, 0)\n    node_noise.inputs",[1215,1233,1234],{},"'Scale'",".default_value = 15.0\n    node_noise.inputs",[1215,1237,1238],{},"'Detail'",".default_value = 10.0",[101,1241,1242],{},"    node_ramp = nodes.new(type='ShaderNodeValToRGB')\n    node_ramp.location = (-300, 0)",[101,1244,1245,1246,1249],{},"    node_ramp.color_ramp.elements",[1215,1247,1248],{},"0",".color = (0.1, 0.1, 0.1, 1)",[101,1251,1252],{},[255,1253,1255,1256,1259],{"className":1254},[1179],"    rand_r = random.random()\n    rand_g = random.random()\n    rand_b = random.random()\n    node_ramp.color_ramp.elements",[1215,1257,1258],{},"1",".color = (rand_r, rand_g, rand_b, 1)",[101,1261,1262],{},[1149,1263],{},[101,1265,1266],{},"最後に、それらを配線して、この新しいシェーダーを現在のコンテキスト（デフォルトのキューブ）に適用します。",[1174,1268,1269,1306],{},[255,1270,1272,1273,1276,1277,1279,1280,1290,1300,1303],{"className":1271},[1179],"    links.new(node_noise.outputs",[1215,1274,1275],{},"'Fac'",", node_ramp.inputs",[1215,1278,1275],{},")",[101,1281,1282,1283,1286,1287,1279],{},"    links.new(node_ramp.outputs",[1215,1284,1285],{},"'Color'",", node_principled.inputs",[1215,1288,1289],{},"'Base Color'",[101,1291,1292,1293,1296,1297,1279],{},"    links.new(node_principled.outputs",[1215,1294,1295],{},"'BSDF'",", node_output.inputs",[1215,1298,1299],{},"'Surface'",[101,1301,1302],{},"    return mat",[101,1304,1305],{},"my_new_mat = create_procedural_material(\"SciFi_Metal_Random\")",[101,1307,1308],{},[255,1309,1311],{"className":1310},[1179],"bpy.context.object.data.materials.append(my_new_mat)",[101,1313,1314],{},"このコードをテキストエディタにコピーして、「Run Script（スクリプトを実行）」を押します（再生ボタン）。アクティブなオブジェクトを見てください。ランダムな色のノイズパターンを持つメタリックな表面になっています。もう一度実行して（関数呼び出し内の名前を変更します）、別の色が得られます。",[225,1316,1318],{"className":1317},[87,228],[230,1319],{"src":1320,"className":1321,"alt":235,"loading":236,"width":1322,"height":1323,"srcSet":1324,"sizes":240},"https://blog.cg-wire.com/content/images/2026/01/data-src-image-99dc12fe-068b-40f7-9f10-ef0c5e000ba0.png",[234],1268,827,"https://blog.cg-wire.com/content/images/size/w600/2026/01/data-src-image-99dc12fe-068b-40f7-9f10-ef0c5e000ba0.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2026/01/data-src-image-99dc12fe-068b-40f7-9f10-ef0c5e000ba0.png 1000w, https://blog.cg-wire.com/content/images/2026/01/data-src-image-99dc12fe-068b-40f7-9f10-ef0c5e000ba0.png 1268w",[101,1326,1327,1328],{},"おめでとうございます、",[120,1329,1330],{},"あなたはプロシージャルなマテリアルジェネレーターを作りました！",[101,1332,1333],{},[142,1334,748,1336],{"href":1161,"rel":1335},[592],[692,1337,1338],{},"対応するGithubリポジトリ",[101,1340,1341],{},"コードをいじってみるために、ぜひ見てください！",[128,1343],{},[131,1345,1347],{"id":1346},"conclusion",[120,1348,1349],{},"まとめ",[101,1351,1352,1353,1356],{},"シェーダーは、ただ線の中に色を塗る以上のものです。シェーダーは、あなたのデジタル世界の「皮膚」です。",[120,1354,1355],{},"シェーダーは、そのオブジェクトの物語を伝えます","。どれくらい古いのか、どこを通ってきたのか、そして何でできているのか。",[101,1358,1359,1360,1363,1364,1367],{},"シェーダーノードのロジックを理解すれば、",[120,1361,1362],{},"フォトリアルな肌から、スタイル化したカートゥーンの炎まで","何でも作れます。さらにPythonスクリプトへ一歩踏み出せば、制作を",[120,1365,1366],{},"より速く、より賢く","進める力が手に入ります。面倒な部分を自動化して、アートに集中できるようになるのです。",[101,1369,1370,1371,1374,1375,1381],{},"ただし、これはパズルのほんの一部です。表面は変えられます。でも形はどうでしょう？旅の次の論理的なステップは",[439,1372,1373],{},"ジオメトリノード","です。シェーダーノードが色や光をプロシージャルに制御するのと同じように、ジオメトリノードはメッシュや構造をプログラム的に制御します。",[142,1376,748,1378],{"href":1377},"https://blog.cg-wire.com/blender-scripting-geometry-nodes-2/",[692,1379,1380],{},"こちらの専用記事をご覧ください","。コードからシーン全体を作る方法を学べます！",[84,1383,1385,1388],{"className":1384},[87,88,89],[84,1386,583],{"className":1387},[93],[84,1389,1391,1392,1396],{"className":1390},[98],"アニメーション制作のプロセスをもっと学ぶには",[142,1393,1395],{"href":590,"rel":1394},[592],"Discordコミュニティへの参加をご検討ください","！私たちはベストプラクティスを共有する1,000人以上の専門家とつながっており、ときどき対面イベントも企画しています。ぜひ歓迎します！😊",[84,1398,1400],{"className":1399},[87,598,599],[142,1401,605],{"href":590,"className":1402},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":1404},[1405,1406,1407,1419,1420],{"id":679,"depth":607,"text":682},{"id":756,"depth":607,"text":759},{"id":805,"depth":607,"text":808,"children":1408},[1409,1411,1412,1413,1414,1415,1416,1417,1418],{"id":828,"depth":1410,"text":831},3,{"id":875,"depth":1410,"text":878},{"id":892,"depth":1410,"text":895},{"id":939,"depth":1410,"text":942},{"id":968,"depth":1410,"text":971},{"id":1003,"depth":1410,"text":1006},{"id":1038,"depth":1410,"text":1041},{"id":1073,"depth":1410,"text":1076},{"id":1090,"depth":1410,"text":1093},{"id":1115,"depth":607,"text":1118},{"id":1346,"depth":607,"text":1349},"https://images.unsplash.com/photo-1664526936810-ec0856d31b92?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDd8fHNoYWRlciUyMG5vZGVzfGVufDB8fHx8MTc2NzYwMzU4M3ww&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":1423,"featured_at":621,"visibility":622},"2026-03-26T09:56:11.000+01:00","/blog-i18n/ja/blender-shaders-explained","2026-01-05T10:35:18.000+01:00",{"title":640,"description":235},"blender-shaders-explained","blog-i18n/ja/blender-shaders-explained/index",[1430,1431],{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"mwJOX_0DF3S0rwJvRPJMDjtmu5Raia5FdwYOZWSUm7Q",{"id":1434,"title":1435,"authors":1436,"body":1438,"description":235,"extension":617,"feature_image":1927,"html":7,"meta":1928,"navigation":12,"path":1930,"published_at":1931,"seo":1932,"slug":1933,"stem":1934,"tags":1935,"__hash__":1938,"updated_at":1929,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-programmatic-rendering/index.md","Python（2026）でBlenderにおけるプログラムによる動画レンダリング",[1437],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":1439,"toc":1918},[1440,1451,1454,1457,1460,1463,1470,1473,1475,1481,1484,1528,1531,1534,1560,1563,1590,1592,1598,1601,1607,1619,1630,1632,1638,1641,1647,1654,1657,1663,1666,1675,1677,1683,1693,1696,1702,1705,1711,1714,1722,1724,1730,1739,1750,1753,1759,1762,1768,1771,1777,1780,1786,1789,1795,1798,1804,1806,1812,1819,1845,1848,1855,1858,1868,1884,1886,1891,1894,1897,1912],[84,1441,1443,1447],{"className":1442},[87,88,89],[84,1444,1446],{"className":1445},[93],"🧠",[84,1448,1450],{"className":1449},[98],"数行のPythonだけで、Blenderをプログラム可能なレンダリングエンジンに変えます。",[101,1452,1453],{},"3DアーティストとしてBlenderを学ぶことは、通常はそのアドオン・エコシステムについて学ぶことを意味します。リグ付けのように何時間もかかってしまう作業も、Rigifyのようなアドオンによって数秒に短縮できます。同じことはほとんどのワークフローでも言えます。私たちはしばしば、同じような繰り返しの疑問を抱きます。「Blenderはこれを自動でできるのだろうか？」",[101,1455,1456],{},"答えは「はい」です。ポイントはプログラミング言語のPythonです。",[101,1458,1459],{},"Blenderには強力な内蔵スクリプトエンジンがあり、数行のコードでオブジェクトを作成し、カメラを配置し、さらにはフルレンダリングをトリガーできます。",[101,1461,1462],{},"自分でアドオンを作れるなら、アドオンにお金を払う必要はありません。そしてアドオンの本質は、カスタムのBlenderユーザーインターフェースで包まれた単なるスクリプトです。",[101,1464,1465,1466,1469],{},"Blenderでスクリプトを書いたことがない場合、",[255,1467,1468],{},"bpy","モジュールを見つける体験は、すでに知っているはずのツールの中にある「秘密の扉を開く」ようなものです。すると、突然インターフェースのあらゆる部分がプログラム可能になります。もはやボタンをクリックしているだけではなく、反復可能な仕組みを作るための指示を出しているのです。",[101,1471,1472],{},"自動化できる最も重要なワークフローの1つがレンダリングです。パイプラインを速くするだけでなく、レンダリング設定を一貫していて予測しやすい状態に保つのにも役立ちます。このチュートリアルでは、3Dテキストを自動でアニメーションさせ、フルHDの動画に変換するための基本的なプログラムによるレンダリングシステムを実装します。ゼロから始めて、BlenderでPythonを実行する方法、そしてシーンを制御する方法を探っていきます。最後には、一般的なアニメーション作業を自動化する方法の全体像をしっかり掴めるはずです。",[128,1474],{},[131,1476,1478],{"id":1477},"use-cases",[120,1479,1480],{},"ユースケース",[101,1482,1483],{},"プログラムによるレンダリングは、従来の手作業によるシーン構築をはるかに超えた、多様で強力なワークフローを開放します：",[728,1485,1486,1492,1498,1504,1510,1516,1522],{},[212,1487,1488,1491],{},[120,1489,1490],{},"データ駆動モーショングラフィックス"," — アニメーション化されたチャート、リアルタイムのAPI駆動による放送用グラフィックス、または自動生成されるソーシャル動画。",[212,1493,1494,1497],{},[120,1495,1496],{},"生成アート"," — コードから進化していくプロシージャルなパターン、ノイズフィールド、粒子実験、アルゴリズムによるイラスト。",[212,1499,1500,1503],{},[120,1501,1502],{},"バッチレンダリングされたバリエーション"," — パーソナライズされた広告、製品の色違い、アスペクト比の自動トリミング、大量のソーシャル素材生成。",[212,1505,1506,1509],{},[120,1507,1508],{},"プロシージャルな3Dコンテンツ"," — 地形ビルダー、パラメトリックモデリング、植生／ワールドの人口、3Dアセットのバリエーションを自動で生成。",[212,1511,1512,1515],{},[120,1513,1514],{},"生成UI & デザインシステム"," — ダイナミックなSVG、テンプレート化されたバナー、ブランドに一貫したグラフィックスを必要なときにレンダリング。",[212,1517,1518,1521],{},[120,1519,1520],{},"VFXおよびアニメーションのスクリプト化"," — 自動化されたリグ制御、群衆システム、粒子の増殖、反復可能なシミュレーション設定。",[212,1523,1524,1527],{},[120,1525,1526],{},"シミュレーションの可視化"," — 流体や煙のシミュレーション、交通や群衆のダイナミクス、科学的／物理ベースのレンダリング。",[101,1529,1530],{},"多くの3Dモデリング作業は反復的で時間がかかります。これらを自動化された、スクリプト駆動のパイプラインに統合することで、Pythonが面倒な部分を裏で処理し、アーティストは創造的なワールド構築により集中できます。",[101,1532,1533],{},"いずれの場合でも、開発ワークフローはほぼ同じです：",[209,1535,1536,1542,1548,1554],{},[212,1537,1538,1541],{},[120,1539,1540],{},"セットアップ"," - 必要な入力データを定義し、シーンをクリーンアップ",[212,1543,1544,1547],{},[120,1545,1546],{},"ジオメトリ生成"," - タスクに必要な実際のアセットをモデリング",[212,1549,1550,1553],{},[120,1551,1552],{},"アニメーション"," - トランスフォームとそれに関連するキーフレームを定義",[212,1555,1556,1559],{},[120,1557,1558],{},"出力"," - 望む成果物（3Dモデル、動画、画像シーケンスなど）",[101,1561,1562],{},"そして、これがまさに私たちが3Dテキスト動画レンダリングの例で辿る道です。",[84,1564,1566,1569],{"className":1565},[87,88,1134],[84,1567,1138],{"className":1568},[93],[84,1570,1572,1577,1579,1581,1582,1584,1158,1586],{"className":1571},[98],[1143,1573,1574],{},[120,1575,1576],{"style":722},"動く実例を探していますか？",[1149,1578],{},[1149,1580],{},"このガイドで紹介している例の統合に関する完全なソースコードは、GitHubで確認できます：",[1149,1583],{},[1149,1585],{},[142,1587,1589],{"href":1588},"https://github.com/cgwire/blender-programmatic-rendering?ref=blog.cg-wire.com","https://github.com/cgwire/blender-programmatic-rendering",[128,1591],{},[131,1593,1595],{"id":1594},"_1-scene-setup",[120,1596,1597],{},"1. シーン設定",[101,1599,1600],{},"シーンを生成する前に、まずはきれいなスタート地点が必要です。Blenderを開くと、通常はキューブ、カメラ、ライトを含むデフォルトのシーンが読み込まれます。このチュートリアルでは後者2つだけを使います。",[101,1602,1603,1604,1606],{},"Blenderをプログラム的に使う最初のステップは、",[255,1605,1468],{},"モジュールをインポートすることです。これによりPythonからBlenderのデータ、ツール、レンダリングパイプラインへ直接フルアクセスできます：",[1174,1608,1609,1613],{},[255,1610,1612],{"className":1611},[1179],"import bpy\n",[101,1614,1615],{},[255,1616,1618],{"className":1617},[1179],"bpy.data.objects.remove(bpy.data.objects.get(\"Cube\"), do_unlink=True)",[101,1620,1621,1622,1625,1626,1629],{},"ここではデフォルトの",[120,1623,1624],{},"Cube","オブジェクトを削除します。",[255,1627,1628],{},"do_unlink=True","というパラメータにより、Blenderはオブジェクトを削除するだけでなく、それを参照している可能性のあるどのシーンからもアンリンクします。",[128,1631],{},[131,1633,1635],{"id":1634},"_2-manipulating-3d-text",[120,1636,1637],{},"2. 3Dテキストの操作",[101,1639,1640],{},"次に、シーンへ3Dテキストオブジェクトを追加し、これを操作し、最終的にプログラムによってレンダリングする中核要素にします。",[1174,1642,1643],{},[255,1644,1646],{"className":1645},[1179],"bpy.ops.object.text_add(location=(0, 0, 0))\ntext_obj = bpy.context.object\ntext_obj.name = \"CaptionText\"\ntext_obj.data.body = \"Hello world!\"",[101,1648,1649,1650,1653],{},"このコードスニペットは、ワールド原点に新しいテキストオブジェクトを作成し、読みやすい名前を割り当て、表示テキストを",[255,1651,1652],{},"\"Hello world!\"","に設定します。",[101,1655,1656],{},"テキストにシーン内での存在感を持たせるために、ジオメトリを調整できます。サイズを大きくし、押し出し（エクストルード）を追加することで完全な3Dテキストになり、さらに両軸で中心揃えにしておくと、将来の変換やアニメーションが簡単になります：",[1174,1658,1659],{},[255,1660,1662],{"className":1661},[1179],"text_obj.data.size = 0.6\ntext_obj.data.extrude = 0.05\ntext_obj.data.align_x = \"CENTER\"\ntext_obj.data.align_y = \"CENTER\"",[101,1664,1665],{},"これらの調整により、テキストはきれいに中央揃えされ、適切にスケールされ、さらなる処理の準備が整います。",[225,1667,1669],{"className":1668},[87,228],[230,1670],{"src":1671,"className":1672,"alt":235,"loading":236,"width":709,"height":1673,"srcSet":1674,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-8cb519b5-e128-4bdd-9348-9aa0dfe2c36c.png",[234],901,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-8cb519b5-e128-4bdd-9348-9aa0dfe2c36c.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-8cb519b5-e128-4bdd-9348-9aa0dfe2c36c.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-8cb519b5-e128-4bdd-9348-9aa0dfe2c36c.png 1600w",[128,1676],{},[131,1678,1680],{"id":1679},"_3-adding-keyframes",[120,1681,1682],{},"3. キーフレームを追加する",[101,1684,1685,1686,1692],{},"次に、",[142,1687,748,1689],{"href":1688},"https://blog.cg-wire.com/stepped-animation/",[692,1690,1691],{},"キーフレームを挿入してテキスト位置のシンプルなアニメーションを作成","し、時間の経過に沿って動かします。",[101,1694,1695],{},"まず、タイムラインカーソルをフレーム1に移動し、テキストを開始位置に配置して、その位置をキーフレームとして記録します：",[1174,1697,1698],{},[255,1699,1701],{"className":1700},[1179],"bpy.context.scene.frame_set(1)\ntext_obj.location = (-4.0, 0.0, 1.0)\ntext_obj.keyframe_insert(data_path=\"location\", frame=1)",[101,1703,1704],{},"次にフレーム40へ進め、X軸方向にテキストをシフトさせて、新しい位置を示すもう1つのキーフレームを挿入します：",[1174,1706,1707],{},[255,1708,1710],{"className":1709},[1179],"bpy.context.scene.frame_set(40)\ntext_obj.location = (0.0, 0.0, 1.0)\ntext_obj.keyframe_insert(data_path=\"location\", frame=40)",[101,1712,1713],{},"これら2つのキーフレームが揃うと、Blenderは自動的にその間の移動を補間し、テキストがフレーム中央へ滑り込むような滑らかなアニメーションを作成します。",[225,1715,1717],{"className":1716},[87,228],[230,1718],{"src":1719,"className":1720,"alt":235,"loading":236,"width":709,"height":1673,"srcSet":1721,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-c33d7b37-264c-4c9f-a1ea-e8f2e2a39ff2.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-c33d7b37-264c-4c9f-a1ea-e8f2e2a39ff2.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-c33d7b37-264c-4c9f-a1ea-e8f2e2a39ff2.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-c33d7b37-264c-4c9f-a1ea-e8f2e2a39ff2.png 1600w",[128,1723],{},[131,1725,1727],{"id":1726},"_4-video-rendering",[120,1728,1729],{},"4. 動画のレンダリング",[101,1731,1732,1733,1738],{},"残っているのは、",[142,1734,748,1735],{"href":156},[692,1736,1737],{},"Blenderのレンダリング設定を構成","して、最終的な動画を出力するだけです。",[101,1740,1741,1742,1745,1746,1749],{},"まず、どのレンダリングエンジンを使うかを選びます：",[120,1743,1744],{},"Eevee"," か ",[120,1747,1748],{},"Cycles"," です。",[101,1751,1752],{},"Eeveeはリアルタイムのラスタライズエンジンなので非常に高速で、プレビューやスタイライズされたアニメーションに最適です。一方Cyclesは、物理ベースのパストレーサでより現実的なライティングを生成しますが、レンダリング時間がはるかに長くなります。素早い反復と多くの自動化ワークフローでは、Eeveeが一般により良い選択肢です：",[1174,1754,1755],{},[255,1756,1758],{"className":1757},[1179],"bpy.context.scene.render.engine = \"BLENDER_EEVEE\"",[101,1760,1761],{},"次に、出力解像度を指定します：",[1174,1763,1764],{},[255,1765,1767],{"className":1766},[1179],"bpy.context.scene.render.resolution_x = 1920\nbpy.context.scene.render.resolution_y = 1080",[101,1769,1770],{},"次にフレームレートとアニメーション範囲を設定します。ここでは24 fpsで60フレームのショットです：",[1174,1772,1773],{},[255,1774,1776],{"className":1775},[1179],"bpy.context.scene.render.fps = 24\nbpy.context.scene.frame_start = 1\nbpy.context.scene.frame_end = 60",[101,1778,1779],{},"Blenderは、最終動画をどのようにエンコードするかも知る必要があります。レンダリング速度のため、H.264の動画エンコーディングを使ってMP4として書き出します：",[1174,1781,1782],{},[255,1783,1785],{"className":1784},[1179],"bpy.context.scene.render.image_settings.file_format = \"FFMPEG\"\nbpy.context.scene.render.ffmpeg.format = \"MPEG4\"\nbpy.context.scene.render.ffmpeg.codec = \"H264\"",[101,1787,1788],{},"最後に、利便性のためカレントフォルダを使って出力ファイルの保存先を選びます：",[1174,1790,1791],{},[255,1792,1794],{"className":1793},[1179],"bpy.context.scene.render.filepath = \"//render.mp4\"",[101,1796,1797],{},"すべてが設定できたら、次の1つのコマンドでレンダリング処理を開始できます：",[1174,1799,1800],{},[255,1801,1803],{"className":1802},[1179],"bpy.ops.render.render(animation=True)",[128,1805],{},[131,1807,1809],{"id":1808},"_5-putting-it-all-together",[120,1810,1811],{},"5. まとめる",[101,1813,1814,1815,1818],{},"コードは完成しているので、あとはそれをPythonファイル",[255,1816,1817],{},"render.py","に入れるだけです：",[1174,1820,1821,1840],{},[255,1822,1183,1824,1826,1828,1830,1832,1834,1837],{"className":1823},[1179],[101,1825,1618],{},[101,1827,1646],{},[101,1829,1662],{},[101,1831,1701],{},[101,1833,1710],{},[101,1835,1836],{},"bpy.context.scene.render.engine = \"BLENDER_EEVEE\"\nbpy.context.scene.render.resolution_x = 1920\nbpy.context.scene.render.resolution_y = 1080\nbpy.context.scene.render.resolution_percentage = 100\nbpy.context.scene.render.fps = 24\nbpy.context.scene.frame_start = 1\nbpy.context.scene.frame_end = 60",[101,1838,1839],{},"bpy.context.scene.render.image_settings.file_format = \"FFMPEG\"\nbpy.context.scene.render.ffmpeg.format = \"MPEG4\"  # container\nbpy.context.scene.render.ffmpeg.codec = \"H264\"\nbpy.context.scene.render.ffmpeg.constant_rate_factor = \"HIGH\"\nbpy.context.scene.render.ffmpeg.gopsize = 12\nbpy.context.scene.render.ffmpeg.audio_codec = \"AAC\"\nbpy.context.scene.render.filepath = \"//render.mp4\"",[101,1841,1842],{},[255,1843,1803],{"className":1844},[1179],[101,1846,1847],{},"レンダリングを開始するために、スクリプトを実行します：",[1174,1849,1850],{},[255,1851,1854],{"className":1852},[1853],"language-bash","python3 render.py",[101,1856,1857],{},"レンダリングが完了したら、作業ディレクトリを確認してください。完全にプログラムで生成されたアニメーションが、これで視聴できる状態になっているはずです。",[225,1859,1861],{"className":1860},[87,228],[230,1862],{"src":1863,"className":1864,"alt":235,"loading":236,"width":1865,"height":1866,"srcSet":1867,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-2b287259-a96b-456b-b95e-375bf116e3a1.png",[234],1088,722,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-2b287259-a96b-456b-b95e-375bf116e3a1.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-2b287259-a96b-456b-b95e-375bf116e3a1.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-2b287259-a96b-456b-b95e-375bf116e3a1.png 1088w",[84,1869,1871,1875],{"className":1870},[87,88,1134],[84,1872,1874],{"className":1873},[93],"🔗",[84,1876,1878,1879],{"className":1877},[98],"コードは、再現しやすいようにGithubのリポジトリで確認できます：",[142,1880,748,1881],{"href":1588},[692,1882,1883],{},"github.com/cgwire/blender-programmatic-rendering",[128,1885],{},[131,1887,1888],{"id":1346},[120,1889,1890],{},"結論",[101,1892,1893],{},"この手順解説では、Blenderの中に完全な自動化パイプラインを構築しました。クリーンなシーンを用意し、3Dテキストを作成・修正し、キーフレームでアニメーションさせ、スムーズな補間でシーケンスをレンダリングしたのです。必要な手作業は一切ありません。すべてPythonだけで処理されます！",[101,1895,1896],{},"Blender APIがどれほどの制御を提供してくれるかを見た今、これらのアイデアをさらに大きく広げられます。ワークフローを自動化し、データからグラフィックスを生成し、シーンを組み立てる内部ツールを作り、バリエーションをレンダリングし、あるいは1つのコマンドでまるごとアニメーションを作ることもできます... アニメーション制作チームをもっと生産的にするための道が尽きることはありません。",[84,1898,1900,1903],{"className":1899},[87,88,89],[84,1901,583],{"className":1902},[93],[84,1904,1906,1907,1911],{"className":1905},[98],"アニメーションのプロセスについてさらに学ぶには ",[142,1908,1910],{"href":590,"rel":1909},[592],"Discordコミュニティへの参加を検討してください","！ベストプラクティスを共有する1,000人以上の専門家とつながれ、時には対面イベントも開催しています。ぜひあなたをお迎えできればうれしいです！ 😊",[84,1913,1915],{"className":1914},[87,598,599],[142,1916,605],{"href":590,"className":1917},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":1919},[1920,1921,1922,1923,1924,1925,1926],{"id":1477,"depth":607,"text":1480},{"id":1594,"depth":607,"text":1597},{"id":1634,"depth":607,"text":1637},{"id":1679,"depth":607,"text":1682},{"id":1726,"depth":607,"text":1729},{"id":1808,"depth":607,"text":1811},{"id":1346,"depth":607,"text":1890},"https://images.unsplash.com/photo-1622547748225-3fc4abd2cca0?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fHJlbmRlcnN8ZW58MHx8fHwxNzY2MzgyNjA1fDA&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":1929,"featured_at":621,"visibility":622},"2026-02-20T06:04:02.000+01:00","/blog-i18n/ja/blender-programmatic-rendering","2025-12-29T10:00:10.000+01:00",{"title":1435,"description":235},"blender-programmatic-rendering","blog-i18n/ja/blender-programmatic-rendering/index",[1936,1937],{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"oWbNO3-IVpDw_voRr6qrAq6lQPAjmF1KehdW3Cbw1Zg",{"id":1940,"title":1941,"authors":1942,"body":1944,"description":235,"extension":617,"feature_image":2651,"html":7,"meta":2652,"navigation":12,"path":2654,"published_at":2655,"seo":2656,"slug":2657,"stem":2658,"tags":2659,"__hash__":2662,"updated_at":2653,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-kitsu-versioning-addon/index.md","KitsuバージョニングアドオンでBlenderファイルのリビジョン管理を行う（2026）",[1943],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":1945,"toc":2642},[1946,1957,1964,1967,1972,1975,1978,1981,1984,1987,1989,1995,1998,2001,2027,2030,2057,2059,2065,2075,2099,2109,2112,2115,2146,2156,2159,2162,2165,2167,2173,2180,2201,2210,2217,2220,2223,2246,2249,2252,2267,2274,2290,2293,2336,2339,2345,2348,2350,2356,2359,2366,2384,2387,2390,2423,2425,2431,2438,2441,2444,2461,2464,2467,2492,2495,2497,2503,2512,2529,2559,2562,2588,2591,2601,2603,2607,2610,2613,2622,2636],[84,1947,1949,1953],{"className":1948},[87,88,89],[84,1950,1952],{"className":1951},[93],"🧱",[84,1954,1956],{"className":1955},[98],"混乱したファイル命名を、Blenderリビジョンの単一の真実の情報源で置き換えましょう。",[101,1958,1959,1960,1963],{},"すべてのプロジェクトは、良い意図から始まります。きれいな",[255,1961,1962],{},"model.blend","、整理されたフォルダ、そして「今回はちゃんと整頓しておこう」という約束からスタートします。",[101,1965,1966],{},"しかし締切が近づくにつれ、制作に静かに忍び寄るエントロピーが現実になります。やがてプロジェクトのディレクトリは、パニック気味の直前編集が積み重なった、考古学的な発掘現場のように見え始めます：",[1174,1968,1969],{},[255,1970,1971],{},"model.blend\nmodel_v2.blend\nmodel_v2b.blend\nmodel_final.blend\nmodel_final_really_final.blend\nmodel_FINAL_v3.blend",[101,1973,1974],{},"お分かりの通りです。誰かが急な変更を必要とし、別のアーティストが「念のため」でバージョンを枝分かれさせます。そうして、いったいどのファイルが「本物」なのか、誰も確信を持てなくなっていきます。チャットのコメントはファイル名と矛盾し、古いバージョンからショットがレンダーされ、そしてスーパーバイザーは深くため息をつきます。",[101,1976,1977],{},"アニメーションスタジオでは、このような小さなカオスが積み重なります。そこで必要になるのが、きちんとした真実の情報源です。",[101,1979,1980],{},"多くのチームでは、その情報源がKitsuです。そしてBlenderアーティストにとって不足しているのは、ファイルのバージョンが管理され、追跡でき、プロジェクトの制作データと確実に揃う状態を保つ自動化されたブリッジです。",[101,1982,1983],{},"そこで方針を決めます。BlenderがKitsuと連携し、パイプラインがついに「味方してくれている」感覚になるようなバージョニングシステムを作るのです。",[101,1985,1986],{},"このチュートリアルでは、Blender上から直接ファイルのリビジョンを管理するアドオンを作成します。BlenderをKitsuプロジェクトに接続し、3Dモデルのリビジョンを作成・アップロードし、既存のすべてのリビジョンを閲覧し、さらに過去のリビジョンをBlenderへ呼び戻せるようになります。",[128,1988],{},[131,1990,1992],{"id":1991},"workflow-overview",[120,1993,1994],{},"ワークフローの概要",[101,1996,1997],{},"一般的なKitsu主導のワークフローでは、アーティストがBlenderでシーンを開き作業を行い、マイルストーンに到達したらリビジョンをアップロードします。アーティストはレビューし、改良し、修正し、そして再度アップロードします。Kitsuは各ステップをきれいに管理してくれます。",[101,1999,2000],{},"ただ、クリックひとつでリビジョンをアップロードしたり、引き戻したりできれば便利ですよね？",[209,2002,2003,2009,2015,2021],{},[212,2004,2005,2008],{},[120,2006,2007],{},"Blenderから始める"," - 作業用シーンを開きます。モデリング、シェーディング、リギングなど、いま必要な作業に応じて対応します。",[212,2010,2011,2014],{},[120,2012,2013],{},"作業をチェックポイント化する"," - マイルストーン（「ブロッキング完了」「レビュー準備完了」など）に到達したら、Kitsu上で新しいリビジョンを作成します。",[212,2016,2017,2020],{},[120,2018,2019],{},"履歴を確認する"," - Kitsuはすべてのリビジョンを保存するため、スーパーバイザーには明確なタイムラインが提示され、ファイルを掘り起こさずにバージョン比較が可能になります。",[212,2022,2023,2026],{},[120,2024,2025],{},"新しい変更を取り込む"," - 別のバージョンが必要になったら、現在のワークスペースにアセットを取り込むだけです。",[101,2028,2029],{},"これは非常に基本的なワークフローなので、競合解決の扱い（同じショットに対して2人のアーティストが作業し、それぞれが新しいリビジョンを作成したら？ どう処理する？）といった問題に直面するのは避けられませんが、まずはアニメーションパイプラインのニーズに合わせて後で改善できる、機能するアドオンを作るには十分です。",[84,2031,2033,2036],{"className":2032},[87,88,1134],[84,2034,1138],{"className":2035},[93],[84,2037,2039,2044,2046,2048,2049,2051,1158,2053],{"className":2038},[98],[1143,2040,2041],{},[120,2042,2043],{"style":722},"動作例を探していますか？",[1149,2045],{},[1149,2047],{},"このガイドで紹介する例の統合について、完全なソースコードはGitHubで確認できます：",[1149,2050],{},[1149,2052],{},[142,2054,2056],{"href":2055},"https://github.com/cgwire/blender-kitsu-versioning-addon?ref=blog.cg-wire.com","https://github.com/cgwire/blender-kitsu-versioning-addon",[128,2058],{},[131,2060,2062],{"id":2061},"_1-populating-the-kitsu-dashboard",[120,2063,2064],{},"1. Kitsuダッシュボードを準備する",[101,2066,2067,2068,2074],{},"KitsuのWebインターフェースは、プロデューサー、コーディネーター、リードがプロジェクトの構造を素早く設定できるように設計されています。Blenderアーティストがリビジョンを公開する前に、制作中のアセットで制作データを埋めておく必要があります。",[142,2069,748,2071],{"href":2070},"https://blog.cg-wire.com/dcc-integration-blender-kitsu/",[692,2072,2073],{},"ローカル開発用のKitsu Dockerインスタンス","では：",[209,2076,2077,2083,2090,2096],{},[212,2078,2079,2082],{},[120,2080,2081],{},"Kitsuダッシュボード","にログインします。",[212,2084,2085,2086,2089],{},"メインのナビゲーションバーで",[120,2087,2088],{},"Productions","に移動します。",[212,2091,2092,2095],{},[120,2093,2094],{},"「Create production」","をクリックします（通常は右上）。",[212,2097,2098],{},"制作情報を入力します",[225,2100,2102],{"className":2101},[87,228],[230,2103],{"src":2104,"className":2105,"alt":235,"loading":236,"width":2106,"height":2107,"srcSet":2108,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-58cb0571-2b74-4110-9b07-9e15030bbd05.png",[234],985,694,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-58cb0571-2b74-4110-9b07-9e15030bbd05.png 600w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-58cb0571-2b74-4110-9b07-9e15030bbd05.png 985w",[101,2110,2111],{},"新しい制作はリストに表示されるので、開いてアセットの追加を開始できます。",[101,2113,2114],{},"アセットはプロジェクトの構成要素です。キャラクター、小道具、環境、車両... 制作管理が必要なものは何でも対象になります。",[209,2116,2117,2123,2130,2136],{},[212,2118,2119,2122],{},[120,2120,2121],{},"Productions → あなたの制作名","へ移動します。",[212,2124,2125,2126,2129],{},"制作内の",[120,2127,2128],{},"Assets","タブに切り替えます。",[212,2131,2132,2135],{},[120,2133,2134],{},"「Create Asset」","をクリックします。",[212,2137,2138,2141,2142,2145],{},[120,2139,2140],{},"アセット名","（例：「RobotHead」）と",[120,2143,2144],{},"アセット種別","（Character, Prop, Setなど）を入力します。",[225,2147,2149],{"className":2148},[87,228],[230,2150],{"src":2151,"className":2152,"alt":235,"loading":236,"width":2153,"height":2154,"srcSet":2155,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-f4336c33-57ef-4baa-9715-e0c749f7d9b4.png",[234],1270,870,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-f4336c33-57ef-4baa-9715-e0c749f7d9b4.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-f4336c33-57ef-4baa-9715-e0c749f7d9b4.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-f4336c33-57ef-4baa-9715-e0c749f7d9b4.png 1270w",[101,2157,2158],{},"これでアセットが作成され、3つのタスクが割り当てられました。 ",[101,2160,2161],{},"タスクは、各アセットに対してアーティストが行う制作手順（モデリング、シェーディング、リギングなど）を定義します。",[101,2163,2164],{},"これで、アドオンをテストするための準備が整いました。",[128,2166],{},[131,2168,2170],{"id":2169},"_2-linking-the-current-blender-project-to-a-kitsu-task",[120,2171,2172],{},"2. 現在のBlenderプロジェクトをKitsuのタスクに紐づける",[101,2174,2175,2176,2179],{},"まずは、UIの配置を定義し、",[255,2177,2178],{},"gazu","を読み込み、ドロップダウンメニューで公開するデータを準備する最小限のアドオン宣言から始めます：",[1174,2181,2182,2195],{},[255,2183,2185,2186,2189,2192],{"className":2184},[1179],"bl_info = {\n    \"name\": \"Model Versioning (Production/Task/Asset/Revisions)\",\n    \"author\": \"cgwire\",\n    \"version\": (1, 0, 0),\n    \"blender\": (2, 80, 0),\n    \"location\": \"View3D > Sidebar > ModelVersioning\",\n    \"description\": \"Browse productions, tasks, assets, and manage revisions (list/create/load)\",\n     \"category\": \"3D View\",\n}\n",[101,2187,2188],{},"import sys",[101,2190,2191],{},"sys.path.append(\"~/.local/lib/python3.11/site-packages\")",[101,2193,2194],{},"import os\nimport tempfile",[101,2196,2197],{},[255,2198,2200],{"className":2199},[1179],"import bpy\nimport gazu\nfrom bpy.props import EnumProperty, PointerProperty\nfrom bpy.types import Operator, Panel, PropertyGroup",[101,2202,2203,2204,2206,2207,2209],{},"注目点として、",[255,2205,2191],{},"により、",[255,2208,2178],{},"のような外部パッケージへアクセスするためにローカルのPythonインストールを使用できます。デフォルトではBlenderが独自のPython環境を動かすため、パッケージのインストールはやや面倒です。そこで、ローカルモジュールを参照するようBlenderに伝えます。このパスは、あなたのシステム設定に合わせて適宜更新してください。",[101,2211,2212,2213,2216],{},"バージョニングを自動化する前に、BlenderがKitsu上の",[439,2214,2215],{},"どこ","に現在のモデルが属するのかを理解する必要があります。つまり、プロジェクト、アセット、タスク、そして最終的にそれに紐づくリビジョンを特定します。",[101,2218,2219],{},"最初のステップは簡単です。Kitsuで認証し、利用可能な制作（Productions）を取得し、アーティストがサイドバーUIからコンテキストを直接選べるようにします。",[101,2221,2222],{},"アドオンが読み込まれたら、認証し、アドオンをKitsu APIホストへ向けます：",[1174,2224,2225,2240],{},[255,2226,2228,2229,2234,2235,2239],{"className":2227},[1179],"gazu.set_host(\"\u003C",[142,2230,2231],{"href":2231,"rel":2232},"http://localhost/api",[2233],"nofollow",">\")\nuser = gazu.log_in(\"",[142,2236,2238],{"href":2237},"mailto:admin@example.com","admin@example.com","\", \"mysecretpassword\")",[101,2241,2242],{},[255,2243,2245],{"className":2244},[1179],"temp_dir_path = tempfile.gettempdir()",[101,2247,2248],{},"これにより、制作を閲覧し、タスクを見つけ、そして最終的にリビジョンを作成するために使うセッションが確立されます。",[101,2250,2251],{},"ここから制作の構造を公開し始められます。プロジェクト、アセット、タスク、リビジョンの検索用ヘルパー関数を用意し、各ドロップダウンを動的に埋めます：",[1174,2253,2254,2261],{},[255,2255,2257,2258],{"className":2256},[1179],"def find_project(name):\n    return gazu.project.get_project_by_name(name)",[101,2259,2260],{},"def find_asset(project, name):\n    return gazu.asset.get_asset_by_name(project, name)",[101,2262,2263],{},[255,2264,2266],{"className":2265},[1179],"def find_task(asset, type_id):\n    return gazu.task.get_task_by_name(asset, type_id, \"main\")",[101,2268,2269,2270,2273],{},"各",[255,2271,2272],{},"EnumProperty","のコールバックは、Kitsuから新しいデータを取得します：",[1174,2275,2276],{},[255,2277,2279,2280,2282,2283,2286,2287,2289],{"className":2278},[1179],"def enum_projects(self, context):\n    items = ",[1215,2281],{},"\n    projects = gazu.project.all_projects()\n    for p in projects:\n        items.append((p",[1215,2284,2285],{},"\"name\"",", p",[1215,2288,2285],{},", \"\"))\n    if not items:\n        items.append((\"NONE\", \"--- no productions ---\", \"\"))\n    return items",[101,2291,2292],{},"アセット、タスク、リビジョンも同じパターンに従います：",[1174,2294,2295,2320],{},[255,2296,2298,2299,2301,2302,2304,2305,2307,2308],{"className":2297},[1179],"def enum_assets(self, context):\n    project = find_project(context.scene.mv_state.project)\n    items = ",[1215,2300],{},"\n    if project:\n        assets = gazu.asset.all_assets_for_project(project)\n        for t in assets:\n            items.append((t",[1215,2303,2285],{},", t",[1215,2306,2285],{},", \"\"))\n    if not items:\n        items.append((\"NONE\", \"--- no tasks ---\", \"\"))\n    return items",[101,2309,2310,2311,2313,2314,2304,2317,2307],{},"def enum_tasks(self, context):\n    project = find_project(context.scene.mv_state.project)\n    asset = find_asset(project, context.scene.mv_state.asset)\n    items = ",[1215,2312],{},"\n    if asset:\n        tasks = gazu.task.all_tasks_for_asset(asset)\n        for t in tasks:\n            items.append((t",[1215,2315,2316],{},"\"task_type_id\"",[1215,2318,2319],{},"\"task_type_name\"",[101,2321,2322],{},[255,2323,2325,2326,2328,2329,2332,2333,2335],{"className":2324},[1179],"def enum_revisions(self, context):\n    project = find_project(context.scene.mv_state.project)\n    asset = find_asset(project, context.scene.mv_state.asset)\n    task = find_task(asset, context.scene.mv_state.task)\n    items = ",[1215,2327],{},"\n    if task:\n        revisions = gazu.files.get_all_preview_files_for_task(task)\n        for r in revisions:\n            items.append((str(r",[1215,2330,2331],{},"\"revision\"","), str(r",[1215,2334,2331],{},"), \"\"))\n    if not items:\n        items.append((\"NONE\", \"--- no revisions ---\", \"\"))\n    return items",[101,2337,2338],{},"最後に、すべてのUI選択を1つの状態（state）オブジェクトに保存します：",[1174,2340,2341],{},[255,2342,2344],{"className":2343},[1179],"class MV_State(PropertyGroup):\n    project: EnumProperty(\n        name=\"Project\", description=\"Select project\", items=enum_projects\n    )\n    asset: EnumProperty(name=\"Asset\", description=\"Select asset\", items=enum_assets)\n    task: EnumProperty(name=\"Task\", description=\"Select task\", items=enum_tasks)\n    revision: EnumProperty(\n        name=\"Revision\", description=\"Select revision\", items=enum_revisions\n    )",[101,2346,2347],{},"これはパイプライン統合の土台です。これでBlenderはKitsuを閲覧でき、アーティストが作業中の“正確なタスク”に自分自身を紐づけられるようになりました。ここから、リビジョンのライフサイクルに取り組み始めます。",[128,2349],{},[131,2351,2353],{"id":2352},"_3-creating-a-new-revision-button",[120,2354,2355],{},"3. 「新規リビジョン」ボタンを作成する",[101,2357,2358],{},"まずアーティストが最も頻繁に触れる部分の自動化を始められます。それが新しいリビジョンの作成です。通常の手作業ワークフローでは、ファイルをエクスポートして、正しいタスクに対してKitsuへアップロードします。私たちのアドオンでは、その作業をBlender内の1つのボタン操作にまとめます。",[101,2360,2361,2362,2365],{},"Kitsuは",[255,2363,2364],{},"publish_preview()","を通じて新しいリビジョンを処理します。これはファイルとメタデータの両方を送信します：",[1174,2367,2368,2378],{},[255,2369,2371,2372,2375],{"className":2370},[1179],"temp_file_path = os.path.join(temp_dir_path, \"new_version.glb\")",[101,2373,2374],{},"bpy.ops.export_scene.gltf(filepath=temp_file_path, export_format=\"GLB\")",[101,2376,2377],{},"(comment, preview_file) = gazu.task.publish_preview(\n    task,\n    task_status,\n    revision=new_revision,\n    comment=\"increment revision\",\n    preview_file_path=temp_file_path,\n)",[101,2379,2380],{},[255,2381,2383],{"className":2382},[1179],"os.remove(temp_file_path)",[101,2385,2386],{},"アドオンでは、これをサイドバーのボタンからトリガーします。",[101,2388,2389],{},"オペレーターは主に3つのステップを実行します。アドオンの状態からユーザーの選択を取得し、次のリビジョン番号を計算し、エクスポートしたファイルを新しいリビジョンとしてアップロードします：",[1174,2391,2392,2417],{},[255,2393,2395,2396,2399,2402,2405,2408,2411,2414],{"className":2394},[1179],"class MV_OT_create_revision(Operator):\n    bl_idname = \"mv.create_revision\"\n    bl_label = \"Create Revision\"",[101,2397,2398],{},"    def invoke(self, context, event):\n        wm = context.window_manager\n        return wm.invoke_props_dialog(self, width=400)",[101,2400,2401],{},"    def execute(self, context):\n        project = find_project(context.scene.mv_state.project)\n        asset = find_asset(project, context.scene.mv_state.asset)\n        task = find_task(asset, context.scene.mv_state.task)\n        revision = context.scene.mv_state.revision\n        new_revision = int(revision) + 1",[101,2403,2404],{},"        task_status = gazu.task.get_task_status_by_name(\"todo\")",[101,2406,2407],{},"        temp_file_path = os.path.join(temp_dir_path, \"new_version.glb\")",[101,2409,2410],{},"        bpy.ops.export_scene.gltf(filepath=temp_file_path, export_format=\"GLB\")",[101,2412,2413],{},"        (comment, preview_file) = gazu.task.publish_preview(\n            task,\n            task_status,\n            revision=new_revision,\n            comment=\"increment revision\",\n            preview_file_path=temp_file_path,\n        )",[101,2415,2416],{},"        os.remove(temp_file_path)",[101,2418,2419],{},[255,2420,2422],{"className":2421},[1179],"        self.report({\"INFO\"}, \"Revision created\")\n        return {\"FINISHED\"}",[128,2424],{},[131,2426,2428],{"id":2427},"_4-pulling-a-revision-into-blender",[120,2429,2430],{},"4. リビジョンをBlenderへ取り込む",[101,2432,2433,2434,2437],{},"バージョニングは、公開することだけではありません。",[439,2435,2436],{},"戻る","ことも重要です。以前の段階をレビューしたり、トポロジを比較したり、前回の反復から細部を復元したりする場合、Blenderへ新しいリビジョンや古いリビジョンを素早く確実に読み込む手段が必要です。",[101,2439,2440],{},"タスクが選択されると、Kitsuからリビジョンを取り出すのは簡単な2ステップになります。選択したリビジョンに紐づくプレビューファイルをダウンロードし、それをBlenderへインポートします。",[101,2442,2443],{},"現在のタスクに対するすべてのプレビューファイルを取得したら、インデックスで目的のリビジョンを特定し、アセットを直接Blenderへ取り込みます：",[1174,2445,2446,2456],{},[255,2447,2371,2449],{"className":2448},[1179],[101,2450,2451,2452,2455],{},"preview_file = preview_files",[1215,2453,2454],{},"int(revision) - 1","\ngazu.files.download_preview_file(preview_file, temp_file_path)\nbpy.ops.import_scene.gltf(filepath=temp_file_path)",[101,2457,2458],{},[255,2459,2383],{"className":2460},[1179],[101,2462,2463],{},"これにより、制作のその時点での状態そのままのアセットを、統一された手順で取得できるようになります。",[101,2465,2466],{},"このワークフローを、作成（Create Revision）ボタンの構造と同様のオペレーターにまとめます：",[1174,2468,2469,2486],{},[255,2470,2472,2473,2476,2478,2484],{"className":2471},[1179],"class MV_OT_load_revision(Operator):\n    bl_idname = \"mv.load_revision\"\n    bl_label = \"Load Revision\"",[101,2474,2475],{},"    def execute(self, context):\n        project = find_project(context.scene.mv_state.project)\n        asset = find_asset(project, context.scene.mv_state.asset)\n        task = find_task(asset, context.scene.mv_state.task)\n        revision = context.scene.mv_state.revision\n        preview_files = gazu.files.get_all_preview_files_for_task(task)",[101,2477,2407],{},[101,2479,2480,2481,2483],{},"        preview_file = preview_files",[1215,2482,2454],{},"\n        gazu.files.download_preview_file(preview_file, temp_file_path)\n        bpy.ops.import_scene.gltf(filepath=temp_file_path)",[101,2485,2416],{},[101,2487,2488],{},[255,2489,2491],{"className":2490},[1179],"        self.report({\"INFO\"}, \"Opened Revision\")\n        return {\"FINISHED\"}",[101,2493,2494],{},"このオペレーターにより、アーティストはBlenderを離れることなく、Kitsuに保存されている任意のバージョンを閲覧して読み込むことが簡単になります。",[128,2496],{},[131,2498,2500],{"id":2499},"_5-registering-the-addon",[120,2501,2502],{},"5. アドオンを登録する",[101,2504,2505,2511],{},[142,2506,2508],{"href":2507},"https://blog.cg-wire.com/blender-addon-ui-scripting-guide/",[692,2509,2510],{},"このパネルが、リビジョンのワークフロー全体をつなぎます","：",[728,2513,2514,2517,2520,2523,2526],{},[212,2515,2516],{},"プロジェクトを選択",[212,2518,2519],{},"アセットを選択",[212,2521,2522],{},"タスクを選択",[212,2524,2525],{},"リビジョンを閲覧",[212,2527,2528],{},"クリックひとつでバージョンを作成または読み込み",[1174,2530,2531,2553],{},[255,2532,2534,2535,2538,2541,2544,2547,2550],{"className":2533},[1179],"class MV_PT_panel(Panel):\n    bl_label = \"Model Versioning\"\n    bl_idname = \"MV_PT_panel\"\n    bl_space_type = \"VIEW_3D\"\n    bl_region_type = \"UI\"\n    bl_category = \"ModelVersion\"",[101,2536,2537],{},"    def draw(self, context):\n        layout = self.layout\n        scene = context.scene\n        mv = scene.mv_state",[101,2539,2540],{},"        layout.label(text=\"Project\")\n         layout.prop(mv, \"project\", text=\"\")\n        layout.separator()",[101,2542,2543],{},"        layout.label(text=\"Asset\")\n         layout.prop(mv, \"asset\", text=\"\")\n        layout.separator()",[101,2545,2546],{},"        layout.label(text=\"Task\")\n         layout.prop(mv, \"task\", text=\"\")\n        layout.separator()",[101,2548,2549],{},"        layout.label(text=\"Revision\")\n         layout.prop(mv, \"revision\", text=\"\")\n        layout.separator()",[101,2551,2552],{},"        row = layout.row(align=True)\n        row.operator(\"mv.create_revision\", text=\"Create Revision\", icon=\"ADD\")",[101,2554,2555],{},[255,2556,2558],{"className":2557},[1179],"        layout.operator(\n            \"mv.load_revision\", text=\"Load Selected Revision\", icon=\"IMPORT\"\n        )",[101,2560,2561],{},"最後に、オペレーター、パネル、状態（state）を登録して、BlenderがUIを構築できるようにします：",[1174,2563,2564,2574],{},[255,2565,2567,2568,2571],{"className":2566},[1179],"classes = (\n    MV_State,\n    MV_OT_create_revision,\n    MV_OT_load_revision,\n    MV_PT_panel,\n)",[101,2569,2570],{},"def register():\n    for c in classes:\n        bpy.utils.register_class(c)\n    bpy.types.Scene.mv_state = PointerProperty(type=MV_State)",[101,2572,2573],{},"def unregister():\n    for c in reversed(classes):\n        bpy.utils.unregister_class(c)\n    if hasattr(bpy.types.Scene, \"mv_state\"):\n        del bpy.types.Scene.mv_state",[101,2575,2576],{},[255,2577,2579,2580,2583,2584,2587],{"className":2578},[1179],"if ",[120,2581,2582],{},"name"," == \"",[120,2585,2586],{},"main","\":\n    register()",[101,2589,2590],{},"この時点で、モデルのバージョニングワークフローは完全に双方向になっています。Blenderから新しいリビジョンを公開でき、以前のものを即座に取得できます。",[225,2592,2594],{"className":2593},[87,228],[230,2595],{"src":2596,"className":2597,"alt":235,"loading":236,"width":2598,"height":2599,"srcSet":2600,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-00e861e7-3b2e-4bdc-80b8-1af740cab480.png",[234],759,488,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-00e861e7-3b2e-4bdc-80b8-1af740cab480.png 600w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-00e861e7-3b2e-4bdc-80b8-1af740cab480.png 759w",[128,2602],{},[131,2604,2605],{"id":1346},[120,2606,1890],{},[101,2608,2609],{},"Blender APIのオペレーターを数個と、Gazu SDKの便利さを組み合わせることで、Blenderの中にそのまま存在し、Kitsuと同期し続ける、実用的（ただし基本的な）バージョニングワークフローを構築しました。アーティストはBlenderのシーンをKitsuのプロジェクト、アセット、タスクに紐づけ、新しいリビジョンをボタンひとつで作成し、任意のタスクのリビジョン履歴をすべて閲覧し、比較や復元が必要になったときは古いバージョンを直接Blenderへ取り込めます。",[101,2611,2612],{},"このワークフローは、まだ始まりにすぎません。ここから、アドオンを拡張して自動エクスポート、サムネイルやトゥルーターンテーブルのレンダリング、複数の出力形式の対応、スーパーバイザー向けレビュー用ツール、さらにはレンダーファームへの連携などに広げられるでしょう。",[101,2614,2615,2616,2621],{},"まずは、このバージョニングアドオンの",[142,2617,748,2618],{"href":2055},[692,2619,2620],{},"GitHubリポジトリ","をクローンして、自分でも試してみてください！",[84,2623,2625,2628],{"className":2624},[87,88,89],[84,2626,583],{"className":2627},[93],[84,2629,2631,2632,2635],{"className":2630},[98],"アニメーション制作のプロセスについてさらに学ぶには、",[142,2633,1395],{"href":590,"rel":2634},[592],"。私たちは1,000人以上の専門家とつながっており、ベストプラクティスを共有し、時には現地イベントも開催しています。ぜひ歓迎します！ 😊",[84,2637,2639],{"className":2638},[87,598,599],[142,2640,605],{"href":590,"className":2641},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":2643},[2644,2645,2646,2647,2648,2649,2650],{"id":1991,"depth":607,"text":1994},{"id":2061,"depth":607,"text":2064},{"id":2169,"depth":607,"text":2172},{"id":2352,"depth":607,"text":2355},{"id":2427,"depth":607,"text":2430},{"id":2499,"depth":607,"text":2502},{"id":1346,"depth":607,"text":1890},"https://images.unsplash.com/photo-1617746533234-288e5cf484e2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDMwfHxhbmltYXRpb24lMjBwaXBlbGluZXxlbnwwfHx8fDE3NjYzODE5ODZ8MA&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":2653,"featured_at":621,"visibility":622},"2026-02-20T06:04:01.000+01:00","/blog-i18n/ja/blender-kitsu-versioning-addon","2025-12-22T10:00:20.000+01:00",{"title":1941,"description":235},"blender-kitsu-versioning-addon","blog-i18n/ja/blender-kitsu-versioning-addon/index",[2660,2661],{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"eGBSo-eSNAi3-nyZ73vJVVakmWAlmsvIl8-iRrOIFuA",{"id":2664,"title":2665,"authors":2666,"body":2668,"description":235,"extension":617,"feature_image":3259,"html":7,"meta":3260,"navigation":12,"path":3261,"published_at":3262,"seo":3263,"slug":3264,"stem":3265,"tags":3266,"__hash__":3269,"updated_at":2653,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-kitsu-low-res-preview/index.md","Kitsu（2026）を使ったBlenderでの低解像度アニメーションプレビューの自動化",[2667],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":2669,"toc":3249},[2670,2681,2684,2687,2690,2693,2710,2713,2739,2741,2747,2750,2753,2768,2776,2778,2784,2791,2805,2808,2811,2813,2819,2826,2835,2856,2863,2866,2869,2872,2877,2885,2888,2890,2896,2910,2913,2931,2968,2971,2979,2986,2988,2994,3003,3006,3070,3090,3100,3103,3106,3115,3118,3128,3130,3136,3139,3146,3152,3155,3161,3170,3172,3178,3181,3184,3193,3195,3199,3202,3222,3225,3228,3243],[84,2671,2673,2677],{"className":2672},[87,88,89],[84,2674,2676],{"className":2675},[93],"⚡",[84,2678,2680],{"className":2679},[98],"数時間ではなく数秒でレンダーできる軽量なプレビューで、アニメーションレビューを高速化します。",[101,2682,2683],{},"フル解像度のレンダーを待ってからショットを確認するのは、制作全体の進行を遅らせます。アーティストは待ち時間に時間を取られ、スーパーバイザーもフィードバックを受け取るのが遅れてしまいます。反復ループの効率が悪いのです。",[101,2685,2686],{},"そこで、Blender上で低解像度のアニメーションプレビューを直接作成し、アニメーションパイプラインの一部としてPythonでKitsuへ自動アップロードしましょう。これらのプレビューはレンダーが速く、レビューしやすく、承認のためにKitsuで素早く利用できます。",[101,2688,2689],{},"これは大きな効果があります。フル解像度のレンダーは数時間かかることがあり、何千ものショットを扱うとクラウドストレージやネットワーク帯域のコストも決して軽くありません。1080pから480pにするだけで、サイズを最大5倍まで（＝最大5分の1）にできます！",[101,2691,2692],{},"本チュートリアルでは、次の内容を扱います：",[728,2694,2695,2698,2701,2707],{},[212,2696,2697],{},"低解像度プレビュー用にBlenderのレンダー設定を調整する",[212,2699,2700],{},"Pythonでレンダープロセスを自動化する",[212,2702,2703,2706],{},[255,2704,2705],{},"ffmpeg","を使って動画に透かしとタイムスタンプを追加し、素早く状況を把握できるようにする",[212,2708,2709],{},"動画を出力し、Kitsuへアップロードする",[101,2711,2712],{},"最後には、レビューにかかる時間を短縮しつつ、フィードバックの質を犠牲にしないスクリプトが手に入ります。",[84,2714,2716,2719],{"className":2715},[87,88,1134],[84,2717,1138],{"className":2718},[93],[84,2720,2722,2726,2728,2730,2731,2733,1158,2735],{"className":2721},[98],[1143,2723,2724],{},[120,2725,1576],{"style":722},[1149,2727],{},[1149,2729],{},"このガイドで紹介している例の統合（インテグレーション）の完全なソースコードは、私たちのGitHubで確認できます：",[1149,2732],{},[1149,2734],{},[142,2736,2738],{"href":2737},"https://github.com/cgwire/blender-kitsu-low-res-preview?ref=blog.cg-wire.com","https://github.com/cgwire/blender-kitsu-low-res-preview",[128,2740],{},[131,2742,2744],{"id":2743},"_1-simple-blender-scene-setup",[120,2745,2746],{},"1. シンプルなBlenderシーンのセットアップ",[101,2748,2749],{},"アニメーション付きプレビューを作る前に、シーン内に開始用のオブジェクトが必要です。このチュートリアルでは、Blenderのデフォルトのキューブを使います。",[101,2751,2752],{},"まず、シーンとキューブの参照を作成します：",[1174,2754,2755,2758],{},[255,2756,1612],{"className":2757},[1179],[101,2759,2760],{},[255,2761,2763,2764,2767],{"className":2762},[1179],"cube = bpy.data.objects",[1215,2765,2766],{},"\"Cube\"","\nscene = bpy.context.scene",[225,2769,2771],{"className":2770},[87,228],[230,2772],{"src":2773,"className":2774,"alt":235,"loading":236,"width":709,"height":1673,"srcSet":2775,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-bf950a7a-c387-4b8d-9318-49e5bd3251bd.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-bf950a7a-c387-4b8d-9318-49e5bd3251bd.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-bf950a7a-c387-4b8d-9318-49e5bd3251bd.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-bf950a7a-c387-4b8d-9318-49e5bd3251bd.png 1600w",[128,2777],{},[131,2779,2781],{"id":2780},"_2-adding-keyframes-for-animation",[120,2782,2783],{},"2. アニメーション用のキーフレームを追加する",[101,2785,2786,2787,2790],{},"次のステップはキューブをアニメーション化することです。モデリングのプレビューを素早く行うには、短いシーケンスが理想です。ここでは",[120,2788,2789],{},"360°回転","を48フレーム（24 FPSで2秒）で作成します：",[1174,2792,2793],{},[255,2794,2796,2797,2800,2801,2804],{"className":2795},[1179],"for frame, angle in ",[1215,2798,2799],{},"(1, 0), (12, 1.57), (24, 3.14), (36, 4.71), (48, 6.28)",":\n    scene.frame_set(frame)\n    cube.rotation_euler",[1215,2802,2803],{},"2"," = angle\n    cube.keyframe_insert(data_path=\"rotation_euler\", index=2)",[101,2806,2807],{},"このループは一定間隔でキーフレームを設定し、Z軸の周りにpi/2ずつ滑らかに回転させます。フレーム数を少なくすることでレンダーが速くなり、プレビュー用途に最適になります。",[101,2809,2810],{},"この時点で、Blender上でタイムラインをスクラブして、キューブが期待どおりに回転するか確認できます。",[128,2812],{},[131,2814,2816],{"id":2815},"_3-low-resolution-rendering",[120,2817,2818],{},"3. 低解像度レンダリング",[101,2820,2821,2822,2825],{},"アニメーションが用意できたら、Blenderで",[120,2823,2824],{},"高速で低解像度のプレビュー","をレンダーするように設定します。目的は品質よりもスピードです。レビューに十分に見やすく、かつ作成が素早いものを目指します。",[101,2827,2828,2829,2834],{},"ここでは、",[142,2830,748,2831],{"href":156},[692,2832,2833],{},"スピードのためのEeveeレンダリングエンジンを使い、不要なレンダリングのオーバーヘッドを減らします","。Eeveeは単純なラスターライズ（画像の格子化）エンジンなので、Cyclesよりはるかに高速です。90%のケースでは、超リアルな出力は必要ありません。",[1174,2836,2837,2850],{},[255,2838,2840,2841,2844,2847],{"className":2839},[1179],"scene.render.engine = \"BLENDER_EEVEE\"",[101,2842,2843],{},"scene.render.resolution_x = 1920\nscene.render.resolution_y = 1080\nscene.render.resolution_percentage = 50",[101,2845,2846],{},"scene.render.fps = 24\nscene.frame_start = 1\nscene.frame_end = 48  # アニメーションの長さに合わせてください",[101,2848,2849],{},"scene.render.image_settings.file_format = \"FFMPEG\"\nscene.render.ffmpeg.format = \"MPEG4\"\nscene.render.ffmpeg.codec = \"H264\"",[101,2851,2852],{},[255,2853,2855],{"className":2854},[1179],"scene.render.filepath = \"//preview.mp4\"",[101,2857,2858,2859,2862],{},"古典的な横長の解像度を使いつつも、",[255,2860,2861],{},"resolution_percentage","を下げたり、Eeveeで高品質サンプリングをオフにしたりすると、プレビューのレンダー時間を大幅に減らせます。",[101,2864,2865],{},"残りの設定はかなり標準的です。24 FPSで合計48フレーム、出力はH264エンコードのmp4動画（圧縮を速くするため）で、スクリプトの現在のフォルダに書き込まれます。",[101,2867,2868],{},"用途に応じて、解像度、フレームレート、ビットレートを下げれば、プレビューのサイズも小さくできます。ただし、レビュー工程に必要なだけの品質は確保する必要があるので、パフォーマンスとの最適なバランスになるよう設定を調整してください。",[101,2870,2871],{},"最後に、レンダーを1行でトリガーできます：",[1174,2873,2874],{},[255,2875,1803],{"className":2876},[1179],[225,2878,2880],{"className":2879},[87,228],[230,2881],{"src":2882,"className":2883,"alt":235,"loading":236,"width":1865,"height":1866,"srcSet":2884,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-27b0c802-b589-4306-b52b-5f910b58320b.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-27b0c802-b589-4306-b52b-5f910b58320b.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-27b0c802-b589-4306-b52b-5f910b58320b.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-27b0c802-b589-4306-b52b-5f910b58320b.png 1088w",[101,2886,2887],{},"このプレビュービデオは、すぐにレビューに使うことができるほか、Kitsuへアップロードする前にFFmpegのようなツールでタイムスタンプや透かし、または独自の命名規則を追加するなど、追加処理も可能です。",[128,2889],{},[131,2891,2893],{"id":2892},"_4-ffmpeg-processing-timestamp-naming-watermark",[120,2894,2895],{},"4. FFmpeg処理：タイムスタンプ、命名、透かし",[101,2897,2898,2899,2902,2903,2909],{},"Blenderがアニメーションを動画ファイルにレンダーしたら、次は",[120,2900,2901],{},"FFmpeg","でさらに処理できます。これは",[142,2904,748,2906],{"href":2905},"https://blog.cg-wire.com/ffmpeg-commands-for-animators/",[692,2907,2908],{},"制作パイプラインでよくある手順","で、タイムスタンプ、透かし、またはカスタムの命名などを追加して、レビューに使える状態に整えます。",[101,2911,2912],{},"プレビューをレンダーした後、ターミナルで次のコマンドを実行します：",[1174,2914,2915],{},[255,2916,2918,2919,2922,2923,2926,2927,2930],{"className":2917},[1853],"ffmpeg -framerate 24 \\\\\n  -i preview.mp4 \\\\\n  -i watermark.png \\\\\n  -filter_complex \"\\\\\n    ",[1215,2920,2921],{},"0:v","drawtext=text='%{pts\\\\:hms}':x=10:y=10:fontsize=24:fontcolor=white:bordercolor=black:borderw=2",[1215,2924,2925],{},"v1","; \\\\\n    [v1]",[1215,2928,2929],{},"1:v","overlay=W-w-20:H-h-20\" \\\\\n  -c:v libx264 -crf 22 -pix_fmt yuv420p \\\\\n  preview_with_stamp.mp4",[728,2932,2933,2941,2953,2961],{},[212,2934,2935,2940],{},[120,2936,2937],{},[255,2938,2939],{},"drawtext"," は左上に現在進行中のタイムスタンプを重ねて表示します。",[212,2942,2943,2948,2949,2952],{},[255,2944,2945],{},[120,2946,2947],{},"overlay"," は右下に透かし画像（",[255,2950,2951],{},"watermark.png","）を配置します。",[212,2954,2955,2960],{},[120,2956,2957],{},[255,2958,2959],{},"c:v libx264 -crf 22 -pix_fmt yuv420p"," は動画再生の互換性と品質を確保します。",[212,2962,2963,2964,2967],{},"出力ファイル ",[255,2965,2966],{},"preview_with_stamp.mp4"," が、レビュー準備完了の最終プレビューです。",[101,2969,2970],{},"もちろん、チームやクライアントのレビュー用にプレビューを標準化するため、必要に応じてフォントサイズ、位置、透かしの配置などを調整できます。",[225,2972,2974],{"className":2973},[87,228],[230,2975],{"src":2976,"className":2977,"alt":235,"loading":236,"width":1865,"height":1866,"srcSet":2978,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-aaed9f6c-1b29-4592-b629-1830a6f2aa79.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-aaed9f6c-1b29-4592-b629-1830a6f2aa79.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-aaed9f6c-1b29-4592-b629-1830a6f2aa79.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-aaed9f6c-1b29-4592-b629-1830a6f2aa79.png 1088w",[101,2980,2981,2982,2985],{},"これで、制作に向けた低解像度アニメーションプレビューの準備が完了です。ファイルは、素早いフィードバックのために",[120,2983,2984],{},"Kitsu","へアップロードする準備ができています。",[128,2987],{},[131,2989,2991],{"id":2990},"_5-uploading-to-kitsu-via-gazu",[120,2992,2993],{},"5. Gazu経由でKitsuへアップロードする",[101,2995,2996,2997,2999,3000,3002],{},"低解像度プレビューが用意できたら、ダッシュボードから直接",[120,2998,2984],{},"へアップロードするか、",[255,3001,2178],{},"のPython SDKを使えます。Kitsuは、アーティストやスーパーバイザーがプレビューにすぐアクセスしてレビューできる共同作業型のパイプライントラッカーです。",[101,3004,3005],{},"次のPythonスクリプトは、プロジェクトとタスクを選んでプレビューをアップロードできる、シンプルな対話型CLIを提供します：",[1174,3007,3008,3064],{},[255,3009,3011,3012,3022,3035,3048,3055,3058,3061],{"className":3010},[1179],"import gazu",[101,3013,3014,3015,3018,3019],{},"def pickProject(label, list_of_items):\n    \"\"\"Helper UI to pick one item from a list.\"\"\"\n    for i, item in enumerate(list_of_items):\n        print(f\"{i + 1}. {item",[1215,3016,3017],{},"'name'","}\")\n    idx = int(input(f\"Choose {label} number: \")) - 1\n    return list_of_items",[1215,3020,3021],{},"idx",[101,3023,3024,3025,3028,3029,3032,3033,1279],{},"def pickTask(label, list_of_items):\n    \"\"\"Helper UI to pick one item from a list.\"\"\"\n    for i, item in enumerate(list_of_items):\n        asset = gazu.entity.get_entity(item",[1215,3026,3027],{},"\"entity_id\"",")\n        status = gazu.task.get_task_status(item",[1215,3030,3031],{},"\"task_status_id\"",")\n        type = gazu.task.get_task_type(item",[1215,3034,2316],{},[101,3036,3037,3038,3040,3041,3043,3044,3018,3046],{},"        print(f\"{i + 1}. {asset",[1215,3039,3017],{},"} {type",[1215,3042,3017],{},"} {status",[1215,3045,3017],{},[1215,3047,3021],{},[101,3049,2228,3050,2234,3053,2239],{},[142,3051,2231],{"href":2231,"rel":3052},[2233],[142,3054,2238],{"href":2237},[101,3056,3057],{},"projects = gazu.project.all_projects()\nproject = pickProject(\"project\", projects)",[101,3059,3060],{},"tasks = gazu.task.all_tasks_for_project(project)\ntask = pickTask(\"task\", tasks)",[101,3062,3063],{},"print(\"Uploading preview...\")\ntask_status = gazu.task.get_task_status_by_name(\"todo\")\nresult = gazu.task.publish_preview(\n    task,\n    task_status,\n    comment=\"Auto-generated preview\",\n    preview_file_path=\"./preview.mp4\",\n)",[101,3065,3066],{},[255,3067,3069],{"className":3068},[1179],"print(\"Done:\", result)",[101,3071,3072,3073,3075,3076,3081,3082,3085,3086,3089],{},"まず、",[255,3074,2178],{},"であなたの資格情報を使ってKitsuにログインします。ここでは、",[142,3077,748,3078],{"href":2070},[692,3079,3080],{},"Kitsu Dockerによるローカル開発環境のインストール","を使用します。このプログラムでは、利用可能な異なるKitsu APIエンドポイントを使って制作データをすべて取得し、そこから",[120,3083,3084],{},"プロジェクト","と",[120,3087,3088],{},"タスク","を選択できます：",[225,3091,3093],{"className":3092},[87,228],[230,3094],{"src":3095,"className":3096,"alt":235,"loading":236,"width":3097,"height":3098,"srcSet":3099,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-21091709-64dd-41c6-875e-2cdce8b5b178.png",[234],1343,816,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-21091709-64dd-41c6-875e-2cdce8b5b178.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-21091709-64dd-41c6-875e-2cdce8b5b178.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-21091709-64dd-41c6-875e-2cdce8b5b178.png 1343w",[101,3101,3102],{},"そして、前のステップで生成したプレビュー動画を、選択したタスクへアップロードします。",[101,3104,3105],{},"完了すると、プレビューはKitsuのレビュー画面で利用可能になり、高解像度のレンダーを待たずに、チームメンバーやスーパーバイザーがフィードバックを出しやすくなります。",[225,3107,3109],{"className":3108},[87,228],[230,3110],{"src":3111,"className":3112,"alt":235,"loading":236,"width":2106,"height":3113,"srcSet":3114,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-78d2cd48-21e9-4599-9b2b-a5e5bef63f76.png",[234],948,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-78d2cd48-21e9-4599-9b2b-a5e5bef63f76.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-78d2cd48-21e9-4599-9b2b-a5e5bef63f76.png 985w",[101,3116,3117],{},"レビューエンジンは、フレームに素早く注釈を付け、正確なショットに対してコメントを追加するのに最適です：",[225,3119,3121],{"className":3120},[87,228],[230,3122],{"src":3123,"className":3124,"alt":235,"loading":236,"width":3125,"height":3126,"srcSet":3127,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-6ae9b3dd-18e9-4d85-9fa6-e5106babc87e.png",[234],1438,809,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-6ae9b3dd-18e9-4d85-9fa6-e5106babc87e.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-6ae9b3dd-18e9-4d85-9fa6-e5106babc87e.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-6ae9b3dd-18e9-4d85-9fa6-e5106babc87e.png 1438w",[128,3129],{},[131,3131,3133],{"id":3132},"_6-putting-it-all-together",[120,3134,3135],{},"6. すべてをまとめる",[101,3137,3138],{},"タスクを最初から最後まで自動化するには、簡単なbashコマンドを書きます：",[101,3140,3141],{},[120,3142,3143],{},[692,3144,3145],{},"preview.sh",[1174,3147,3148],{},[255,3149,3151],{"className":3150},[1179],"python3 render.py && ./watermark.sh && python3 upload.py",[101,3153,3154],{},"その後、プレビューを共有する必要があるたびにスクリプトを実行できます：",[1174,3156,3157],{},[255,3158,3160],{"className":3159},[1179],"./preview.sh",[101,3162,3163,3164,3169],{},"最終結果を自分で試すには、私たちの",[142,3165,748,3166],{"href":2737},[692,3167,3168],{},"Githubリポジトリ blender-kitsu-low-res-preview","をご覧ください。",[128,3171],{},[131,3173,3175],{"id":3174},"_7-artist-friendly-addon-overview",[120,3176,3177],{},"7. アーティスト向けアドオンの概要",[101,3179,3180],{},"この記事の範囲外ですが、このコードをBlenderのアドオンにまとめて、アーティストが簡単に使えるようにすることも可能です。",[101,3182,3183],{},"アップロードするために、制作物（プロダクション）、アセット、タスクを選ぶドロップダウンメニューを格納するメインパネルが必要になります。そして、アップロード用のボタンをクリックするだけでよい形にします。アップロードのロジックでは、レンダリング、透かし処理のためのffmpegをサブプロセスとして呼び出し、さらに一時ファイルを実際にKitsuへ送信します。",[101,3185,3186,3187,3192],{},"詳しくは",[142,3188,748,3189],{"href":2507},[692,3190,3191],{},"Blender Add-on UI Development","に関する記事をご覧ください。",[128,3194],{},[131,3196,3197],{"id":1346},[120,3198,1890],{},[101,3200,3201],{},"ここまでで、完全なパイプラインを構築できました。Blenderでシンプルな3Dオブジェクトを作り、アニメーションさせ、低解像度のプレビューを生成し、タイムスタンプと透かしを追加し、そしてKitsuへアップロードします。得られるメリットはすぐに明確です：",[728,3203,3204,3210,3216],{},[212,3205,3206,3209],{},[120,3207,3208],{},"より速いレビュー"," - スーパーバイザーやチームメンバーは、フル解像度のレンダーを待たずに、プレビューをすぐに視聴できます。",[212,3211,3212,3215],{},[120,3213,3214],{},"より速い反復"," - アーティストはより早くフィードバックを受け取れます。これにより反復ループが短くなり、ボトルネックが減ります。",[212,3217,3218,3221],{},[120,3219,3220],{},"より少ない詰まり（ブロッカー）"," - 自動化されたプレビューとアップロードにより、パイプラインでの反復的な手作業がなくなり、成果物の一貫性が保たれます。",[101,3223,3224],{},"これまで1時間かかっていた手作業は、いくつかのスクリプトで処理できるようになり、チームは制作の「創造的な側面」に集中する時間を増やせます。",[101,3226,3227],{},"さらに、あなたのアニメーションスタジオのニーズに応じてこのワークフローを発展させることもできます。Blenderにボタンやパネルを追加してワンクリックでパイプライン全体を実行したり、単一のスクリプトで複数のショットやシーンのプレビューを自動で一括生成したり、といったことが可能です。",[84,3229,3231,3234],{"className":3230},[87,88,89],[84,3232,583],{"className":3233},[93],[84,3235,3237,3238,3242],{"className":3236},[98],"アニメーションの制作プロセスについてもっと知るには ",[142,3239,3241],{"href":590,"rel":3240},[592],"私たちのDiscordコミュニティに参加することを検討してください","！ 私たちはベストプラクティスを共有する1000人以上の専門家とつながっており、時々対面イベントも企画しています。ぜひようこそお迎えしたいです！ 😊",[84,3244,3246],{"className":3245},[87,598,599],[142,3247,605],{"href":590,"className":3248},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":3250},[3251,3252,3253,3254,3255,3256,3257,3258],{"id":2743,"depth":607,"text":2746},{"id":2780,"depth":607,"text":2783},{"id":2815,"depth":607,"text":2818},{"id":2892,"depth":607,"text":2895},{"id":2990,"depth":607,"text":2993},{"id":3132,"depth":607,"text":3135},{"id":3174,"depth":607,"text":3177},{"id":1346,"depth":607,"text":1890},"https://images.unsplash.com/photo-1653200256306-6dc84510dfb6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fGFuaW1hdGlvbiUyMHBpcGVsaW5lfGVufDB8fHx8MTc2NTA5ODQ2Mnww&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":2653,"featured_at":621,"visibility":622},"/blog-i18n/ja/blender-kitsu-low-res-preview","2025-12-15T10:00:23.000+01:00",{"title":2665,"description":235},"blender-kitsu-low-res-preview","blog-i18n/ja/blender-kitsu-low-res-preview/index",[3267,3268],{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"XwK7MTrna4oNLckd4xU2SaNAY416u1FGLnjftZQa5yg",{"id":3271,"title":3272,"authors":3273,"body":3275,"description":235,"extension":617,"feature_image":3984,"html":7,"meta":3985,"navigation":12,"path":3987,"published_at":3988,"seo":3989,"slug":3990,"stem":3991,"tags":3992,"__hash__":3995,"updated_at":3986,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-kitsu-breakdown-automation/index.md","PythonとKitsuでBlenderショットを自動生成する方法（2026）",[3274],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":3276,"toc":3975},[3277,3288,3295,3302,3305,3308,3315,3342,3344,3350,3364,3367,3370,3412,3422,3427,3430,3439,3445,3472,3477,3480,3482,3488,3499,3502,3543,3548,3555,3558,3560,3566,3569,3575,3581,3586,3593,3596,3598,3604,3615,3626,3638,3658,3661,3663,3669,3680,3695,3708,3718,3720,3726,3729,3738,3902,3907,3916,3926,3934,3936,3940,3943,3952,3955,3969],[84,3278,3280,3284],{"className":3279},[87,88,89],[84,3281,3283],{"className":3282},[93],"🧩",[84,3285,3287],{"className":3286},[98],"ショットのセットアップを自動化し、手作業のアセット配置にかかる何時間もの作業をなくしましょう。",[101,3289,3290,3291,3294],{},"アニメーションスタジオでは、各ショットにどのアセットを登場させる必要があるかを追跡するために ",[120,3292,3293],{},"ブレイクダウンリスト"," が使われます。",[101,3296,3297,3298,3301],{},"想像してみてください。最新の制作で、VFXアーティストとしてBlenderの何もないビューポートを前にしているあなた。マネージャーが、アセット、ショット、タイミングの手がかりが詳細に書かれたリストを渡し、",[439,3299,3300],{},"\"これをBlenderのシーンにして。\"","と言ってきます。",[101,3303,3304],{},"最初に思いつくのは、アセットマネージャーにログインして全てのオブジェクトを手作業で配置することかもしれません。しかし、数百のアセットが含まれる複雑なシーンはどうでしょうか？",[101,3306,3307],{},"ここで役立つのが、シンプルな自動化です。PythonのBlenderスクリプトを使えば、Kitsuのブレイクダウンデータを読み取り、数分で初期シーンを自動生成できます。",[101,3309,3310,3311,3314],{},"この記事では、完全な例を順に説明します。",[120,3312,3313],{},"Gazu"," のPython APIでブレイクダウンを取得し、新しいBlenderシーンを作成し、アセットをダウンロードして、Blenderにインポートします。最後には、レイアウトまたはアニメーションにすぐ使える状態で、シーンを自動構築する最小限のパイプラインが手に入ります。",[84,3316,3318,3321],{"className":3317},[87,88,1134],[84,3319,1138],{"className":3320},[93],[84,3322,3324,3329,3331,3333,3334,3336,1158,3338],{"className":3323},[98],[1143,3325,3326],{},[120,3327,3328],{"style":722},"動く例を探していますか？",[1149,3330],{},[1149,3332],{},"このガイドで紹介している例の統合に関する完全なソースコードは、GitHubで確認できます:",[1149,3335],{},[1149,3337],{},[142,3339,3341],{"href":3340},"https://github.com/cgwire/blender-kitsu-automated-scene-composition?ref=blog.cg-wire.com","https://github.com/cgwire/blender-kitsu-automated-scene-composition",[128,3343],{},[131,3345,3347],{"id":3346},"_1-getting-the-breakdown",[120,3348,3349],{},"1. ブレイクダウンを取得する",[101,3351,3352,3353,3363],{},"すべての3Dショットは何もない状態のキャンバスから始まりますが、そのキャンバスを埋めるための指示はKitsuにすでに存在します。",[142,3354,748,3356],{"href":3355},"https://blog.cg-wire.com/3d-animation-process/",[692,3357,3358,3359,3362],{},"the ",[120,3360,3361],{},"breakdown"," が、ステージ上に必要なものを正確に指示します","。これにより、アニメーターが作業を始める前に確認できます。",[101,3365,3366],{},"典型的なブレイクダウンは、スクリプトがシーンを組み立てるために必要な重要な物語的な文脈を提供します。ステージ（シーケンス情報に保存されている開始・終了フレーム、尺、およびその他の注記）と、キャスト（キャラクターモデル、小道具、環境アセットの実際のブレイクダウン）です。",[101,3368,3369],{},"コードを書く前に、Kitsuのダッシュボードでブレイクダウンを定義する必要があります。ここでは、3Dアセットのライブラリを、必要とされる特定のショットに手動でリンクします。ここで新しいモデルを作るわけではありません。既存の「俳優」（アセット）を、特定のショットに割り当てるだけです:",[209,3371,3372,3382,3392,3402],{},[212,3373,3374,3377,3378,3381],{},[120,3375,3376],{},"制作プロジェクトを開く"," - Kitsuでプロジェクトに移動し、",[120,3379,3380],{},"Shots"," タブを開きます。",[212,3383,3384,3387,3388,3391],{},[120,3385,3386],{},"キャスティングシートを探す"," - ",[120,3389,3390],{},"Breakdown"," タブを探します（通常は右側のパネル、またはバージョンに応じて専用タブにあります）。",[212,3393,3394,3397,3398,3401],{},[120,3395,3396],{},"ショットを選択する"," - 詳細なキャスティング表示を開くために、入力したい特定のショット（例: ",[255,3399,3400],{},"SH01","）をクリックします。",[212,3403,3404,3407,3408,3411],{},[120,3405,3406],{},"アセットを割り当てる"," - 右側のパネルで、",[120,3409,3410],{},"+（プラス）"," ボタン、または「Add Asset」をクリックします。ここで各アセットに必要な数量を指定することもできます。",[225,3413,3415],{"className":3414},[87,228],[230,3416],{"src":3417,"className":3418,"alt":235,"loading":236,"width":3419,"height":3420,"srcSet":3421,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-ef6fba58-9c73-4a38-b466-0b9d92e4efc0.png",[234],1466,804,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-ef6fba58-9c73-4a38-b466-0b9d92e4efc0.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-ef6fba58-9c73-4a38-b466-0b9d92e4efc0.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-ef6fba58-9c73-4a38-b466-0b9d92e4efc0.png 1466w",[101,3423,3424,3426],{},[120,3425,2128],{}," ページが、使用したいモデル（Characters、Propsなど）ですでに埋まっていることを確認してください。",[101,3428,3429],{},"保存を押すと、リンクが確立されます。これで、PythonスクリプトがGazuに「このショットに何が入っている？」と尋ねると、Kitsuは先ほど割り当てたアセットのリストを返します。あなたのPythonスクリプトはブリッジの役割を担い、そのキャスティング情報を解析して自動的にBlenderのビューポートへ反映します。",[101,3431,3432,3433,3438],{},"ローカルの開発環境が必要なら、",[142,3434,748,3435],{"href":2070},[692,3436,3437],{},"Custom DCC BridgeガイドでDockerからKitsuをインストールする方法"," を確認してください。",[101,3440,3441,3442,3444],{},"Kitsuはデータを保持していますが、それを取得する手段が必要です。そこで登場するのが、KitsuのREST API向けのPython SDK ",[120,3443,3313],{}," です:",[1174,3446,3447,3466],{},[255,3448,3450,3451,3458,3463],{"className":3449},[1179],"import gazu\n",[101,3452,2228,3453,2234,3456,2239],{},[142,3454,2231],{"href":2231,"rel":3455},[2233],[142,3457,2238],{"href":2237},[101,3459,3460,3461],{},"projects = gazu.project.all_projects()\nproject = projects",[1215,3462,1248],{},[101,3464,3465],{},"sequence = gazu.shot.get_sequence_by_name(project, \"SQ01\")\nshot = gazu.shot.get_shot_by_name(sequence, \"SH01\")",[101,3467,3468],{},[255,3469,3471],{"className":3470},[1179],"assets = gazu.casting.get_shot_casting(shot)",[101,3473,3474,3476],{},[1149,3475],{},"ローカルのKitsuインスタンスに接続し、次に最初の制作（名前で取得することもできます）と、キャスティングを取得したいショットを選びます。",[101,3478,3479],{},"このショットIDを使うことで、対応するアセットのキャスティング（ブレイクダウンリスト）を取得できます。",[128,3481],{},[131,3483,3485],{"id":3484},"_2-getting-assets-from-a-breakdown",[120,3486,3487],{},"2. ブレイクダウンからアセットを取得する",[101,3489,3490,3491,3494,3495,3498],{},"いま、",[439,3492,3493],{},"誰","がショットに入るかは分かりました。次は ",[439,3496,3497],{},"どのように見えるか"," を把握する必要があります。",[101,3500,3501],{},"Kitsuでは、アセットに応じて利用できるプレビュー用のファイルが複数存在し、リビジョンによって使い分けられます。スクリプトは、各アセットの最新リビジョンを取得できるように、このデータを辿る必要があります:",[1174,3503,3504,3537],{},[255,3505,3507,3508,3510,3511,3514,3515,1279,3518,3523,3526],{"className":3506},[1179],"local_paths = ",[1215,3509],{},"\nfor asset in assets:\n    tasks = gazu.task.all_tasks_for_asset(asset",[1215,3512,3513],{},"\"asset_id\"",")\n    last_task = max(tasks, key=lambda x: x",[1215,3516,3517],{},"\"updated_at\"",[101,3519,3520,3521,1279],{},"    preview_files = gazu.files.get_all_preview_files_for_task(last_task)\n    last_preview_file = max(preview_files, key=lambda x: x",[1215,3522,3517],{},[101,3524,3525],{},"    download_dir = \"./previews\"\n    os.makedirs(download_dir, exist_ok=True)",[101,3527,3528,3529,3532,3533,3536],{},"    save_path = os.path.join(\n        download_dir,\n        last_preview_file",[1215,3530,3531],{},"\"original_name\""," + \".\" + last_preview_file",[1215,3534,3535],{},"\"extension\"",",\n    )\n    gazu.files.download_preview_file(last_preview_file, save_path)",[101,3538,3539],{},[255,3540,3542],{"className":3541},[1179],"    local_paths.append(save_path)",[101,3544,3545,3547],{},[1149,3546],{},"各アセットについて、あらゆる種類（'Modeling'、'Animation'など）や状態（'done'、'todo'...）に該当するすべてのタスクのリストを取得します。このリストをフィルタして、最も更新が新しいタスクを取り出します。",[101,3549,3550,3551,3554],{},"このタスクIDを使うことで、最新の対応するプレビューファイルのリビジョンを取得し、ローカルフォルダ ",[255,3552,3553],{},"previews"," にダウンロードできます。これらのダウンロードパスは、インポート手順のためにメモリに保持します。",[101,3556,3557],{},"このループの最後には、データベースのエントリが、Blenderが取り込める実体のあるモデルファイルへと変換され、ハードドライブ上に用意できています。",[128,3559],{},[131,3561,3563],{"id":3562},"_3-creating-a-new-blender-scene",[120,3564,3565],{},"3. 新しいBlenderシーンを作成する",[101,3567,3568],{},"アセットファイルは安全にダウンロード済みなので、次の作業は、それらを新しいキャストメンバーとして受け取るためのBlender環境の準備です。",[101,3570,3571,3572,3574],{},"BlenderのネイティブPython APIである ",[255,3573,1468],{}," モジュールは、アプリケーションのあらゆる要素を操作するためのコマンドコンソールとして働きます。",[101,3576,3577,3578,3580],{},"Kitsuのアセットをインポートする前に、新しいBlenderシーンに付属しているデフォルトのオブジェクトを削除する必要があります。このシンプルなチュートリアルでは、デフォルトの ",[120,3579,1624],{}," を対象にします。これは、デフォルトのCameraとLight以外で存在することが多い唯一のオブジェクトだからです:",[1174,3582,3583],{},[255,3584,1618],{"className":3585},[1179],[101,3587,3588,3590,3592],{},[1149,3589],{},[255,3591,1628],{}," フラグは、他のどのオブジェクトからも使われていないなら、オブジェクトのデータブロック（メッシュデータなど）をBlenderに完全に削除させ、後に残る不要なもの（クラッター）を作らないようにします。",[101,3594,3595],{},"これで、インポートしたアセットがそれぞれの場所に配置される準備が整いました。",[128,3597],{},[131,3599,3601],{"id":3600},"_4-importing-asset-files",[120,3602,3603],{},"4. アセットファイルをインポートする",[101,3605,3606,3607,3610,3611,3614],{},"いよいよ成果です！Kitsuからダウンロードしたファイルは、ジオメトリと基本マテリアルを扱える標準化されたインターチェンジ形式 ",[255,3608,3609],{},".glb"," です。そのため、Blenderの専用 ",[255,3612,3613],{},"gltf"," インポートオペレーターを使用します。",[101,3616,3617,3618,3621,3622,3625],{},"重要なポイントは、ダウンロードしたアセットへの正しい ",[120,3619,3620],{},"絶対ファイルパス","（",[255,3623,3624],{},"glb_path","）を渡すことです。幸いなことに、それらは先ほどのコードスニペットで保存されています:",[1174,3627,3628,3632],{},[255,3629,3631],{"className":3630},[1179],"for path in local_paths:\n    if path.lower().endswith((\".glb\")):\n        print(f\"Importing: {path}\")\n        bpy.ops.import_scene.gltf(filepath=path)",[101,3633,3634],{},[255,3635,3637],{"className":3636},[1179],"print(\"All preview GLB files imported successfully!\")",[101,3639,3640,3642,3645,3646,3649,3650,3653,3654,3657],{},[1149,3641],{},[255,3643,3644],{},"bpy.ops.import_scene.gltf()"," が実行されると、Blenderはファイルを読み取り、現在のシーンに対応する ",[120,3647,3648],{},"オブジェクト","、",[120,3651,3652],{},"メッシュ","、および ",[120,3655,3656],{},"マテリアル"," を自動で作成します。",[101,3659,3660],{},"インポートされたアセットは、ワールド原点（0, 0, 0）に配置された、完成済みのBlenderオブジェクトになります。以降のパイプライン手順の準備ができました。",[128,3662],{},[131,3664,3666],{"id":3665},"_5-saving-the-scene",[120,3667,3668],{},"5. シーンを保存する",[101,3670,3671,3672,3675,3676,3679],{},"このパイプラインの最後のステップは、組み立てたレイアウトを恒久的で、バージョン管理可能なファイルとして保存することです。この手順をせずにBlenderを閉じると、すべての自動作業が失われます。そこで、",[255,3673,3674],{},"bpy.ops.wm.save_as_mainfile"," オペレーターを使います。これは、Blenderのインターフェースで ",[120,3677,3678],{},"File &gt; Save As"," をクリックするのと同等の、プログラム上の操作です:",[1174,3681,3682,3689],{},[255,3683,3685,3686],{"className":3684},[1179],"scene_save_dir = \"./\"\nos.makedirs(scene_save_dir, exist_ok=True)",[101,3687,3688],{},"blend_filename = \"SH01.blend\"\nblend_path = os.path.join(scene_save_dir, blend_filename)",[101,3690,3691],{},[255,3692,3694],{"className":3693},[1179],"bpy.ops.wm.save_as_mainfile(filepath=blend_path)",[101,3696,3697,3699,3700,3703,3704,3707],{},[1149,3698],{},"結果として、",[255,3701,3702],{},"SH01.blend"," という新しいBlenderファイルが作成されます。これはKitsuの ",[120,3705,3706],{},"ブレイクダウン要件"," を正確に反映しており、次の部署が受け取る準備が整っています。",[225,3709,3711],{"className":3710},[87,228],[230,3712],{"src":3713,"className":3714,"alt":235,"loading":236,"width":3715,"height":3716,"srcSet":3717,"sizes":240},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-91e5cf8e-acb1-4ac0-b5ec-d2c37a6a1ed6.png",[234],1460,828,"https://blog.cg-wire.com/content/images/size/w600/2025/12/data-src-image-91e5cf8e-acb1-4ac0-b5ec-d2c37a6a1ed6.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/12/data-src-image-91e5cf8e-acb1-4ac0-b5ec-d2c37a6a1ed6.png 1000w, https://blog.cg-wire.com/content/images/2025/12/data-src-image-91e5cf8e-acb1-4ac0-b5ec-d2c37a6a1ed6.png 1460w",[128,3719],{},[131,3721,3723],{"id":3722},"_6-user-friendly-addon",[120,3724,3725],{},"6. ユーザーフレンドリーなアドオン",[101,3727,3728],{},"スクリプトは期待どおりに動きますが、アーティストはどうでしょう？スクリプトの実行方法を知っている人ばかりではありません。",[101,3730,3731,3732,3737],{},"コードを少しだけ変更して、",[142,3733,748,3734],{"href":2507},[692,3735,3736],{},"Blenderのアドオンに変える"," ことにしましょう:",[1174,3739,3740,3893],{},[255,3741,3743,3744,3747,3749,3752,3767,3784,3799,3802,3805,3808,3811,3814,3817,3820,3825,3831,3837,3842,3851,3854,3857,3860,3863,3869,3872,3875,3878,3881,3884,3887,3890],{"className":3742},[1179],"bl_info = {\n    \"name\": \"Kitsu Shot Auto-Importer\",\n    \"description\": \"Pick a project and shot and auto-import the latest preview assets\",\n    \"author\": \"cgwire\",\n    \"version\": (1, 0, 0),\n    \"blender\": (3, 0, 0),\n    \"location\": \"Viewport > N-Panel > Kitsu\",\n    \"category\": \"Import-Export\",\n}",[101,3745,3746],{},"import os\nimport sys",[101,3748,2191],{},[101,3750,3751],{},"import bpy\nimport gazu\nfrom bpy.props import EnumProperty, StringProperty",[101,3753,3754,3755,3764,3765],{},"def get_projects():\n    try:\n        projects = gazu.project.all_projects()\n        return ",[1215,3756,3757,3758,2286,3761,3763],{},"(p",[1215,3759,3760],{},"\"id\"",[1215,3762,2285],{},", \"\") for p in projects","\n    except:\n        return ",[1215,3766],{},[101,3768,3769,3770,3772,3773,3764,3782],{},"def get_sequences(project_id):\n    if not project_id:\n        return ",[1215,3771],{},"\n    try:\n        seqs = gazu.shot.all_sequences_for_project(project_id)\n        return ",[1215,3774,3775,3776,3778,3779,3781],{},"(s",[1215,3777,3760],{},", s",[1215,3780,2285],{},", \"\") for s in seqs",[1215,3783],{},[101,3785,3786,3787,3789,3790,3764,3797],{},"def get_shots(sequence_id):\n    if not sequence_id:\n        return ",[1215,3788],{},"\n    try:\n        shots = gazu.shot.all_shots_for_sequence(sequence_id)\n        return ",[1215,3791,3775,3792,3778,3794,3796],{},[1215,3793,3760],{},[1215,3795,2285],{},", \"\") for s in shots",[1215,3798],{},[101,3800,3801],{},"class KITSU_Props(bpy.types.PropertyGroup):\n    project: EnumProperty(name=\"Project\", items=lambda self, context: get_projects())",[101,3803,3804],{},"    sequence: EnumProperty(\n        name=\"Sequence\", items=lambda self, context: get_sequences(self.project)\n    )",[101,3806,3807],{},"    shot: EnumProperty(\n        name=\"Shot\", items=lambda self, context: get_shots(self.sequence)\n    )",[101,3809,3810],{},"class KITSU_OT_import_shot(bpy.types.Operator):\n    bl_idname = \"kitsu.import_shot_assets\"\n    bl_label = \"Import Shot Assets\"\n    bl_description = (\n        \"Download and import latest preview GLB/GLTF files for selected shot\"\n    )",[101,3812,3813],{},"    def execute(self, context):\n        props = context.scene.kitsu_props",[101,3815,3816],{},"        # Fetch shot data\n        shot = gazu.shot.get_shot(props.shot)\n        assets = gazu.casting.get_shot_casting(shot)",[101,3818,3819],{},"        download_dir = os.path.join(bpy.app.tempdir, \"kitsu_previews\")\n        os.makedirs(download_dir, exist_ok=True)",[101,3821,3822,3823],{},"        local_paths = ",[1215,3824],{},[101,3826,3827,3828,3830],{},"        for asset in assets:\n            tasks = gazu.task.all_tasks_for_asset(asset",[1215,3829,3513],{},")\n            if not tasks:\n                continue",[101,3832,3833,3834,3836],{},"            last_task = max(tasks, key=lambda x: x",[1215,3835,3517],{},")\n            preview_files = gazu.files.get_all_preview_files_for_task(last_task)\n            if not preview_files:\n                continue",[101,3838,3839,3840,1279],{},"            last_preview = max(preview_files, key=lambda x: x",[1215,3841,3517],{},[101,3843,3844,3845,3847,3848,3850],{},"            save_path = os.path.join(\n                download_dir,\n                last_preview",[1215,3846,3531],{}," + \".\" + last_preview",[1215,3849,3535],{},",\n            )",[101,3852,3853],{},"            gazu.files.download_preview_file(last_preview, save_path)\n            local_paths.append(save_path)",[101,3855,3856],{},"        # Clean default cube\n        obj = bpy.data.objects.get(\"Cube\")\n        if obj:\n            bpy.data.objects.remove(obj, do_unlink=True)",[101,3858,3859],{},"        # Import GLB/GLTF assets\n        for path in local_paths:\n            if path.lower().endswith((\".glb\", \".gltf\")):\n                bpy.ops.import_scene.gltf(filepath=path)",[101,3861,3862],{},"        # Auto-save blend file\n        save_dir = os.path.join(os.path.expanduser(\"~\"), \"kitsu_scenes\")\n        os.makedirs(save_dir, exist_ok=True)",[101,3864,3865,3866,3868],{},"        blend_path = os.path.join(save_dir, f\"{shot",[1215,3867,3017],{},"}.blend\")\n        bpy.ops.wm.save_as_mainfile(filepath=blend_path)",[101,3870,3871],{},"        self.report({\"INFO\"}, f\"Imported assets and saved: {blend_path}\")\n        return {\"FINISHED\"}",[101,3873,3874],{},"class KITSU_PT_panel(bpy.types.Panel):\n    bl_label = \"Kitsu Auto-Importer\"\n    bl_idname = \"KITSU_PT_auto_importer\"\n    bl_space_type = \"VIEW_3D\"\n    bl_region_type = \"UI\"\n    bl_category = \"Kitsu\"",[101,3876,3877],{},"    def draw(self, context):\n        props = context.scene.kitsu_props\n        layout = self.layout",[101,3879,3880],{},"        layout.separator()\n        layout.prop(props, \"project\")\n        layout.prop(props, \"sequence\")\n        layout.prop(props, \"shot\")",[101,3882,3883],{},"        layout.separator()\n        layout.operator(\"kitsu.import_shot_assets\", icon=\"IMPORT\")",[101,3885,3886],{},"classes = (\n    KITSU_Props,\n    KITSU_OT_import_shot,\n    KITSU_PT_panel,\n)",[101,3888,3889],{},"def register():\n    for c in classes:\n        bpy.utils.register_class(c)\n    bpy.types.Scene.kitsu_props = bpy.props.PointerProperty(type=KITSU_Props)",[101,3891,3892],{},"def unregister():\n    for c in classes:\n        bpy.utils.unregister_class(c)\n    del bpy.types.Scene.kitsu_props",[101,3894,3895],{},[255,3896,2579,3898,2583,3900,2587],{"className":3897},[1179],[120,3899,2582],{},[120,3901,2586],{},[101,3903,3904,3906],{},[1149,3905],{},"これで、制作プロジェクト、シーケンス、ショットを手動で選択して、ブレイクダウンデータを取得し、対応するキャスティングを現在のBlenderビューポートにインポートできます。",[225,3908,3910],{"className":3909},[87,228],[230,3911],{"src":3912,"className":3913,"alt":235,"loading":236,"width":3914,"height":3915},"https://blog.cg-wire.com/content/images/2025/12/data-src-image-bf3ea18d-fd62-4db5-9977-6374b3ee1aef.png",[234],480,270,[101,3917,3918,3919,3921,3922,3925],{},"ロジックはシンプルです。",[255,3920,2178],{}," の同じコードを使ってドロップダウンメニューを埋め込み、それらをビューポート内のパネルにまとめます。",[255,3923,3924],{},"import"," ボタンを押すと、対応するブレイクダウンアセットがすべてダウンロードされ、現在のワークスペースにインポートされます。",[101,3927,3928,3930,3931,3933],{},[255,3929,2191],{}," を追加することで、BlenderがあなたのシステムのPythonインストールを使って ",[255,3932,2178],{}," のような外部ライブラリを読み込めるようになります。Blenderには独自に隔離されたPython環境が同梱されているため、パッケージのインストール管理は不便になりがちです。パスを拡張することで、Blenderにローカルのモジュールも確認させるだけで済みます。自分の環境に合わせて、このパスを調整してください。",[128,3935],{},[131,3937,3938],{"id":1346},[120,3939,1349],{},[101,3941,3942],{},"Kitsuからブレイクダウンリストを直接取得し、Blenderをスクリプトで制御してシーンを組み立てることで、繰り返し発生する手作業をなくし、すべてのショット間でアセットの整合性を保てます。これは単に時間を節約するだけでなく、人為的なミスを減らし、プロデューサーが必要とする正しいアセットのバージョンとシーン構成から、すべてのアーティストが作業を開始できるようにします。こうすれば、10ショットでも10,000ショットでも、同じ信頼性で対応できます。",[101,3944,3945,3946,3951],{},"とはいえ、私たちの言葉だけを信じる必要はありません。",[142,3947,748,3948],{"href":3340},[692,3949,3950],{},"Githubリポジトリをクローンして実際に試してみてください","！",[101,3953,3954],{},"このワークフローは、アニメーション中に作成される新しいリビジョンから自動プレビューやレポートを生成したり、アセット情報を更新したりすることで拡張できます。",[84,3956,3958,3961],{"className":3957},[87,88,89],[84,3959,583],{"className":3960},[93],[84,3962,3964,3965,3968],{"className":3963},[98],"アニメーション制作プロセスについてもっと知りたいなら",[142,3966,1910],{"href":590,"rel":3967},[592],"！ベストプラクティスを共有する1,000人以上の専門家とつながり、時にはオフラインイベントも開催しています。ぜひ歓迎します！ 😊",[84,3970,3972],{"className":3971},[87,598,599],[142,3973,605],{"href":590,"className":3974},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":3976},[3977,3978,3979,3980,3981,3982,3983],{"id":3346,"depth":607,"text":3349},{"id":3484,"depth":607,"text":3487},{"id":3562,"depth":607,"text":3565},{"id":3600,"depth":607,"text":3603},{"id":3665,"depth":607,"text":3668},{"id":3722,"depth":607,"text":3725},{"id":1346,"depth":607,"text":1349},"https://images.unsplash.com/photo-1725888358557-9f70661012c4?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGFuaW1hdGlvbiUyMHBpcGVsaW5lfGVufDB8fHx8MTc2NTA5ODQ2Mnww&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":3986,"featured_at":621,"visibility":622},"2026-02-20T06:04:00.000+01:00","/blog-i18n/ja/blender-kitsu-breakdown-automation","2025-12-07T18:11:31.000+01:00",{"title":3272,"description":235},"blender-kitsu-breakdown-automation","blog-i18n/ja/blender-kitsu-breakdown-automation/index",[3993,3994],{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"NGVgpuWqmUywvK6_dWbVv6GNEseHyTtiWN2FSvxYwvo",{"id":3997,"title":3998,"authors":3999,"body":4001,"description":235,"extension":617,"feature_image":4832,"html":7,"meta":4833,"navigation":12,"path":4835,"published_at":4836,"seo":4837,"slug":4838,"stem":4839,"tags":4840,"__hash__":4843,"updated_at":4834,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-addon-ui-scripting-guide/index.md","BlenderアドオンUI開発のための2026年ガイド",[4000],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":4002,"toc":4815},[4003,4014,4022,4025,4051,4053,4059,4062,4082,4091,4098,4101,4107,4127,4133,4144,4158,4196,4202,4205,4208,4213,4219,4224,4230,4235,4241,4249,4251,4257,4260,4274,4277,4287,4292,4298,4303,4309,4314,4320,4325,4331,4334,4372,4375,4377,4383,4386,4396,4399,4405,4456,4465,4471,4474,4486,4539,4545,4548,4560,4621,4627,4630,4642,4668,4675,4700,4702,4708,4711,4733,4743,4749,4758,4761,4779,4781,4785,4788,4793,4796,4809],[84,4004,4006,4010],{"className":4005},[87,88,89],[84,4007,4009],{"className":4008},[93],"📄",[84,4011,4013],{"className":4012},[98],"Blenderスクリプトを、アーティストが実際に使いたくなる本物のツールに変えよう。アドオン用のクリーンで直感的なUIパネルの作り方はこちらです。",[101,4015,4016,4017,4021],{},"これまでに ",[142,4018,4020],{"href":4019},"https://blog.cg-wire.com/blender-scripting-animation/","Blenderスクリプトを書いた","ことがあるなら、正しく機能させるのは戦いの半分にすぎず、もう半分は「誰かにそれを使ってもらうこと」だと気づいたはずです。Blenderアドオンを共有し、販売するには、クリーンなユーザーインターフェースが必須です。",[101,4023,4024],{},"このガイドでは、内蔵のレイアウトシステムを使ってBlenderアドオンのユーザーインターフェースを作る方法を学びます。よく使うUIコンポーネントの種類、パネルが表示され得る場所、そして最小限の動作例を順を追って解説します。最後には、アドオンにBlenderネイティブなグラフィカルインターフェースを与える方法が分かるようになります。",[84,4026,4028,4031],{"className":4027},[87,88,1134],[84,4029,1138],{"className":4030},[93],[84,4032,4034,4038,4040,4042,4043,4045,1158,4047],{"className":4033},[98],[1143,4035,4036],{},[120,4037,2043],{"style":722},[1149,4039],{},[1149,4041],{},"このガイドで紹介している例の統合についての完全なソースコードは、私たちのGitHubで確認できます：",[1149,4044],{},[1149,4046],{},[142,4048,4050],{"href":4049},"https://github.com/cgwire/blender-ui-addon-script?ref=blog.cg-wire.com","https://github.com/cgwire/blender-ui-addon-script",[128,4052],{},[131,4054,4056],{"id":4055},"_1-common-ui-components",[120,4057,4058],{},"1. よくあるUIコンポーネント",[101,4060,4061],{},"Blenderでは、ユーザーインターフェースのあらゆる要素に、Pythonライブラリ上の対応物があります。UIは、次のいずれかの型を継承するクラスを作成することで構築します：",[728,4063,4064,4070,4076],{},[212,4065,4066,4069],{},[255,4067,4068],{},"bpy.types.Panel"," - カスタムパネル（最も一般的）",[212,4071,4072,4075],{},[255,4073,4074],{},"bpy.types.Menu"," - メニューおよびサブメニュー",[212,4077,4078,4081],{},[255,4079,4080],{},"bpy.types.Operator"," - ボタンから実行できるアクションやツール",[225,4083,4085],{"className":4084},[87,228],[230,4086],{"src":4087,"className":4088,"alt":235,"loading":236,"width":4089,"height":4090},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-daa22afa-ac20-4e3e-8543-c694588146bf.png",[234],334,542,[101,4092,4093,4094,4097],{},"これらのクラスは、それぞれ ",[255,4095,4096],{},"draw(self, context)"," メソッドを実装できます。レイアウトコマンドを使って、どのようなインターフェースにするべきかを説明します。Blenderのレイアウトシステムは、スペース、整列、位置などを自動的に処理します。これは宣言的なUIシステムで、何が表示され、どの順番にすべきかを説明するだけです。",[101,4099,4100],{},"ここでは、よく使うレイアウト要素を紹介します：",[826,4102,4104],{"id":4103},"basic-display-elements",[120,4105,4106],{},"基本的な表示要素",[728,4108,4109,4118],{},[212,4110,4111,4114,4115],{},[120,4112,4113],{},"Label"," - 対話なしのテキストをそのまま表示します。形式： ",[255,4116,4117],{},"layout.label(text=\"こんにちは！\")",[212,4119,4120,4123,4124],{},[120,4121,4122],{},"Separator"," - 読みやすくするために、項目の間に縦方向のスペースを追加します。形式： ",[255,4125,4126],{},"layout.separator()",[826,4128,4130],{"id":4129},"buttons-inputs-props-and-operators",[120,4131,4132],{},"ボタン、入力、Props（プロパティ）、Operators（オペレーター）",[728,4134,4135],{},[212,4136,4137,4140,4141],{},[120,4138,4139],{},"Operatorボタン"," - オペレーター（Blenderコマンドとして登録された関数）を呼び出すクリック可能なボタンを作成します。書き出し、複製、カスタムスクリプトの実行のようなアクションに使えます。構文： ",[255,4142,4143],{},"layout.operator(\"myaddon.some_action\", text=\"アクションを実行\")",[101,4145,4146,4149,4150,4153,4154,4157],{},[255,4147,4148],{},"layout.prop()"," メソッドは、編集可能なBlenderプロパティを表示するために使います。プロパティには、内蔵データ（例： ",[255,4151,4152],{},"context.object","）のほか、自分で定義したカスタムプロパティも含まれます。たとえば ",[255,4155,4156],{},"layout.prop(context.object, \"name\")"," は、オブジェクトの名前の編集用テキストフィールドを表示します。Blenderは、プロパティの型に応じて適切なウィジェット（テキストボックス、スライダー、チェックボックスなど）を自動で選びます：",[728,4159,4160,4169,4178,4187],{},[212,4161,4162,4165,4166],{},[120,4163,4164],{},"チェックボックス（Booleanプロパティ）"," - トグル式のチェックボックスを表示します。例： ",[255,4167,4168],{},"layout.prop(context.object, \"hide_viewport\")",[212,4170,4171,4174,4175],{},[120,4172,4173],{},"数値フィールド／スライダー（FloatまたはInt）"," - 数値入力を表示し、しばしばスライダー付きです。例： ",[255,4176,4177],{},"layout.prop(context.object, \"location\", index=0, text=\"X位置\")",[212,4179,4180,4183,4184],{},[120,4181,4182],{},"ドロップダウンメニュー（Enumプロパティ）"," - EnumPropertyのときにドロップダウンリストを表示します。例： ",[255,4185,4186],{},"layout.prop(context.object, \"type\")",[212,4188,4189,4192,4193],{},[120,4190,4191],{},"テキスト入力 ","- 文字列プロパティのためのテキストボックスを表示します。例： ",[255,4194,4195],{},"layout.prop(my_settings, \"username\")",[826,4197,4199],{"id":4198},"organizing-the-layout",[120,4200,4201],{},"レイアウトを整理する",[101,4203,4204],{},"UIを構造化して理解しやすく保つために、Blenderは行、列、ボックスのようなレイアウトコンテナを提供しています。",[101,4206,4207],{},"パネルには行と列があります。行と列には、プロパティ、オペレーター、ラベルが含まれます。Blenderは、テーマやレイアウトルールに合わせて、パディング、整列、スケーリングを自動的に処理します。",[728,4209,4210],{},[212,4211,4212],{},"行（水平グループ）は、要素を横方向に並べます：",[1174,4214,4215],{},[255,4216,4218],{"className":4217},[1179],"row = layout.row()\nrow.prop(obj, \"location\")\nrow.prop(obj, \"rotation_euler\")",[728,4220,4221],{},[212,4222,4223],{},"列（垂直グループ）は、要素を縦方向に積み重ねます：",[1174,4225,4226],{},[255,4227,4229],{"className":4228},[1179],"col = layout.column()\ncol.prop(obj, \"scale\")\ncol.prop(obj, \"dimensions\")",[728,4231,4232],{},[212,4233,4234],{},"ボックス（視覚的グループ）は、セクションのような関連するコントロールを視覚的にまとめるための、枠付きのボックスを描画します：",[1174,4236,4237],{},[255,4238,4240],{"className":4239},[1179],"box = layout.box()\nbox.label(text=\"変換設定\")\nbox.prop(obj, \"location\")\nbox.prop(obj, \"rotation_euler\")",[101,4242,4243,4244,4248],{},"UIコンポーネントの完全な一覧は、",[142,4245,4247],{"href":4246},"https://docs.blender.org/manual/en/latest/interface/index.html?ref=blog.cg-wire.com","公式Blenderドキュメントの「ユーザーインターフェース」ページ","を参照してください。",[128,4250],{},[131,4252,4254],{"id":4253},"_2-where-you-can-put-ui-panels",[120,4255,4256],{},"2. UIパネルを配置できる場所",[101,4258,4259],{},"Blenderでカスタムパネルを作成する際、インターフェースのどこに表示され、どの領域を占有するかを、2つの重要なクラス属性で決められます：",[728,4261,4262,4268],{},[212,4263,4264,4267],{},[255,4265,4266],{},"bl_space_type"," - パネルが属するエディター／ワークスペース（例：3Dビュー、プロパティエディター、ノードエディター）。",[212,4269,4270,4273],{},[255,4271,4272],{},"bl_region_type"," - そのエディターのどの部分にパネルが表示されるか（例：サイドバー、ツールバー、メインウィンドウ）。",[101,4275,4276],{},"カスタムパネルを置く可能性が高い代表的な場所の一覧です：",[225,4278,4280],{"className":4279},[87,228],[230,4281],{"src":4282,"className":4283,"alt":235,"loading":236,"width":4284,"height":4285,"srcSet":4286,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-070d3dfe-eb98-42a2-90a2-d2eabc4fc2d4.png",[234],1125,650,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-070d3dfe-eb98-42a2-90a2-d2eabc4fc2d4.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-070d3dfe-eb98-42a2-90a2-d2eabc4fc2d4.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-070d3dfe-eb98-42a2-90a2-d2eabc4fc2d4.png 1125w",[728,4288,4289],{},[212,4290,4291],{},"3Dビューのサイドバーは、3Dビューポートの右側にあるNパネルサイドバーに表示されます。モデリング、リギング、シーンツールのための最も一般的な配置場所です：",[1174,4293,4294],{},[255,4295,4297],{"className":4296},[1179],"bl_space_type = 'VIEW_3D'\nbl_region_type = 'UI'",[728,4299,4300],{},[212,4301,4302],{},"プロパティエディター内に、オブジェクト、マテリアル、シーンの各タブの間にパネルを追加できます。アドオンがマテリアル、オブジェクト、レンダー設定、シーンプロパティを扱う場合に使います：",[1174,4304,4305],{},[255,4306,4308],{"className":4307},[1179],"bl_space_type = 'PROPERTIES'\nbl_region_type = 'WINDOW'",[728,4310,4311],{},[212,4312,4313],{},"UV/Imageエディターのサイドバー（テクスチャツールや画像ユーティリティに便利）：",[1174,4315,4316],{},[255,4317,4319],{"className":4318},[1179],"bl_space_type = 'IMAGE_EDITOR'\nbl_region_type = 'UI'",[728,4321,4322],{},[212,4323,4324],{},"ノードを扱うツールのための、シェーダー、ジオメトリノード、コンポジターエディターのサイドバー：",[1174,4326,4327],{},[255,4328,4330],{"className":4329},[1179],"bl_space_type = 'NODE_EDITOR'\nbl_region_type = 'UI'",[101,4332,4333],{},"最適なパネルの配置場所は、ツールの目的によって変わります：",[728,4335,4336,4347,4356,4364],{},[212,4337,4338,4339,4342,4343,4346],{},"モデリング／オブジェクトツール → 3Dビューサイドバー（",[255,4340,4341],{},"VIEW_3D"," + ",[255,4344,4345],{},"UI","）",[212,4348,4349,4350,4342,4353,4346],{},"マテリアルまたはレンダー設定 → プロパティエディター（",[255,4351,4352],{},"PROPERTIES",[255,4354,4355],{},"WINDOW",[212,4357,4358,4359,4342,4362,4346],{},"テクスチャユーティリティ → 画像エディターサイドバー（",[255,4360,4361],{},"IMAGE_EDITOR",[255,4363,4345],{},[212,4365,4366,4367,4342,4370,4346],{},"シェーダー／ジオメトリツール → ノードエディターサイドバー（",[255,4368,4369],{},"NODE_EDITOR",[255,4371,4345],{},[101,4373,4374],{},"適切な「スペース」を選ぶと、ユーザーが自然に期待する場所にアドオンが見つかり、UIをBlenderに合わせて一貫させられます。",[128,4376],{},[131,4378,4380],{"id":4379},"_3-minimal-example-custom-panel-in-the-3d-view-sidebar",[120,4381,4382],{},"3. 最小の例：3Dビューサイドバーにカスタムパネル",[101,4384,4385],{},"簡単なプラグインを試してみましょう。ボタンをクリックすると「Hello world」のテキストアラートを表示する、3Dビューサイドバーのカスタムパネルです。",[826,4387,4389],{"id":4388},"_1-blinfoaddon-metadata",[120,4390,4391,4392,4395],{},"1) ",[255,4393,4394],{},"bl_info"," - アドオンメタデータ",[101,4397,4398],{},"まず、Blenderに対して、アドオンをどのように潜在ユーザーへ提示するかを伝えるためのアドオンメタデータを指定します：",[1174,4400,4401],{},[255,4402,4404],{"className":4403},[1179],"bl_info = {\n    \"name\": \"Simple Addon Example\",\n    \"author\": \"Your Name\",\n    \"version\": (1, 0),\n    \"blender\": (4, 0, 0),\n    \"location\": \"View3D > Sidebar > Simple Tab\",\n     \"description\": \"A simple example addon that prints a message\",\n     \"category\": \"3D View\",\n}",[728,4406,4407],{},[212,4408,4409,4411,4412],{},[255,4410,4394],{}," は、Preferences → Add-ons でアドオン情報を表示するためにBlenderが使う、モジュールレベルの辞書です。",[728,4413,4414,4420,4426,4432,4438,4444,4450],{},[212,4415,4416,4419],{},[255,4417,4418],{},"name:"," リストに表示される、読みやすい名前",[212,4421,4422,4425],{},[255,4423,4424],{},"author:"," 著者文字列",[212,4427,4428,4431],{},[255,4429,4430],{},"version:"," アドオンのバージョンを表すタプル",[212,4433,4434,4437],{},[255,4435,4436],{},"blender:"," このアドオンが対象とする最小のBlenderバージョン（タプル）",[212,4439,4440,4443],{},[255,4441,4442],{},"location:"," アドオンUIが表示される場所（ユーザーにとって役立つ）",[212,4445,4446,4449],{},[255,4447,4448],{},"description:"," UIで使われる短い説明",[212,4451,4452,4455],{},[255,4453,4454],{},"category:"," Add-onsリスト内でのカテゴリのグルーピング",[101,4457,4458,4459,4461,4462,4464],{},"インストール済みアドオンをスキャンするときにBlenderが",[255,4460,4394],{},"を読み取るので、",[255,4463,4394],{},"は正確に保つことが重要です。",[826,4466,4468],{"id":4467},"_2-define-an-operator-class",[120,4469,4470],{},"2) オペレータークラスを定義する",[101,4472,4473],{},"次に、Operatorのサブクラスを定義します。オペレーターは、Blenderでアクションを行うための公式な方法です。UI、ショートカット、検索メニューなどから呼び出せます。",[1174,4475,4476,4480],{},[255,4477,4479],{"className":4478},[1179],"class SIMPLEADDON_OT_hello(bpy.types.Operator):\n    bl_idname = \"simple_addon.say_hello\"\n    bl_label = \"Say Hello\"\n     bl_description = \"Prints a message to the console\"\n",[101,4481,4482],{},[255,4483,4485],{"className":4484},[1179],"    def execute(self, context):\n        self.report({'INFO'}, \"Hello from Blender Addon!\")\n         print(\"Hello from Blender Addon!\")\n         return {'FINISHED'}",[728,4487,4488,4501,4507,4513],{},[212,4489,4490,3387,4493,4496,4497,4500],{},[255,4491,4492],{},"bl_idname",[255,4494,4495],{},"\"module_name.operator_name\""," という形式の一意な識別子文字列です。すべて小文字で、ドットで区切ります。コードやUIからオペレーターを呼び出す方法です（",[255,4498,4499],{},"bpy.ops.simple_addon.say_hello()","）。",[212,4502,4503,4506],{},[255,4504,4505],{},"bl_label"," - ボタン／メニューに表示されるユーザー向けラベル。",[212,4508,4509,4512],{},[255,4510,4511],{},"bl_description"," - UIに表示されるツールチップ／説明。",[212,4514,4515,4518,4519,4522,4523,4526,4527,4530,4531,4534,4535,4538],{},[255,4516,4517],{},"execute(self, context)"," - オペレーターが実行されるときに呼び出される中核メソッド（同期実行）。",[255,4520,4521],{},"context"," は、Blenderの現在の状態（アクティブオブジェクト、シーン、エリアなど）にアクセスできるようにします。",[255,4524,4525],{},"self.report({'INFO'}, \"…\")"," は、Blenderの情報バー／ステータスに小さなメッセージを表示します（ユーザーへのフィードバックに適しています）。",[255,4528,4529],{},"print(\"…\")"," は、システム／Blenderコンソールへ出力します（デバッグに便利です）。",[255,4532,4533],{},"{'FINISHED'}"," や ",[255,4536,4537],{},"{'CANCELLED'}"," のような set を返します。Blenderは、この結果を使ってオペレーターが正常に完了したかどうかを判断します。",[826,4540,4542],{"id":4541},"_3-panel-classui-placement",[120,4543,4544],{},"3) パネルクラス - UIの配置",[101,4546,4547],{},"次に、BlenderにUIを追加するためのPanelのサブクラスに進みます：",[1174,4549,4550,4554],{},[255,4551,4553],{"className":4552},[1179],"class SIMPLEADDON_PT_panel(bpy.types.Panel):\n    bl_label = \"Simple Addon Panel\"\n    bl_idname = \"SIMPLEADDON_PT_panel\"\n    bl_space_type = 'VIEW_3D'\n    bl_region_type = 'UI'\n    bl_category = 'Simple'",[101,4555,4556],{},[255,4557,4559],{"className":4558},[1179],"    def draw(self, context):\n        layout = self.layout\n        layout.operator(\"simple_addon.say_hello\")",[728,4561,4562,4567,4572,4578,4587,4593,4598,4608],{},[212,4563,4564,4566],{},[255,4565,4505],{}," - UIに表示されるパネルのタイトル。",[212,4568,4569,4571],{},[255,4570,4492],{}," - 一意なパネル識別子。",[212,4573,4574,4577],{},[255,4575,4576],{},"bl_space_type = 'VIEW_3D'"," - このパネルが3Dビューポート領域に属することをBlenderに伝えます。",[212,4579,4580,4583,4584,4500],{},[255,4581,4582],{},"bl_region_type = 'UI'"," - 右側の領域（Nパネル）に配置します。他にも領域があります（例：",[255,4585,4586],{},"'TOOLS', 'WINDOW'",[212,4588,4589,4592],{},[255,4590,4591],{},"bl_category = 'Simple'"," - サイドバーのタブ名。このパネルは「Simple」というラベルのタブの下に表示されます。",[212,4594,4595,4597],{},[255,4596,4096],{}," - UIレイアウトを描画するために呼び出されます。",[212,4599,4600,4603,4604,4607],{},[255,4601,4602],{},"self.layout"," は、",[255,4605,4606],{},"UILayout"," オブジェクトで、ボタン、ラベル、プロパティなどを配置するために使います。",[212,4609,4610,4613,4614,4617,4618,4620],{},[255,4611,4612],{},"layout.operator(\"simple_addon.say_hello\")"," は、クリックするとbl_idname ",[255,4615,4616],{},"\"simple_addon.say_hello\""," のオペレーターを呼び出すボタンを作成します。ボタンのテキストは、オペレーターの",[255,4619,4505],{},"から取得されます。",[826,4622,4624],{"id":4623},"_4-register-unregister-functions",[120,4625,4626],{},"4) 登録／登録解除（register / unregister）関数",[101,4628,4629],{},"Blenderは、UI、オペレーター、パネル、プロパティなどを定義するクラスを登録して、Blenderがそれらについて認識できるようにする必要があります：",[1174,4631,4632,4636],{},[255,4633,4635],{"className":4634},[1179],"def register():\n    bpy.utils.register_class(SIMPLEADDON_OT_hello)\n    bpy.utils.register_class(SIMPLEADDON_PT_panel)",[101,4637,4638],{},[255,4639,4641],{"className":4640},[1179],"def unregister():\n    bpy.utils.unregister_class(SIMPLEADDON_PT_panel)\n    bpy.utils.unregister_class(SIMPLEADDON_OT_hello)",[728,4643,4644,4654,4657],{},[212,4645,4646,4649,4650,4653],{},[255,4647,4648],{},"bpy.utils.register_class(Class)"," はクラスを登録します。",[255,4651,4652],{},"unregister_class"," は削除します。",[212,4655,4656],{},"特にクラス同士が参照し合う場合は、登録解除は登録の逆順で行うことが重要です。そのため、パネルをオペレーターより先に登録解除します。",[212,4658,4659,4660,4663,4664,4667],{},"アドオンがPreferencesで有効化されると、Blenderが",[255,4661,4662],{},"register()","を呼び出します。無効化されると、",[255,4665,4666],{},"unregister()","を呼び出します。",[101,4669,4670,4671,4674],{},"完全なコードは Pythonファイル ",[255,4672,4673],{},"addon.py"," に配置します：",[1174,4676,4677,4695],{},[255,4678,4680,4681,4683,4686,4689,4691,4693],{"className":4679},[1179],"bl_info = {\n    \"name\": \"Simple Addon Example\",\n    \"author\": \"Your Name\",\n    \"version\": (1, 0),\n    \"blender\": (4, 0, 0),\n    \"location\": \"View3D > Sidebar > Simple Tab\",\n    \"description\": \"A simple example addon that prints a message\",\n    \"category\": \"3D View\",\n}",[101,4682,1183],{},[101,4684,4685],{},"class SIMPLEADDON_OT_hello(bpy.types.Operator):\n    bl_idname = \"simple_addon.say_hello\"\n    bl_label = \"Say Hello\"\n    bl_description = \"Prints a message to the console\"",[101,4687,4688],{},"    def execute(self, context):\n        self.report({'INFO'}, \"Hello from Blender Addon!\")\n        print(\"Hello from Blender Addon!\")\n        return {'FINISHED'}",[101,4690,4553],{},[101,4692,4559],{},[101,4694,4635],{},[101,4696,4697],{},[255,4698,4641],{"className":4699},[1179],[128,4701],{},[131,4703,4705],{"id":4704},"_4-running-and-packaging-your-add-on",[120,4706,4707],{},"4. アドオンの実行とパッケージ化",[101,4709,4710],{},"アドオンのスクリプトを書いたら、それをBlenderに読み込んで、すぐにテストできます。特別なツールは不要です。",[209,4712,4713,4720,4723,4730],{},[212,4714,4715,4716,4719],{},"スクリプトを保存する - ",[255,4717,4718],{},"my_addon.py"," のように分かりやすい名前でPythonファイルを保存します。",[212,4721,4722],{},"BlenderのAdd-ons Preferencesを開く - Edit → Preferences → Add-onsへ移動します。ここでBlenderは、インストールされた拡張機能をすべて管理します。",[212,4724,4725,4726,4729],{},"アドオンをインストールする - Preferencesウィンドウ上部の「Install…」ボタンをクリックします。",[255,4727,4728],{},"Select your my_addon.py"," ファイルを選択して、「Install Add-on」をクリックします。",[212,4731,4732],{},"有効化する - インストール後、アドオンはリストに表示されます。「My Add-on」を探し、まだ有効になっていない場合はチェックを入れて有効化します。",[225,4734,4736],{"className":4735},[87,228],[230,4737],{"src":4738,"className":4739,"alt":235,"loading":236,"width":4740,"height":4741,"srcSet":4742,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-27ff3592-fed1-4347-8930-9dd62b2d950b.png",[234],1227,800,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-27ff3592-fed1-4347-8930-9dd62b2d950b.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-27ff3592-fed1-4347-8930-9dd62b2d950b.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-27ff3592-fed1-4347-8930-9dd62b2d950b.png 1227w",[209,4744,4746],{"start":4745},5,[212,4747,4748],{},"インターフェースで確認する - 3Dビューポートを開き、サイドバーを開いて「Simple」という名前のタブを探します。カスタムパネルがそこにあり、すぐに使えます！",[225,4750,4752],{"className":4751},[87,228],[230,4753],{"src":4754,"className":4755,"alt":235,"loading":236,"width":4740,"height":4756,"srcSet":4757,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-2a90e13f-b338-4235-a830-f9c8d8060562.png",[234],741,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-2a90e13f-b338-4235-a830-f9c8d8060562.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-2a90e13f-b338-4235-a830-f9c8d8060562.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-2a90e13f-b338-4235-a830-f9c8d8060562.png 1227w",[101,4759,4760],{},"アドオンを他の人と共有したいときは、配布用にGitHub、Blender Artists、Gumroadへアップロードできます。アドオンが何をするのか、どうやってインストールするのかを説明する短いREADME.mdを用意しましょう。",[101,4762,4763,4764,4767,4768,4771,4772,4778],{},"複数ファイルのアドオン（例：別々のモジュール、アイコン、リソースなど）がある場合は、フォルダーを作成して、そのフォルダー全体をZIPにして（",[255,4765,4766],{},"my_addon.zip","）共有します。Blenderは同じ「Install…」ボタンから直接",[255,4769,4770],{},".zip","アーカイブをインストールできるため、事前に展開する必要はありません。メインのエントリポイントは",[255,4773,4774,4777],{},[120,4775,4776],{},"init",".py","という名前である必要があります。BlenderがそれをPythonパッケージとして扱うためです。",[128,4780],{},[131,4782,4783],{"id":1346},[120,4784,1890],{},[101,4786,4787],{},"BlenderアドオンのためのUIを作るのは、最初は気後れするかもしれません。しかし、自分で作ったツールを共有するための最も簡単な方法の1つです。パネルとレイアウトの仕組みを理解すれば、ユーザーが直感的に使えるボタン、プロパティ、整理されたセクションを素早く追加できます。",[101,4789,4790,146],{},[142,4791,4792],{"href":4049},"GitHub上のコードリポジトリを見て、ぜひこの例を試してみてください",[101,4794,4795],{},"まずは小さく、シンプルなパネル、ラベル、ボタンを追加してアクションを作り、そこから広げていきましょう！",[84,4797,4799,4802],{"className":4798},[87,88,89],[84,4800,583],{"className":4801},[93],[84,4803,3237,4805,4808],{"className":4804},[98],[142,4806,3241],{"href":590,"rel":4807},[592],"！私たちはベストプラクティスを共有する千人以上の専門家とつながっており、時々現地イベントも企画しています。ぜひ歓迎します！ 😊",[84,4810,4812],{"className":4811},[87,598,599],[142,4813,605],{"href":590,"className":4814},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":4816},[4817,4822,4823,4830,4831],{"id":4055,"depth":607,"text":4058,"children":4818},[4819,4820,4821],{"id":4103,"depth":1410,"text":4106},{"id":4129,"depth":1410,"text":4132},{"id":4198,"depth":1410,"text":4201},{"id":4253,"depth":607,"text":4256},{"id":4379,"depth":607,"text":4382,"children":4824},[4825,4827,4828,4829],{"id":4388,"depth":1410,"text":4826},"1) bl_info - アドオンメタデータ",{"id":4467,"depth":1410,"text":4470},{"id":4541,"depth":1410,"text":4544},{"id":4623,"depth":1410,"text":4626},{"id":4704,"depth":607,"text":4707},{"id":1346,"depth":607,"text":1890},"https://images.unsplash.com/photo-1760548425425-e42e77fa38f1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fGNvZGluZyUyMGludGVyZmFjZSUyMHRvb2xzfGVufDB8fHx8MTc2Mzg5MzE4MXww&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":4834,"featured_at":621,"visibility":622},"2026-02-20T06:03:59.000+01:00","/blog-i18n/ja/blender-addon-ui-scripting-guide","2025-11-24T10:00:34.000+01:00",{"title":3998,"description":235},"blender-addon-ui-scripting-guide","blog-i18n/ja/blender-addon-ui-scripting-guide/index",[4841,4842],{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"jAsYseHWs1DZX2U_wuc_p9fraLT43R7kQvoByh2mUOE",{"id":4845,"title":4846,"authors":4847,"body":4849,"description":235,"extension":617,"feature_image":5572,"html":7,"meta":5573,"navigation":12,"path":5575,"published_at":5576,"seo":5577,"slug":5578,"stem":5579,"tags":5580,"__hash__":5583,"updated_at":5574,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-scripting-geometry-nodes-2/index.md","BlenderでPythonを使ってGeometry Nodesをスクリプトする方法（2026）",[4848],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":4850,"toc":5556},[4851,4862,4865,4868,4871,4877,4879,4885,4888,4891,4894,4897,4923,4925,4931,4934,4945,4952,4954,4960,4963,5006,5011,5021,5023,5029,5032,5042,5050,5057,5064,5066,5072,5075,5078,5084,5091,5097,5100,5106,5109,5121,5135,5141,5151,5157,5164,5170,5173,5179,5217,5223,5232,5246,5266,5272,5275,5281,5288,5294,5297,5351,5395,5398,5486,5489,5499,5502,5510,5512,5516,5519,5525,5533,5536,5550],[84,4852,4854,4858],{"className":4853},[87,88,89],[84,4855,4857],{"className":4856},[93],"🐍",[84,4859,4861],{"className":4860},[98],"手作業でノードを配線するよりも、コードでノードを生成すると、手続き的モデリングははるかに強力になります。",[101,4863,4864],{},"Geometry Nodesは信じられないほど優れたBlenderの機能ですが、BlenderのPython APIでも、他のデータブロックと同じようにGeometry Nodesをスクリプトできることをご存じでしたか？",[101,4866,4867],{},"ノードを作成し、パラメータを設定し、プログラム的に接続することで、数行のコードだけでシーン生成を自動化したり、カスタムツールを作ったり、手作業で何十個ものノードを配線する代わりに、モデルのプロトタイプを素早く作成したりできるようになります。",[101,4869,4870],{},"このチュートリアルでは、Pythonスクリプトだけでジオメトリノードのセットアップをすべて作成する方法を学びます。新しいノードツリーを構築するところから、それをオブジェクトに割り当てるところまで、Blenderのスクリプトエディタにそのまま貼り付けられる明確な例を使って、全手順を解説します。",[101,4872,4873,4874,3169],{},"見逃していた場合は、まず",[142,4875,4876],{"href":4019},"Blenderスクリプトの入門",[128,4878],{},[131,4880,4882],{"id":4881},"why-script-geometry-nodes",[120,4883,4884],{},"なぜGeometry Nodesをスクリプトするのか？",[101,4886,4887],{},"BlenderのGeometry Nodesエディタは、手続き的ツールを作るための優れたビジュアルシステムです。直感的で柔軟性が高く、使い方を掴めば実験もしやすいです。とはいえ、プロジェクトが複雑になってくると、大きなノードネットワークを手作業で管理するのは面倒になり、特に多数の3Dモデリングパイプライン全体で再利用する必要がある場合は、保守が難しくなります。",[101,4889,4890],{},"スクリプトを使うと、ノードを自動生成・変更・接続できます。同じセットアップを複数のプロジェクトで毎回作り直す代わりに、スクリプトを書いておけば必要なときにいつでも再利用でき、時間を節約したり、アニメーションをより一貫したものにしたりできます。",[101,4892,4893],{},"スクリプトされたノードセットアップは、単一の.blendファイルに紐づきません。コードの一部と同じように保存でき、バージョン管理でき、共有もできます。これにより、さまざまなプロジェクトで再利用したり、他のアーティストや開発者と共有したりできる手続き的ツールのライブラリを作りやすくなります。",[101,4895,4896],{},"では、いくつかのコードスニペットで、スクリプトが実際にどのように機能するのか見てみましょう。",[84,4898,4900,4903],{"className":4899},[87,88,1134],[84,4901,1138],{"className":4902},[93],[84,4904,4906,4910,4912,4914,4915,4917,1158,4919],{"className":4905},[98],[1143,4907,4908],{},[120,4909,1576],{"style":722},[1149,4911],{},[1149,4913],{},"このガイドで紹介されている例の統合の完全なソースコードは、GitHub上で確認できます：",[1149,4916],{},[1149,4918],{},[142,4920,4922],{"href":4921},"https://github.com/cgwire/blender-scripting-geometry-nodes?ref=blog.cg-wire.com","https://github.com/cgwire/blender-scripting-geometry-nodes",[128,4924],{},[131,4926,4928],{"id":4927},"_1-creating-a-new-node-tree",[120,4929,4930],{},"1. 新しいノードツリーを作成する",[101,4932,4933],{},"すべてのGeometry Nodesのセットアップはノードツリーとして始まり、ノードとそれらの接続を保持します。このようなツリーは、BlenderのデータAPIを使ってPythonから作成できます：",[1174,4935,4936,4939],{},[255,4937,1612],{"className":4938},[1179],[101,4940,4941],{},[255,4942,4944],{"className":4943},[1179],"node_tree = bpy.data.node_groups.new(\"MyGeoNodesTree\", 'GeometryNodeTree')",[101,4946,4947,4948,4951],{},"この",[255,4949,4950],{},"node_tree","を、すべての手続き的ロジックを保持するデジタルキャンバスだと考えると分かりやすいです。作成したら、ノードを追加し、接続し、プロパティをBlenderのグラフィカルユーザーインターフェースと同じように設定できます。",[128,4953],{},[131,4955,4957],{"id":4956},"_2-add-nodes-and-connect-them",[120,4958,4959],{},"2. ノードを追加して接続する",[101,4961,4962],{},"次に、いくつかの基本ノードを追加しましょう。Input Geometryノード、Subdivision Surfaceノード、Group Outputノードを作成し、接続してから、その結果をキューブに適用します。",[1174,4964,4965,5000],{},[255,4966,4968,4969,4972,4975,4980,4996],{"className":4967},[1179],"# ADD NODES\ngeo_input = node_tree.interface.new_socket(\n    name=\"Geometry\",\n    in_out='INPUT',\n    socket_type='NodeSocketGeometry'\n)\ngeo_output = node_tree.interface.new_socket(\n    name=\"Geometry\",\n    in_out='OUTPUT',\n    socket_type='NodeSocketGeometry'\n)",[101,4970,4971],{},"input_node = node_tree.nodes.new(\"NodeGroupInput\")\nsubdivide_node = node_tree.nodes.new(\"GeometryNodeSubdivideMesh\")\noutput_node = node_tree.nodes.new(\"NodeGroupOutput\")",[101,4973,4974],{},"input_node.location = (-300, 0)\nsubdivide_node.location = (0, 0)\noutput_node.location = (300, 0)",[4976,4977,4979],"h1",{"id":4978},"link-nodes","LINK NODES",[101,4981,4982,4983,4986,4987,4990,4991,4993,4994,1279],{},"node_tree.links.new(input_node.outputs",[1215,4984,4985],{},"'Geometry'",", subdivide_node.inputs",[1215,4988,4989],{},"'Mesh'",")\nnode_tree.links.new(subdivide_node.outputs",[1215,4992,4989],{},", output_node.inputs",[1215,4995,4985],{},[4976,4997,4999],{"id":4998},"apply-to-current-object","APPLY TO CURRENT OBJECT",[101,5001,5002],{},[255,5003,5005],{"className":5004},[1179],"obj = bpy.context.object\nmod = obj.modifiers.new(\"MyGeoNodesModifier\", \"NODES\")\nmod.node_group = node_tree",[101,5007,5008,5010],{},[1149,5009],{},"このスクリプトを実行すると、適用した任意のジオメトリをサブディビジョンする、動作する（ただしシンプルな）ジオメトリノードのセットアップが得られます：",[225,5012,5014],{"className":5013},[87,228],[230,5015],{"src":5016,"className":5017,"alt":235,"loading":236,"width":5018,"height":5019,"srcSet":5020,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-de23dbc9-781f-4730-9a46-a6fec93c97a7.png",[234],1314,889,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-de23dbc9-781f-4730-9a46-a6fec93c97a7.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-de23dbc9-781f-4730-9a46-a6fec93c97a7.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-de23dbc9-781f-4730-9a46-a6fec93c97a7.png 1314w",[128,5022],{},[131,5024,5026],{"id":5025},"_3-set-parameters-and-link-geometry-to-objects",[120,5027,5028],{},"3. パラメータを設定し、ジオメトリをオブジェクトにリンクする",[101,5030,5031],{},"ノードのプロパティ経由で、パラメータを直接変更できます。たとえば、サブディビジョンレベルを上げて、このノードグループをオブジェクトに適用してみましょう：",[1174,5033,5034],{},[255,5035,5037,5038,5041],{"className":5036},[1179],"subdivide_node.inputs",[1215,5039,5040],{},"'Level'",".default_value = 3",[225,5043,5045],{"className":5044},[87,228],[230,5046],{"src":5047,"className":5048,"alt":235,"loading":236,"width":5018,"height":5019,"srcSet":5049,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-18e48250-6a76-4eda-b14c-ce8065b78f9e.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-18e48250-6a76-4eda-b14c-ce8065b78f9e.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-18e48250-6a76-4eda-b14c-ce8065b78f9e.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-18e48250-6a76-4eda-b14c-ce8065b78f9e.png 1314w",[101,5051,5052,5053,5056],{},"入力に対する",[255,5054,5055],{},"default_value","を調整するのは、セットアップをパラメータ化する簡単な方法です。",[101,5058,5059,5060,4248],{},"利用可能なパラメータとタイプの完全な内訳については、",[142,5061,5063],{"href":5062},"https://docs.blender.org/api/current/bpy.types.Node.html?ref=blog.cg-wire.com","公式のBlender Python APIドキュメント",[128,5065],{},[131,5067,5069],{"id":5068},"_4-create-a-custom-%E2%80%9Ccube-crowd-generator%E2%80%9D-node-group-programmatically",[120,5070,5071],{},"4. カスタム「Cube Crowd Generator」ノードグループをプログラム的に作成する",[101,5073,5074],{},"ここまで、Geometry Nodesをプログラム的に定義する方法は分かりましたが、再利用可能なカスタムノードを作るにはどうすればよいのでしょうか？",[101,5076,5077],{},"では、表面上に多数のキューブを散布する小さな手続き的システムを構築する新しい例に取り組みましょう。このスクリプトは、表面を入力として受け取り、その上に点を散布し、それらの点をランダムにオフセットし、各点にキューブを配置（インスタンス）し、インスタンスを実際のジオメトリに変換し、最終的なメッシュを「Cubes」として出力する、Geometry Nodesのグループを作成します。",[826,5079,5081],{"id":5080},"_1-create-a-new-node-group",[120,5082,5083],{},"1) 新しいノードグループを作成する",[101,5085,5086,5087,5090],{},"まず、Blenderで新しいGeometry Nodeグループを作成し、その名前を",[255,5088,5089],{},"\"CubeCrowdGenerator\"","にします。",[1174,5092,5093],{},[255,5094,5096],{"className":5095},[1179],"crowd_group = bpy.data.node_groups.new(\"CubeCrowdGenerator\", \"GeometryNodeTree\")",[101,5098,5099],{},"関数のように、このノードを後でGeometry Nodesモディファイアと一緒に任意のオブジェクトに取り付けられるようにしたいです。",[826,5101,5103],{"id":5102},"_2-add-group-input-and-output-nodes-uientry-points",[120,5104,5105],{},"2) グループの入力・出力ノードを追加する（UI/エントリポイント）",[101,5107,5108],{},"いつも通り、キャンバス上に標準の入出力グループを配置します：",[1174,5110,5111,5115],{},[255,5112,5114],{"className":5113},[1179],"group_in = crowd_group.nodes.new(\"NodeGroupInput\")\ngroup_out = crowd_group.nodes.new(\"NodeGroupOutput\")",[101,5116,5117],{},[255,5118,5120],{"className":5119},[1179],"group_in.location = (-600, 0)\ngroup_out.location = (600, 0)",[728,5122,5123,5132],{},[212,5124,5125,3085,5128,5131],{},[255,5126,5127],{},"group_in",[255,5129,5130],{},"group_out","は、Geometry Nodesエディタ上で表示されるノードグループのソケットです。",[212,5133,5134],{},"スクリプトは、グラフが読みやすくなるように、それらの位置も配置します。",[826,5136,5138],{"id":5137},"_3-define-the-group-interface-what-the-group-acceptsreturns",[120,5139,5140],{},"3) グループインターフェースを定義する（何を受け取り、何を返すか）",[101,5142,5143,5146,5147,5150],{},[120,5144,5145],{},"入力ソケット「Surface」","を公開して、そこに埋め込みたいメッシュ（例：プレーン）を差し込みます。そして、結果として生成されるジオメトリを返す",[120,5148,5149],{},"出力ソケット「Cubes」","を用意する必要があります。",[1174,5152,5153],{},[255,5154,5156],{"className":5155},[1179],"interface = crowd_group.interface\ninterface.new_socket(name=\"Surface\", in_out=\"INPUT\", socket_type=\"NodeSocketGeometry\")\ninterface.new_socket(name=\"Cubes\", in_out=\"OUTPUT\", socket_type=\"NodeSocketGeometry\")",[101,5158,5159,5160,5163],{},"実際には、このノードグループをオブジェクトに追加するとき、その表面（オブジェクトの元のジオメトリ）を",[255,5161,5162],{},"Surface","に接続することになります。",[826,5165,5167],{"id":5166},"_4-create-the-internal-nodes-the-building-blocks",[120,5168,5169],{},"4) 内部ノード（構成要素）を作成する",[101,5171,5172],{},"次に、実際の内部ロジックを作っていきます：",[1174,5174,5175],{},[255,5176,5178],{"className":5177},[1179],"distribute = crowd_group.nodes.new(\"GeometryNodeDistributePointsOnFaces\")\nrand_vec = crowd_group.nodes.new(\"FunctionNodeRandomValue\")\nset_pos = crowd_group.nodes.new(\"GeometryNodeSetPosition\")\ncube = crowd_group.nodes.new(\"GeometryNodeMeshCube\")\ninstance = crowd_group.nodes.new(\"GeometryNodeInstanceOnPoints\")\nrealize = crowd_group.nodes.new(\"GeometryNodeRealizeInstances\")",[728,5180,5181,5187,5193,5199,5205,5211],{},[212,5182,5183,5186],{},[120,5184,5185],{},"GeometryNodeDistributePointsOnFaces",": 入力サーフェス上に点を作成します（点の数や分布を制御します）。",[212,5188,5189,5192],{},[120,5190,5191],{},"FunctionNodeRandomValue（Float Vector）",": 各点ごとに使う、オフセット用のランダムな3Dベクトルを生成します。",[212,5194,5195,5198],{},[120,5196,5197],{},"GeometryNodeSetPosition",": ベクトル（ランダムオフセット）により、各点を移動します。",[212,5200,5201,5204],{},[120,5202,5203],{},"GeometryNodeMeshCube",": インスタンスとして使われるキューブメッシュを生成します。",[212,5206,5207,5210],{},[120,5208,5209],{},"GeometryNodeInstanceOnPoints",": 各点にキューブを配置します。これは実際のジオメトリを作るわけではなく、元のキューブの安価なインスタンスを作るだけです。",[212,5212,5213,5216],{},[120,5214,5215],{},"GeometryNodeRealizeInstances",": インスタンスを実際のメッシュジオメトリに変換し、1つのメッシュとして出力できるようにします。",[826,5218,5220],{"id":5219},"_5-configure-the-random-vector-node",[120,5221,5222],{},"5) ランダムベクトルノードを設定する",[101,5224,5225,5228,5229,5231],{},[255,5226,5227],{},"Random Value","ノードを、3成分のベクトル",[120,5230,748],{},"として返すように設定し、3D空間内で生成されたキューブをオフセットするために使います：",[1174,5233,5234],{},[255,5235,5237,5238,5241,5242,5245],{"className":5236},[1179],"rand_vec.data_type = \"FLOAT_VECTOR\"\nrand_vec.inputs",[1215,5239,5240],{},"\"Min\"",".default_value = (-0.5, -0.5, 0.0)\nrand_vec.inputs",[1215,5243,5244],{},"\"Max\"",".default_value = (0.5, 0.5, 0.5)",[728,5247,5248,5263],{},[212,5249,5250,3085,5253,5256,5257,786,5260,5262],{},[255,5251,5252],{},"Min",[255,5254,5255],{},"Max","は各成分の範囲を定義します。たとえばXは",[255,5258,5259],{},"-0.5",[255,5261,789],{},"の間になります。",[212,5264,5265],{},"結果：各点にわずかに異なるオフセットが割り当てられるため、キューブが互いの上に完全に重なって配置されることはありません。",[826,5267,5269],{"id":5268},"_6-node-layout-ui-only",[120,5270,5271],{},"6) ノードレイアウト（UIのみ）",[101,5273,5274],{},"Blenderでワークフローを確認したいときに分かりやすいように、内部ノードを配置します：",[1174,5276,5277],{},[255,5278,5280],{"className":5279},[1179],"distribute.location = (-400, 0)\nrand_vec.location = (-200, -200)\nset_pos.location = (-100, 0)\ninstance.location = (100, 0)\ncube.location = (-400, -200)\nrealize.location = (300, 0)",[101,5282,5283,5284,5287],{},"これらの",[255,5285,5286],{},"location","の割り当ては、ノードエディタ上での見た目の配置だけに影響します。グラフが行う処理内容には影響しません。",[826,5289,5291],{"id":5290},"_7-wire-the-nodes-together",[120,5292,5293],{},"7) ノードをつなぐ",[101,5295,5296],{},"最後に、データの流れを定義します：",[1174,5298,5299],{},[255,5300,5302,5303,5306,5307,5310,5311,5314,5315,5318,5319,5314,5322,5325,5326,5328,5329,5331,5332,5328,5334,5337,5338,5341,5342,5344,5345,5347,5348,1279],{"className":5301},[1179],"links.new(group_in.outputs",[1215,5304,5305],{},"\"Surface\"",", distribute.inputs",[1215,5308,5309],{},"\"Mesh\"",")\nlinks.new(distribute.outputs",[1215,5312,5313],{},"\"Points\"",", set_pos.inputs",[1215,5316,5317],{},"\"Geometry\"",")\nlinks.new(rand_vec.outputs",[1215,5320,5321],{},"\"Value\"",[1215,5323,5324],{},"\"Offset\"",")\nlinks.new(set_pos.outputs",[1215,5327,5317],{},", instance.inputs",[1215,5330,5313],{},")\nlinks.new(cube.outputs",[1215,5333,5309],{},[1215,5335,5336],{},"\"Instance\"",")\nlinks.new(instance.outputs",[1215,5339,5340],{},"\"Instances\"",", realize.inputs",[1215,5343,5317],{},")\nlinks.new(realize.outputs",[1215,5346,5317],{},", group_out.inputs",[1215,5349,5350],{},"\"Cubes\"",[209,5352,5353,5359,5365,5371,5377,5383,5389],{},[212,5354,5355,5358],{},[120,5356,5357],{},"Surface → DistributePointsOnFaces",": 入力サーフェス（プレーン）が散布用の点を作るために使われます。",[212,5360,5361,5364],{},[120,5362,5363],{},"Points → SetPosition（Geometry）",": set positionは、移動されるジオメトリとして点を受け取ります。",[212,5366,5367,5370],{},[120,5368,5369],{},"RandomValue → SetPosition（Offset）",": 各点にランダムなベクトルのオフセットが付与されます。",[212,5372,5373,5376],{},[120,5374,5375],{},"SetPosition → InstanceOnPoints（Points）",": 移動された点が、インスタンスのアンカーポイントになります。",[212,5378,5379,5382],{},[120,5380,5381],{},"Cube Mesh → InstanceOnPoints（Instance）",": 各点にキューブのインスタンスが割り当てられます。",[212,5384,5385,5388],{},[120,5386,5387],{},"InstanceOnPoints → RealizeInstances",": インスタンスがメッシュジオメトリに変換されます。",[212,5390,5391,5394],{},[120,5392,5393],{},"RealizeInstances → Group Output（\"Cubes\"）",": 最終結果がグループ出力として利用可能になります。",[101,5396,5397],{},"これが、得られた完全なコードです：",[1174,5399,5400,5452],{},[255,5401,1183,5403,5407,5409,5413,5415,5417,5421,5423,5427,5430,5434,5442,5446,5448],{"className":5402},[1179],[4976,5404,5406],{"id":5405},"create-a-new-geometry-node-group","Create a new Geometry Node group",[101,5408,5096],{},[4976,5410,5412],{"id":5411},"create-inputoutput-nodes","Create input/output nodes",[101,5414,5114],{},[101,5416,5120],{},[4976,5418,5420],{"id":5419},"define-group-interface-sockets","Define group interface sockets",[101,5422,5156],{},[4976,5424,5426],{"id":5425},"create-internal-nodes","Create internal nodes",[101,5428,5429],{},"distribute = crowd_group.nodes.new(\"GeometryNodeDistributePointsOnFaces\")\ninstance = crowd_group.nodes.new(\"GeometryNodeInstanceOnPoints\")\ncube = crowd_group.nodes.new(\"GeometryNodeMeshCube\")\nrealize = crowd_group.nodes.new(\"GeometryNodeRealizeInstances\")\nset_pos = crowd_group.nodes.new(\"GeometryNodeSetPosition\")\nrand_vec = crowd_group.nodes.new(\"FunctionNodeRandomValue\")",[4976,5431,5433],{"id":5432},"configure-random-vector-node","Configure random vector node",[101,5435,5237,5436,5438,5439,5441],{},[1215,5437,5240],{},".default_value = (-0.5, -0.5, 0.0)  # minimum offset\nrand_vec.inputs",[1215,5440,5244],{},".default_value = (0.5, 0.5, 0.5)  # maximum offset",[4976,5443,5445],{"id":5444},"layout-nodes","Layout nodes",[101,5447,5280],{},[4976,5449,5451],{"id":5450},"create-links","Create links",[101,5453,5454],{},[255,5455,5457,5458,5306,5460,5310,5462,5314,5464,5318,5466,5314,5468,5325,5470,5328,5472,5331,5474,5328,5476,5337,5478,5341,5480,5344,5482,5347,5484,1279],{"className":5456},[1179],"links = crowd_group.links\nlinks.new(group_in.outputs",[1215,5459,5305],{},[1215,5461,5309],{},[1215,5463,5313],{},[1215,5465,5317],{},[1215,5467,5321],{},[1215,5469,5324],{},[1215,5471,5317],{},[1215,5473,5313],{},[1215,5475,5309],{},[1215,5477,5336],{},[1215,5479,5340],{},[1215,5481,5317],{},[1215,5483,5317],{},[1215,5485,5350],{},[101,5487,5488],{},"次に、このスクリプトをスクリプトワークスペースにコピー＆ペーストして実行すれば、ジオメトリノードのワークスペースからこのカスタムノードを追加できるようになります：",[225,5490,5492],{"className":5491},[87,228],[230,5493],{"src":5494,"className":5495,"alt":235,"loading":236,"width":5496,"height":5497,"srcSet":5498,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-d4ff8437-efb6-43b0-b45d-a54fce0b74b6.png",[234],1430,920,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-d4ff8437-efb6-43b0-b45d-a54fce0b74b6.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-d4ff8437-efb6-43b0-b45d-a54fce0b74b6.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-d4ff8437-efb6-43b0-b45d-a54fce0b74b6.png 1430w",[101,5500,5501],{},"それが中で何をしているのか確認するには、それをダブルクリックしてノードグループを開きます：",[225,5503,5505],{"className":5504},[87,228],[230,5506],{"src":5507,"className":5508,"alt":235,"loading":236,"width":5496,"height":5497,"srcSet":5509,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-679df6c4-2877-4419-8b79-4758df98290a.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-679df6c4-2877-4419-8b79-4758df98290a.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-679df6c4-2877-4419-8b79-4758df98290a.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-679df6c4-2877-4419-8b79-4758df98290a.png 1430w",[128,5511],{},[131,5513,5514],{"id":1346},[120,5515,1349],{},[101,5517,5518],{},"数十行のコードだけで、手作業で組み立てるのにずっと時間がかかるようなGeometry Nodesのセットアップをスクリプト化できます。この記事では、Geometry Nodeツリーの作成、ノードの追加と接続をプログラム的に行うこと、パラメータを制御してノードツリーをオブジェクトに割り当てること、そして完全な手続き的システムを構築する方法を学びました。",[101,5520,5521,5522,3169],{},"例を自分で試すには、",[142,5523,5524],{"href":4921},"Githubのコードリポジトリ",[225,5526,5528],{"className":5527},[87,228],[230,5529],{"src":5530,"className":5531,"alt":235,"loading":236,"width":5018,"height":5019,"srcSet":5532,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-db488d5a-7ab5-4471-a904-0926b1fa7d11.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-db488d5a-7ab5-4471-a904-0926b1fa7d11.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-db488d5a-7ab5-4471-a904-0926b1fa7d11.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-db488d5a-7ab5-4471-a904-0926b1fa7d11.png 1314w",[101,5534,5535],{},"このアプローチにより、ツール開発からジェネレーティブアートまで、無限の自動化の可能性が開かれます。 ",[84,5537,5539,5542],{"className":5538},[87,88,89],[84,5540,583],{"className":5541},[93],[84,5543,5545,5546,5549],{"className":5544},[98],"アニメーションのプロセスについてもっと学ぶには ",[142,5547,3241],{"href":590,"rel":5548},[592],"！私たちはベストプラクティスを共有する1,000人以上の専門家とつながっており、時には現地イベントも企画しています。ぜひようこそお迎えしたいです！😊",[84,5551,5553],{"className":5552},[87,598,599],[142,5554,605],{"href":590,"className":5555},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":5557},[5558,5559,5560,5561,5562,5571],{"id":4881,"depth":607,"text":4884},{"id":4927,"depth":607,"text":4930},{"id":4956,"depth":607,"text":4959},{"id":5025,"depth":607,"text":5028},{"id":5068,"depth":607,"text":5071,"children":5563},[5564,5565,5566,5567,5568,5569,5570],{"id":5080,"depth":1410,"text":5083},{"id":5102,"depth":1410,"text":5105},{"id":5137,"depth":1410,"text":5140},{"id":5166,"depth":1410,"text":5169},{"id":5219,"depth":1410,"text":5222},{"id":5268,"depth":1410,"text":5271},{"id":5290,"depth":1410,"text":5293},{"id":1346,"depth":607,"text":1349},"https://images.unsplash.com/photo-1675044794037-9262cedb6d5d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDV8fGJsZW5kZXIlMjBnZW9tZXRyeSUyMG5vZGVzfGVufDB8fHx8MTc2MzM2OTc0N3ww&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":5574,"featured_at":621,"visibility":622},"2026-02-20T06:04:04.000+01:00","/blog-i18n/ja/blender-scripting-geometry-nodes-2","2025-11-17T10:13:21.000+01:00",{"title":4846,"description":235},"blender-scripting-geometry-nodes-2","blog-i18n/ja/blender-scripting-geometry-nodes-2/index",[5581,5582],{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"WVSnZV3jzjNitPY-mUio9-NjOp_lAoEg52z_Z9mAqoc",{"id":5585,"title":5586,"authors":5587,"body":5589,"description":235,"extension":617,"feature_image":6044,"html":7,"meta":6045,"navigation":12,"path":6046,"published_at":6047,"seo":6048,"slug":6049,"stem":6050,"tags":6051,"__hash__":6053,"updated_at":5574,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-scripting-geometry-nodes/index.md","Blender 2026におけるジオメトリーノード入門ガイド",[5588],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":5590,"toc":6023},[5591,5601,5604,5607,5609,5615,5618,5627,5630,5632,5638,5645,5648,5673,5675,5681,5684,5692,5700,5703,5706,5738,5746,5749,5752,5755,5757,5762,5765,5768,5771,5776,5779,5782,5788,5791,5794,5800,5803,5806,5816,5822,5825,5828,5837,5843,5846,5849,5855,5858,5861,5867,5870,5873,5883,5889,5892,5895,5901,5904,5907,5913,5916,5922,5925,5928,5934,5937,5940,5946,5949,5952,5958,5961,5964,5981,5983,5987,5990,5993,6003,6017],[84,5592,5594,5597],{"className":5593},[87,88,89],[84,5595,3283],{"className":5596},[93],[84,5598,5600],{"className":5599},[98],"手作業でシーンを作り直すのは、もう2010年のやり方です。ジオメトリーノードなら、精度高くBlenderプロジェクトを自動化し、ランダム化し、制御できます——数時間の手作業によるモデリングを、手続き型マジックの数分へと変えてくれるのです。",[101,5602,5603],{},"Blenderでジオメトリを何度も手作業で複製したり、形を作り替えたり、繰り返しの動きをアニメーションしたりするために何時間も費やすのは楽しくありません。そんな作業は、たとえば「同じことを何度も繰り返す必要があるが、違いはほんの少しだけ」というタイプのワークフローです。",[101,5605,5606],{},"しかし、手続き的な効果を作るための、より賢く速い方法があります。それがジオメトリーノードです。最初は難しそうで習得に時間がかかるように見えるかもしれませんが、この記事の最後まで読めば、ジオメトリーノードが何か、なぜ重要なのか、そして自分のBlenderプロジェクトでどう使い始めるかが分かるようになります。",[128,5608],{},[131,5610,5612],{"id":5611},"what-are-geometry-nodes",[120,5613,5614],{},"ジオメトリーノードとは？",[101,5616,5617],{},"ジオメトリーノードは、Blenderの「手続き的にモデルを作成・操作するための方法」です。メッシュオブジェクトを直接編集する代わりに、インスタンス化、変換、オブジェクトのばらまき（散布）などの処理を定義する、見た目のノードをつなぎ合わせます。これは非破壊で、モジュールとして構築できます。",[225,5619,5621],{"className":5620},[87,228],[230,5622],{"src":5623,"className":5624,"alt":235,"loading":236,"width":709,"height":5625,"srcSet":5626,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-b4252feb-7713-4df1-98ca-cc453b53d4ee.png",[234],830,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-b4252feb-7713-4df1-98ca-cc453b53d4ee.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-b4252feb-7713-4df1-98ca-cc453b53d4ee.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-b4252feb-7713-4df1-98ca-cc453b53d4ee.png 1600w",[101,5628,5629],{},"各ノードは小さな作業を行いますが、つなぎ合わせることで、非常に細かな結果を生み出せます。たとえば、ランダム化された何千本もの木で構成された森、アニメーションするパーティクルトレイル、あるいは建築的なパターンなどです。ジオメトリーノードなら一度作って、調整可能なパラメータで全てをコントロールできます。",[128,5631],{},[131,5633,5635],{"id":5634},"why-geometry-nodes-are-important",[120,5636,5637],{},"なぜジオメトリーノードが重要なのか",[101,5639,5640,5644],{},[142,5641,5643],{"href":5642},"https://blog.cg-wire.com/3d-modeling-animation/","従来のモデリング／アニメーションのワークフロー","は、多くの場合、時間のかかる手作業による調整に依存しており、変更やバリエーションのたびにモデルへ直接編集を行う必要があります。ジオメトリーノードは、このプロセスに「手続き的な制御」を導入することで革命を起こします。入力値、ランダム性、または数学的な関係性を通じて、モデルを動的に生成・変更できる仕組みです。",[101,5646,5647],{},"このアプローチには、いくつかの大きな利点があります。複雑なシーンをゼロから作り直さなくても、すぐに更新したりランダム化したりできるため、作業効率が上がります。また、パラメータは制作のどの段階でも調整できるので、パイプラインへの柔軟性も高まります。ジオメトリーノードは、大きな芝生のパッチを生成するような、手作業では難しい、あるいは不可能な複雑な形状、パターン、効果を生み出すための実験への扉を開きます。この機能は、群衆シミュレーションやリアルな自然環境のような大規模なモデリングに最適です。",[84,5649,5652,5655],{"className":5650},[87,88,5651],"kg-callout-card-green",[84,5653,1138],{"className":5654},[93],[84,5656,5658,5662,5664,5666,5667,5669,1158,5671],{"className":5657},[98],[1143,5659,5660],{},[120,5661,1576],{"style":722},[1149,5663],{},[1149,5665],{},"このガイドで紹介しているBlender–Kitsu連携のサンプルについて、完全なソースコードはGitHubで確認できます：",[1149,5668],{},[1149,5670],{},[142,5672,4922],{"href":4921},[128,5674],{},[131,5676,5678],{"id":5677},"adding-a-geometry-node",[120,5679,5680],{},"ジオメトリーノードを追加する",[101,5682,5683],{},"その概念は難しそうに見えるかもしれませんが、5分だけください。あなたの最初のジオメトリーノード設定を作ります。",[209,5685,5686,5689],{},[212,5687,5688],{},"デフォルトのキューブがある新しいBlenderプロジェクトを開きます。",[212,5690,5691],{},"ジオメトリーノードのタブで、Newをクリックして新しいジオメトリーノードグループを作成します。",[225,5693,5695],{"className":5694},[87,228],[230,5696],{"src":5697,"className":5698,"alt":235,"loading":236,"width":5018,"height":5019,"srcSet":5699,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-6cd7bfd9-e7fd-4220-834e-c6260fa00949.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-6cd7bfd9-e7fd-4220-834e-c6260fa00949.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-6cd7bfd9-e7fd-4220-834e-c6260fa00949.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-6cd7bfd9-e7fd-4220-834e-c6260fa00949.png 1314w",[101,5701,5702],{},"これで、ジオメトリーノードエディタの作業領域に空のノードツリーが表示されます。デフォルトノードとして、Group Input と Group Output の2つが用意されているはずです。これはデータフローの「開始」と「終了」を表します：ジオメトリが入ってきて、修正されて、外へ出るのです。",[101,5704,5705],{},"設定を動かして見るには、最初のノードを追加するだけです：",[209,5707,5708,5724,5735],{},[212,5709,5710,5713,5714,5713,5717,5713,5720,5723],{},[120,5711,5712],{},"Add"," → ",[120,5715,5716],{},"Geometry",[120,5718,5719],{},"Operations",[120,5721,5722],{},"Transform Geometry"," をクリックします。",[212,5725,5726,5713,5729,5713,5731,5734],{},[120,5727,5728],{},"Group Input",[120,5730,5722],{},[120,5732,5733],{},"Group Output"," を接続します。",[212,5736,5737],{},"Transformノード内で、移動（translation）やスケールの値を調整します。",[225,5739,5741],{"className":5740},[87,228],[230,5742],{"src":5743,"className":5744,"alt":235,"loading":236,"width":5018,"height":5019,"srcSet":5745,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-ea4b9476-8d89-4d56-bd6a-62dd751ba84d.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-ea4b9476-8d89-4d56-bd6a-62dd751ba84d.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-ea4b9476-8d89-4d56-bd6a-62dd751ba84d.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-ea4b9476-8d89-4d56-bd6a-62dd751ba84d.png 1314w",[101,5747,5748],{},"すぐに、ビューポート上でオブジェクトが移動したりリサイズされたりするのが見えるはずです。おめでとうございます。これであなたは、最初の手続き型モディファイアを作ったことになります！",[101,5750,5751],{},"ジオメトリーノードは、いくつかの大きなカテゴリに分かれています。各カテゴリはシーンの異なる側面を担当します。これらのカテゴリをツールボックスだと思ってください。形状の生成から、裏側のデータや数学の制御まで、作業の種類ごとに分かれているのです。",[101,5753,5754],{},"新しいワークフローで使うべきノードを見つけるために、さまざまなノードタイプを簡単に見ていきましょう：",[128,5756],{},[131,5758,5759],{"id":828},[120,5760,5761],{},"1. Input Nodes（入力ノード）",[101,5763,5764],{},"入力ノードは、ノードツリーの出発点となる情報を提供します。ほかのノードがジオメトリを計算したり変換したりするために使える、位置、法線、インデックス、オブジェクト情報など、オブジェクトやシーンから既存のデータを取り込みます。",[101,5766,5767],{},"たとえば Input → Scene → Object info ノードを使うと、計算を行うために必要な、オブジェクトインスタンスに関するあらゆる情報が手に入ります。",[101,5769,5770],{},"新しいノードツリーを作ると、Blenderは常に、現在のシーン内のモデルのグループを表す新しい Input Group ノードを追加します。",[131,5772,5773],{"id":875},[120,5774,5775],{},"2. Output Nodes（出力ノード）",[101,5777,5778],{},"出力ノードは、ノードシステムから何が「外へ出るか」を定義します。Blenderがレンダーしたり表示したりする最終的なジオメトリです。Group Output ノードが最も一般的で、ノードネットワーク全体の結果をビューポート上のオブジェクトへ戻して接続します。",[101,5780,5781],{},"ほかの専用の出力（シェーダセットアップのMaterial Outputなど）は、Blenderシステムの別の部分へデータを渡します。ジオメトリーノードでは、Output段階が「結果として表示されるジオメトリ、インスタンス、または属性」を決定します。",[131,5783,5785],{"id":5784},"_3-geometry-nodes",[120,5786,5787],{},"3. Geometry Nodes（ジオメトリーノード）",[101,5789,5790],{},"ジオメトリーノードは、ジオメトリ（つまりシーン内の実際の形状）を直接変更したり、組み合わせたり、生成したりします。",[101,5792,5793],{},"それらは手続き型モデリングの中核です。手で彫刻する代わりに、ジオメトリを自動生成するシステムを作れます。そして、基となるメッシュを壊さずに、後から調整もできます。",[131,5795,5797],{"id":5796},"_4-mesh-nodes",[120,5798,5799],{},"4. Mesh Nodes（メッシュノード）",[101,5801,5802],{},"メッシュノードは、メッシュ構造に対する細かな制御に焦点を当てます。つまり、ジオメトリを構成する頂点、エッジ、面です。特定のメッシュ構成要素へアクセスして変更したり、ジオメトリの種類を変換したりできます。",[101,5804,5805],{},"トポロジーを厳密に制御する必要があるときはメッシュノードを使いましょう。グリッドを作る、エッジループを操作する、既存メッシュから新しいトポロジーを生成する、といった手続き型モデリングのタスクに最適です。",[225,5807,5809],{"className":5808},[87,228],[230,5810],{"src":5811,"className":5812,"alt":235,"loading":236,"width":5813,"height":5814,"srcSet":5815,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-da4fe358-ac3b-482a-8641-6b0540c9d792.png",[234],947,897,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-da4fe358-ac3b-482a-8641-6b0540c9d792.png 600w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-da4fe358-ac3b-482a-8641-6b0540c9d792.png 947w",[131,5817,5819],{"id":5818},"_5-instance-nodes",[120,5820,5821],{},"5. Instance Nodes（インスタンスノード）",[101,5823,5824],{},"インスタンスノードは、オブジェクトのコピー（インスタンス）を作成し、サーフェス上やポイント上に散らします。Instance on Points や Realize Instances などのノードがこれを扱います。",[101,5826,5827],{},"インスタンシングはジオメトリーノードの中でも非常に強力な機能です。実際には1つのコピーだけをレンダーし、それを複数回参照することで、木・岩・パーティクルなど何千ものオブジェクトを複製してもシーンを重くしにくいからです。",[225,5829,5831],{"className":5830},[87,228],[230,5832],{"src":5833,"className":5834,"alt":235,"loading":236,"width":709,"height":5835,"srcSet":5836,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-1049c5fc-a3de-480a-b494-ed49a488af0c.png",[234],1085,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-1049c5fc-a3de-480a-b494-ed49a488af0c.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-1049c5fc-a3de-480a-b494-ed49a488af0c.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-1049c5fc-a3de-480a-b494-ed49a488af0c.png 1600w",[131,5838,5840],{"id":5839},"_6-attribute-nodes",[120,5841,5842],{},"6. Attribute Nodes（属性ノード）",[101,5844,5845],{},"属性ノードは、色、スケール、ポイントごとのランダム値のように、ジオメトリに取り付けられたカスタムプロパティを制御したり受け渡したりします。これらの属性は、変換、マテリアル、または効果の駆動に使えます。",[101,5847,5848],{},"属性によって、手続き型システムに「ばらつき」と「制御」を追加できます。散布されたオブジェクトの大きさをランダム化したり、パーティクルの色を別々にしたり、マテリアルの効果をジオメトリデータに結び付けたりできます。",[131,5850,5852],{"id":5851},"_7-utilities-and-fields",[120,5853,5854],{},"7. Utilities and Fields（ユーティリティとフィールド）",[101,5856,5857],{},"ユーティリティノードは、ジオメトリーネットワークの背後にあるロジックや計算を担当します。Math、Vector Math、Compare、Map Rangeのような処理が含まれ、プログラミング言語のように、ほかのノードの入力を処理・制御する用途で使われることが多いです。",[101,5859,5860],{},"これらはセットアップの「頭脳」として働き、関係性を作ったり、グラデーションを作ったり、値をランダム化したりします。",[131,5862,5864],{"id":5863},"_8-curve-nodes",[120,5865,5866],{},"8. Curve Nodes（カーブノード）",[101,5868,5869],{},"カーブノードは、ライン、スプライン、パスといったカーブベースのジオメトリで動作します。ケーブル、つる、道路、あるいは抽象的なモーションの軌跡を生成するのに役立ちます。Resample Curve、Curve to Mesh、Set Curve Radius のようなノードを使うと、カーブの形状、解像度、厚みを手続き的に調整できます。",[101,5871,5872],{},"カーブはインスタンシングを駆動することもでき、パスに沿ってオブジェクトを配置したり、時間経過に合わせて動きをアニメーションさせたりできます。",[225,5874,5876],{"className":5875},[87,228],[230,5877],{"src":5878,"className":5879,"alt":235,"loading":236,"width":5880,"height":5881,"srcSet":5882,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-6409cf07-26e7-4eb6-8e76-85e9a33a1581.png",[234],1142,936,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-6409cf07-26e7-4eb6-8e76-85e9a33a1581.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-6409cf07-26e7-4eb6-8e76-85e9a33a1581.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-6409cf07-26e7-4eb6-8e76-85e9a33a1581.png 1142w",[131,5884,5886],{"id":5885},"_9-grease-pencil-nodes",[120,5887,5888],{},"9. Grease Pencil Nodes（グリースペンシルノード）",[101,5890,5891],{},"グリースペンシルノードは、Blenderの2D描画システムをジオメトリーノードのワークフローに統合します。ストロークを手続き的に修正したり、描画をジオメトリに変換したり、ノイズ、押し出し、変形などの効果を2Dラインに適用したりできます。",[101,5893,5894],{},"これらのノードは、2Dアニメーションと手続き的なデザインの間のギャップを埋め、アーティストにモーション・グラフィックスをスタイライズする新しい方法や、2D/3Dのハイブリッドシーンを作る方法を提供します。",[131,5896,5898],{"id":5897},"_10-point-nodes",[120,5899,5900],{},"10. Point Nodes（ポイントノード）",[101,5902,5903],{},"ポイントノードは、ジオメトリ内の個々のポイントを操作します。散布、配置、インスタンスの変換に使われる、基本となる構成要素です。ポイントの追加、移動、回転ができるほか、各ポイントに色やスケールといった属性を割り当てることも可能です。",[101,5905,5906],{},"たとえば Distribute Points on Faces は、サーフェス上に均等またはランダムに配置されたポイントを生成し、それらを芝生やパーティクルといったインスタンスの配置位置として利用できます。",[131,5908,5910],{"id":5909},"_11-volume-nodes",[120,5911,5912],{},"11. Volume Nodes（ボリュームノード）",[101,5914,5915],{},"ボリュームノードは、霧、煙、または手続き的な密度フィールドのような体積データを作成・操作できるようにします。これらを使って3Dテクスチャを生成したり、雲の形を作ったり、密度に基づく効果でジオメトリを満たしたりできます。表面モデリングをはるかに超えた、空気感のある、または有機的な効果への道が開けます。",[131,5917,5919],{"id":5918},"_12-material-nodes",[120,5920,5921],{},"12. Material Nodes（マテリアルノード）",[101,5923,5924],{},"マテリアルノードは、マテリアルやシェーディングデータを割り当てたり、変更したりします。Set Material や Material Index ノードを使うと、属性、ランダムシード、またはモデルの領域に基づいて、異なるマテリアルを動的に適用できます。",[101,5926,5927],{},"たとえば、構造の一部を色分けしたり、散布されたオブジェクトに対してマテリアルを手続き的に割り当てたりするのが簡単になります。",[131,5929,5931],{"id":5930},"_13-texture-nodes",[120,5932,5933],{},"13. Texture Nodes（テクスチャノード）",[101,5935,5936],{},"テクスチャノードは、ジオメトリの変換や見た目のバリエーションを駆動できる手続き的なテクスチャをサンプル、あるいは生成します。グレースケールのマスク、ノイズパターン、グラデーションなどを提供でき、それらがスケール、ディスプレイスメント、色に影響します。",[101,5938,5939],{},"テクスチャデータと数学ノードや属性ノードを組み合わせることで、不均一な地形、波打つサーフェス、パターン化された分布に対して自然なランダム性を作れます。",[131,5941,5943],{"id":5942},"_14-group-nodes",[120,5944,5945],{},"14. Group Nodes（グループノード）",[101,5947,5948],{},"グループノードは、複数のノードをひとまとめにして、再利用できる単位としてまとめます。複雑なセットアップを整理し、ノードツリーをきれいに保つために重要です。グループの入出力でパラメータを公開すれば、それを調整可能にでき、結果として自分のカスタムセットアップを「新しいスーパー・ノード」に変えるようなものです。",[101,5950,5951],{},"自分のグループを作り始めると、あなたはただジオメトリーノードを使っているだけではありません。自分の手続き型ツールを作っているのです。",[131,5953,5955],{"id":5954},"_15-hair-nodes",[120,5956,5957],{},"15. Hair Nodes（ヘアノード）",[101,5959,5960],{},"ヘアノードは、手続き的なヘアやファーのシステムを生成、スタイリング、制御するために設計されています。ストランドの長さ、密度、グルーミング属性にアクセスできるため、草原のようなものからキャラクターの髪まで、あらゆるものをシミュレートできます。",[101,5962,5963],{},"これらのノードは、古いパーティクルベースのワークフローを置き換えるものであり、Blenderの新しいヘアシステムとシームレスに統合される、現代的な手続き型アプローチです。",[225,5965,5967,5973],{"className":5966},[87,228,704],[230,5968],{"src":5969,"className":5970,"alt":235,"loading":236,"width":709,"height":5971,"srcSet":5972,"sizes":240},"https://blog.cg-wire.com/content/images/2025/11/data-src-image-64d8cc68-468d-4294-8abb-2fafc2ac9d87.png",[234],916,"https://blog.cg-wire.com/content/images/size/w600/2025/11/data-src-image-64d8cc68-468d-4294-8abb-2fafc2ac9d87.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/11/data-src-image-64d8cc68-468d-4294-8abb-2fafc2ac9d87.png 1000w, https://blog.cg-wire.com/content/images/2025/11/data-src-image-64d8cc68-468d-4294-8abb-2fafc2ac9d87.png 1600w",[713,5974,5975],{},[716,5976,5977],{},[439,5978,5980],{"className":5979,"style":722},[721],"Source: Blender Stack Exchange",[128,5982],{},[131,5984,5985],{"id":1346},[120,5986,1890],{},[101,5988,5989],{},"ジオメトリーノードは最初、抽象的で難しそうに見えるかもしれませんが、Blenderの中でもとてもワクワクする機能の1つです。ノードの組み合わせ方が分かってくると、手作業の編集ではなく、手続き的なロジックによって駆動されるアニメーション全体、環境、あるいはビジュアルエフェクトを生成できます。",[101,5991,5992],{},"ただし、全部を暗記する必要はありません。多くのジオメトリーノードのセットアップは、いくつかの主要ノードに依存しており、試しながら自然に使い慣れていきます。",[101,5994,5995,5998,5999,6002],{},[142,5996,5997],{"href":541},"次の記事","では、さらに一歩進みます。",[142,6000,6001],{"href":4019},"スクリプトを使って自分専用のカスタム・ノードグループを作り","、制作ワークフローの複雑さを抑えつつ、ユニークなアニメーションパイプラインでエフェクトを自動化する方法を学びます。",[84,6004,6006,6009],{"className":6005},[87,88,89],[84,6007,583],{"className":6008},[93],[84,6010,6012,6013,6016],{"className":6011},[98],"アニメーション制作プロセスについてもっと知るには ",[142,6014,1910],{"href":590,"rel":6015},[592],"！私たちは、ベストプラクティスを共有する1,000人以上の専門家とつながっていて、ときどき対面イベントも企画しています。ぜひ私たちの仲間になってくださいね！ 😊",[84,6018,6020],{"className":6019},[87,598,599],[142,6021,605],{"href":590,"className":6022},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":6024},[6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043],{"id":5611,"depth":607,"text":5614},{"id":5634,"depth":607,"text":5637},{"id":5677,"depth":607,"text":5680},{"id":828,"depth":607,"text":5761},{"id":875,"depth":607,"text":5775},{"id":5784,"depth":607,"text":5787},{"id":5796,"depth":607,"text":5799},{"id":5818,"depth":607,"text":5821},{"id":5839,"depth":607,"text":5842},{"id":5851,"depth":607,"text":5854},{"id":5863,"depth":607,"text":5866},{"id":5885,"depth":607,"text":5888},{"id":5897,"depth":607,"text":5900},{"id":5909,"depth":607,"text":5912},{"id":5918,"depth":607,"text":5921},{"id":5930,"depth":607,"text":5933},{"id":5942,"depth":607,"text":5945},{"id":5954,"depth":607,"text":5957},{"id":1346,"depth":607,"text":1890},"https://images.unsplash.com/photo-1639322537504-6427a16b0a28?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDd8fGJsZW5kZXIlMjBnZW9tZXRyeSUyMG5vZGVzfGVufDB8fHx8MTc2Mjc1NzU1NXww&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":5574,"featured_at":621,"visibility":622},"/blog-i18n/ja/blender-scripting-geometry-nodes","2025-11-10T10:00:00.000+01:00",{"title":5586,"description":235},"blender-scripting-geometry-nodes","blog-i18n/ja/blender-scripting-geometry-nodes/index",[6052],{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"iw_kyYtbQh5w4pFIFmq3NTGpzhQwGh5tzHYtgC3bvVg",{"id":6055,"title":6056,"authors":6057,"body":6059,"description":235,"extension":617,"feature_image":6566,"html":7,"meta":6567,"navigation":12,"path":6569,"published_at":6570,"seo":6571,"slug":6572,"stem":6573,"tags":6574,"__hash__":6576,"updated_at":6568,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/forward-vs-inverse-kinematics-blender/index.md","Blender（2026）で順運動学と逆運動学を使う方法",[6058],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":6060,"toc":6558},[6061,6079,6082,6085,6087,6093,6100,6118,6121,6135,6138,6140,6146,6152,6159,6162,6188,6190,6196,6199,6211,6220,6229,6237,6246,6255,6261,6271,6276,6285,6298,6308,6314,6322,6331,6334,6337,6339,6345,6348,6356,6366,6378,6386,6401,6409,6436,6446,6454,6468,6478,6488,6491,6494,6496,6502,6518,6521,6524,6526,6530,6533,6536,6539,6552],[84,6062,6064,6068],{"className":6063},[87,88,89],[84,6065,6067],{"className":6066},[93],"🤖",[84,6069,6071,6072,6078],{"className":6070},[98],"3Dモデルは、",[142,6073,748,6075],{"href":6074},"https://blog.cg-wire.com/rigging-in-animation/",[692,6076,6077],{},"リギングを始める","まではただの無機質なマネキンです。本当の魔法が起きるのは、アニメーターがそれを動かすときで、そこで登場するのが運動学（キネマティクス）です。",[101,6080,6081],{},"とはいえ問題は、キャラクターの腕や脚をドラッグするだけのようにはいきません。限界まで押しすぎると、肘が突然逆方向に曲がったり、走りが壊れたゼンマイおもちゃのように見えたりします。逆に安全側に倒しすぎると、動きが硬くてロボットめいてしまいます。もっともらしい物理と表現力のバランスを見つけるのは難しいです。",[101,6083,6084],{},"この記事では、運動学とは何か、そしてBlenderでどのように機能するのかを解説します。最後には、アニメーション用の最初のリグを作れるようになります。",[128,6086],{},[131,6088,6090],{"id":6089},"what-are-kinematics",[120,6091,6092],{},"運動学とは",[101,6094,6095,6096,6099],{},"運動学とは、",[120,6097,6098],{},"力がどのように運動を引き起こすかを気にせずに、物事が空間でどのように動くかを研究すること","です。アニメーションでは、筋肉や重力で引っ張られることを考えるのではなく、キャラクターやオブジェクトの関節、手足、体の各パーツが、あるポーズから次のポーズへ移るときにどのように変形（変換）するかに注目します。",[225,6101,6103,6110],{"className":6102},[87,228,704],[230,6104],{"src":6105,"className":6106,"alt":235,"loading":236,"width":6107,"height":6108,"srcSet":6109,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-1727ea30-70cc-42b6-a5e1-085ffa16eef4.png",[234],841,431,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-1727ea30-70cc-42b6-a5e1-085ffa16eef4.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-1727ea30-70cc-42b6-a5e1-085ffa16eef4.png 841w",[713,6111,6112],{},[716,6113,6114],{},[439,6115,6117],{"className":6116,"style":722},[721],"Source: MathWorks",[101,6119,6120],{},"運動学は、3Dモデルを一貫性があり、説得力のある見た目で動かすためのルールとツールをアニメーターに提供します。重要なのは、順運動学と逆運動学の違いを区別することです：",[728,6122,6123,6129],{},[212,6124,6125,6128],{},[120,6126,6127],{},"順運動学（Forward Kinematics: FK）",": FKでは、動きは階層の上（ルート側）から始まります。手を動かしたいなら、まず肩を回し、次に肘、そして手首を回します。こうした方法は、弧を描く動きや、自然なスイング（手を振る、剣を振るなど）に直感的です。というのも、チェーン（リンク）を1つずつ制御できるからです。しかし手間もあります。たとえば指で空間上のある点に触れるアニメーションをしたい場合、すべての関節を手作業で調整して位置を揃える必要があります。",[212,6130,6131,6134],{},[120,6132,6133],{},"逆運動学（Inverse Kinematics: IK）",": IKは問題の考え方を反転させます。各関節を回すのではなく、チェーンの末端を、そこに置きたい位置（たとえばテーブル上のキャラクターの手）に置くと、コンピューターが、その地点に到達するために肩や肘がどのように曲がるべきかを計算します。IKは、体が動く一方で足を床に固定したままにするなど、接触が固定された動きに最適です。欠点は、注意深く制御しないと不自然な曲がり方を生むことがある点で、そのためには複雑な制約を定義する必要があります。",[101,6136,6137],{},"アニメーターは、どちらか一方だけを必ず選ぶわけではありません。必要な動きの種類に応じてFKとIKを切り替えます。流れるような弧の動きはFK、正確な配置はIK、そして多くの場合、この2つをブレンドして、最も自然な端から端までの動きを実現します。",[128,6139],{},[131,6141,6143],{"id":6142},"why-kinematics-are-important",[120,6144,6145],{},"なぜ運動学が重要なのか",[101,6147,6148,6151],{},[120,6149,6150],{},"運動学は、キャラクターの動きが解剖学的な筋道に従うことを保証します","：関節は正しい方向に曲がり、手足は適切な関係を保ち、動作は自然に流れます。これがなければ、どれほど優れた3Dモデルでも、アニメーション中に破綻して見えてしまいます。キャラクターがテーブル上のコップに手を伸ばすとき、肘は正しく曲がり、手首は自然に回転していなければなりません。運動学がなければ、腕が過度に伸びたり、手がありえない方法でねじれたりします。",[101,6153,6154,6155,6158],{},"順運動学と逆運動学を使うことで、",[120,6156,6157],{},"アニメーターははるかに少ない手順で複雑な身体パーツを制御できます","。1フレームごとに関節を細かくいじる代わりに、チェーン全体をまとめてポーズできるため、ポージングのミスも減らせます。毎フレーム足首・膝・腰を手作業で調整する代わりに、アニメーターは逆運動学で足をその場にロックし、ソフトウェアが残りを処理します。",[101,6160,6161],{},"では、仕組みをより掴むためにBlenderで簡単なモデルのリグを試してみましょう。",[84,6163,6165,6168],{"className":6164},[87,88,5651],[84,6166,1138],{"className":6167},[93],[84,6169,6171,6175,6177,6179,6180,6182,1158,6184],{"className":6170},[98],[1143,6172,6173],{},[120,6174,3328],{"style":722},[1149,6176],{},[1149,6178],{},"このガイドで紹介している例の統合の完全なソースコードは、GitHubで確認できます：",[1149,6181],{},[1149,6183],{},[142,6185,6187],{"href":6186},"https://github.com/cgwire/blender-ik-fk?ref=blog.cg-wire.com","https://github.com/cgwire/blender-ik-fk",[128,6189],{},[131,6191,6193],{"id":6192},"forward-kinematics-fk-in-blender",[120,6194,6195],{},"Blenderでの順運動学（FK）",[101,6197,6198],{},"FKはマリオネット人形を動かすのに似ています。肩から始めて指先へ向かうように、1本ずつ糸（＝各回転）を制御します。各回転が、その前の回転に積み重なる形になります。",[209,6200,6201],{},[212,6202,6203,6204,6207,6208,4500],{},"キューブを追加し（",[255,6205,6206],{},"Add → Mesh → Cube","）、それを直方体にスケールします。ベベル用にスケールを1に正規化します（",[255,6209,6210],{},"Object → Apply → Scale",[225,6212,6214],{"className":6213},[87,228],[230,6215],{"src":6216,"className":6217,"alt":235,"loading":236,"width":709,"height":6218,"srcSet":6219,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-bbbf0c86-c1bb-4b7b-afd1-18cf0971aeab.png",[234],646,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-bbbf0c86-c1bb-4b7b-afd1-18cf0971aeab.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-bbbf0c86-c1bb-4b7b-afd1-18cf0971aeab.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-bbbf0c86-c1bb-4b7b-afd1-18cf0971aeab.png 1600w",[209,6221,6222],{"start":607},[212,6223,6224,6225,6228],{},"編集モードでエッジにベベルをかけて、各面を丸めます。",[255,6226,6227],{},"Edge","モードを使い、必要な4つのエッジを選択します。表示されるBevelウィンドウで、セグメント数を増やして丸いエッジを作ります。",[225,6230,6232],{"className":6231},[87,228],[230,6233],{"src":6234,"className":6235,"alt":235,"loading":236,"width":709,"height":3098,"srcSet":6236,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-0c49b11d-3896-4035-a842-4eb98d661b33.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-0c49b11d-3896-4035-a842-4eb98d661b33.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-0c49b11d-3896-4035-a842-4eb98d661b33.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-0c49b11d-3896-4035-a842-4eb98d661b33.png 1600w",[209,6238,6239],{"start":1410},[212,6240,6241,6242,6245],{},"機械的な腕を作るために、さらに2つのセグメントを作ります。",[255,6243,6244],{},"Object","モードで直方体を選択し、複製します。もう一度繰り返して、3つのセグメントにします。",[225,6247,6249],{"className":6248},[87,228],[230,6250],{"src":6251,"className":6252,"alt":235,"loading":236,"width":6253,"height":6254},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-318d3ca9-6f1f-4afe-b602-ccff95474782.png",[234],315,171,[209,6256,6258],{"start":6257},4,[212,6259,6260],{},"X軸に沿ってセグメントを配置し、チェーンを作ります。明確な関節位置がある状態で、端から端までつながるように位置決めしてみてください。",[225,6262,6264],{"className":6263},[87,228],[230,6265],{"src":6266,"className":6267,"alt":235,"loading":236,"width":6268,"height":6269,"srcSet":6270,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-82b2e2e0-c34c-46a2-9418-f313e5c0f788.png",[234],847,467,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-82b2e2e0-c34c-46a2-9418-f313e5c0f788.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-82b2e2e0-c34c-46a2-9418-f313e5c0f788.png 847w",[209,6272,6273],{"start":4745},[212,6274,6275],{},"親階層（FKチェーン）をセットアップします。ベースから先端まで、チェーンを組み立てます。まず子オブジェクトを選択し、次にそれを意図した親（ベースに近い方のもの）に配置します。各セグメントが前のセグメントを親に持つように、これを繰り返します。",[225,6277,6279],{"className":6278},[87,228],[230,6280],{"src":6281,"className":6282,"alt":235,"loading":236,"width":6283,"height":6284},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-408d19e7-ccac-4706-90fa-1aa9ace327b7.png",[234],319,218,[209,6286,6288],{"start":6287},6,[212,6289,6290,6291,6293,6294,6297],{},"各オブジェクトの原点を関節に置きます。正しい回転のためには、原点は各セグメントの関節の端にある必要があります。カーソルツールを使って原点を配置します。次に",[255,6292,6244],{},"モードで、",[255,6295,6296],{},"Object → Set Origin → Origin to 3D Cursor","を実行します。これをすべてのセグメントに対して行います。",[225,6299,6301],{"className":6300},[87,228],[230,6302],{"src":6303,"className":6304,"alt":235,"loading":236,"width":6305,"height":6306,"srcSet":6307,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-7a11ca12-b043-4f94-b663-b87271e51597.png",[234],817,416,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-7a11ca12-b043-4f94-b663-b87271e51597.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-7a11ca12-b043-4f94-b663-b87271e51597.png 817w",[209,6309,6311],{"start":6310},7,[212,6312,6313],{},"前後運動学（forward kinematics）の挙動を観察するために、各セグメントに小さなデフォルト回転を与えます。ベース（親）オブジェクトを回転させると、親階層チェーンのおかげで子が追従します。",[225,6315,6317],{"className":6316},[87,228],[230,6318],{"src":6319,"className":6320,"alt":235,"loading":236,"width":6305,"height":6306,"srcSet":6321,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-50da86d0-88ec-4673-a55b-227f9df93c0b.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-50da86d0-88ec-4673-a55b-227f9df93c0b.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-50da86d0-88ec-4673-a55b-227f9df93c0b.png 817w",[101,6323,6324,6325,6330],{},"あとは、腕を好きなように回転させ、位置をキーフレーム化し、",[142,6326,748,6327],{"href":156},[692,6328,6329],{},"最終結果をレンダーしてアニメーションにする","だけです！",[101,6332,6333],{},"見ての通り、FKは手を振る、バットをスイングする、踊るといったような、滑らかで弧を描く動きにとても向いています。",[101,6335,6336],{},"より高度なリグ（IK、コントロール、制約）では、Blenderのアニメーターはオブジェクトの親子付けではなく、Armature（アーマチュア）を使います。",[128,6338],{},[131,6340,6342],{"id":6341},"inverse-kinematics-ik-in-blender",[120,6343,6344],{},"Blenderでの逆運動学（IK）",[101,6346,6347],{},"IKは人形の手を動かすようなもので、腕のほうが、肘と肩がどう曲がるべきかを計算して追従します。",[209,6349,6350],{},[212,6351,6352,6355],{},[120,6353,6354],{},"FKアームのメッシュを複製します。","3セグメントのFKアームを選び、比較用にFK版を残すため、複製して横にずらします。",[225,6357,6359],{"className":6358},[87,228],[230,6360],{"src":6361,"className":6362,"alt":235,"loading":236,"width":6363,"height":6364,"srcSet":6365,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-59cd3241-e8e1-4b3b-b60a-8457c017a553.png",[234],1349,526,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-59cd3241-e8e1-4b3b-b60a-8457c017a553.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-59cd3241-e8e1-4b3b-b60a-8457c017a553.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-59cd3241-e8e1-4b3b-b60a-8457c017a553.png 1349w",[209,6367,6368],{"start":607},[212,6369,6370,6373,6374,6377],{},[120,6371,6372],{},"セグメントを1つのオブジェクトに統合します。","新しく複製した腕を選択し、各セグメントを1つのメッシュに結合します（",[255,6375,6376],{},"Select all → Object → Join","）。これで、腕全体を表す連続したオブジェクトが1つになります。",[225,6379,6381],{"className":6380},[87,228],[230,6382],{"src":6383,"className":6384,"alt":235,"loading":236,"width":6363,"height":6364,"srcSet":6385,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-4f6843c9-ce25-4aa4-b391-3637d7543c4b.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-4f6843c9-ce25-4aa4-b391-3637d7543c4b.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-4f6843c9-ce25-4aa4-b391-3637d7543c4b.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-4f6843c9-ce25-4aa4-b391-3637d7543c4b.png 1349w",[209,6387,6388],{"start":1410},[212,6389,6390,6393,6396,6397,6400],{},[120,6391,6392],{},"アーマチュアのチェーンを作成します。",[255,6394,6395],{},"Add → Armature","でArmatureを追加します。Armatureの",[120,6398,6399],{},"編集モード","で、セグメントに合わせてボーンを押し出します。最初のボーンの先端を選んで押し出し、肘の位置に置きます。「手」に相当する部分も同様に、もう一度押し出します。",[225,6402,6404],{"className":6403},[87,228],[230,6405],{"src":6406,"className":6407,"alt":235,"loading":236,"width":6363,"height":6364,"srcSet":6408,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-f18a080f-af0d-44c9-a948-01b17e8d4ad7.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-f18a080f-af0d-44c9-a948-01b17e8d4ad7.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-f18a080f-af0d-44c9-a948-01b17e8d4ad7.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-f18a080f-af0d-44c9-a948-01b17e8d4ad7.png 1349w",[209,6410,6411],{"start":6257},[212,6412,6413,6416,6419,6420,6423,6424,6431,6432,6435],{},[120,6414,6415],{},"IKコントローラーを追加します。",[120,6417,6418],{},"ポーズモード","に切り替えて、",[439,6421,6422],{},"hand","ボーンを選択します。",[255,6425,6426,6427,6430],{},"Shift+I → ",[439,6428,6429],{},"Add Inverse Kinematics"," → Without Targets","を押します。するとIKチェーンが腕を駆動するようになります。Bone Constraintsタブで",[439,6433,6434],{},"Chain Length"," = 3に設定します。",[225,6437,6439],{"className":6438},[87,228],[230,6440],{"src":6441,"className":6442,"alt":235,"loading":236,"width":6443,"height":6444,"srcSet":6445,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-9ffe89a0-6326-410d-9574-91798ce5dbc5.png",[234],1008,423,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-9ffe89a0-6326-410d-9574-91798ce5dbc5.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-9ffe89a0-6326-410d-9574-91798ce5dbc5.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-9ffe89a0-6326-410d-9574-91798ce5dbc5.png 1008w",[225,6447,6449],{"className":6448},[87,228],[230,6450],{"src":6451,"className":6452,"alt":235,"loading":236,"width":6443,"height":6444,"srcSet":6453,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-069281f6-1b06-4992-8a73-63b76c27f9eb.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-069281f6-1b06-4992-8a73-63b76c27f9eb.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-069281f6-1b06-4992-8a73-63b76c27f9eb.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-069281f6-1b06-4992-8a73-63b76c27f9eb.png 1008w",[209,6455,6456],{"start":4745},[212,6457,6458,6461,6463,6464,6467],{},[120,6459,6460],{},"メッシュをアーマチュアにバインドします（スキニング）。",[255,6462,6244],{},"モードでまずメッシュを選択し、その後Ctrl選択でアーマチュアを選択します。オブジェクトを右クリックして",[255,6465,6466],{},"Parent → Armature Deform → With Automatic Weights","を選びます。Blenderは各ボーンごとに頂点グループを割り当て、腕がリグに追従するようになります。",[225,6469,6471],{"className":6470},[87,228],[230,6472],{"src":6473,"className":6474,"alt":235,"loading":236,"width":6475,"height":6476,"srcSet":6477,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-0c7343c3-1d1b-4ad3-b68a-804bdf1e1ba4.png",[234],992,531,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-0c7343c3-1d1b-4ad3-b68a-804bdf1e1ba4.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-0c7343c3-1d1b-4ad3-b68a-804bdf1e1ba4.png 992w",[209,6479,6480],{"start":6287},[212,6481,6482,6485,6487],{},[120,6483,6484],{},"IKでアニメーションします。",[120,6486,6418],{},"に移動し、IKコントローラーボーンをつかんで動かします：すると腕全体が自然に追従します！",[101,6489,6490],{},"親チェーン上のボーンを動かすことで、FKも引き続き使えます。",[101,6492,6493],{},"なお、メッシュはデフォルトではこの方法で変形します。望む動きに合わせるには、Bone Constraints（ボーン制約）を追加する必要があります。たとえば、機械的な腕のように腕が単一の軸に沿って動くことだけを許可する、といった具合です。",[128,6495],{},[131,6497,6499],{"id":6498},"fkik-switch",[120,6500,6501],{},"FK/IKスイッチ",[101,6503,6504,6505,6508,6509,6517],{},"Blenderのほとんどのリグは、",[120,6506,6507],{},"ハイブリッドシステム","を使います。流れるような弧の動きにはFK、固定された接触にはIKです。一般的には、アニメーターは",[1143,6510,6511],{},[142,6512,748,6514],{"href":6513},"https://blog.cg-wire.com/staging-animation-principle/",[692,6515,6516],{},"まずFKで大まかなジェスチャーによるポーズを作り、その後接触の瞬間や正確な位置合わせのためにIKへ切り替える","という流れで進めます。",[101,6519,6520],{},"さらに高度なリグでは、Blenderのアニメーターは、FKとIKを切り替えるために（通常は）カスタムプロパティ（Nパネルのスライダーやトグル、またはコントロール用ボーン上のスイッチ）を作成します。",[101,6522,6523],{},"この記事の範囲外ですが、念頭に置いておくことが重要です。",[128,6525],{},[131,6527,6528],{"id":1346},[120,6529,1890],{},[101,6531,6532],{},"運動学はリギングとスキニングの土台であり、硬い3Dマネキンと「生きている」と感じさせるキャラクターを分けるものです。",[101,6534,6535],{},"順運動学は滑らかな弧と自然な流れを作り、逆運動学は説得力のある接触によってキャラクターをワールドに固定します。",[101,6537,6538],{},"ただ、読んで終わりにしないでください。Blenderを開いてモデルを掴み、まずは触ってみましょう。きちんと作られたリグは、ボーンをつなぐだけではありません。それは、キャラクターがどのように動き、どのようにポーズし、3Dの世界とどのように相互作用するかを定義します。",[84,6540,6542,6545],{"className":6541},[87,88,89],[84,6543,583],{"className":6544},[93],[84,6546,5545,6548,6551],{"className":6547},[98],[142,6549,3241],{"href":590,"rel":6550},[592],"！私たちはベストプラクティスを共有する1,000人以上の専門家とつながっており、時には対面イベントを企画することもあります。ぜひあなたをお迎えできたら嬉しいです！ 😊",[84,6553,6555],{"className":6554},[87,598,599],[142,6556,605],{"href":590,"className":6557},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":6559},[6560,6561,6562,6563,6564,6565],{"id":6089,"depth":607,"text":6092},{"id":6142,"depth":607,"text":6145},{"id":6192,"depth":607,"text":6195},{"id":6341,"depth":607,"text":6344},{"id":6498,"depth":607,"text":6501},{"id":1346,"depth":607,"text":1890},"https://images.unsplash.com/photo-1590285381943-9fbf39f4f75d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDV8fDNEJTIwY2hhcmFjdGVyJTIwcmlnfGVufDB8fHx8MTc2MDkyMDExNnww&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":6568,"featured_at":621,"visibility":622},"2026-02-20T06:04:27.000+01:00","/blog-i18n/ja/forward-vs-inverse-kinematics-blender","2025-10-28T10:00:04.000+01:00",{"title":6056,"description":235},"forward-vs-inverse-kinematics-blender","blog-i18n/ja/forward-vs-inverse-kinematics-blender/index",[6575],{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"hUMs8KDeKVg8k6VNJiwQFf8bQEgC7oQKu-vroV9BJBg",{"id":6578,"title":6579,"authors":6580,"body":6582,"description":235,"extension":617,"feature_image":7422,"html":7,"meta":7423,"navigation":12,"path":7425,"published_at":7426,"seo":7427,"slug":7428,"stem":7429,"tags":7430,"__hash__":7433,"updated_at":7424,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-scripting-animation/index.md","Blender スクリプトによるアニメーションパイプライン入門: 2026",[6581],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":6583,"toc":7413},[6584,6595,6598,6601,6603,6609,6612,6615,6636,6638,6644,6647,6666,6692,6694,6700,6711,6720,6723,6729,6732,6743,6752,6755,6761,6764,6770,6773,6775,6781,6784,6793,6796,6799,6810,6824,6827,6833,6863,6866,6872,6890,6893,6899,6919,6928,6931,6940,6963,6966,6972,6976,6979,7002,7004,7010,7013,7019,7026,7033,7041,7047,7053,7060,7063,7069,7073,7079,7097,7100,7102,7108,7111,7117,7238,7241,7372,7374,7378,7381,7387,7390,7393,7407],[84,6585,6587,6591],{"className":6586},[87,88,89],[84,6588,6590],{"className":6589},[93],"⚙️",[84,6592,6594],{"className":6593},[98],"ほんの数行のコードで、Blenderを思い通りに操れます。繰り返しのクリック作業？ もう不要。複雑なシーン？ 数秒で構築。カスタムツール？ あなたがデザインします。これがスクリプトの魔法です。",[101,6596,6597],{},"Blenderのグラフィカルなユーザーインターフェースは間違いなく素晴らしいですが、どうしても「やるのが面倒」に感じる作業がいくつかあります。チームにプレビューを共有すること、新しいプロジェクトで延々と設定を調整すること、そして同じ手順を何度も繰り返すことです。時には、ただ「それを実行するボタン」が欲しくなるでしょう。スクリプトは、それを実現する鍵です！",[101,6599,6600],{},"この記事では、Pythonというプログラミング言語を使ってBlenderのスクリプト機能を掘り下げます。最初のスクリプトの書き方、実行方法、そしてBlenderのスクリプトモジュールがどのように整理されているかを学びます。最後まで読めば、制作パイプラインを最適化し始めるための理解がしっかり得られます。",[128,6602],{},[131,6604,6606],{"id":6605},"what-can-i-do-with-scripting",[120,6607,6608],{},"スクリプトで何ができる？",[101,6610,6611],{},"Blenderのスクリプトは、趣味の人のためのちょっとした小技というだけではありません。あらゆる規模のスタジオにとって必須のものです。",[101,6613,6614],{},"制作現場では、スピードと一貫性がすべてです。スタジオは常に厳しい締切、大量のアセットライブラリ、そして複数のワークステーション間で多数のショットやシーンを完全に同期させ続ける必要に直面します。これを手作業でやるのは遅く、ミスが起きやすく、高コストです。だからこそ自動化が非常に重要になるのです！",[101,6616,6617,6618,6621,6622,6625,6626,6631,6632,6635],{},"スクリプトは「コードを書く」ことが目的ではありません。あなた自身に創造的なショートカットや超能力を与えることが目的です。Pythonを使えば、時間を奪う退屈で繰り返しの多い作業を自動化したり、手順的ジオメトリ（プロシージャルな幾何）やマテリアル、さらには環境そのものを数行で生成したりできます。",[120,6619,6620],{},"制作フローに合わせて自分だけのツールやメニューを設計","でき、",[120,6623,6624],{},"シーンを完全にコントロール","し、",[142,6627,748,6628],{"href":156},[692,6629,6630],{},"レンダー設定","、カメラ、ライトを思い通りに扱えます。スクリプトならさらに、",[120,6633,6634],{},"Blenderを外部ツールやAPIと連携","できるため、より大きなパイプラインの中でも強力な役割を果たします。",[128,6637],{},[131,6639,6641],{"id":6640},"prerequisites",[120,6642,6643],{},"前提条件",[101,6645,6646],{},"始める前に、次のものが用意できていることを確認してください：",[728,6648,6649,6660],{},[212,6650,6651,3387,6653,6659],{},[120,6652,6],{},[142,6654,748,6656],{"href":6655},"https://www.blender.org/download/?ref=blog.cg-wire.com",[692,6657,6658],{},"blender.org","から最新バージョンをダウンロードしてインストールします。",[212,6661,6662,6665],{},[120,6663,6664],{},"Python"," - Blenderのネイティブスクリプトモジュールを使い、OSのターミナルからプログラムを実行するために、Pythonプログラミング言語が必要です。",[84,6667,6669,6672],{"className":6668},[87,88,5651],[84,6670,1138],{"className":6671},[93],[84,6673,6675,6679,6681,6683,6684,6686,1158,6688],{"className":6674},[98],[1143,6676,6677],{},[120,6678,1576],{"style":722},[1149,6680],{},[1149,6682],{},"このガイドで紹介している例の統合について、完全なソースコードはGitHubで確認できます：",[1149,6685],{},[1149,6687],{},[142,6689,6691],{"href":6690},"https://github.com/cgwire/intro-blender-scripting?ref=blog.cg-wire.com","https://github.com/cgwire/intro-blender-scripting",[128,6693],{},[131,6695,6697],{"id":6696},"_1-create-a-new-script",[120,6698,6699],{},"1. 新しいスクリプトを作成する",[101,6701,6702,6703,6706,6707,6710],{},"Blenderの中で",[120,6704,6705],{},"スクリプト作業スペース","を開きます。",[120,6708,6709],{},"New","をクリックすると、新しいスクリプトを作成できるテキストエディタのパネルが表示されます。ここでPythonコードを書けます。特に、結果をリアルタイムで確認できる点が便利です：",[225,6712,6714],{"className":6713},[87,228],[230,6715],{"src":6716,"className":6717,"alt":235,"loading":236,"width":709,"height":6718,"srcSet":6719,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-05bcd44b-e1a3-4f6a-a5c7-edb11e40b1fb.png",[234],731,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-05bcd44b-e1a3-4f6a-a5c7-edb11e40b1fb.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-05bcd44b-e1a3-4f6a-a5c7-edb11e40b1fb.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-05bcd44b-e1a3-4f6a-a5c7-edb11e40b1fb.png 1600w",[101,6721,6722],{},"制作パイプラインでは、コマンドラインインターフェースからスクリプトを実行するほうが、たいていはより役に立ちます。幸い、PythonにはBlender用のモジュールが同梱されています。このチュートリアルでは、グラフィカルユーザーインターフェースを行き来する手順を省くために、OSのターミナルから直接Pythonプログラムを実行します。まずは必要なBlenderモジュールをインストールしましょう：",[1174,6724,6725],{},[255,6726,6728],{"className":6727},[1853],"pip install bpy==3.6.0 --extra-index-url \u003Chttps://download.blender.org/pypi/>",[101,6730,6731],{},"テストとして、Pythonで新しい空のBlenderファイルを作成してみましょう：",[1174,6733,6734,6737],{},[255,6735,1612],{"className":6736},[1179],[101,6738,6739],{},[255,6740,6742],{"className":6741},[1179],"bpy.ops.wm.save_as_mainfile(filepath=\"./new_empty_file.blend\")",[101,6744,6745,6746,6749,6751],{},"まず、Blenderの",[120,6747,6748],{},"Python APIモジュール",[255,6750,1468],{},"をインポートします。これにより、Blenderのほぼすべてを操作できます（オブジェクト、マテリアル、レンダリングなど）。次に、現在のワークスペースを新しいファイルとして保存します。",[101,6753,6754],{},"ターミナルでプログラムを次のように実行できます：",[1174,6756,6757],{},[255,6758,6760],{"className":6759},[1179],"python3 script.py",[101,6762,6763],{},"新しく作成したファイルは、BlenderのCLIから開くこともできます：",[1174,6765,6766],{},[255,6767,6769],{"className":6768},[1853],"blender new_empty_file.blend",[101,6771,6772],{},"おめでとうございます！これで最初のスクリプトは完了です。次は、もっと実用的な例として「3Dテキストの生成」に進みましょう。",[128,6774],{},[131,6776,6778],{"id":6777},"_2-hello-world-text-example",[120,6779,6780],{},"2. Hello Worldテキストの例",[101,6782,6783],{},"スター・ウォーズのオープニングアニメーションを作りたいと想像してみてください。つまり、角度をつけた状態でテキストがゆっくり上にスクロールしていくあの演出です。",[225,6785,6787],{"className":6786},[87,228],[230,6788],{"src":6789,"className":6790,"alt":235,"loading":236,"width":709,"height":6791,"srcSet":6792,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-02ff3b4e-8e6f-4f1a-b6d0-e4fb9e0622eb.png",[234],681,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-02ff3b4e-8e6f-4f1a-b6d0-e4fb9e0622eb.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-02ff3b4e-8e6f-4f1a-b6d0-e4fb9e0622eb.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-02ff3b4e-8e6f-4f1a-b6d0-e4fb9e0622eb.png 1600w",[101,6794,6795],{},"編集しやすいように、これを効率よく行うにはどうすればいいでしょう？もちろんスクリプトを使います！では、簡単な例としていくつかの3Dテキストを生成してみましょう。",[101,6797,6798],{},"新しいファイルを作成し、シーン内のすべてのオブジェクトを削除して、最初はスッキリした状態から始めます：",[1174,6800,6801,6804],{},[255,6802,1183],{"className":6803},[1179],[101,6805,6806],{},[255,6807,6809],{"className":6808},[1179],"bpy.ops.object.select_all(action='SELECT')\nbpy.ops.object.delete(use_global=False)",[728,6811,6812,6818],{},[212,6813,6814,6817],{},[255,6815,6816],{},"bpy.ops.object.select_all(action='SELECT')",": 現在シーン内にあるすべてのオブジェクトを選択します。",[212,6819,6820,6823],{},[255,6821,6822],{},"bpy.ops.object.delete(use_global=False)",": 選択されたすべてのオブジェクトを削除します。",[101,6825,6826],{},"シーンに新しいテキストオブジェクトを追加するには、次の2つの指示だけで十分です：",[1174,6828,6829],{},[255,6830,6832],{"className":6831},[1179],"bpy.ops.object.text_add(enter_editmode=False, location=(0, 0, 0))\ntext_obj = bpy.context.object",[728,6834,6835,6849],{},[212,6836,6837,6840,6841,6844,6845,6848],{},[255,6838,6839],{},"bpy.ops.object.text_add(...)",": 3Dワールド（XYZ座標）の",[255,6842,6843],{},"(0, 0, 0)","に",[120,6846,6847],{},"テキストオブジェクト","を追加します。",[212,6850,6851,6854,6855,6858,6859,6862],{},[255,6852,6853],{},"text_obj = bpy.context.object",": 新しく作成したテキストオブジェクトへの参照を、変数",[255,6856,6857],{},"text_obj","に保存します。何かを新しく追加すると、Blenderはそれをアクティブオブジェクトにします。アクティブオブジェクトは",[255,6860,6861],{},"bpy.context.object","でアクセスできます。",[101,6864,6865],{},"テキストの文字列を「Hello World」に変更します：",[1174,6867,6868],{},[255,6869,6871],{"className":6870},[1179],"text_obj.data.body = \"Hello World\"",[728,6873,6874,6884],{},[212,6875,6876,6879,6880,6883],{},[255,6877,6878],{},"text_obj.data","は",[120,6881,6882],{},"Text DataBlock","を指し、テキストオブジェクトの実際の内容や設定です。",[212,6885,6886,6889],{},[255,6887,6888],{},".body = \"Hello World\"","で、表示する文字列を「Hello World」に設定します。",[101,6891,6892],{},"次に、テキストに少し厚みを出して、X軸とY軸の中央に配置します：",[1174,6894,6895],{},[255,6896,6898],{"className":6897},[1179],"text_obj.data.extrude = 0.05\ntext_obj.data.align_x = 'CENTER'\ntext_obj.data.align_y = 'CENTER'",[728,6900,6901,6907,6913],{},[212,6902,6903,6906],{},[255,6904,6905],{},"extrude = 0.05",": テキストの奥行きを与え、平面の2Dテキストから、少し押し出された3Dテキストにします。",[212,6908,6909,6912],{},[255,6910,6911],{},"align_x = 'CENTER'",": テキストを水平方向に中央揃えします。",[212,6914,6915,6918],{},[255,6916,6917],{},"align_y = 'CENTER'",": テキストを垂直方向に中央揃えします。",[101,6920,6921,6922],{},"他にも多くのオプションは、",[142,6923,748,6925],{"href":6924},"https://docs.blender.org/manual/en/latest/modeling/texts/properties.html?ref=blog.cg-wire.com",[692,6926,6927],{},"Blenderのテキストオブジェクトのプロパティに関するドキュメント",[101,6929,6930],{},"最後に、BlenderのテキストはデフォルトでXY平面に平たく置かれるため、地面に寝かせた状態ではなく、カメラのほうを向くように回転させます：",[1174,6932,6933],{},[255,6934,6936,6937,6939],{"className":6935},[1179],"text_obj.rotation_euler",[1215,6938,1248],{}," = 1.5708   # 90 degrees in radians",[728,6941,6942,6954],{},[212,6943,6944,6949,6950,6953],{},[255,6945,6946,6947],{},"rotation_euler",[1215,6948,1248],{},": ",[120,6951,6952],{},"X軸まわりの回転","を指します。",[212,6955,6956,6959,6960,146],{},[255,6957,6958],{},"1.5708","ラジアン ≈ ",[120,6961,6962],{},"90度",[101,6964,6965],{},"結果を保存するには、先ほどの指示を使います：",[1174,6967,6968],{},[255,6969,6971],{"className":6970},[1179],"bpy.ops.wm.save_as_mainfile(filepath=\"./text.blend\")",[101,6973,6974],{},[1149,6975],{},[101,6977,6978],{},"まとめると、最終的なコードは次のようになります：",[1174,6980,6981,6997],{},[255,6982,1183,6984,6986,6988,6990,6992],{"className":6983},[1179],[101,6985,6809],{},[101,6987,6832],{},[101,6989,6871],{},[101,6991,6898],{},[101,6993,6936,6994,6996],{},[1215,6995,1248],{}," = 1.5708",[101,6998,6999],{},[255,7000,6971],{"className":7001},[1179],[128,7003],{},[131,7005,7007],{"id":7006},"_3-how-to-run-a-script-script-loading",[120,7008,7009],{},"3. スクリプトの実行方法（スクリプト読み込み）",[101,7011,7012],{},"前述のとおり、ヘッドレスモードでスクリプトを実行する構文は、基本的にどんなPythonプログラムと同じです：",[1174,7014,7015],{},[255,7016,7018],{"className":7017},[1179],"python3 text.py",[101,7020,7021,7022,7025],{},"以上です！これで、最初の",[439,7023,7024],{},"実用的な","Blenderスクリプトを実行できました。自動化、パイプライン、バッチ処理にとても役立ちます。",[101,7027,7028,7029,7032],{},"あとは",[255,7030,7031],{},"text.blend","ファイルを開いて結果を確認するだけです：",[225,7034,7036],{"className":7035},[87,228],[230,7037],{"src":7038,"className":7039,"alt":235,"loading":236,"width":709,"height":6718,"srcSet":7040,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-eab235c1-3513-4b9d-9f89-8a4d7c1cd122.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-eab235c1-3513-4b9d-9f89-8a4d7c1cd122.png 600w, https://blog.cg-wire.com/content/images/size/w1000/2025/10/data-src-image-eab235c1-3513-4b9d-9f89-8a4d7c1cd122.png 1000w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-eab235c1-3513-4b9d-9f89-8a4d7c1cd122.png 1600w",[101,7042,7043,7044,7046],{},"また、特定の",[255,7045,366],{},"ファイルを開き、そのコンテキスト内でスクリプトを実行することもできます：",[1174,7048,7049],{},[255,7050,7052],{"className":7051},[1179],"bpy.ops.wm.open_mainfile(filepath='my_scene.blend')",[101,7054,7055,7056,7059],{},"まず",[255,7057,7058],{},"my_scene.blend","を読み込み、その後に残りのスクリプトをそれに対して実行します。",[101,7061,7062],{},"場合によっては、独自の引数を渡したいこともあります：",[1174,7064,7065],{},[255,7066,7068],{"className":7067},[1853],"python3 args.py – --text \"CLI Hello\"",[101,7070,7071],{},[1149,7072],{},[101,7074,7075,7078],{},[255,7076,7077],{},"args.py","の中では、このようにして引数にアクセスできます：",[1174,7080,7081,7091],{},[255,7082,2188,7084],{"className":7083},[1179],[101,7085,7086,7087,7090],{},"argv = sys.argv\nargv = argv",[1215,7088,7089],{},"argv.index(\"--\") + 1:","  # get args after --",[101,7092,7093],{},[255,7094,7096],{"className":7095},[1179],"print(\"Custom args:\", argv)",[101,7098,7099],{},"基本はここまでですが、まだまだ発見できることはたくさんあります。",[128,7101],{},[131,7103,7105],{"id":7104},"_4-scripting-modules-explained",[120,7106,7107],{},"4. スクリプトモジュールを解説",[101,7109,7110],{},"Blenderは、さまざまなモジュールを通じてスクリプト機能を公開しています。それぞれのモジュールが何をするのかを理解すると、何をスクリプトできるのか、そしてドキュメントをどう検索してコード化するかがわかってきます。",[101,7112,7113,7114,7116],{},"まず、コアとなる",[255,7115,1468],{},"モジュールです：",[728,7118,7119,7131,7146,7155,7168,7186,7198,7210,7226],{},[212,7120,7121,7127,7128,7130],{},[120,7122,7123,7126],{},[255,7124,7125],{},"bpy.context","（コンテキストアクセス）"," - Blenderの現在の状態（アクティブオブジェクト、シーン、モード、選択中のオブジェクトなど）に関する情報を提供します。たとえば",[255,7129,6861],{},"でアクティブオブジェクトが取得できます。",[212,7132,7133,7139,7140,7145],{},[120,7134,7135,7138],{},[255,7136,7137],{},"bpy.data","（データアクセス）"," - メッシュ、オブジェクト、マテリアル、カメラなど、Blenderのデータブロックに直接アクセスできます。例：",[255,7141,7142,7143],{},"bpy.data.objects",[1215,7144,2766],{},"でCubeオブジェクトを取得します。",[212,7147,7148,7154],{},[120,7149,7150,7153],{},[255,7151,7152],{},"bpy.msgbus","（メッセージバス）"," - Blenderのデータの変更を監視し、フレーム変更イベントへの購読のようなコールバックをトリガーするためのpub/subシステムです。",[212,7156,7157,7163,7164,7167],{},[120,7158,7159,7162],{},[255,7160,7161],{},"bpy.ops","（オペレーター）"," - オブジェクトの追加、削除、レンダリングといったUI操作を模倣する関数を公開します。例：",[255,7165,7166],{},"bpy.ops.mesh.primitive_cube_add()","でキューブを追加します。",[212,7169,7170,7176,7177,3649,7179,3649,7182,7185],{},[120,7171,7172,7175],{},[255,7173,7174],{},"bpy.types","（タイプ）"," - 拡張やカスタマイズのために、Blenderのデータのコアクラス（例：",[255,7178,6244],{},[255,7180,7181],{},"Mesh",[255,7183,7184],{},"Material","）を定義し、カスタムパネルやオペレーターを作成できます。",[212,7187,7188,7194,7195,146],{},[120,7189,7190,7193],{},[255,7191,7192],{},"bpy.utils","（ユーティリティ）"," - クラス登録、アドオン処理、システムのパスアクセスなどのためのヘルパー関数を提供します。例：",[255,7196,7197],{},"bpy.utils.register_class(MyOperator)",[212,7199,7200,7206,7207,146],{},[120,7201,7202,7205],{},[255,7203,7204],{},"bpy.path","（パスユーティリティ）"," - 相対パスの解決や絶対パスの作成など、ファイルパスを扱うためのツールです。例：",[255,7208,7209],{},"bpy.path.abspath(\"//textures/wood.png\")",[212,7211,7212,7218,7219,6879,7222,7225],{},[120,7213,7214,7217],{},[255,7215,7216],{},"bpy.app","（アプリケーションデータ）"," - バージョン、ビルド情報、実行モードなど、Blender自身に関する情報を提供します。例：",[255,7220,7221],{},"bpy.app.version",[255,7223,7224],{},"(3, 6, 2)","を返します。",[212,7227,7228,7234,7235,146],{},[120,7229,7230,7233],{},[255,7231,7232],{},"bpy.props","（プロパティ定義）"," - オペレーター、パネル、アドオンのために、数値、文字列、列挙型などのカスタムプロパティを定義するのに使われます。例：",[255,7236,7237],{},"my_prop: bpy.props.IntProperty(name=\"My Number\")",[101,7239,7240],{},"次に、さらに専門的なライブラリもあります：",[728,7242,7243,7252,7265,7274,7286,7295,7304,7313,7324,7333,7342,7351],{},[212,7244,7245,7251],{},[120,7246,7247,7250],{},[255,7248,7249],{},"aud","（オーディオシステム）"," - サウンドの再生、ファイルの読み込み、オーディオのミキシングのためのBlenderのオーディオライブラリです。例：Pythonで直接Blenderに.wavファイルを再生します。",[212,7253,7254,7260,7261,7264],{},[120,7255,7256,7259],{},[255,7257,7258],{},"bgl","（OpenGLラッパー）"," - カスタム3Dビューポート描画のための低レベルOpenGLラッパー（",[255,7262,7263],{},"gpu","に置き換えられています）。たとえばカスタムオーバーレイを描画するために使います。",[212,7266,7267,7273],{},[120,7268,7269,7272],{},[255,7270,7271],{},"bl_math","（追加の数学関数）"," - 補間、距離計算、ジオメトリ操作などのための追加の数学ヘルパー。たとえば点同士の距離を計算します。",[212,7275,7276,7282,7283,146],{},[120,7277,7278,7281],{},[255,7279,7280],{},"blf","（フォント描画）"," - ビューポートオーバーレイやパネル内でテキストを描画するためのBlenderのフォント描画モジュールです。例：",[255,7284,7285],{},"blf.draw(font_id, \"Hello World\")",[212,7287,7288,7294],{},[120,7289,7290,7293],{},[255,7291,7292],{},"bmesh","（BMeshモジュール）"," - プロシージャルモデリングやトポロジー操作のために、Blenderのメッシュ編集システムへ直接低レベルにアクセスできます。例：編集モードで頂点や面を作成または変更する。",[212,7296,7297,7303],{},[120,7298,7299,7302],{},[255,7300,7301],{},"bpy_extras","（追加ユーティリティ）"," - インポート/エクスポート対応、数学の変換、view3dユーティリティなどのヘルパー関数を含みます。例：座標変換を簡略化します。",[212,7305,7306,7312],{},[120,7307,7308,7311],{},[255,7309,7310],{},"freestyle","（Freestyleモジュール）"," - 写真のようなレンダリングではないエッジ描画のための、BlenderのFreestyleラインレンダリングを制御します。例：ラインスタイルや可視性ルールの調整。",[212,7314,7315,7320,7321,7323],{},[120,7316,7317,7319],{},[255,7318,7263],{},"（GPUモジュール）"," - カスタムシェーダーやビューポートオーバーレイを可能にする最新のGPU描画API（",[255,7322,7258],{},"の後継）。例：カスタムGLSLシェーダーで描画する。",[212,7325,7326,7332],{},[120,7327,7328,7331],{},[255,7329,7330],{},"gpu_extras","（GPUユーティリティ）"," - 完全なGLSLコードなしで図形描画を簡単にするためのGPU描画ヘルパー関数。例：シンプルな長方形を描画する。",[212,7334,7335,7341],{},[120,7336,7337,7340],{},[255,7338,7339],{},"idprop.types","（IDプロパティアクセス）"," - 辞書/配列形式でBlenderのカスタムIDプロパティに構造化されたアクセスを提供します。例：オブジェクト上のカスタムメタデータを操作する。",[212,7343,7344,7350],{},[120,7345,7346,7349],{},[255,7347,7348],{},"imbuf","（画像バッファ）"," - 画像バッファを扱い、読み込み、保存、ピクセルレベルの操作を可能にします。例：プロシージャルな画像生成。",[212,7352,7353,3387,7359,3649,7362,3649,7365,7368,7369,146],{},[120,7354,7355,7358],{},[255,7356,7357],{},"mathutils","（数学タイプ & ユーティリティ）",[255,7360,7361],{},"Vector",[255,7363,7364],{},"Matrix",[255,7366,7367],{},"Quaternion","、および幾何ユーティリティを提供するBlenderの数学ライブラリ。例：",[255,7370,7371],{},"Vector((1,0,0)).cross(Vector((0,1,0))) → (0,0,1)",[128,7373],{},[131,7375,7376],{"id":1346},[120,7377,1890],{},[101,7379,7380],{},"PythonによるBlenderスクリプトは、ワークフローを拡張し、パーソナライズするための最も強力な方法の一つです。",[101,7382,7383,7384,7386],{},"この記事では、スクリプトの作成と実行方法、3D空間で最初の「Hello World」を表示する方法、そして",[255,7385,1468],{},"モジュールを使ってBlenderを思い通りに動かす方法を見てきました。",[101,7388,7389],{},"一見するとスクリプトは難しそうに感じるかもしれませんが、見てきたように、ほんの数行でもまったく新しい可能性への扉が開きます！",[101,7391,7392],{},"あとはあなたの番です。退屈な作業は自動化し、制作スタジオのパイプライン用のツールは最初から作り上げましょう。できます！",[84,7394,7396,7399],{"className":7395},[87,88,89],[84,7397,583],{"className":7398},[93],[84,7400,7402,7403,7406],{"className":7401},[98],"アニメーションの制作プロセスについてさらに学ぶには ",[142,7404,3241],{"href":590,"rel":7405},[592],"！ 私たちはベストプラクティスを共有する1,000人以上の専門家とつながっており、時には対面イベントも企画しています。ぜひあなたを歓迎したいです！😊",[84,7408,7410],{"className":7409},[87,598,599],[142,7411,605],{"href":590,"className":7412},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":7414},[7415,7416,7417,7418,7419,7420,7421],{"id":6605,"depth":607,"text":6608},{"id":6640,"depth":607,"text":6643},{"id":6696,"depth":607,"text":6699},{"id":6777,"depth":607,"text":6780},{"id":7006,"depth":607,"text":7009},{"id":7104,"depth":607,"text":7107},{"id":1346,"depth":607,"text":1890},"https://images.unsplash.com/photo-1760548425425-e42e77fa38f1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDd8fCUyMHNjcmlwdGluZ3xlbnwwfHx8fDE3NjA2MTMxODl8MA&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":7424,"featured_at":621,"visibility":622},"2026-02-20T06:04:03.000+01:00","/blog-i18n/ja/blender-scripting-animation","2025-10-21T10:00:42.000+02:00",{"title":6579,"description":235},"blender-scripting-animation","blog-i18n/ja/blender-scripting-animation/index",[7431,7432],{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"NijcIXb7bCm7ihcnD1FGpArXKjDyaWOvCTdNCWywkhE",{"id":7435,"title":7436,"authors":7437,"body":7439,"description":235,"extension":617,"feature_image":7994,"html":7,"meta":7995,"navigation":12,"path":7997,"published_at":7998,"seo":7999,"slug":8000,"stem":8001,"tags":8002,"__hash__":8005,"updated_at":7996,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/dcc-integration-blender-kitsu/index.md","BlenderからKitsuへ：カスタムDCCブリッジの作り方（2026）",[7438],{"id":76,"name":77,"slug":78,"profile_image":7,"cover_image":7,"bio":7,"website":7,"location":7,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":79},{"type":81,"value":7440,"toc":7985},[7441,7451,7463,7466,7469,7472,7474,7480,7487,7497,7506,7515,7517,7523,7526,7532,7539,7546,7549,7552,7554,7560,7586,7589,7592,7598,7601,7608,7622,7625,7628,7636,7645,7655,7660,7668,7673,7683,7686,7692,7695,7720,7731,7733,7739,7742,7745,7765,7800,7803,7811,7814,7820,7830,7832,7838,7841,7844,7864,7867,7870,7879,7882,7888,7891,7901,7903,7909,7912,7934,7944,7946,7950,7953,7956,7965,7979],[84,7442,7444,7447],{"className":7443},[87,88,89],[84,7445,6590],{"className":7446},[93],[84,7448,7450],{"className":7449},[98],"制作ツール同士が制作管理トラッカーと会話できたらいいのに…と思ったことはありませんか？カスタムDCC連携があれば、ようやくそれが可能になります。BlenderとKitsuの間で起きがちな手作業のアップロード、バージョンの不一致、そして時間のロス—もうそんな手間とはおさらばです。",[101,7452,7453,7454,3649,7456,3649,7459,7462],{},"アーティストは物語を形にするために、",[120,7455,6],{},[120,7457,7458],{},"Maya",[120,7460,7461],{},"Houdini"," のようなデジタル・コンテンツ・クリエイション（DCC）ツールに頼っています。",[101,7464,7465],{},"しかし、クリエイティブ作業はこれらのツールの中で行われる一方で、制作のトラッキングは別の場所で行われます。この断絶は、バージョン不一致、繰り返し作業になる手動アップロードで失われる時間、そして結果的に「作る時間」が減ることにつながり得ます。DCCソフトと制作トラッカーの間にスムーズな接続がないと、パイプラインが損なわれてしまいます。",[101,7467,7468],{},"そこで役立つのが、カスタム連携です。",[101,7470,7471],{},"この記事では、Kitsu Publisherと同様の考え方で、BlenderからKitsuへ3Dモデルのプレビュ―を公開するためのKitsuにおけるBlender連携の基本を解説します。",[128,7473],{},[131,7475,7477],{"id":7476},"what%E2%80%99s-a-dcc-integration",[120,7478,7479],{},"DCC連携とは？",[101,7481,7482,7483,7486],{},"DCC連携とは、",[120,7484,7485],{},"クリエイティブ用ソフトと、別のソフトウェアツールの間をつなぐ「ブリッジ」","のことです。たとえば制作トラッカーのようなものです。",[101,7488,7489,7490,7496],{},"例えば、ファイルを書き出し、ウェブブラウザを開いて、バージョンを手作業でアップロードする代わりに、連携によって",[142,7491,748,7493],{"href":7492},"https://blog.cg-wire.com/working-with-multiple-digital-content-creation-tools/",[692,7494,7495],{},"選んだツールから直接公開できるようにする","ことが可能になります。",[101,7498,7499,7500],{},"連携は、",[142,7501,748,7503],{"href":7502},"https://blog.cg-wire.com/rendering-explained/",[692,7504,7505],{},"複雑なレンダリングパイプラインの管理",[101,7507,7508,7509,7514],{},",",[142,7510,748,7511],{"href":546},[692,7512,7513],{},"アセットの保存とバージョン管理","、あるいはプレビュー画像の生成など、さまざまな作業を担えます。面倒な制作工程を自動化することで、アーティストが「物語を伝える」ことに集中できるようになります。",[128,7516],{},[131,7518,7520],{"id":7519},"why-dcc-integration",[120,7521,7522],{},"なぜDCC連携なのか？",[101,7524,7525],{},"どのスタジオも、いずれは同じボトルネックに突き当たります。プロジェクトが成長するほど、手作業のプロセスは破綻しやすくなるのです。",[101,7527,7528,7531],{},[120,7529,7530],{},"連携は時間を節約します","。ソフト間で文脈を切り替える必要がなくなるためです。",[101,7533,7534,7535,7538],{},"また、命名規則、フォーマット、メタデータの整合性を強制することで、",[120,7536,7537],{},"繰り返し作業によるエラーを減らす","ことにもつながります。",[101,7540,7541,7542,7545],{},"最後に、監督者やプロデューサーへリアルタイムの更新を届けることで、",[120,7543,7544],{},"プロジェクト管理とコミュニケーションを改善する","ことができます。",[101,7547,7548],{},"すべてのプロのアニメーションスタジオはパイプラインに依存しており、DCC連携は不可欠です。",[101,7550,7551],{},"具体例として、BlenderからKitsuへプレビューをアップロードするスクリプト連携を作って、チームでの作業レビューを簡単にしてみましょう。",[128,7553],{},[131,7555,7557],{"id":7556},"_1-getting-started",[120,7558,7559],{},"1. はじめに",[84,7561,7563,7566],{"className":7562},[87,88,5651],[84,7564,1138],{"className":7565},[93],[84,7567,7569,7573,7575,7577,7578,7580,1158,7582],{"className":7568},[98],[1143,7570,7571],{},[120,7572,2043],{"style":722},[1149,7574],{},[1149,7576],{},"このガイドで紹介している、Blender–Kitsu連携の完全なソースコードは、GitHubで確認できます：",[1149,7579],{},[1149,7581],{},[142,7583,7585],{"href":7584},"https://github.com/cgwire/blender-kitsu-dcc-integration-example?ref=blog.cg-wire.com","github.com/cgwire/blender-kitsu-dcc-integration-example",[101,7587,7588],{},"スクリプトに取りかかる前に、安全に連携をテストできるローカルのKitsuインスタンスを用意しましょう。",[101,7590,7591],{},"Kitsuをローカルで最も簡単に動かす方法は、kitsu-dockerリポジトリを使うことです。リポジトリをマシンにクローンし、手順に従ってください：",[1174,7593,7594],{},[255,7595,7597],{"className":7596},[1853],"git clone \u003Chttps://github.com/cgwire/kitsu-docker.git>\ncd kitsu-docker\ndocker build -t cgwire/cgwire .\ndocker run --init -ti --rm -p 80:80 -p 1080:1080 --name cgwire cgwire/cgwire",[101,7599,7600],{},"これで、Kitsu、postgresデータベース、そしてそれを支えるコンポーネントがすべて起動します。",[101,7602,7603,7604,7607],{},"コンテナが動き出したら、ブラウザで ",[255,7605,7606],{},"http://localhost:80"," を開いてください。デフォルトの認証情報は以下です：",[728,7609,7610,7616],{},[212,7611,7612,7615],{},[120,7613,7614],{},"Email",": admin@example.com",[212,7617,7618,7621],{},[120,7619,7620],{},"Password:"," mysecretpassword",[101,7623,7624],{},"Kitsuのダッシュボードに移動します。",[101,7626,7627],{},"プレビューをアップロードする前に、アップロード先が必要です。Kitsuでは：",[209,7629,7630],{},[212,7631,7632,7633,7635],{},"サイドバーの \"",[120,7634,2088],{},"\" ページからアクセスして、新しい制作（例：Blender Test Project）を作成します。",[225,7637,7639],{"className":7638},[87,228],[230,7640],{"src":7641,"className":7642,"alt":235,"loading":236,"width":7643,"height":7644},"https://blog.cg-wire.com/content/images/2025/10/CleanShot-2025-10-13-at-9---.26.46-1.png",[234],206,479,[225,7646,7648],{"className":7647},[87,228],[230,7649],{"src":7650,"className":7651,"alt":235,"loading":236,"width":7652,"height":7653,"srcSet":7654,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-0e43401b-afb6-4345-b773-db3d9b03bed3.png",[234],946,914,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-0e43401b-afb6-4345-b773-db3d9b03bed3.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-0e43401b-afb6-4345-b773-db3d9b03bed3.png 946w",[209,7656,7657],{"start":607},[212,7658,7659],{},"制作の中でアセットを作成します。",[225,7661,7663],{"className":7662},[87,228],[230,7664],{"src":7665,"className":7666,"alt":235,"loading":236,"width":7652,"height":7653,"srcSet":7667,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-83cce3b0-70a0-486d-87e7-4914a5304262.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-83cce3b0-70a0-486d-87e7-4914a5304262.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-83cce3b0-70a0-486d-87e7-4914a5304262.png 946w",[209,7669,7670],{"start":1410},[212,7671,7672],{},"アセットを作成すると、制作作成時に選択したタスクカテゴリに応じて、自動的に新しいタスクが追加されます。これらを使ってプレビューをアップロードできます。",[101,7674,7675,7676,7682],{},"Kitsuをプログラム的に操作するには、",[142,7677,748,7679],{"href":7678},"https://github.com/cgwire/gazu?ref=blog.cg-wire.com",[692,7680,7681],{},"gazu（Kitsu API向けの公式Pythonクライアント）を使用します","。認証、エンティティの作成、そしてスクリプトからのプレビューの直接アップロードが可能になります。",[101,7684,7685],{},"インストールは：",[1174,7687,7688],{},[255,7689,7691],{"className":7690},[1853],"pip install gazu",[101,7693,7694],{},"次に、ユーザー名とパスワードでKitsuインスタンスに認証します：",[1174,7696,7697,7711],{},[255,7698,3450,7700,7706],{"className":7699},[1179],[101,7701,2228,7702,7705],{},[142,7703,2231],{"href":2231,"rel":7704},[2233],">\")",[101,7707,7708,7709,2239],{},"user = gazu.log_in(\"",[142,7710,2238],{"href":2237},[101,7712,7713],{},[255,7714,7716,7717,1279],{"className":7715},[1179],"print(\"Logged in as:\", user['user']",[1215,7718,7719],{},"'full_name'",[101,7721,7722,7724,7725,146],{},[1149,7723],{},"ログインできたら、",[142,7726,748,7728],{"href":7727},"https://gazu.cg-wire.com/?ref=blog.cg-wire.com",[692,7729,7730],{},"gazuを使って制作、アセット、タスクを取得し、それらにメディアファイルを紐づけます",[128,7732],{},[131,7734,7736],{"id":7735},"_2-creating-a-preview-from-blender",[120,7737,7738],{},"2. Blenderからプレビューを作成する",[101,7740,7741],{},"プレビュ―レンダ―を制作することは、アニメーターにとってよくある用途です。制作段階を通して定期的なフィードバックを得る必要があり、プレビューは、プロジェクト全体を読み込むよりも判断しやすいからです。",[101,7743,7744],{},"これは、BlenderのPython APIで自動化できます。ビューポートのキャプチャを設定して1フレームだけレンダリングし、出力を一時フォルダに保存し、さらにスタジオ全体のレンダリング設定（解像度、フォーマット、水印）を適用します：",[1174,7746,7747,7759],{},[255,7748,1183,7750,7753,7756],{"className":7749},[1179],[101,7751,7752],{},"bpy.ops.wm.open_mainfile(filepath=\"./project.blend\")",[101,7754,7755],{},"bpy.context.scene.render.resolution_x = 256\nbpy.context.scene.render.resolution_y = 256\nbpy.context.scene.render.resolution_percentage = 100",[101,7757,7758],{},"bpy.context.scene.render.image_settings.file_format = 'PNG'\nbpy.context.scene.render.filepath = \"./preview.png\"",[101,7760,7761],{},[255,7762,7764],{"className":7763},[1179],"bpy.ops.render.render(write_still=True)",[728,7766,7767,7772,7781,7790],{},[212,7768,7769,7771],{},[255,7770,1183],{},": BlenderのPython APIを読み込みます",[212,7773,1143,7774,6949,7777,7780],{},[255,7775,7776],{},"py.ops.wm.open_mainfile(filepath=\"./project.blend\")",[255,7778,7779],{},"project.blend"," という既存のBlenderプロジェクトファイルを開きます",[212,7782,7783,7789],{},[255,7784,7785,7786],{},"bpy.context.scene.render.resolution_x = 256 ",[1215,7787,7788],{},"...","We configure the render resolution to 256 pixels by 256 pixels with no downscale.",[212,7791,7792,7795,7796,7799],{},[255,7793,7794],{},"bpy.context.scene.render.image_settings.file_format = 'PNG'",": 出力フォーマットをPNGに設定し、シーンのスティルレンダ―を実行する前に、出力先を ",[255,7797,7798],{},"preview.png"," に定義します。",[101,7801,7802],{},"このスクリプトにより、軽量なプレビュー用ファイルが生成されます。Kitsuに保存するのが簡単で、監督者が素早く確認できるようになります。",[225,7804,7806],{"className":7805},[87,228],[230,7807],{"src":7808,"className":7809,"alt":235,"loading":236,"width":7652,"height":7653,"srcSet":7810,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-e936efc9-2c3b-43ea-86f7-8845bdc6c50f.png",[234],"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-e936efc9-2c3b-43ea-86f7-8845bdc6c50f.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-e936efc9-2c3b-43ea-86f7-8845bdc6c50f.png 946w",[101,7812,7813],{},"実行するには、bpyパッケージをインストールして、他のPythonスクリプトと同様にプログラムを起動するだけです：",[1174,7815,7816],{},[255,7817,7819],{"className":7818},[1853],"python3 preview.py",[225,7821,7823],{"className":7822},[87,228],[230,7824],{"src":7825,"className":7826,"alt":235,"loading":236,"width":7827,"height":7828,"srcSet":7829},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-8fc4a1a4-01c7-4fcb-a8a6-b5d50588d6b8.png",[234],687,768,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-8fc4a1a4-01c7-4fcb-a8a6-b5d50588d6b8.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-8fc4a1a4-01c7-4fcb-a8a6-b5d50588d6b8.png 687w",[128,7831],{},[131,7833,7835],{"id":7834},"_3-uploading-a-preview-to-kitsu",[120,7836,7837],{},"3. プレビューをKitsuへアップロードする",[101,7839,7840],{},"プレビュー用ファイルの準備ができたら、最後のステップはgazuを使ってデータをKitsuに送り込むことです。",[101,7842,7843],{},"まず、先ほど作成したタスクを取得します：",[1174,7845,7846,7855],{},[255,7847,7849,7850],{"className":7848},[1179],"projects = gazu.project.all_projects()",[101,7851,7852,7853,1279],{},"assets = gazu.asset.all_assets_for_project(projects",[1215,7854,1248],{},[101,7856,7857],{},[255,7858,7860,7861,7863],{"className":7859},[1179],"tasks = gazu.task.all_tasks_for_asset(assets",[1215,7862,1248],{},")\ntask_status = gazu.task.get_task_status_by_short_name(\"todo\")",[101,7865,7866],{},"このために、まず利用可能な制作の一覧を取得し、次に新しく作成した制作のアセットを取得し、最後にこのアセットに割り当てられたタスクを取得します。",[101,7868,7869],{},"プレビュー用ファイルをタスクに紐づけながら、タスクに対するコメントを公開します：",[1174,7871,7872],{},[255,7873,7875,7876,7878],{"className":7874},[1179],"(comment, preview_file) = gazu.task.publish_preview(\n tasks",[1215,7877,1248],{},",\n task_status,\n    comment=\"upload preview\",\n    preview_file_path=\"./preview.png\"\n)",[101,7880,7881],{},"そしてスクリプトを実行します：",[1174,7883,7884],{},[255,7885,7887],{"className":7886},[1853],"python3 upload.py",[101,7889,7890],{},"アップロード後、ファイルはすぐにKitsuのWebインターフェースで利用可能になります。監督者はそれを確認し、フィードバックを残し、ステータスをマークできます。アーティスト側での手作業によるファイルのやりくりは一切不要です。",[225,7892,7894],{"className":7893},[87,228],[230,7895],{"src":7896,"className":7897,"alt":235,"loading":236,"width":7898,"height":7899,"srcSet":7900,"sizes":240},"https://blog.cg-wire.com/content/images/2025/10/data-src-image-e9710dd1-d727-4e9f-85f8-9db075a159f4.png",[234],955,931,"https://blog.cg-wire.com/content/images/size/w600/2025/10/data-src-image-e9710dd1-d727-4e9f-85f8-9db075a159f4.png 600w, https://blog.cg-wire.com/content/images/2025/10/data-src-image-e9710dd1-d727-4e9f-85f8-9db075a159f4.png 955w",[128,7902],{},[131,7904,7906],{"id":7905},"_4-distribution",[120,7907,7908],{},"4. 配布",[101,7910,7911],{},"スクリプトが動くようになったら、使ったり共有したりする方法はいくつかあります：",[728,7913,7914,7922,7928],{},[212,7915,7916,3387,7919,7921],{},[120,7917,7918],{},"Blender内で直接実行する",[439,7920,1168],{}," ワークスペースを開き、そこからスクリプトを実行します。",[212,7923,7924,7927],{},[120,7925,7926],{},"コマンドラインから実行する"," - 先ほどと同様に、任意のPythonプログラムと同じようにターミナルからスクリプトを起動できます。",[212,7929,7930,7933],{},[120,7931,7932],{},"アドオンとしてパッケージ化する"," - Blenderの環境設定から有効化でき、さらに使いやすいように独自のユーザーインターフェースを設計することも可能です。",[101,7935,7936,7937,7943],{},"UI付きの完全なアドオンを作り、アーティストに対して連携を共有できるようにするのが理想ですが、これはかなり大きなテーマであり、ここでは扱いません。さらに詳しく知りたい場合は、",[142,7938,748,7940],{"href":7939},"https://docs.blender.org/manual/en/latest/advanced/scripting/addon_tutorial.html?ref=blog.cg-wire.com",[692,7941,7942],{},"公式のBlenderアドオンチュートリアル","をご覧ください。そして続報もお待ちください。将来の投稿で、これをさらに詳しく取り上げます！",[128,7945],{},[131,7947,7948],{"id":1346},[120,7949,1349],{},[101,7951,7952],{},"DCCパイプラインの連携は、効率的なアニメーションスタジオにとって基盤です。BlenderのようなツールをKitsuへ直接つなぐことで、摩擦を減らし、コミュニケーションを改善し、アーティストと制作管理者の双方にとって仕事を楽にできます。",[101,7954,7955],{},"連携の恩恵を見るために、大規模なパイプラインチームは必要ありません。小さなスタジオでも、まずはシンプルに始め、いくつかのつらいポイントを自動化し、必要に応じて時間とともに段階的に拡張していくことができます。",[101,7957,7958,7964],{},[142,7959,7961],{"href":7960},"https://github.com/cgwire/kitsu-publisher-next?ref=blog.cg-wire.com#readme",[692,7962,7963],{},"Kitsu Publisherのドキュメントを確認する","ことで、Blender、Toon Boom Harmony、Unreal Engine向けの本番環境対応のDCC連携ソリューションを見つけられます。",[84,7966,7968,7971],{"className":7967},[87,88,89],[84,7969,583],{"className":7970},[93],[84,7972,7974,7975,7978],{"className":7973},[98],"アニメーション制作プロセスについてもっと知りたいなら ",[142,7976,3241],{"href":590,"rel":7977},[592],"！ベストプラクティスを共有する1,000人以上の専門家とつながっており、時には現地でのイベントも企画しています。ぜひ歓迎します！ 😊",[84,7980,7982],{"className":7981},[87,598,599],[142,7983,605],{"href":590,"className":7984},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":7986},[7987,7988,7989,7990,7991,7992,7993],{"id":7476,"depth":607,"text":7479},{"id":7519,"depth":607,"text":7522},{"id":7556,"depth":607,"text":7559},{"id":7735,"depth":607,"text":7738},{"id":7834,"depth":607,"text":7837},{"id":7905,"depth":607,"text":7908},{"id":1346,"depth":607,"text":1349},"https://images.unsplash.com/photo-1580894894513-541e068a3e2b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDV8fFNvZnR3YXJlJTIwaW50ZWdyYXRpb258ZW58MHx8fHwxNzYwMzE0NjM1fDA&ixlib=rb-4.1.0&q=80&w=2000",{"updated_at":7996,"featured_at":621,"visibility":622},"2026-02-20T06:04:22.000+01:00","/blog-i18n/ja/dcc-integration-blender-kitsu","2025-10-14T11:23:34.000+02:00",{"title":7436,"description":235},"dcc-integration-blender-kitsu","blog-i18n/ja/dcc-integration-blender-kitsu/index",[8003,8004],{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},{"id":630,"name":631,"slug":632,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":633},"20bHK19sNC42GI-j8-y1JO3g9anGfJzJmaosj59Mmds",{"id":8007,"title":8008,"authors":8009,"body":8019,"description":235,"extension":617,"feature_image":8395,"html":7,"meta":8396,"navigation":12,"path":8398,"published_at":8399,"seo":8400,"slug":8401,"stem":8402,"tags":8403,"__hash__":8410,"updated_at":8397,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/blender-vs-maya/index.md","Blender vs Maya In 2026: あなたに合う3Dツールはどれ？",[8010],{"id":8011,"name":8012,"slug":8013,"profile_image":8014,"cover_image":7,"bio":8015,"website":7,"location":8016,"facebook":7,"twitter":8017,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":8018},"5fe9b27094f20f00398a1673","Gwénaëlle Dupré","gwen","https://blog.cg-wire.com/content/images/2020/12/profile_pics.png","Product Manager at CGWire","Paris, France","@gelnior","https://blog.cg-wire.com/author/gwen/",{"type":81,"value":8020,"toc":8374},[8021,8041,8044,8047,8054,8056,8062,8065,8115,8118,8120,8125,8128,8133,8136,8141,8144,8150,8164,8170,8178,8180,8184,8187,8190,8195,8198,8203,8206,8211,8222,8227,8235,8237,8242,8245,8248,8251,8253,8259,8262,8265,8267,8272,8275,8278,8287,8289,8294,8303,8306,8308,8313,8316,8319,8327,8330,8333,8335,8339,8342,8345,8348,8351,8354,8368],[84,8022,8024,8028],{"className":8023},[87,88,89],[84,8025,8027],{"className":8026},[93],"💻",[84,8029,8031,8035,8036,8040],{"className":8030},[98],[1143,8032,8033],{},[120,8034,6],{"style":722},"か",[1143,8037,8038],{},[120,8039,7458],{"style":722},"か？2025年も議論は続いています――違いを整理してみましょう！",[101,8042,8043],{},"デジタルコンテンツ制作ツールはたくさんあり、その中には3Dアーティスト同士で議論が続きがちなものもあります。",[101,8045,8046],{},"アニメーションを学び始めたばかりで、どのツールを選べばいいのか迷っているのかもしれません。あるいは、新しいプロジェクトがあり、MayaのアニメーターにするかBlenderのアニメーターにするかを判断しようとしているのかもしれません。",[101,8048,118,8049,3085,8051,8053],{},[120,8050,6],{},[120,8052,7458],{},"の両方の機能を気軽に見ていき、それぞれの違い、強みと弱み、そしてどんなプロジェクトに向いているかを探ります。",[128,8055],{},[131,8057,8059],{"id":8058},"comparison-criteria",[120,8060,8061],{},"比較基準",[101,8063,8064],{},"MayaとBlenderを比較するにあたり、できるだけ客観的にするために、いくつかの重要な基準に注目します：",[728,8066,8067,8073,8079,8085,8091,8097,8103,8109],{},[212,8068,8069,8072],{},[120,8070,8071],{},"対象ユーザー"," - このツールは誰のために作られている？",[212,8074,8075,8078],{},[120,8076,8077],{},"価格"," - 収益モデルはどんなもの？",[212,8080,8081,8084],{},[120,8082,8083],{},"長所＆短所"," - 各ツールの主な利点と不便な点は？",[212,8086,8087,8090],{},[120,8088,8089],{},"学習曲線"," - どれくらい簡単に始められる？",[212,8092,8093,8096],{},[120,8094,8095],{},"コミュニティサポート"," - ユーザーはどれくらい活発？",[212,8098,8099,8102],{},[120,8100,8101],{},"モデリング"," - よくある3Dモデリング作業にうまく対応できる？",[212,8104,8105,8108],{},[120,8106,8107],{},"アニメーション＆リギング"," - 3Dモデルのアニメーション工程はどう？",[212,8110,8111,8114],{},[120,8112,8113],{},"レンダリング"," - 自分のアニメーションを動画にするには？",[101,8116,8117],{},"始める前に、どちらが「より良い」というわけではないことを強調しておきます――それは要件と用途次第です！その前提を踏まえつつ、まずはMayaから見ていきましょう。",[128,8119],{},[131,8121,8123],{"id":8122},"maya",[120,8124,7458],{},[101,8126,8127],{},"Autodesk Mayaは3Dアニメーションの業界標準とされており、Walt Disney Animation Studiosのような世界中の主要スタジオで使われています。",[826,8129,8131],{"id":8130},"target-audience",[120,8132,8071],{},[101,8134,8135],{},"Mayaのツールセットは、映画、テレビ、ゲーム業界で働くプロフェッショナル向けに作られており、とくに複雑な制作パイプラインに関わる人を想定しています。",[826,8137,8139],{"id":8138},"pricing",[120,8140,8077],{},[101,8142,8143],{},"Mayaは年間1,945ドル（月額245ドル）とかなり高額です。サブスクリプション費用が、独立系アーティストや小規模スタジオにとって障壁になる可能性があります。しかしAutodeskは、資格がある場合に限り、無料の学生ライセンスと、独立系（indie）向けの割引ライセンスを年間320ドルで提供しています。",[826,8145,8147],{"id":8146},"pros",[120,8148,8149],{},"長所",[728,8151,8152,8155,8158,8161],{},[212,8153,8154],{},"業界の多くの大手スタジオで使われている",[212,8156,8157],{},"優れたアニメーション＆リギングのUI",[212,8159,8160],{},"そのままでも使えるが、完全にカスタマイズ可能",[212,8162,8163],{},"業界標準のクローズドソース系プラグイン",[826,8165,8167],{"id":8166},"cons",[120,8168,8169],{},"短所",[728,8171,8172,8175],{},[212,8173,8174],{},"コスト",[212,8176,8177],{},"コミュニティのリソースが少ない",[128,8179],{},[131,8181,8182],{"id":10},[120,8183,6],{},[101,8185,8186],{},"Blenderは無料でオープンソースの3Dコンテンツ制作ツールで、さまざまなクリエイティブ業界で着実に支持を広げています。モデリング、リギング、アニメーション、レンダリングを含む3Dパイプライン全体をサポートしています。",[101,8188,8189],{},"Blenderは、2023年の映画「Spider-Man: Across the Spider-Verse」のような高評価の制作でも使われており、短編映画やアニメーションにおけるGrease Pencil機能の発展においても重要な役割を果たしました。",[826,8191,8193],{"id":8192},"target-audience-1",[120,8194,8071],{},[101,8196,8197],{},"Blenderは、趣味の人からプロフェッショナルまで、誰もが使えるように設計されています。小規模スタジオは、無料で始められることと、進化を続ける機能群に価値を感じています。特に、強力でありながら“いじれる”ツールを、資金面の負担を抑えつつ探しているフリーランサーやスタートアップに向いています。",[826,8199,8201],{"id":8200},"pricing-1",[120,8202,8077],{},[101,8204,8205],{},"Blenderの最大の利点は価格――無料――であり、さらにイノベーションとサポートを育む非常に活発なコミュニティです。ただし、Mayaに比べると大規模な制作パイプラインへの統合がスムーズでない可能性があり、そこが一部のスタジオにとってはデメリットになり得ます。",[826,8207,8209],{"id":8208},"pros-1",[120,8210,8149],{},[728,8212,8213,8216,8219],{},[212,8214,8215],{},"オープンソース",[212,8217,8218],{},"大きなコミュニティ",[212,8220,8221],{},"優れたモデリングUI",[826,8223,8225],{"id":8224},"cons-1",[120,8226,8169],{},[728,8228,8229,8232],{},[212,8230,8231],{},"大規模制作では人気がやや低い",[212,8233,8234],{},"アニメーションのワークフローを改善するにはプラグインが必要",[128,8236],{},[131,8238,8240],{"id":8239},"learning-curve",[120,8241,8089],{},[101,8243,8244],{},"どちらのソフトウェアも学習曲線は急ですが、Mayaはその複雑さゆえに習得がより難しいと見なされることがよくあります。",[101,8246,8247],{},"オープンソースのソフトウェアであるBlenderは、最初の取っつきにくさが少ないという評判があり、特に初心者には気楽に始めやすいようです。",[101,8249,8250],{},"両方とも多数のチュートリアルやコースが用意されていますが、Blenderはオープンソースであることと大きなコミュニティのおかげで、ここでは優位にあります。",[128,8252],{},[131,8254,8256],{"id":8255},"community",[120,8257,8258],{},"コミュニティ",[101,8260,8261],{},"Blenderのコミュニティサポートは、その強みの1つです。オープンソースのモデルにより、開発者やアーティストがチュートリアル、プラグイン、リソースなどを通じて、その成長に頻繁に貢献しています。このオープンソースの空気感は実験を後押ししており、Blender ArtistsやBlender Nationのようなコミュニティ主導のプラットフォームでは、オープンなプロジェクト議論が盛り上がっています。",[101,8263,8264],{},"Mayaも大きなコミュニティから恩恵を受けていますが、こちらはより商業志向が強く、プロフェッショナル向けのリソースやサポートを提供しています。Mayaは主に、大規模な制作環境で携わるプロフェッショナルに使われているため、Mayaコミュニティは業界のベテランや、複雑な制作パイプラインに深い知識を持つ専門家で構成されることが多いようです。コミュニティは、Autodeskのサポートやコミュニティネットワークのようなフォーラムを通じて情報交換する傾向があります。このような環境のため、アニメーターがスタジオのプロジェクトで忙しくなることもあり、無料の素材やプラグインはあまり一般的ではありません。",[128,8266],{},[131,8268,8270],{"id":8269},"modeling",[120,8271,8101],{},[101,8273,8274],{},"Blenderは、速くて柔軟なモデリングツールで称賛されています。ポリゴンやスカルプトのワークフローから、モディファイアによる高度な手続き型モデリングまで、幅広い機能を提供しています。Blenderのノンデストラクティブ（破壊しない）モディファイアスタックは、ジオメトリを柔軟かつ非線形に変更できるため、特に試行錯誤を重ねる設計プロセスに有益です。カスタマイズ可能なインターフェースとホットキー中心のワークフローにより、ツールセットを使いこなした後は、モデラーがプロセスを効率化し、よりスムーズに作業できるようになります。最後に、BlenderはMayaよりも内蔵スカルプトのサポートが優れています。",[101,8276,8277],{},"Mayaは、ポリゴンモデリングの機能に強みがあり、精密で詳細な作業を支える一連の高度なツールを備えています。他のAutodesk製品との統合や、NURBSモデリングを高度にサポートしている点により、プロフェッショナル案件で求められることの多い複雑で高精度なモデル作成において優位性があります。Mayaのユーザーインターフェースは、初心者にはやや不安に見えることがあります。",[101,8279,8280,8281,8286],{},"総じて言えば、どちらも",[142,8282,748,8283],{"href":5642},[692,8284,8285],{},"3Dモデリングではかなり似ている","ため、最終的な選択はUIや操作感に対する好みで決まるでしょう。",[128,8288],{},[131,8290,8292],{"id":8291},"animation-rigging",[120,8293,8107],{},[101,8295,8296,8297,8302],{},"Mayaは、プロのアニメーター向けに、精度と滑らかさが必要な場面で役立つ高度なアニメーションと",[142,8298,748,8299],{"href":6074},[692,8300,8301],{},"リギングツール","を最初から提供します。そのリギングシステムは非常に強力で、コントロールの奥深さも魅力です。Node Editorのようなツールにより、カスタムのコントロールリグや高度な変形を整理しやすくなり、複雑で精巧なリギングを備えたキャラクターにも対応できます。MELとPythonによる堅牢なスクリプト機能により、テクニカルディレクターはカスタムツールを作ったり、リギング工程を自動化したりできます。",[101,8304,8305],{},"Blenderは、継続的なアップデートによってアニメーションとリギングでも大きく前進しています。Grease Pencil機能によって、2Dと3Dのアニメーションに新しい可能性が開かれています。Blenderのアニメーション／リギングシステムはMayaほど高度ではありませんが、それでも存在します。BlenderのRigifyプラグインは、手作業のリギングに深く踏み込まずに複雑なリグを作るための素晴らしい出発点です。",[128,8307],{},[131,8309,8311],{"id":8310},"rendering",[120,8312,8113],{},[101,8314,8315],{},"Mayaは、開発中の可視化にInteractive Photorealistic Renderingエンジンを使用し、最終レンダーにはAutodesk Arnoldエンジンを使います。",[101,8317,8318],{},"Arnoldは、複雑なシーンを扱えることで知られる高品質なMonte Carloレイトレーシングレンダラーです。CPU駆動ですが、最近のアップデートではGPUアクセラレーションのサポートも追加されています。",[101,8320,8321,8322,146],{},"Blenderには2つのレンダリングエンジンがあります：",[142,8323,748,8324],{"href":156},[692,8325,8326],{},"Cycles と Eevee",[101,8328,8329],{},"Cyclesは物理ベースのパストレーサーで、現実的なライティング、反射、影を提供します。GPUアクセラレーションに大きく依存しており、対応するグラフィックカードがあればレンダリングを大幅に高速化できます。",[101,8331,8332],{},"一方でEeveeはリアルタイムレンダリングエンジンで、速度が得意です。Cyclesと同等の詳細度はありませんが、開発中のプリビジュアライゼーションや、素早い反復が必要で、あまり写実的ではないものの高品質な視覚フィードバックを求めるプロジェクトに最適です。",[128,8334],{},[131,8336,8337],{"id":1346},[120,8338,1890],{},[101,8340,8341],{},"MayaもBlenderも、3Dアニメーション制作のための強力なツールで、それぞれに独自の強みと弱みがあります。",[101,8343,8344],{},"大規模スタジオや主要制作における確かな実績により、Mayaは標準であり続けています。しかしBlenderは有力な代替手段で、柔軟性と予算にやさしいアプローチによって、その差を着実に埋めつつあります。",[101,8346,8347],{},"Blenderから始めると、特に独立して制作している人にとって、3Dの世界への包括的な理解につながります。スキルやスタジオの要件が進化するにつれて、Mayaへの移行はより業界標準に沿った形になります。",[101,8349,8350],{},"もしまだ学生なら、両方のソフトの感触をつかむために無料の学生ライセンスを活用してください。",[101,8352,8353],{},"いずれにせよ、各ソフトで身につけるスキルは相互に転用できるので、どちらか一方を選ぶことを過度に心配する必要はありません。Blenderをよく理解していれば、いくつかのハウツー動画を見る、ドキュメントを読む、そして数週間練習することで、スキルをMayaに簡単に移し替えられます。",[84,8355,8357,8360],{"className":8356},[87,88,89],[84,8358,583],{"className":8359},[93],[84,8361,8363,8364,8367],{"className":8362},[98],"アニメーション工程についてもっと学ぶには ",[142,8365,3241],{"href":590,"rel":8366},[592],"！ベストプラクティスを共有する1,000人以上の専門家とつながれ、時にはオフラインイベントも企画しています。ぜひようこそお迎えします！😊",[84,8369,8371],{"className":8370},[87,598,599],[142,8372,605],{"href":590,"className":8373},[603,604],{"title":235,"searchDepth":607,"depth":607,"links":8375},[8376,8377,8383,8389,8390,8391,8392,8393,8394],{"id":8058,"depth":607,"text":8061},{"id":8122,"depth":607,"text":7458,"children":8378},[8379,8380,8381,8382],{"id":8130,"depth":1410,"text":8071},{"id":8138,"depth":1410,"text":8077},{"id":8146,"depth":1410,"text":8149},{"id":8166,"depth":1410,"text":8169},{"id":10,"depth":607,"text":6,"children":8384},[8385,8386,8387,8388],{"id":8192,"depth":1410,"text":8071},{"id":8200,"depth":1410,"text":8077},{"id":8208,"depth":1410,"text":8149},{"id":8224,"depth":1410,"text":8169},{"id":8239,"depth":607,"text":8089},{"id":8255,"depth":607,"text":8258},{"id":8269,"depth":607,"text":8101},{"id":8291,"depth":607,"text":8107},{"id":8310,"depth":607,"text":8113},{"id":1346,"depth":607,"text":1890},"https://blog.cg-wire.com/content/images/2025/02/blender_vs_maya_cover.1102x655.jpg",{"updated_at":8397,"featured_at":621,"visibility":622},"2026-03-26T10:27:19.000+01:00","/blog-i18n/ja/blender-vs-maya","2025-02-24T10:00:50.000+01:00",{"title":8008,"description":235},"blender-vs-maya","blog-i18n/ja/blender-vs-maya/index",[8404,8405],{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},{"id":8406,"name":8407,"slug":8408,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":8409},"69c20dfccb09d8000107cfe9","Resources","resources","https://blog.cg-wire.com/tag/resources/","t9K_97iXlTGeMd9kNVHzX32ONH48CoBlWdfi0QakdGY",{"id":8412,"title":8413,"authors":8414,"body":8424,"description":8428,"extension":617,"feature_image":8679,"html":7,"meta":8680,"navigation":12,"path":8682,"published_at":8683,"seo":8684,"slug":8685,"stem":8686,"tags":8687,"__hash__":8689,"updated_at":8681,"featured_at":621,"visibility":622},"blog/blog-i18n/ja/getting-started-with-blender-rendering/index.md","Blenderレンダリング入門（2026年）",[8415],{"id":8416,"name":8417,"slug":8418,"profile_image":8419,"cover_image":8420,"bio":8421,"website":8422,"location":8016,"facebook":7,"twitter":8017,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":8423},"68d2f1e036b5be000835a0db","Frank Rousseau","frankrousseau","https://blog.cg-wire.com/content/images/2021/01/photo_identite.png","https://blog.cg-wire.com/content/images/2024/05/Annecy-Booth_Linework_004-2-1.jpg","CEO &Founder of CGWire","https://addictedtointer.net","https://blog.cg-wire.com/author/frankrousseau/",{"type":81,"value":8425,"toc":8671},[8426,8429,8432,8435,8439,8442,8492,8495,8498,8502,8505,8508,8511,8537,8541,8544,8558,8567,8570,8579,8582,8586,8593,8599,8607,8610,8618,8625,8632,8636,8639,8645,8648,8656,8658,8661],[101,8427,8428],{},"Blenderレンダリングとは、Blenderで作成した3Dシーンから画像または動画の出力ファイルを生成するプロセスです。レンダリングは、光やマテリアルなど、複雑な物理をシミュレートし、その他の視覚的要素も反映してリアルな結果を得る必要があるため、非常にリソースを消費する作業です。さらに、レンダリングのミスはプロジェクトに直接影響するため、技術要件にきちんと合わせられるだけのプロセス理解が必要になります。規模が大きくなるほど難易度はさらに上がり、最終的には、より優れたハードウェアを提供できる外部の第三者プロバイダーに委託するのが最善となることもあります。",[101,8430,8431],{},"これらすべての理由から、この記事はレンダリングプロセスを最適化したい人にとって必読です。Blenderで基本的なレンダリングを行う方法を学び、レンダリングエンジンを選び、アニメーション制作スタジオが成長するにつれてスケールしていきましょう！ ",[101,8433,8434],{},"CGWireでは、2018年の創業以前からBlenderのエコシステムの中で取り組んできたため、レンダリング工程によってもたらされる課題には馴染みがあります。スタジオのワークフローを最適化するために、ぜひこの記事をチームメンバーと共有してください！",[131,8436,8438],{"id":8437},"how-to-render-animation-in-blender","Blenderでアニメーションをレンダリングする方法",[101,8440,8441],{},"Blenderでのレンダリングは、入力が何であっても同じ手順を踏みます：",[209,8443,8444,8450,8456,8462,8468,8474,8480,8486],{},[212,8445,8446,8449],{},[120,8447,8448],{},"シーンをセットアップする"," - 3Dモデルを設計し、ライティング、カメラアングル、アニメーションに含めたいその他の要素を設定します。",[212,8451,8452,8455],{},[120,8453,8454],{},"レンダリング設定を行う"," - レンダリングタブへ移動します。出力解像度、フレーム範囲、フレームレート、その他の設定を要件に合わせて調整してください。",[212,8457,8458,8461],{},[120,8459,8460],{},"出力形式を設定する"," - レンダリングタブの「Output Properties（出力プロパティ）」セクションで、アニメーションの出力形式を選びます。画像シーケンス（例：PNG、JPEG）または動画形式（例：MP4、AVI）を選択できます。Blenderがレンダリングしたフレームや動画を保存する出力パスを指定してください。",[212,8463,8464,8467],{},[120,8465,8466],{},"レンダリングエンジンを選ぶ"," - Blenderには2つのレンダリングエンジンがあります：Cycles と Eevee。Cyclesは物理ベースのリアルなレンダリングを提供し、Eeveeはより素早いプレビューに適したリアルタイムエンジンです。「Render Properties（レンダー・プロパティ）」セクションの「Render Engine（レンダリングエンジン）」ドロップダウンメニューから希望のエンジンを選択します。",[212,8469,8470,8473],{},[120,8471,8472],{},"アニメーション再生を確認する"," - タイムラインまたはDope Sheetエディタの「再生」ボタンを使ってアニメーションをプレビューします。意図した通りにすべてが動いているか確認し、必要に応じて調整してください。",[212,8475,8476,8479],{},[120,8477,8478],{},"レンダリングを開始する"," - シーンとアニメーションに満足したら、レンダリングタブの「Render Animation（アニメーションのレンダリング）」ボタンをクリックします。Blenderは設定に基づいて各フレームのレンダリングを開始します。レンダリング時間は、シーンの複雑さ、選択したレンダリングエンジン、そしてコンピュータの性能によって変わります。",[212,8481,8482,8485],{},[120,8483,8484],{},"進捗を監視する"," - Blenderインターフェース上部のステータスバーで、レンダリングの進捗を確認できます。現在レンダリングしているフレームと、推定残り時間が表示されます。",[212,8487,8488,8491],{},[120,8489,8490],{},"出力を保存して確認する"," - レンダリングが完了すると、Blenderはレンダリングしたフレームまたは動画を指定した出力パスに保存します。その後、アニメーションを確認して期待通りかどうかを確かめられます。",[101,8493,8494],{},"レンダリングタブはこのように見えます：",[101,8496,8497],{},"プロジェクトの要件や、レンダリング結果をどう扱いたいかによっては、さらに高度な機能に踏み込む必要があります。",[131,8499,8501],{"id":8500},"blender-rendering-engines-eevee-vs-cycles","Blenderのレンダリングエンジン：Eevee vs Cycles",[101,8503,8504],{},"EeveeとCyclesはBlenderで利用できる2つのレンダリングエンジンで、機能や用途にはいくつかの違いがあります。",[101,8506,8507],{},"いつも通り、EeveeとCyclesの選択は特定のプロジェクト要件によって決まります。たとえばスピードやインタラクティブ性、リアルタイムレンダリングが必要なら、プレビュー用途としてEeveeは非常に優れています。 しかし、制作（本番）で使うために高品質で物理的に正確なレンダリングを目指すなら、Cyclesが推奨の選択肢です。",[101,8509,8510],{},"もちろん、プロジェクト期間のあいだずっとどちらか一方を使い続ける必要はありません。それぞれのエンジンの長所と短所を組み合わせて、最大限に活用することができます：",[728,8512,8513,8519,8525,8531],{},[212,8514,8515,8518],{},[120,8516,8517],{},"レンダリングスピード"," - Eeveeは高速レンダリングとインタラクティブ性のために設計されたリアルタイムレンダリングエンジンです。GPU（グラフィックス・プロセッシング・ユニット）を活用して、素早いプレビューやアニメーションを提供します。一方、Cyclesはパストレーシングエンジンで、一般的にレンダリングに時間がかかることが多いものの、現実的で物理的に正確なレンダリングを生成することに重点を置いています。",[212,8520,8521,8524],{},[120,8522,8523],{},"出力品質"," - Cyclesは、正確なライティング、影、反射によって非常にリアルな画像を生成できることで知られています。レイトレーシングの手法を用いて、シーン内の物体と相互作用しながら光線がたどる経路をシミュレートします。Cyclesほど物理的に厳密ではないものの、Eeveeでもリアルタイムの影、反射、アンビエントオクルージョンによって見事な結果を出せます。",[212,8526,8527,8530],{},[120,8528,8529],{},"GPU vs CPUレンダリング"," - 両方のエンジンでGPUレンダリングが可能ですが、EeveeはGPUアクセラレーションのために明確に設計されており、対応するグラフィックスカードで非常に優れた性能を発揮します。CyclesはCPU（中央処理装置）とGPUの両方を使えますが、一般的にはCPUレンダリングと複雑なシーンでより良い結果になりやすいです。",[212,8532,8533,8536],{},[120,8534,8535],{},"ワークフローとインタラクティブ性"," - Eeveeはリアルタイムのフィードバックを提供し、長時間のレンダリングを待たずにシーンをすぐ反復し、調整できます。アニメーション業界で見られるような高速な反復ループを伴う協業型のワークフローに最適です。Cyclesはより遅いものの、最終レンダリングやフォトリアルな結果の達成に適しています。",[131,8538,8540],{"id":8539},"use-viewport-render-workbench-engine-for-storyboarding","ビューポートレンダー（Workbenchエンジン）をストーリーボード作成に活用する",[101,8542,8543],{},"フィードバックのためにシーンのスナップショットを素早く共有したいだけの場面では、レンダリングはやりすぎかもしれません。ビューポートレンダーモードは、別途のレンダリングを用意せずに、シーンを素早くインタラクティブにプレビューするための手段です。ビューポートレンダーは最終レンダリングほど正確ではありませんが、大切なリソースを節約でき、しかも5つのシンプルな手順だけで済みます：",[209,8545,8546,8549,8552,8555],{},[212,8547,8548],{},"Blenderで3Dシーンを開く",[212,8550,8551],{},"レンダリングしたビューを表示したいエリアへ移動します。デフォルトでは、3Dビューポートです。",[212,8553,8554],{},"3Dビューポートの右上隅で、Viewをクリックし、次に Viewport Render Animation を選択する",[212,8556,8557],{},"Blenderは、WorkbenchエンジンまたはEeveeレンダリングエンジンのいずれかを使って、リアルタイムにビューのレンダリングを開始します。マテリアル、ライティング、影、その他の効果が反映された状態でシーンが表示されます。シーンに変更を加えると、レンダリングもリアルタイムに更新されるため、即座にフィードバックを得られます。",[225,8559,8561],{"className":8560},[87,228],[230,8562],{"src":8563,"className":8564,"alt":235,"loading":236,"width":8565,"height":8566},"https://lh3.googleusercontent.com/f0YU30WPImeGqw6_a1GCNtG4ShDENq-7R4XeUOkQnaZNr_74yIqGV2Q0z6j4TUCXVyI-wNc-poYMQ1rEwBOkq2p37aXWwHcfZF_7BbZmQsAGQikmYo69qAzY52SUuryBfMM4oD0pu6wRyUt1HZzXkog",[234],297,77,[101,8568,8569],{},"ビューポートレンダーモードの間は、シーン内を移動したり、オブジェクトを操作したり、ライティングを調整したり、その他の変更を行ったりできます。ビューポートはそれに応じてレンダリングを更新するため、変更内容をすぐにプレビューできます。",[225,8571,8573],{"className":8572},[87,228],[230,8574],{"src":8575,"className":8576,"alt":235,"loading":236,"width":8577,"height":8578},"https://lh3.googleusercontent.com/5aCphsaEBQKqbe5xdiyjtsnhKzMtwvYrL3R9rKQCrDxoTQ9tVvj2aT9O8vA-y59Xq6BurCMQPeNAGduSAsncKvvAwdtwLfUckPv2VrAUzjjjYzwLgBieSiwV04jVKqCEpvsTdZqgJ5HcR-VcNNpQiY4",[234],624,668,[101,8580,8581],{},"ビューポートレンダーモードを終了して通常の3Dビューポートに戻るには、右上隅のドロップダウンメニューをクリックし、Solid、Wireframe、Material Preview など別のシェーディングモードを選択します。",[131,8583,8585],{"id":8584},"using-a-blender-rendering-farm","Blenderレンダリングファームの活用",[101,8587,8588,8589,8592],{},"Blenderレンダリングにレンダリングファームを使うと、いくつかの利点があります。まず、",[120,8590,8591],{},"自分のマシンで3Dモデルをレンダリングするのは時間がかかり、処理能力によって制限されます","。レンダリングファームは追加の計算パワーを貸し出すことで解決策になります。これにより、プロジェクトを数週間ではなく数分でレンダリングできるようになります。",[101,8594,8595,8598],{},[120,8596,8597],{},"自分でレンダリングファームを構築するのは、常に現実的とは限りません","。費用が高いからです。高価なハードウェアが必要で、設定や保守にかかる時間も長くなり、さらに電気代も増えます。チームにRender Wranglerがいる場合は、彼が最大限に活用できるため効率的かもしれません。しかし多くのケースでは、レンダリングファームのサービスを利用する方が管理はずっと簡単です。サーバーを管理する必要はありません。必要に応じてスケールアップ／スケールダウンでき、ログインしてアセットをアップロードするだけで済みます。あとは手軽に運用できます。",[225,8600,8602],{"className":8601},[87,228],[230,8603],{"src":8604,"className":8605,"alt":235,"loading":236,"width":8577,"height":8606},"https://lh5.googleusercontent.com/XRTIxKyD6zAcREE-ul4QDr2DvTD-VNvhnpoWwxO5w401g7McoK7qs-pzwaJ9vKzaHFNOdFi6k5FUh5vED6CV8n7PAdCNAXCcLAukK9BdNYDSULOf5eVBWfLu1rXiuBpv9IPO5xevDkqy0AZn1JHbOzo",[234],521,[101,8608,8609],{},"準備ができ次第、レンダリング済みのフレームをダウンロードできます：",[225,8611,8613],{"className":8612},[87,228],[230,8614],{"src":8615,"className":8616,"alt":235,"loading":236,"width":8577,"height":8617},"https://lh4.googleusercontent.com/NbH3JSZZytC2DfO3zNTyJVuYdcAmlLRSlgHKM4JBHrujabgvwD1IKPZ7zTO20K9_Zz_tCSeaZww7YQzk7BJ7j9ULA8d43e-hVSQk_RupkPdsZvIIvfux3r3gDYBTdISEe9YR9AH2pHkI_nn3b7M8Ftg",[234],384,[101,8619,8620,8621,8624],{},"レンダリングファームは処理時間を短縮するだけでなく、",[120,8622,8623],{},"レンダリング品質も向上させます","。プロジェクト要件に合わせて解像度設定を選ぶだけで、あとは進められます。より現実的な3Dモデルへの需要が高まるにつれて、レンダリング時間を低く抑え、競争力を維持するために、レンダリングファームが不可欠になることも多いです。",[101,8626,8627,8631],{},[142,8628,8630],{"href":8629},"https://blog.cg-wire.com/partnership-with-ranch-computing/","レンダリングファームのパートナーであるRanch Computingについて詳しく知るための専用記事","もぜひご覧ください。",[131,8633,8635],{"id":8634},"using-kitsu-to-keep-track-of-your-renders","Kitsuでレンダリングの進捗を管理する",[101,8637,8638],{},"数百ものアセットを扱うアニメーション制作では、レンダリングは簡単な作業ではありません。各アセット／アニメーションを1つずつレンダリングするのではなく、Kitsu Publisherを使えば、DCCツールを離れることなく、共同作業用のプレビューを自動で共有できます（Blender、Unreal Engine 5、Harmonyなど、どのツールでも可能です）。",[101,8640,8641,8642,146],{},"Kitsuは、アニメーションスタジオが制作の進捗を共有し、納品物を検証するためのコラボレーションプラットフォームです。Kitsu Publisherはデスクトップアプリケーションで、DCCツールとKitsuを接続し、レンダリングプレビューを自動でKitsuのワークスペースへ送信します。やることは、Kitsu Publisherをインストールして、数分でBlenderのプラグインとして追加するだけです。使用しているOSに応じて、",[142,8643,8644],{"href":7960},"公式ドキュメントを読めば詳細な手順がわかります",[101,8646,8647],{},"プレビューを共有してフィードバックを集めたいだけなら、レンダリング作業そのものをスキップできるだけでなく、制作（再）レンダリングが必要なすべてのアセットを把握し、チームメンバーのニーズに合わせてレンダリングタスクの優先順位を決めるための、貴重なコミュニケーションツールにもなります。これで延々と行き来するやり取りや、終わりのない会議とはおさらばです！",[101,8649,8650,8651,8655],{},"またBlenderには、Blender内からKitsuと連携するための",[142,8652,8654],{"href":8653},"https://studio.blender.org/pipeline/addons/blender_kitsu?ref=blog.cg-wire.com","公式Kitsuプラグイン","もあり、スナップショットやサムネイルのレンダリングなどの機能が含まれています。",[131,8657,1349],{"id":1346},[101,8659,8660],{},"結論として、Blenderでのレンダリングは、3Dシーンに命を吹き込むための強力な方法です。選択肢が多く最初は圧倒されるかもしれませんが、最初のうちはシンプルさが鍵であることを忘れないでください。最も分かりやすい選択肢を選び、進めながら改善していきましょう。",[101,8662,8663],{},[439,8664,8665,8666,8670],{},"協業や効率的なワークフローへの需要が高まるにつれ、代替のレンダリング手法を検討することが重要になります。さらに、いずれは高度なスキルを必要とする複雑な作業でもあります。だからこそ、パイプラインと制作の専門家で構成された",[142,8667,8669],{"href":8668},"https://discord.com/invite/VbCxtKN?ref=blog.cg-wire.com","Discord","コミュニティへの参加をおすすめします！",{"title":235,"searchDepth":607,"depth":607,"links":8672},[8673,8674,8675,8676,8677,8678],{"id":8437,"depth":607,"text":8438},{"id":8500,"depth":607,"text":8501},{"id":8539,"depth":607,"text":8540},{"id":8584,"depth":607,"text":8585},{"id":8634,"depth":607,"text":8635},{"id":1346,"depth":607,"text":1349},"https://blog.cg-wire.com/content/images/2023/07/pasted-image-0.png",{"updated_at":8681,"featured_at":621,"visibility":622},"2026-03-24T05:12:02.000+01:00","/blog-i18n/ja/getting-started-with-blender-rendering","2023-08-29T17:08:09.000+02:00",{"title":8413,"description":8428},"getting-started-with-blender-rendering","blog-i18n/ja/getting-started-with-blender-rendering/index",[8688],{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"5Pqa__NccQL4RKfWxGqHQg-I4wCfoJ2btVWgwworTwY",{"id":8691,"title":8692,"authors":8693,"body":8695,"description":8699,"extension":617,"feature_image":9267,"html":7,"meta":9268,"navigation":12,"path":9270,"published_at":9271,"seo":9272,"slug":9273,"stem":9274,"tags":9275,"__hash__":9277,"updated_at":9269,"幸いなことに、Blenderにはいくつかのエクスポートオプションがあります。この記事では、それぞれの選択肢と、アニメーションの制作パイプラインの中で最適に活用できるタイミングを解説します。最後に、エクスポート作業をより効率化するために、私たちのオープンソースの制作管理ソフトウェアであるKitsuの使い方についてお話しします。\" featured_at":621,"visibility":622},"blog/blog-i18n/ja/getting-started-with-export-in-blender/index.md","Blenderで2026年にエクスポートを始める方法",[8694],{"id":8416,"name":8417,"slug":8418,"profile_image":8419,"cover_image":8420,"bio":8421,"website":8422,"location":8016,"facebook":7,"twitter":8017,"meta_title":7,"meta_description":7,"threads":7,"bluesky":7,"mastodon":7,"tiktok":7,"youtube":7,"instagram":7,"linkedin":7,"url":8423},{"type":81,"value":8696,"toc":9250},[8697,8700,8703,8707,8710,8760,8763,8767,8770,8774,8777,8781,8798,8802,8828,8832,8835,8839,8859,8863,8877,8881,8884,8888,8908,8912,8926,8930,8933,8937,8957,8961,8975,8979,8982,8986,9003,9007,9020,9024,9027,9031,9051,9055,9075,9079,9082,9086,9106,9110,9130,9134,9137,9141,9149,9153,9167,9171,9174,9177,9181,9184,9203,9207,9210,9217,9220,9223,9230,9232,9235],[101,8698,8699],{},"Blenderは、アニメーションに使われる人気の3Dコンピュータグラフィックスソフトウェアです。プロジェクトのどこかのタイミングで、ファイルをエクスポートする必要が出てきます――保存するため、チームメイトと共有するため、あるいはレンダリングファームへのアップロードのように、他の専門的なソフトウェアで利用するためです。 ",[101,8701,8702],{},"幸いなことに、Blenderにはいくつかのエクスポートオプションがあります。この記事では、それぞれの選択肢と、アニメーションの制作パイプラインの中で最大限に活用するために最適な使いどころを解説します。最後に、エクスポート作業をより効率化するために、私たちのオープンソースの制作管理ソフトウェアであるKitsuの使い方についてお話しします。",[131,8704,8706],{"id":8705},"how-to-export-in-blender","Blenderでのエクスポート方法",[101,8708,8709],{},"Blenderからファイルをエクスポートする手順は、常に次の一般的な流れに従います。",[209,8711,8712,8718,8724,8730,8742,8748,8754],{},[212,8713,8714,8717],{},[120,8715,8716],{},"エクスポートしたいオブジェクトまたはアニメーションを選択する"," - Blenderで、エクスポートしたいオブジェクトまたはアニメーションを選択します。Shiftキーを押しながらクリックすると、複数のオブジェクトを選択できます。",[212,8719,8720,8723],{},[120,8721,8722],{},"エクスポートメニューを開く"," - Blenderインターフェース左上の［File］メニューに移動し、［Export］を選択してエクスポートオプションにアクセスします。",[212,8725,8726,8729],{},[120,8727,8728],{},"ファイル形式を選ぶ"," - エクスポートオプションでは、選択可能なファイル形式の一覧が表示されます。ニーズに合い、エクスポートしたファイルを使うことになるソフトウェアまたはプラットフォームと互換性のある形式を選択してください。各ファイル形式については、次のセクションで説明します。",[212,8731,8732,8735,8736,8741],{},[120,8733,8734],{},"エクスポート設定を調整する"," - 選んだファイル形式によって、設定やオプションは変わります。これらの設定には、アニメーション、オブジェクト階層、マテリアル、テクスチャ、スケールなどの項目が含まれることがあります。ターゲットとなるソフトウェアの要件や仕様に合わせて調整してください。",[142,8737,8740],{"href":8738,"rel":8739},"https://docs.blender.org/manual/en/latest/files/import_export?ref=blog.cg-wire.com",[592],"公式ドキュメントを確認する","ことで、設定について詳しく学べます。",[212,8743,8744,8747],{},[120,8745,8746],{},"ファイルのパスと名前を設定する"," - エクスポートしたファイルを保存したい場所（ファイルパス）を指定します。コンピュータ上、またはネットワーク上でアクセスしやすく、整理された場所を選びましょう。内容を反映した適切な名前を付けてください。",[212,8749,8750,8753],{},[120,8751,8752],{},"ファイルをエクスポートする"," - 必要な設定をすべて行ったら、［Export］または［Save］ボタンをクリックしてエクスポート処理を開始します。Blenderは選択したオブジェクトまたはアニメーションを処理し、指定した場所にエクスポートファイルを生成します。",[212,8755,8756,8759],{},[120,8757,8758],{},"エクスポート後のファイルを確認する"," - エクスポートが完了したら、選択したファイルパスに移動し、エクスポートされたファイルが存在することを確認します。ターゲットとなるソフトウェアまたはプラットフォームでファイルを開き、アニメーションやオブジェクトが正しく転送され、期待どおりに動作することを確認してください。",[101,8761,8762],{},"エクスポートメニューは次のように見えます。",[131,8764,8766],{"id":8765},"export-file-formats-pros-cons","エクスポートファイル形式：長所＆短所",[101,8768,8769],{},"Blenderは、それぞれ独自の機能、利点、制限を備えたさまざまなファイル形式をサポートしています。",[826,8771,8773],{"id":8772},"fbx-filmbox","FBX（Filmbox）",[101,8775,8776],{},"FBXはAutodeskによって開発された独自ファイル形式で、主にアニメーション業界で使われています。Blender、Maya、3DS Maxのような異なるソフトウェア間で3Dコンテンツのやり取りを簡単にすることを目的としています。FBXファイルには、ジオメトリ、テクスチャ、マテリアル、アニメーション、カメラ、ライトなど、3Dモデルに関連するさまざまな種類のデータを保存できます。",[101,8778,8779],{},[120,8780,8149],{},[728,8782,8783,8789],{},[212,8784,8785,8788],{},[120,8786,8787],{},"相互運用性"," - FBX形式は、主にキャラクターアニメーションを異なるアプリケーション間で受け渡す用途で使われます。Cinema4D、Maya、Autodesk 3ds Max、Wings3D、Unreal Engine 5のような人気アプリケーションでサポートされています。",[212,8790,8791,8794,8795,8797],{},[120,8792,8793],{},"メッシュモディファイアとアニメーションをベイクできる"," -",[120,8796,748],{},"エクスポータはメッシュモディファイアやアニメーションをFBXファイルにベイクできるため、最終結果がBlender上の見た目と同じになることを保証します。",[101,8799,8800],{},[120,8801,8169],{},[728,8803,8804,8812,8820],{},[212,8805,8806,8794,8809,8811],{},[120,8807,8808],{},"アーマチュア・インスタンスに対応していない",[120,8810,748],{},"FBX形式ではアーマチュア・インスタンスがサポートされていないため、アーマチュアベースのアニメーションを扱う一部の機能やワークフローに制限が出る可能性があります。",[212,8813,8814,8794,8817,8819],{},[120,8815,8816],{},"ボーンの向きの読み込みが複雑",[120,8818,748],{},"ボーンの向きのインポートは複雑になりやすく、望ましい結果が得られるまで関連する設定を調整する必要がある場合があります。",[212,8821,8822,8794,8825,8827],{},[120,8823,8824],{},"アニメーション対応が限定的",[120,8826,748],{},"FBXでの現在のアニメーションサポートは最小限です。FBX内でアニメーションだけを保存する場合、どのアニメーションがどのモデルに属しているかを手動で追跡する必要があります。選択と整理には、ファイルサイズを最適化し、エクスポート／インポート処理をより高速にするための手作業が必要になります。",[826,8829,8831],{"id":8830},"alembic","Alembic",[101,8833,8834],{},"Alembicファイル形式は、アニメーションやシミュレーションされた3Dジオメトリを効率的に保存・受け渡しするために設計された、オープンなコンピュータグラフィックスの交換形式です。",[101,8836,8837],{},[120,8838,8149],{},[728,8840,8841,8847,8853],{},[212,8842,8843,8846],{},[120,8844,8845],{},"効率的な保存"," - Alembicは、アニメーション化された頂点位置やアニメーション化されたトランスフォームのような複雑な手続き型ジオメトリ構築の計算結果を、効率よく保存するために設計されています。",[212,8848,8849,8852],{},[120,8850,8851],{},"高速な読み書き"," - アニメーションメッシュを書き込み、ドライブから読み直す処理を、迅速かつ効率よく行えます。",[212,8854,8855,8858],{},[120,8856,8857],{},"CPU使用量の削減"," - アニメーションメッシュをAlembicファイルに「ベイク」することで、CPU負荷の高いリグ処理が軽減され、シェーディングやライティング中のCPU使用が中程度になります。",[101,8860,8861],{},[120,8862,8169],{},[728,8864,8865,8871],{},[212,8866,8867,8870],{},[120,8868,8869],{},"適用範囲が限定的"," - Alembicは計算結果の保存に特化しており、制作プロセスで使われた手続き型ツールの複雑な依存関係グラフを保存することには関心がありません。最終的なアニメーション位置やトランスフォームを生成するために必要な計算ネットワーク（リグ）は保存されません。",[212,8872,8873,8876],{},[120,8874,8875],{},"計算の表現がない"," - Alembicは計算ネットワークを保存しないため、アニメーションやシミュレーション工程で使われた手続き型ツールの完全な履歴や依存関係を保持する必要があるケースには適さない可能性があります。",[826,8878,8880],{"id":8879},"obj-wavefront","OBJ（Wavefront）",[101,8882,8883],{},"OBJ（Wavefront OBJ）ファイル形式は、3Dモデルデータのやり取りで広く使われているプレーンテキスト形式で、もともとはWavefront TechnologiesがAdvanced Visualizerソフトウェア向けに開発しました。。",[101,8885,8886],{},[120,8887,8149],{},[728,8889,8890,8896,8902],{},[212,8891,8892,8895],{},[120,8893,8894],{},"ほぼすべてでサポート","されているため、対応環境が広い。",[212,8897,8898,8899,146],{},"シンプルなASCIIベースの形式で、",[120,8900,8901],{},"読みやすく編集しやすい",[212,8903,8904,8907],{},[120,8905,8906],{},"基本的な","ジオメトリ、UVマッピング、マテリアルの割り当てに対応。",[101,8909,8910],{},[120,8911,8169],{},[728,8913,8914,8920],{},[212,8915,8916,8919],{},[120,8917,8918],{},"アニメーションに対応していない"," - アーマチュア、ライト、カメラ、空のオブジェクト、親子関係、トランスフォームをサポートしません。",[212,8921,8922,8925],{},[120,8923,8924],{},"シンプルなシーン向け"," - 大規模なシーンや高解像度メッシュを扱う能力が限られています。",[826,8927,8929],{"id":8928},"collada-dae","Collada（DAE）",[101,8931,8932],{},"Colladaファイル形式は、拡張子 .dae（Digital Asset Exchange）としても知られ、3Dデジタルアセットとアニメーションデータの相互運用性のために特化して設計された、オープンな標準XMLベースのファイル形式です。",[101,8934,8935],{},[120,8936,8149],{},[728,8938,8939,8945,8950],{},[212,8940,8941,8944],{},[120,8942,8943],{},"幅広くサポート","されており、ジオメトリ、マテリアル、テクスチャ、アニメーションなどを保持できます。",[212,8946,8947,146],{},[120,8948,8949],{},"複雑なシーン階層と複数のアニメーションレイヤーをサポート",[212,8951,8952,8953,8956],{},"人が読めて編集可能な",[120,8954,8955],{},"オープンかつXMLベースの形式","です。",[101,8958,8959],{},[120,8960,8169],{},[728,8962,8963,8969],{},[212,8964,8965,8966],{},"Blenderのプラグインは",[120,8967,8968],{},"まだ開発途中",[212,8970,8971,8974],{},[120,8972,8973],{},"レガシー寄りのファイル拡張子","（2014年以降更新なし）",[826,8976,8978],{"id":8977},"gltf-gl-transmission-format","glTF（GL Transmission Format）",[101,8980,8981],{},"glTF（GL Transmission Format）は、リアルタイムレンダリングを重視して設計された、3Dシーンやモデルを効率的に伝送・読み込みするためのオープン標準ファイル形式です。3Dモデルデータ（ジオメトリ、テクスチャ、マテリアル、アニメーションなど）を保存するために、JSON（JavaScript Object Notation）構造、またはバイナリ形式を使用します。「glTF Binary」と呼ばれるバイナリ形式は、ファイルサイズの削減と読み込み時間の改善により、さらに効率性を高めます。",[101,8983,8984],{},[120,8985,8149],{},[728,8987,8988,8994,8997],{},[212,8989,8990,8993],{},[120,8991,8992],{},"リアルタイムレンダリング向け","（Web、ゲームなど）。",[212,8995,8996],{},"ジオメトリ、マテリアル、テクスチャ、アニメーションなどをサポート。",[212,8998,8999,9002],{},[120,9000,9001],{},"効率的な圧縮","と小さなファイルサイズ。",[101,9004,9005],{},[120,9006,8169],{},[728,9008,9009,9015],{},[212,9010,9011,9014],{},[120,9012,9013],{},"高度な機能への対応が限定的","（ヘア、パーティクル、複雑なシェーダーなど）。",[212,9016,9017,146],{},[120,9018,9019],{},"DCCツール間で互換性が異なる",[826,9021,9023],{"id":9022},"universal-scene-description-usd","Universal Scene Description（USD）",[101,9025,9026],{},"USDは、Pixar Animation Studiosが開発した、現代のアニメーションおよびビジュアルエフェクトの制作パイプラインにある複雑さや要求に対応するための、オープンでスケーラブルな交換形式です。USDは、大量のデータ、アセット、そして複雑な相互依存を含む複雑なシーンを管理できるように設計されています。3Dシーンを整理・表現するための階層構造およびレイヤーベースのアプローチを提供し、アーティストやテクニカルディレクター間で効率的な編集、バージョニング、コラボレーションを可能にします。",[101,9028,9029],{},[120,9030,8149],{},[728,9032,9033,9039,9045],{},[212,9034,9035,9038],{},[120,9036,9037],{},"スケーラビリティ"," - USDは、複雑な相互依存を持つ大規模シーンを扱えます。アセットの整理、参照、再利用のための効率的な仕組みを提供します。",[212,9040,9041,9044],{},[120,9042,9043],{},"レイヤー化された編集"," - USDはレイヤーベースの編集アプローチに基づいており、アーティストやテクニカルディレクターは、非破壊編集、バージョニング、反復的なワークフローのために、シーンの異なる側面をそれぞれ独立して作業できます。これにより、生産性と柔軟性が高まります。",[212,9046,9047,9050],{},[120,9048,9049],{},"効率的なアニメーション処理"," - USDは、スケルトンおよび頂点アニメーションからキーフレームアニメーション、ブレンドシェイプ（モーフターゲット）、リギング情報までのアニメーションデータを効率よく管理します。複雑なキャラクターアニメーションやリギングのワークフローに適しています。",[101,9052,9053],{},[120,9054,8169],{},[728,9056,9057,9063,9069],{},[212,9058,9059,9062],{},[120,9060,9061],{},"学習コスト"," - USDは高度な機能やレイヤー構造のアプローチを備えているため、他のファイル形式よりも習得に時間がかかる可能性があります。",[212,9064,9065,9068],{},[120,9066,9067],{},"ツールサポート"," - USDは広く普及してきていますが、ネイティブ対応しているソフトウェアがすべてではありません。Blenderは不可視オブジェクト、USDレイヤー、バリアント、スケルトンアニメーションをサポートしていません。",[212,9070,9071,9074],{},[120,9072,9073],{},"ファイルサイズ"," - シーンの複雑さや保存するデータ量によっては、USDファイルが大きくなりがちです。大規模プロジェクトに取り組む場合、特にファイル転送や保存に関する要件へ影響する可能性があります。",[826,9076,9078],{"id":9077},"stanford-ply","Stanford PLY",[101,9080,9081],{},"Stanford PLYファイル形式は、Stanford大学で開発された、3Dジオメトリを表現するための柔軟で広くサポートされている形式です。頂点、面、辺、法線、色、テクスチャ座標、その他の属性など、3Dモデルに関する情報を保存できます。PLYファイルは、多角形メッシュとポイントクラウドの両方を表現するのに使用できます。",[101,9083,9084],{},[120,9085,8149],{},[728,9087,9088,9094,9100],{},[212,9089,9090,9093],{},[120,9091,9092],{},"柔軟性"," - Stanford PLY形式は柔軟性があり、多種多様なジオメトリデータに対応しています。頂点座標、多角形フェース、法線、色などのほか、さまざまな属性を保存できるため、3Dジオメトリの表現に幅広く対応できます。",[212,9095,9096,9099],{},[120,9097,9098],{},"幅広いサポート"," - PLYファイルは、コンピュータグラフィックスのコミュニティにおいて、さまざまなソフトウェアやライブラリで広くサポートされるようになっています。",[212,9101,9102,9105],{},[120,9103,9104],{},"シンプルなファイル構造"," - PLYファイル形式は比較的シンプルでわかりやすい構造のため、プログラムでの読み書き、解析を行いやすく、スケールして運用しやすいです。",[101,9107,9108],{},[120,9109,8169],{},[728,9111,9112,9118,9124],{},[212,9113,9114,9117],{},[120,9115,9116],{},"アニメーションの制限"," - Stanford PLY形式は主に静的なジオメトリデータ向けに設計されており、スケルトンアニメーション、リギング、キーフレームアニメーションのようなアニメーション特化の機能には対応していません。",[212,9119,9120,9123],{},[120,9121,9122],{},"標準化の欠如"," - PLY形式自体は適切に定義されていますが、基本となるジオメトリ以外の追加属性に関しては普遍的な標準がありません。この標準化の欠如は、互換性の問題につながる可能性があります。",[212,9125,9126,9129],{},[120,9127,9128],{},"大きなファイルサイズ"," - ジオメトリの複雑さや詳細度によって、PLYファイルが大きくなりがちです。",[826,9131,9133],{"id":9132},"x3d-extensible-3d","X3D Extensible 3D",[101,9135,9136],{},"X3D（Extensible 3D）ファイル形式は、3Dコンピュータグラフィックスとアニメーションを表現し、交換するためのオープン標準です。VRML形式の機能を土台に、アニメーション、可視化、バーチャルリアリティ、拡張現実など幅広い用途に対応しています。",[101,9138,9139],{},[120,9140,8149],{},[728,9142,9143],{},[212,9144,9145,9148],{},[120,9146,9147],{},"豊富なアニメーション機能"," - X3Dは、さまざまなアニメーション手法を広くサポートしており、異なる種類の動きやトランスフォームによって複雑でダイナミックなアニメーションを作成できます。現実世界の物理のような動的システムをシミュレートするための機能も含まれています。",[101,9150,9151],{},[120,9152,8169],{},[728,9154,9155,9161],{},[212,9156,9157,9160],{},[120,9158,9159],{},"複雑さ"," - X3Dファイルは、他の形式と比べてより複雑で、機能の豊富さと柔軟性に加えて、それらを習得するための時間と労力が必要なため、閲覧・編集には特定のソフトウェアが必要になります。",[212,9162,9163,9166],{},[120,9164,9165],{},"採用の広がりが限定的"," - オープン標準である一方、他の形式に比べるとX3Dの普及度は高くありません。",[826,9168,9170],{"id":9169},"movies-and-pictures-mp4-png-jpg","動画・画像（.mp4、.png、.jpg）",[101,9172,9173],{},"シーンからプレビュー用ファイルを生成する必要があるかもしれません。プレビューは効率的な共同作業に欠かせません。これにより、スーパーバイザーやディレクターがフィードバックを返せます。おかげで、どこからでもよりスムーズに反復作業ができます。",[101,9175,9176],{},"次回の記事では、Blenderで画像やアニメーションをレンダリングする方法についてお話しします。",[826,9178,9180],{"id":9179},"other-file-formats","その他のファイル形式",[101,9182,9183],{},"Blenderは他にも2つのファイル形式を提案しています。",[728,9185,9186,9192],{},[212,9187,9188,9191],{},[120,9189,9190],{},"STL","（STereoLithography）—3Dプリント用",[212,9193,9194,9195,9198,9199,9202],{},"SVGまたはPDFファイルから",[120,9196,9197],{},"2Dアニメーション","を作成し、3D要素と組み合わせられる",[120,9200,9201],{},"Grease Pencil","ファイル形式",[131,9204,9206],{"id":9205},"using-kitsu-to-streamline-preview-exports","Kitsuを使ってプレビュ―のエクスポートを効率化する",[101,9208,9209],{},"管理すべきアセットが何百もあるアニメーション制作では、プレビューをエクスポートするのは簡単な作業ではありません。アセット／アニメーションを1つずつエクスポートする代わりに、Kitsu Publisherを使えば、好きなDCCツールから離れることなく（Blender、Unreal Engine 5、またはHarmonyなど）、協働作業のためのプレビューを自動で共有できます。",[101,9211,9212,9213,9216],{},"Kitsuは、アニメーションスタジオが制作の進捗を共有し、納品物を検証するためのコラボレーションプラットフォームです。Kitsu Publisherはデスクトップアプリケーションで、DCCツールとKitsuを接続し、エクスポートプレビューをKitsuのワークスペースへ自動で送信します。必要なのは、Kitsu Publisherをインストールし、数分でBlenderのプラグインとして追加するだけです。使用しているOSに応じて、",[142,9214,9215],{"href":7960},"公式ドキュメントを読んで詳細な手順を確認","できます。",[101,9218,9219],{},"単にプレビューを共有してフィードバックを集めたいだけなら、エクスポート作業そのものをスキップできるだけでなく、制作のためにエクスポートが必要なアセットや、チームメイトのニーズに応じてエクスポート作業の優先順位をどう付けるべきかを把握するための貴重なコミュニケーションツールにもなります。無駄な行き来や終わりのない会議はもう不要です！",[101,9221,9222],{},"さらに、APIを通じて、あらゆる種類のエクスポートファイルのファイルパスを作成するためのヘルパーも提供しています。",[101,9224,9225,9226,9229],{},"そして最後に、Blenderには",[142,9227,9228],{"href":8653},"公式のKitsuプラグイン","もあります。これにより、Blenderの内部からKitsuと連携でき、スナップショットやサムネイルのエクスポートのような機能も利用できます。",[131,9231,1349],{"id":1346},[101,9233,9234],{},"結論として、Blenderでのエクスポートは3Dアセットを共有するためのわかりやすい手順ですが、用意されているオプションやファイル形式の選択肢が多く、初心者にとっては圧倒されてしまうかもしれません。エクスポートのワークフローを簡単にするには、要件を満たす最もシンプルな選択肢から始めるのが得策です。Blenderはさまざまな用途に対応する多くのファイル形式をサポートしていますが、エクスポート形式を選ぶ際には、想定する用途、他ソフトウェアとの互換性、そしてプロジェクト固有の要件を必ず考慮することが重要です。",[101,9236,9237,9240,9247],{},[439,9238,9239],{},"共同で作業するチームにとって、アセットを共有するための手動エクスポートは時間も手間もかかりがちです。Kitsuは、Blenderからチームメンバーに向けてアセットを直接保存・共有するための自動化されたソリューションを提供します。 ",[142,9241,9244],{"href":9242,"rel":9243},"https://account.cg-wire.com/signup/?ref=blog.cg-wire.com",[592],[439,9245,9246],{},"今すぐ無料で試してみてください",[439,9248,9249],{},"、始めるまでにかかるのは数分だけです！",{"title":235,"searchDepth":607,"depth":607,"links":9251},[9252,9253,9265,9266],{"id":8705,"depth":607,"text":8706},{"id":8765,"depth":607,"text":8766,"children":9254},[9255,9256,9257,9258,9259,9260,9261,9262,9263,9264],{"id":8772,"depth":1410,"text":8773},{"id":8830,"depth":1410,"text":8831},{"id":8879,"depth":1410,"text":8880},{"id":8928,"depth":1410,"text":8929},{"id":8977,"depth":1410,"text":8978},{"id":9022,"depth":1410,"text":9023},{"id":9077,"depth":1410,"text":9078},{"id":9132,"depth":1410,"text":9133},{"id":9169,"depth":1410,"text":9170},{"id":9179,"depth":1410,"text":9180},{"id":9205,"depth":607,"text":9206},{"id":1346,"depth":607,"text":1349},"https://blog.cg-wire.com/content/images/2023/07/pasted-image-0-1.png",{"updated_at":9269,"幸いなことに、Blenderにはいくつかのエクスポートオプションがあります。この記事では、それぞれの選択肢と、アニメーションの制作パイプラインの中で最適に活用できるタイミングを解説します。最後に、エクスポート作業をより効率化するために、私たちのオープンソースの制作管理ソフトウェアであるKitsuの使い方についてお話しします。\" featured_at":621,"visibility":622},"2026-03-26T09:44:02.000+01:00","/blog-i18n/ja/getting-started-with-export-in-blender","2023-07-31T11:40:41.000+02:00",{"title":8692,"description":8699},"getting-started-with-export-in-blender","blog-i18n/ja/getting-started-with-export-in-blender/index",[9276],{"id":635,"name":6,"slug":10,"description":7,"feature_image":7,"visibility":622,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":636},"1dD1wCiZlBOh_I-emZLXCuxBvpSDuKqhYuzowJLJpKw",[9279,9282,9285,9288,9291,9294,9297],{"id":5,"title":6,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":10,"meta":9280,"navigation":12,"pageType":13,"path":14,"seo":9281,"slug":10,"stem":16,"__hash__":17},{"name":6},{},{"id":23,"title":24,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":24,"meta":9283,"navigation":12,"pageType":13,"path":26,"seo":9284,"slug":24,"stem":28,"__hash__":29},{"name":24},{},{"id":31,"title":32,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":32,"meta":9286,"navigation":12,"pageType":13,"path":34,"seo":9287,"slug":32,"stem":36,"__hash__":37},{"name":32},{},{"id":39,"title":40,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":40,"meta":9289,"navigation":12,"pageType":13,"path":42,"seo":9290,"slug":40,"stem":44,"__hash__":45},{"name":40},{},{"id":47,"title":48,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":48,"meta":9292,"navigation":12,"pageType":13,"path":50,"seo":9293,"slug":48,"stem":52,"__hash__":53},{"name":48},{},{"id":55,"title":56,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":56,"meta":9295,"navigation":12,"pageType":13,"path":58,"seo":9296,"slug":56,"stem":60,"__hash__":61},{"name":56},{},{"id":63,"title":64,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":64,"meta":9298,"navigation":12,"pageType":13,"path":66,"seo":9299,"slug":64,"stem":68,"__hash__":69},{"name":64},{},[9301,9304,9307,9310,9313,9316,9319],{"id":5,"title":6,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":10,"meta":9302,"navigation":12,"pageType":13,"path":14,"seo":9303,"slug":10,"stem":16,"__hash__":17},{"name":6},{},{"id":23,"title":24,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":24,"meta":9305,"navigation":12,"pageType":13,"path":26,"seo":9306,"slug":24,"stem":28,"__hash__":29},{"name":24},{},{"id":31,"title":32,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":32,"meta":9308,"navigation":12,"pageType":13,"path":34,"seo":9309,"slug":32,"stem":36,"__hash__":37},{"name":32},{},{"id":39,"title":40,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":40,"meta":9311,"navigation":12,"pageType":13,"path":42,"seo":9312,"slug":40,"stem":44,"__hash__":45},{"name":40},{},{"id":47,"title":48,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":48,"meta":9314,"navigation":12,"pageType":13,"path":50,"seo":9315,"slug":48,"stem":52,"__hash__":53},{"name":48},{},{"id":55,"title":56,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":56,"meta":9317,"navigation":12,"pageType":13,"path":58,"seo":9318,"slug":56,"stem":60,"__hash__":61},{"name":56},{},{"id":63,"title":64,"body":7,"description":7,"extension":8,"lang":9,"localizedSlug":64,"meta":9320,"navigation":12,"pageType":13,"path":66,"seo":9321,"slug":64,"stem":68,"__hash__":69},{"name":64},{},1776340307691]