goo blog サービス終了のお知らせ 

日々適当

hibitekitou

クソコード:シーン内の子供と親を持たないEmptyの削除

cg |2021-06-28

先日書いた読み込んだfbxファイルでマテリアルを共有するオブジェクトをjoinするスクリプト(クソ遅いw)を実行したらEmptyが大量に発生したので、これを削除するのを考えてみたのです。

import bpy

scene = bpy.context.scene
objs = bpy.data.objects

for obj in scene.objects:
    parentObj = obj.parent
    if parentObj == None and obj.type == 'EMPTY' and len( obj.children ) == 0:
        objs.remove(objs[ obj.name ], do_unlink=True)
コメント ( 0 )|Trackback ( )

クソコード:シーン内の同一マテリアルのメッシュを結合する

cg |2021-06-23
import bpy

scene = bpy.context.scene
materials = bpy.data.materials

for material in materials: 
    print("Material:", material.name)
    objsUseMat = []
    for obj in scene.objects:
        if obj.type == 'MESH':
                if len( obj.material_slots ) > 0:
                    if obj.material_slots[0].material == material:
                        objsUseMat.append( obj )
    
    if len( objsUseMat ) > 0:
        for obj in objsUseMat:
            print( obj.name )
            bpy.data.objects[ obj.name ].select_set(True)
            bpy.context.view_layer.objects.active = obj
        bpy.ops.object.join( )  
        bpy.ops.object.select_all(action='DESELECT')
コメント ( 0 )|Trackback ( )

スクリプトからシェーダノードを触ってみる

cg |2021-06-21

メモっす。読み込んだfbxファイルのマテリアルの中の接続を一括で変えたい事情ができたような気がするので、その予習というか。

import bpy

for obj in bpy.context.selected_objects:
    #mat = obj.active_material
    material_slots = obj.material_slots
    for material_slot in material_slots:
        #マテリアルスロットごとのマテリアルを取得
        material = material_slot.material
        #マテリアルのノードツリー
        nodetree = material.node_tree
        #シェーダーノード内のノードタイプの一覧
        for node in nodetree.nodes:
            print( node.type )
            #以下 Principled BSDF を探しているが、
            #inputs = material.node_tree.nodes[ "Principled BSDF" ].inputs
            #で直接取得もできる模様
            if node.type == 'BSDF_PRINCIPLED':
                inputs = node.inputs
                #Principled BSDFのベースカラーの色を設定
                inputs['Base Color'].default_value = [ 1.0, 1.0, 0.0, 1.0 ]
                #後の行程で使うために取っておく
                principledBsdfNode = node
        
        #Principled BSDFのベースカラーにテクスチャを設定
        img = bpy.data.images.load( 'テクスチャファイルへのパス', check_existing=False )      
        imgTex_node = nodetree.nodes.new('ShaderNodeTexImage')
        imgTex_node.location =  ( principledBsdfNode.location.x -300 , principledBsdfNode.location.y )
        imgTex_node.image = img
        
        nodetree.links.new( imgTex_node.outputs[ 0 ], principledBsdfNode.inputs[0] )
        
#ちなみに以下をコメントアウトすると、上でせっかく繋いだリンクを切断する  
#        link = principledBsdfNode.inputs[0].links[0]
#        if link is not None:
#            nodetree.links.remove( link )

コメント ( 0 )|Trackback ( )

Photoshopで深度マップ

cg |2021-06-16

Photoshopのフィルタにニューラルフィルターってのが追加されたのはいつだっけ。まともに使ったことがなかったのだけど、都市の空撮的な広い空間に奥行きを感じさせて欲しい、という注文が発生した時、こいつで深度マップを作成できるらしいって話を思い出しました。

もちろん、単純に奥行き方向に向けて白黒グラデマスクを作ってやって、それでそれっぽく作ることはできるだろうけど、ある程度凹凸のある都市風景ですから、それなりの深度マップを作ろうとすると結構大変なことになります。

ということで、深度ぼかしって機能がニューラルフィルターにベータ版ながら追加されました。で、実行するとそれでそれっぽい深度マップを作成できました。

上からオリジナル素材。次がニューラルフィルターで出した深度マップ。最後がそれでちょっと霧っぽくしたもの。

深度マップの生成速度もそれなりに早く、ってことは結構ぬるいマップなんだけど、それでもこれが作れるのと作れないのとでは(短時間の作業では)雲泥の差ということで、大変にありがたく思った機能でございました。

コメント ( 0 )|Trackback ( )

InstantMeshesBridge

cg |2021-06-01

