頂点カラーをランダムに付与するBlenderスクリプト

前のライフル作る時に思いついて、Chat-GPTで作ったスクリプト。

ZBrushでもできる機能なんだけど、個別のメッシュごとに頂点カラーをランダムに割り当てる処理。
ハイポリでこれをやっておき、SubstancePainterとかでベイクする際に、頂点カラーをカラーIDマップとしてベイクしておけば、素材違いのレイヤごとにカラーマスクを指定できるわけ。
マスク処理に便利なはず。

使い方は簡単。新規スクリプトで↑をコピペし、対象メッシュを複数選択して実行。ランダムな色が気に入らなければ再実行。部分的に同じ色にしたい場合はメッシュを結合して行えばいい。

import bpy
import random

def assign_random_vertex_colors(obj):
    mesh = obj.data
    if not mesh.vertex_colors:
        mesh.vertex_colors.new()

    color_layer = mesh.vertex_colors.active
    r, g, b = [random.random() for _ in range(3)]  # Generate a single random color

    for poly in mesh.polygons:
        for loop_index in poly.loop_indices:
            color_layer.data[loop_index].color = r, g, b, 1.0  # Set alpha to 1.0

for obj in bpy.context.selected_objects:
    if obj.type == 'MESH':
        assign_random_vertex_colors(obj)

色を確認したい場合はこの表示設定で。

ライフル制作6

アニメーション作ってますねえ。
右手が本体に追従したり、交換したマガジンも本体に追従するのはボーンコンストレイントのチャイルドを使ってます。レンダリングは全てEeveeです。

①射撃モードを変えるレバー(反対側にもあり)
②マガジンを出すボタン(反対側にもあり)
 電気制御でマガジンの固定が外れ自重で落ちる仕組み。
 誤操作しそうなのでガードする部品付けたほうがいいかも。
③ボルトリリースレバー
④②の予備的なマガジンを出せるようにするボタン
⑤何か接続できる拡張ポート。
⑥コッキングレバー
 青いのが外側を向くことでロックが外れて動かせる。