身内の宣伝コーナー

 

フルオーダーから既製デザイン柔軟に対応!

袴ロンパースの製作販売してます!レンタルもやってます!

大口注文やレンタルのサブスクなど相談ください!

  

  

よかったら見てみてね

 

 

 

ココから本題 

まず、SheepItとはというところから改めて

 

 

ChatGPTに聞いてみました:SheepItについて教えて! 

 

SheepItは、ユーザーがコンピュータのリソースを共有して分散型レンダリングを行うことができるクラウドレンダリングサービスです。このサービスは、特にBlenderのような3Dレンダリングソフトウェアのユーザーに人気があります。以下はSheepItの主要な特徴と機能についての概要です:

概要
主な特徴と機能
分散型レンダリング:

SheepItは、レンダリングタスクを小さな部分に分割し、複数のユーザーのコンピュータで並行して処理します。これにより、単一のマシンでは非常に時間がかかるレンダリングタスクを迅速に完了することができます。
ポイントシステム:

ユーザーは自分のコンピュータリソースを提供することでポイントを獲得し、そのポイントを使って自分のプロジェクトをレンダリングすることができます。ポイントの獲得は、他のユーザーのためにレンダリングタスクを実行することで行われます。
クロスプラットフォーム対応:

SheepItはWindows、Mac、Linuxなど、様々なプラットフォームで動作します。
ユーザーフレンドリー:

シンプルで使いやすいインターフェースが提供されており、初心者でも簡単に始めることができます。
コミュニティベース:

ユーザーコミュニティが活発で、互いに助け合いながらレンダリングタスクを効率的に進めることができます。
利用方法
アカウント作成:

SheepItの公式ウェブサイトで無料のアカウントを作成します。
レンダリングタスクのアップロード:

自分の3Dプロジェクトをアップロードし、レンダリング設定を行います。
リソースの共有:

自分のコンピュータで他のユーザーのレンダリングタスクを処理することでポイントを獲得します。
レンダリング結果の受け取り:

自分のプロジェクトのレンダリングが完了すると、結果をダウンロードできます。
メリットとデメリット
メリット:

コスト効率が良い:自分のコンピュータリソースを提供することで無料でレンダリングが可能。
高速なレンダリング:分散型のため、レンダリング時間が大幅に短縮されます。
デメリット:

インターネット接続が必要:常にオンラインであることが求められます。
プロジェクトのプライバシー:他のユーザーのコンピュータでプロジェクトが処理されるため、プライバシーに対する懸念があるかもしれません。
シンプルな始め方とコスト効率の良さから、多くの3Dアーティストやデザイナーに利用されています。もし具体的な利用方法や設定についてさらに詳しく知りたい場合は、教えてください。

 

という感じ

デメリットの部分をどう考えるか、さえクリアできれば利用価値は高いです 

デメリットにある、常時オンライであること、見ようと思えば人のファイルを見れてしまうということ

 

これらについては気持ちの問題が強い部分かなとも思います

私はそこまですごいファイルを扱っているわけではないので全く気にしていません

 

こうしている今も繋いでいます

 

気づけばTop5%に入ってしまっている…

お陰様で自分のファイルを出したときにはかなり早く処理が終わります

 

このSheepItという仕組みはblenderを利用する人にとっての小さな救世主(人によっては大きな救世主ですが)だと思っています

貢献活動と思って繋げられるときは繋いでいます

 

上を見るとさらにすごく、一人でGPU2,30個つながっているようなアカウントもあります

もはや業務用サーバークラスですね

 

 

これを書いているときのSheepItのステータスです

 

 

処理対象フレームが44275

稼働ファイル数が86

接続されているアカウント数が602

リアルタイムで処理中が578フレーム

というような状態です

 

ここに出されているフレーム数がいかに多いかが分かりますね

この中の接続されているアカウント数が常時5000人とかになるといいのになぁとか思っています

 

関連URLのご紹介です

 

SheepIt:

 

 

使い方:Tutorial

 

 

 

 

 

GPUを持て余している方はぜひに繋いで社会貢献していきましょう(笑)

 

前段が長くなりました

 

 

SheepItの静止画作成へのアプローチについて 

すでにやられている人からしたら当たり前な内容になります

 

私は数多の中で勝手に

 

SheepItは動画を作るためのもの

 