Blenderの中から Instant Meshes を利用する Instant Meshes Bridge ですけど、2.8向けのものが出て以来更新されていないようですが、2.92でもとりあえず利用できています。

addon conversions for Blender 2.8[GitHub]

こちらで開発・メンテナンスされているプロジェクトであるInstant Meshesは、そこからリンクされているGitHubのページからコードやバイナリーを落とせます。単体で非常に頭のいいリトポをしてくれると昔から評判だったわけですが、Blenderからそれを利用するツールがございました。

AgisoftのMetashapeのサンプルデータをお借りして実行してみるわけです。

元々はこんなメッシュデータなわけですが、アドオンを通すといい感じにリトポされているのがわかるというものです。

いくつかパラメータがあるこのアドオンです。せっかくなので一個ずつオンにしてみましたですよ。


パラメータの意味、いまいちよくわかっておりません。

Blender内から直接触れるのが魅力とはいえ、メッシュの流れを指定可能な本家ソフト内で実行した方がいい結果が出そうではありますね。

ちなみに現環境に Instant Meshesが入っていた理由はBlenderのアドオン Fluent のClothの機能を利用するためでした。Fluentも使わんとなぁ。

コメント ( 0 )|Trackback ( )

Shrinkwrap(そりゃあるよね)

cg |2021-05-14

あってよかったShrinkwrap。

いや、このモディファイヤがあるのは知ってたし、使っていたのだけど、1軸方向に動かしてぶつかった面に固定する、って動作があったのは知らなかった。Softimageではよく使っていた機能だし、MODOではなんでそれが一発でできないの?(できるの?)って思っていたものでしてね。

Wrap MethodをProjectにするだけでございました。シンプルでした。

メモとして。

コメント ( 0 )|Trackback ( )

メモ:Free Viz Aritstを入れる。

cg |2021-05-11

<追記>以下の方法はおそらくVIz4.3以降へのアップグレードに支障をきたすので、別の方法で3.12との共存をかけるのが吉です。非推奨インストール方法ということで。もしくは、Viz 4.3のアーカイブは3.12以下と互換性があるので、Viz 3.12は捨てて、Viz 4.3のクラシックパイプラインで3.x用に作成するとかですね。</追記>

Free Viz Artist [Vizrt]

テレビやイベントで使用されるリアルタイムCGツールであるViz EngineのエディタであるViz Artistのフリー版のバージョンが4.2になってちょっと時間が経ちました。ただ世間的にはViz Artsit 3.xが幅を利かせているというか、4.xがそもそもほぼ世間に出ていない状況なので(Viz自体がそもそも世間に出ていないだろうというのはともかく)、フリー版とはいえインストールしている人は少ないかもしれません。というのも、Free Viz Artist 3.12とか入っているところに4.2のフリー版のインストーラを走らせると、インストーラはインストールを拒否するからです。だから3.xをアンインストールしてから4.2を入れるのが正しい手順となるのでしょう。

とはいえ両バージョンが使えないと困るので、一応メモとして入れ方を残しておきます。まぁ、一応起動はしているけど、正しく動いているかはわからないってレベルの話なので、やるなら自己責任で、ってことで。完全に自分用のメモです。Viz Artist 3.xのフリー版が入っている前提(つまりそのインストール方法を知っている前提)。

  1. Viz 3.xをアンインストールする
  2. Viz GHをアンインストールする(その前にグラフィックハブは止めておく)。
  3. Viz 4.2のインストーラから、Viz GH以外をインストールする。
  4. Viz 4.2がインストールされると、C:¥Program Files¥Vizrt フォルダに入るので、そのVizrtフォルダを別名に変える。例えばVizrt42とか。
  5. Viz 3.12のインストーラからViz GH以外をインストールする。そういえば、Free Viz Artistをダウンロードできるところで、3.12はまだ手に入るのだろうか?
  6. Viz 4.2のインストーラからVIz GHをインストールする。
  7. デスクトップにできているであろうViz Artist 4.2関係のショートカットのリンク先をC:¥Program Files¥Vizrtをリネームしたフォルダに変えておく。

流れとしては以上でいけるはず。
ただし、4.2用のプラグインがおそらく読み込まれていないので、今後設定を探りたい
動作環境を満たしたマシンでこれで起動しなかった場合はライセンス周りのトラブルだけど、ライセンスがきちんと取得できているならcfgが壊れていたり、ライセンスの指定がうまく行っていなかったりが原因かね。ちなみにViz 4ではライセンスの指定がうまく行っていない場合、Viz Configが起動するようで、そこでライセンスをローカルマシンで動くFree Vizのものにすればいいはず、です。

