Skip to content

Instantly share code, notes, and snippets.

Avatar

Tai Komatsu taikomatsu

View GitHub Profile
@taikomatsu
taikomatsu / auto_render_name.tcl
Last active Oct 22, 2020
Auto filename from current scene for write node
View auto_render_name.tcl
# NukeでWrite.fileによく使うエクスプレッション
# 作業中のスクリプトが C:/work/nuke/nuke_test_v01.nk だった場合、
# 以下のExpressionをWrite.fileに記述しておくことで、
# C:/work/nuke/render/nuke_test_v01/nuke_test_v01.####.tif に出力される。
# [lindex [split [lindex [split [knob [topnode].file] .] 0] /] end] の部分で
# 現在のnukeスクリプトの名前を取得しているのでファイル名やパスが変わっても自動で出力可能。
# 毎回記述を忘れるのでメモまで。
[file dirname [value root.name]]/render/[lindex [split [lindex [split [value root.name] .] 0] /] end]/[lindex [split [lindex [split [value root.name] .] 0] /] end].%04d.tif
@taikomatsu
taikomatsu / read_acv.py
Last active Sep 13, 2020
Read .acv(binary tone curve file) to convert to Nuke (wip)
View read_acv.py
# AEの.acvファイルをNukeに持っていく用にリサーチ
# 冒頭4バイトはヘッダ?処理に必要そうなものではなかったので一旦無視
# その後はマスター, R, G, B, Aと全5チャンネル分の情報が、
# 制御点の個数, (制御点の位置(x), 制御点の値(y)) x 個数分 という感じで全チャンネル分記載されていた
### 注意 ###
# Jupyterで書いてたためPython3.xなのでそのままだとDCCでは使えないかもしれない、、
filepath = 'C:/users/hoge/curve.acv'
with open(filepath, 'rb') as f:
@taikomatsu
taikomatsu / convert_acv_to_nuke.py
Last active Sep 13, 2020
Convert .acv exported from AE to ColorLookup in Nuke.
View convert_acv_to_nuke.py
# import acv
import struct
filepath = 'C:/users/hoge/curve.acv'
luts = []
with open(filepath, 'rb') as f:
header = f.read(4)
for i in range(len('mrgba')):
ncvs = struct.unpack('>BB', f.read(2))[1]
ipairs = [struct.unpack('>BBBB', f.read(4))[1::2] for k in range(ncvs)]
pairs = [(ix/255., iy/255.) for iy, ix in ipairs]
@taikomatsu
taikomatsu / assign_mat.py
Created Jun 12, 2020
Assign a material to selected objects in Blender
View assign_mat.py
# reference:
# https://blender.stackexchange.com/questions/23433/how-to-assign-a-new-material-to-an-object-in-the-scene-from-python
import bpy
mat = bpy.data.materials.get('my_material')
for o in bpy.context.selected_objects:
if o.data.materials:
ob.data.materials[0] = mat
else:
o.data.materials.append(mat)
@taikomatsu
taikomatsu / createRSVolume.py
Last active May 6, 2020
Convert Maya Fluid into vdb and render with Redshift
View createRSVolume.py
# 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 / pyside2_test.py
Created Apr 10, 2017
H16 PySide2 easy example
View pyside2_test.py
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')
View carve_each_curves.vfl
// carveする値。ここにバラバラの値を入れればバラバラにcarveも可能。
float carve = fit(f@Frame, 1, 24, 1, 0);
int pts[] = primpoints(0, i@primnum);
// carve後のcurveのポイントを保持する配列
int newpts[] = {};
foreach (int pt; pts) {
float u = point(0, "curveu", pt);
// carveの向きはここの条件やcarveの変化を変えればOK
if (u<carve)
removepoint(0, pt);
@taikomatsu
taikomatsu / evaluate_tcl_expression.py
Last active Aug 6, 2019
Evaluate Tcl Expression
View evaluate_tcl_expression.py
# ReadのfileでTcl書式のExpressionが使われていた場合に
# パスを展開して取り出す方法
import nuke
reads = [o for o in nuke.selectedNodes() if o.Class() == 'Read']
for o in reads:
filepath = o.knob('file').getValue()
print nuke.tcl('subst', filepath)
View convert_hdri_to_png.py
import os
import os.path
import imageio
import numpy as np
from PIL import Image
# .hdrや.exrなど、読み込む際にfreeimageを使う必要があるフォーマット用にfreeimageをダウンロードしてくれるらしい
imageio.plugins.freeimage.download()
def list_hdri(dirname):
@taikomatsu
taikomatsu / display_hdr_qt.py
Created May 29, 2019
Display hdr using PySide2
View display_hdr_qt.py
from PySide2 import QtWidgets, QtGui
from PySide2 import QtCore
import sys
import imageio
import numpy as np
from PIL import Image, ImageQt
imgpath = 'myhdri.hdr'
imageio.plugins.freeimage.download()
img = imageio.imread(imgpath)
You can’t perform that action at this time.