と最初に思ってしまっていたのですが、これは間違いですね

というのも動画も言うなれば画像の集合体でしか無いですからね

 

話は簡単で、文字で書くと

 

1フレームごとに撮りたい画角でキーフレームを打っていき、それをSheepItに渡す

 

というもの

 

アニメーションの際には1フレームでカメラ位置をあっち行ってこっち行ってとやってしまうと見れたものではないのですが

今回の目的は静止画ですので、別に関係ありません

 

関係していくるもの

カメラの位置

カメラの回転

カメラの焦点距離

カメラの被写界深度

 

あたりかと思われます

これを一個にまとめられたら良いのですが…

 

今度アドオン作成してみますかね…

気になったのでChatGPTと作ってみました

 

import bpy

def update_track_object(self, context):
    active_camera = context.active_object if context.active_object and context.active_object.type == 'CAMERA' else None
    if active_camera:
        camera_settings = context.scene.camera_settings
        track_object = camera_settings.track_object

        # 'TRACK_TO' 制約が既に存在するかを確認
        constraint = next((c for c in active_camera.constraints if c.type == 'TRACK_TO'), None)
        if track_object:
            if not constraint:
                constraint = active_camera.constraints.new(type='TRACK_TO')
            if constraint.target != track_object:
                constraint.target = track_object
                constraint.track_axis = 'TRACK_NEGATIVE_Z'
                constraint.up_axis = 'UP_Y'
        elif constraint:
            # トラッキング対象が設定されていない場合は制約を削除
            active_camera.constraints.remove(constraint)

class CameraSettingsProperties(bpy.types.PropertyGroup):
    """カメラ設定パネルのプロパティ"""
    track_object: bpy.props.PointerProperty(
        name="Track Object",
        type=bpy.types.Object,
        description="カメラがトラッキングするオブジェクト",
        update=update_track_object
    )

class CameraSettingsPanel(bpy.types.Panel):
    """サイドバーにパネルを作成"""
    bl_label = "Camera Settings"
    bl_idname = "VIEW3D_PT_camera_settings"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = 'Camera Tools'

    def draw(self, context):
        layout = self.layout
        scene = context.scene
        camera_settings = scene.camera_settings
        active_camera = context.active_object if context.active_object and context.active_object.type == 'CAMERA' else None

        if active_camera:
            camera_data = active_camera.data

            # トランスフォーム
            col = layout.column(align=True)
            col.prop(active_camera, "location", text="Position")
            col.prop(active_camera, "rotation_euler", text="Rotation")
            col.operator("camera_tools.keyframe_location_rotation", text="Keyframe Position & Rotation")

            # カメラプロパティ
            col = layout.column(align=True)
            col.prop(camera_data, "lens", text="Focal Length")
            col.prop(camera_data, "sensor_width", text="Sensor Size")  # sensor_width をセンサーサイズに使用
            col.operator("camera_tools.keyframe_lens_sensor", text="Keyframe Lens & Sensor")

            # 深度・焦点距離のコントロール
            col = layout.column(align=True)
            col.prop(camera_data.dof, "use_dof", text="Depth of Field ON/OFF")
            if camera_data.dof.use_dof:
                col.prop(camera_data.dof, "focus_object", text="Focus Object")
                col.prop(camera_data.dof, "focus_distance", text="Focus Distance")
                col.prop(camera_data.dof, "aperture_fstop", text="F-stop")
                col.operator("camera_tools.keyframe_dof", text="Keyframe DoF Settings")
            else:
                layout.label(text="DOF is disabled", icon='CANCEL')

            # オブジェクトトラッキング
            col = layout.column(align=True)
            col.prop(camera_settings, "track_object", text="Track Object")
            if not camera_settings.track_object:
                layout.label(text="Track Object is not set. Please select an object to track.", icon='WARNING')

        else:
            layout.label(text="No active camera selected", icon='ERROR')

class KeyframeLocationRotationOperator(bpy.types.Operator):
    """カメラの位置と回転にキーフレームを追加"""
    bl_idname = "camera_tools.keyframe_location_rotation"
    bl_label = "Keyframe Position & Rotation"

    def execute(self, context):
        active_camera = context.active_object
        if active_camera and active_camera.type == 'CAMERA':
            active_camera.keyframe_insert(data_path="location")
            active_camera.keyframe_insert(data_path="rotation_euler")
            self.report({'INFO'}, "キーフレームが追加されました (位置 & 回転)")
        else:
            self.report({'WARNING'}, "カメラが選択されていません")
        return {'FINISHED'}

