Skip to content

Instantly share code, notes, and snippets.

@taikomatsu
taikomatsu / bb_submit_houdini_shelf.py
Last active September 15, 2016 15:44
Submit jobs to Backburner from Houdini shelf
# 超簡易Backburner Submitterスクリプト
# IFDを所定のフォルダに出力した後に、backburnerに投げたいROP(mantraのみ)を選んでこのツールを実行
# 各ROPのIFDの場所を読んでコマンドを生成してジョブを投げる
# 生成したコマンドやタスクファイルは、$HIP/dispatch以下に格納され、それが実行されるという流れ
# 基本的にはShelfに登録して使う想定
# priorityやserversなどはROP側に新規でparm追加して読むなどすればROP側での調整も可能だが未対応
import hou
import os
import os.path
@taikomatsu
taikomatsu / createRSVolume.py
Last active May 6, 2020 16:34
Convert Maya Fluid into vdb and render with Redshift
# Maya FluidからRedshift用のVolumeオブジェクトを作成
# Redshiftでは現状Maya Fluidが直接レンダリング出来ないので、BE_OpenVDBを使用して一旦.vdbに出力する
# その際あれこれ接続したりとか諸々面倒なので自動化
# 今回は煙が作れればOKだったのでRSVolumeにはdensityだけ設定してある。
# 位置は元のFluidに合わせてあるが、シーンの作り方によっては合わないので要調整。
# MayaFluidは一応キャッシュをとってから実行した方がより安心です。
from pymel.core import *
import os
import os.path
@taikomatsu
taikomatsu / extend_curve.vfl
Created November 28, 2016 05:35
extend curve (vex)
// curveの先端を接線(というか隣のポイントとの差分)を使って伸ばす
vector p0 = point(0, "P", 0);
vector p1 = point(0, "P", 1);
vector np0 = point(0, "P", i@numpt-1);
vector np1 = point(0, "P", i@numpt-2);
vector tan_in = normalize(p0-p1);
vector tan_out = normalize(np0 - np1);
float ext = ch("ext");
addpoint(0, p0+tan_in*ext);
@taikomatsu
taikomatsu / bakecam.py
Last active January 10, 2017 14:06
Create clone cameras for data exchanging with other DCC apps.
# Houdiniにカメラを持っていく用に、値をbakeしてシンプルなデータにするための処理を自動化。
# 一応複数対応してる感じで書いてるけど、あんまり想定してないしテストもしていないw
# filmoffsetに関して、アニメーションの再接続をしているもののこれもそのままは持っていけないので一応やってるだけ。
# bakeするレンジはtime sliderに準拠する。
from pymel.core import *
cams = []
for o in selected():
new_cam = duplicate(o, rr=True)[0]
# filecache SOPにボタンを追加して、そのボタンのCallback Scriptに登録して使う
# filecacheと同名のropにジャンプする
# ジャンプした際、対象のropは選択状態になっている
node = hou.pwd()
out_node = '/out/{}'.format(node.name())
hou.hscript('panepath -f {}'.format(out_node))
hou.node(out_node).setSelected(1)
@taikomatsu
taikomatsu / pyside2_test.py
Created April 10, 2017 10:02
H16 PySide2 easy example
import hou
from PySide2 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.construct_ui()
def construct_ui(self):
self.setWindowTitle('PySide2 Test')
@taikomatsu
taikomatsu / remove_filepath_expression.py
Created April 25, 2017 15:08
Remove expressions from file knob on all Reads in Nuke.
import nuke
import os.path
reads = nuke.allNodes('Read')
err_cnt = 0
for i, r in enumerate(reads):
raw = r.knob('file').getValue()
evaluated = r.knob('file').getEvaluatedValue()
full_path = '{}/{}'.format(os.path.dirname(evaluated), os.path.basename(raw))
try:
@taikomatsu
taikomatsu / convert_focal_aov.py
Created October 9, 2017 04:54
Convert AOV from Focal Length / Focal Length from AOV (Maya)
# Mayaで諸事情によりカメラスケール使えなかった時用に調べて書いた
# degreeとmmで計算してます
import math
def focal_to_aov(focal, aperture):
'''
focal: focal length
aperture: horizontal aperture (mm)
'''
@taikomatsu
taikomatsu / check_dynArray_value.py
Last active December 20, 2017 19:30
dynamic attributeの値をチェックする。主にSOuPやMash使ってる時用かも。
# とりあえず大急ぎで書いてる
# あれこれ書き方忘れてたので参考ページもメモ
# https://area.autodesk.jp/column/tutorial/maya_atoz/attribute_plug/
# http://ianwaters.co.uk/wp/mash/accessing-mash-point-data-with-the-maya-api/
from maya import OpenMaya
import pymel.core as pm
def mdg_from_name(name):
@taikomatsu
taikomatsu / easy_angle_difference_detection.py
Created April 13, 2018 09:12
超手抜き版エッジから正しいポジションを復元させるやーつ。任意の軸とエッジ(2点)の角度の差をdegreeでなんとなく取得する。
from pymel.core import *
import math
pt0, pt1 = selected(fl=True)
p0 = dt.Vector(xform(pt0, q=True, ws=True, t=True, a=True))
p1 = dt.Vector(xform(pt1, q=True, ws=True, t=True, a=True))
diff = p0-p1
axis = dt.Vector(0, 0, 1)
print(math.degrees(math.acos(diff.normal().dot(axis))))