5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

完走賞を目指す @xrxoxcxoxAdvent Calendar 2022

Day 24

Blenderでの3灯照明をざっくり簡略化する

Last updated at Posted at 2022-12-23

この記事の概要

私はBlenderを使って3DCGの練習をしています。
3DCGってモデリングに目が行きがちですが、ライティングも大事で、その中でも3灯照明は王道のセッティングなのでだいたい毎回使用しています。

そんな中、毎回繰り返し作業が発生していたのでPythonで効率化できる気がして記事にしました。

もしかしたら役立つかもしれないけど、正直そこまで期待はできない。くらいの内容です。

3灯照明とは

あえて私が説明するまでもなく、世の中に分かりやすい記事がたくさん上がっているので詳細な説明はそちらにお任せします。

今回効率化できる気がしたのが、設定が以下のように意外とシステマチックにできるからです。
それぞれの角度が90度ずつくらい違って3灯を配置するので、計算で出せそうだなと思いました。

もちろん実際には見え方を考慮して少しずつズラしますし、ここまで単純な話ではありません。
ただ、雛形を一発で作れるだけでも便利なのではないか?という仮説です。

実行

Blender上でPythonを動かす方法は他の方が詳しく記事を書かれているので、そちらをどうぞ。

今回の一旦の完成形は以下です。

import bpy

current = bpy.context.view_layer.objects.active #1
key_light = bpy.data.objects[current.name] #1

target_name = 'Target_Empty' #2
empty = bpy.data.objects.new(name=target_name, object_data=None) #2
bpy.context.collection.objects.link(empty) #2

key_light.select_set(True) #1
bpy.ops.object.constraint_add(type='TRACK_TO')
bpy.context.object.constraints['Track To'].target = bpy.data.objects[target_name] #2

x = key_light.location.x
y = key_light.location.y
z = key_light.location.z

bpy.ops.object.duplicate_move(TRANSFORM_OT_translate={'value':(-2*x, -2*y, z)}) #3
bpy.ops.object.duplicate_move(TRANSFORM_OT_translate={'value':(x-y, x+y, -1.5*z)}) #3

迷い迷い書いたのでもっと良くできるのかもしれませんが、ポイントになりそうな箇所をピックアップします。

1. key_lightの取得とselect_set

最初はLightを選択しておけばいいのですが、後からEmptyを操作する都合でselectが奪われます。
そのため、あらかじめLightを取得しておいて後から再度選択状態を取り戻しました。

これができなくて、Lightを複製したいのにEmptyが複製されてずっと困っていました。

2. 名前付きEmptyの作成とTrack to対象への設定

素直な方法であろうbpy.ops.object.empty_add()だと、生成される要素の名前がEmptyです。
それはそれで良いのですが、既に場に同名の要素があった場合はEmpty.001になります。
というわけでユニークな名前を指定しておいた方が楽そうだなと思ってこのようにしました。

偉そうに言っていますがここを見ただけです。

3. 座標を頑張って計算する

90度回転と180度回転なので、xとyの加減だけで出せます。
ちなみにzもだいたいいつもこんな感じで高さをいじるので、ついでに設定しました。

最後に

挙動としてはこのようになります。

一応目論見通りの動きにはなりました。
まったく同じことをしたい人は少ないと思いますが、この手の「半ばプリセット化している」ような作業へのアプローチとしては使えるかもしれません。


最後まで読んでくださってありがとうございます!
Twitterでも情報を発信しているので、良かったらフォローお願いします!

Devトークでのお話してくださる方も募集中です!

5
2
2

Register as a new user and use Qiita more conveniently

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?