class KeyframeLensSensorOperator(bpy.types.Operator):
    """カメラのレンズとセンサーサイズにキーフレームを追加"""
    bl_idname = "camera_tools.keyframe_lens_sensor"
    bl_label = "Keyframe Lens & Sensor"

    def execute(self, context):
        active_camera = context.active_object
        if active_camera and active_camera.type == 'CAMERA':
            camera_data = active_camera.data
            camera_data.keyframe_insert(data_path="lens")
            camera_data.keyframe_insert(data_path="sensor_width")
            self.report({'INFO'}, "キーフレームが追加されました (レンズ & センサー)")
        else:
            self.report({'WARNING'}, "カメラが選択されていません")
        return {'FINISHED'}

class KeyframeDofSettingsOperator(bpy.types.Operator):
    """カメラの深度・焦点距離設定にキーフレームを追加"""
    bl_idname = "camera_tools.keyframe_dof"
    bl_label = "Keyframe DoF Settings"

    def execute(self, context):
        active_camera = context.active_object
        if active_camera and active_camera.type == 'CAMERA':
            camera_data = active_camera.data
            if camera_data.dof.use_dof:
                camera_data.dof.keyframe_insert(data_path="focus_distance")
                camera_data.dof.keyframe_insert(data_path="aperture_fstop")
                self.report({'INFO'}, "キーフレームが追加されました (深度・焦点距離設定)")
            else:
                self.report({'WARNING'}, "深度・焦点距離が有効になっていません")
        else:
            self.report({'WARNING'}, "カメラが選択されていません")
        return {'FINISHED'}

def register():
    bpy.utils.register_class(CameraSettingsProperties)
    bpy.types.Scene.camera_settings = bpy.props.PointerProperty(type=CameraSettingsProperties)
    bpy.utils.register_class(CameraSettingsPanel)
    bpy.utils.register_class(KeyframeLocationRotationOperator)
    bpy.utils.register_class(KeyframeLensSensorOperator)
    bpy.utils.register_class(KeyframeDofSettingsOperator)

def unregister():
    bpy.utils.unregister_class(CameraSettingsProperties)
    del bpy.types.Scene.camera_settings
    bpy.utils.unregister_class(CameraSettingsPanel)
    bpy.utils.unregister_class(KeyframeLocationRotationOperator)
    bpy.utils.unregister_class(KeyframeLensSensorOperator)
    bpy.utils.unregister_class(KeyframeDofSettingsOperator)

if __name__ == "__main__":
    register()

 

これをスクリプトにコピペするとCamera toolというパネルが発生してくれて、適宜キーフレームを打てるようなものができました

 

静止画量産には良いかもしれない?

 

Track toのコンストレイントも追加できるようにしました(笑)

すごいぞChatGPT

 

さて話をもどして

 

 

blenderでどういうファイルを用意するか 

 

 

 

こんな感じで1フレームごとにカメラの位置などのキーフレームを打っていきます

 

これで、SheepItにアップロードして、設定したフレーム範囲を指定してやるといいのです

 

一旦作業を投げたらマイページで確認することができます

 

誰かが着手してくれるとその通りに進捗が適宜変わります

 

これを駆使すると、家ではGPU込みのPCを動かしておいて外でしょぼいノートPCで作業してレンダリングはSheepItで、というような運用も可能です。

 

レンダリングが終わっていくと画像を見ることも、1フレーム単位でダウンロードも可能です。

 

 

 

 

作業が終わったら全部をまとめてZIPでダウンロードできるようになります

 

 

このようにすることで、静止画で、少ないフレーム数・ポイント数でレンダリングを行うことができます

 

個人的にとても気に入った手法ですので良かったら参考にしていただけますと幸いです

ついでながらアドオン?も作ってしまった(笑)アドオンとして形を完成させたいですね。

 

すごいぞChatGPT

 

みんなも使おうSheepIt

 

ではでは。

 

ココまで 

 

 

 

 

 

私自身の活動案内

 

    

(ココナラで出品中)

        

 

  

 

この記事の関連商品