以上、メモとして。

コメント ( 0 )|Trackback ( )

MODOのライセンスをどうしようか

cg |2021-03-28

最近、MODOを起動する事がないのだけど、MODOは現在どんな感じなんだろうなって思ったのは、ライセンス更新日が迫っていることと、MODO 15がリリースされたから。

もともとモデラーとして導入したMODOなんですけどね。最近モデリングをがっつりする事がない…。でもその機能は地道に更新され続けているようで、またプロシージャルな機能も向上を続けていることは、例えばこちらのサイト(ポリゴノート)を見ていると想像できます。

さーて、どうしたもんか。まぁ、以前のAutodeskのECSU、e-on softwareのVue、THE FOUNDRYのMODOを併行して契約していた頃に比べりゃ、前二つの更新を切った現在、MODOぐらいは続けておくべきですかね。一旦やめると再契約の金額が3万円強ほど高くなるし。

ちなみにMODOさんは正式にBig Surに対応しています。M1 Macについては動作テスト中って書いてあるけど、まだRosetta 2での動作チェックってところだろうなぁ…
そういえば、Maya 2022も先週発表されましたが、System Requirements for Autodesk Maya 2022 に書かれているとおり、こちらもBig Surに対応しているようです。また、Rosetta 2環境下での動作もサポートされていると明言されてますな(去年のM1 Mac発表会での動作デモで採用されたツールだけはありますか)。ただ、macOS版については、グラフィックハードウェアでのテスト項目にMetalってものが現れないと将来が不安になります(Windows環境におけるDIRECT X11のテストは行われている)。まあそれはMODOも同様なのだけど、この観点で安心感があるツールってCinema 4Dぐらいなのがなんとも…
Blenderにおいては、CyclesがMac版においてGPUに対応していないため、レンダリング速度に大きなハンディを抱えているといえます。昨年のWWDCでApple Silicon製Macに対応させるパッチをオープンソースプロジェクトに提供すると発表していて、その中にBlenderも含まれているわけですが、この辺の成果って出てきているんだろうか。(そんな観点で、Redshift3dのMac用Blender向けプラグインが出てきたら、Redshift3dを本当に導入する可能性高し。)

コメント ( 0 )|Trackback ( )

ブレンダーの基本?:ロフト

cg |2021-02-27

オブジェクトの断面をカーブで描いて、それを繋いで立体を作る。SoftimageではLoftツールになるワケですが、その機能はBlenderではなんなのかな、と。

ネットをググって調べた限りは Bridge Edge Loops を使うようです。

コマンド名から分かる通り、カーブというよりエッジにしてから(Object→Convert To Meshしてから)実行する感じ。つまりはBridgeツールなので選択したエッジ間に面をはる機能なわけで、Loftとは似た結果が得られるとしてもちょっと違うような気がする。カーブのままやる方法はあるんか?

一応念のため、手順を細かく書くと

  1. カーブを複数本引く(セグメント数は同一に)
  2. 複数本のカーブをJoinする
  3. メッシュに変換する
  4. 全エッジを選択する
  5. Bridge Edge Loopsを実行する

です。単純にエッジ間の距離を見て接続するエッジの順番を決めているみたいなので、意図通りの順番で繋ぐのは苦労すると思う。選んだカーブの順番で綿を張ってくれるLoftみたいなツールはないのですかね?

コメント ( 0 )|Trackback ( )

2021年のBlenderの計画を読んで

cg |2021-01-17

Big Blender Projects For 2021[blender.org]

こんな文章が年初にあげられていたようです。

冒頭に記されていることはかなり大変なことだと思います。プロジェクトのほとんどをノードで構築していくという計画。現在はマテリアル周り(シェーダ)で利用できるノードが大幅に拡張されるそうです。2.92では一例でGeometry Node Editorが搭載されるようになり、チュートリアル映像(Blender 2.92 Features : Geometry Nodes Tutorial ) [YouTube]では地面にPointCloudを使って石をばらまく様子が見れますけど、SoftimageのICEでやっていたことと近い感覚でできるようになるのではないかって期待が持てそうな映像でした。この能力を突き詰めていってHoudiniの足元ぐらいには達して欲しいものです(多分そのレベルでも相当使えるんじゃないかと予想)。

その他色々書かれていますが、読んでて一番ワクワクする部分はこちらでした。ってかSoftimage難民な自分としてはICEの幻影をローコストで追いかけたいというのがあるわけでw

コメント ( 0 )|Trackback ( )