Max jitterを少々

お勉強を始めました。

ランダムにポイントを打つだけ。

Processingなら何行でしょう?ここまでして覚えるに足るかは、さて、、、

----------begin_max5_patcher----------
1364.3ocyZ00aaaCE8YWf9efPnO5ZSJJQI0gBDrArG1icXaOrNXPKyXSO8En
niSaw9uOJRIGmDGY5OjjcRrhnDIO7v68xykR+38uajy77GYkNfOA9avnQ+PU
xHcYUkLpofQNozGiSnk5azIisMe9Zmw0WSxdTpK+yeF.2UZAUFuhmsblfEKM
sOIxeBbLvEgpNffP8YtSff+ooV4ajILo7aELSUb3YpJu6xkxuknuhyt9IaSJ
OSUGMzb2qTSSoKF0TLegtxJz+wPGcY+26eW0Q0gwVO9iySSYJb8JBnbU9VPJ
qrjtjAj4f37rxbEfagSBvnI3nnHBVwHAFhwKPWTjmhcf6yNGa3uabVHXkJDR
k77r86L2HcGD3OIDp9n5S8bvy5j6yyjk7uq6GjZx4vTJ7.Tp+4Sox7kKamnp
MdPD8Pv0q46qlsySjGUPSYRlXFKiN2TGn8FVdmOKrrbKWMvcaiG78c0Cceb0
ArlMvs6C4LV82Y3Do4uyiXbO.wf6.OtBgBjfTpTvezRON+PsgDNDarmB0z4U
0OqoK7a7ttZtXtmOG9VQsSxoKlSyV1FmgCBzrD19.25l7Lnzi6fg5.6nekmj
.94DZ7+1FMfvjpQdn1Cjfu.Cmy2B.A6B+neiVPyXzRF3Kr6YBVVbq9PHcXGO
Wxk6BcILQG3MHnYKxSUgW8acU6HnwS.eCnjAAQc4Bu099D+a70ci7t9VCJ3H
xAdPK3mSxV3DCNdBFCQ3qOKTnBKBfU+XgvDDNzdd3D3.7IvAWPbgZ06GPaOS
FyTKR7AD3CtfGnp+CaCcDXhTXTde8niSwj.1YgIwsJUkDbCEkL3BLJluQJyy
rQUNx5fjcm9nfNX91ny92Y+hxE3K54dKXCLznOvnZ54S7m438P5.HQCj8ciK
9Mg8MI75yB+w241QAFwAmvZeie53UgQvGhQB5pDE9qUbYqZlbUQ9HpO9jANa
ABoK1lKlDTjWEPPb7PAlTgcwCYlBD+NPPPqhgB0dBg5kC7gC1R+DXGLvORtQ
0au6fO186.kvq4xIMa1zJdoEQF8bg1GZT07yLM+ItkcH62ENufdPGT8lqMvB
g7tffeUyzEa4pvaaOtetafY8O2vcGre6XO6IR+tw9VK0yFK6F0O2LV13NHX2
Jor3SSmtc61IkeLcSIWUm4SVWLMMc8rE4wkSUsi+T03SxD0GlI2HyEbZxz0n
fYqkxMynR0XW49vlrRllXwVqY1deu.7fE+zqKxh9m9p3qYpaEjP2jEuZtHea
ISnRpd2slvyXw4aLO5A2iSTF4UHjmIiiqNQsupinmDcTUbFM0zD+ISrflQcN
gEmB6nbzZcmp7MwiCe6kjthokgIcf8yRlbAuUAmHT8lRiGX8GX+NW+A3thDZ
s6B.AtSQMp70p98tpgGHdEUXwpWlGhnaD9FIPNtKTsduJwMMaAf6Gt4MYEjq
dacCICm.1WE.1zM5Pju7U1PONptvKHmx7Mh3FbZduGFC1arrfUJ4Y5Gf4d2D
942zJ9hErrm4nufWVsG8ZzBe6YKqgkmMvJr2gE1FXQh5cbEAscZD0q3Jv0Fb
E416.iDXCvdI76CfEZMiAuAYLx.3SBet0yaX6SFFfcTFSk2VuCLeqhV.6cf4
6diBLKiuN..CeiBL6BWT8tJz2HKvp4xWh+9XtzJQOQ8uXrH6VEe.LxrZpzu+
WrzGeiBLOqbK8F.A+Dq.V+6U5Ykwue+q64UwNaQpna+hLqvk2EwX049RKJdf
IJqaZCjbRoqyEUmGL1bNOybtIaaGA6AdSULOoXGpHt5g3FK2HLoq+Hwyot14
KXhrMbcd4pRzXP80+C7az+9M
-----------end_max5_patcher-----------

 


Modo901

Modo901へアップグレード!

MeshFusionが標準で付く他は小粒な機能追加のみのようですが、MODO’s TD SDKというPython APIが追加されたのは僕にとっては大きいところです。今までもPythonを使用することはできました、lxモジュールというPythonとModoマクロ言語の橋渡しのようなAPIを介して使用する方法です(あまり覚える気が無かったのでこの表現が正しいかはわかりません。)

バージョン901からmodoモジュールが追加され、Mayaで言うPymelのような使い勝手が期待できます。

modo901ScriptEditor

内臓のスクリプトエディタを少し使ってみましたが、オートインデントが効きません。「:(コロン)」の次の改行はインデントされるのですがそれ以外では不可、Pythonを書くのにこれは不便ですね。


V-Ray Physical Camera’s Fov

Focal lengthで画角を指定したV-Ray Physical Cameraからfovを取得するテストスクリプト。

VRayCameraFOV

Mayaのカメラなら以下のようにfilmWidthとfocalLengthから計算できますが、MaxのV-Ray Cameraでは被写体までの距離が必要です。

def angleOfView(filmWidth,focalLength):
    angle = 2 * math.atan(float(filmWidth) / (2*float(focalLength)))
    angle = math.degrees(angle)
    return angle

Angle of viewの「Derivation of the angle-of-view formula」が参考になります。

import MaxPlus
import math
 
def angleOfView(filmWidth,focalLength):
    angle = 2 * math.atan(float(filmWidth) / (2*float(focalLength)))
    angle = math.degrees(angle)
    return angle
 
def angleOfViewVrayCamera(filmWidth,focalLength,distance):
	focalLengthWithMagFactor = distance * focalLength / (distance - focalLength)
	angle = angleOfView(filmWidth,focalLengthWithMagFactor)
	return angle
 
def getVRayCameraFocusDistance(node):
	objPBlock = node.Object.ParameterBlock
	distance = 0.0
	if objPBlock.targeted.Value and (not objPBlock.specify_focus.Value):
		targetNode = node.GetTarget()
		vec = targetNode.GetWorldPosition() - node.GetWorldPosition()
		distance = vec.GetLength()
	elif (not objPBlock.targeted.Value) and (not objPBlock.specify_focus.Value):
		distance = objPBlock.target_distance.Value
	elif (not objPBlock.targeted.Value) and objPBlock.specify_focus.Value:
		distance = objPBlock.focus_distance.Value
	return distance
 
def getVRayCameraFOV(node):
	objPBlock = node.Object.ParameterBlock
	fov = 0.0
	if objPBlock.specify_fov.Value == True:
		fov = objPBlock.fov.Value
	else:
		fov = angleOfViewVrayCamera(
			objPBlock.film_width.Value,
			objPBlock.focal_length.Value,
			getVRayCameraFocusDistance(node))
	return fov
	
if __name__ == '__main__':
	if MaxPlus.SelectionManager.GetCount() != 0:
		selNode = MaxPlus.SelectionManager.GetNode(0)
		if selNode.Object.GetClassName() == 'VRayPhysicalCamera':
			print getVRayCameraFOV(selNode)
		else:
			print "Selection is not V-Ray Camera."
	else:
		print "Select V-Ray Camera."

はじめてPythonAPIを使ってみました、Maxの中にPythonエディタが搭載されてるわけでは無いんですね。APIリファレンスの情報量も少ないなー。


A* Path Finding: Part 3

ずいぶん前に作ったのがハードディスクの中で眠っておりました。
おもいつくままにコーディングしたのでもはや本人にもよく分からないことになってます。ぐちゃぐちゃ。

AStarMesh2

Objメッシュデータからウェイポイントを作り、パスファインディングしています。パスファインディング自体は前回と同じアルゴリズムですが、ウェイポイントの作成の際にメッシュデータを「ハーフエッジデータ構造」に変換しています。任意のエッジをはさんで(共有して)隣り合うポリゴンを得るためです。3Dソフトでループ/リング選択が出来るのはこの構造のおかげですね。

必要なライブラリは「controlP5」、「PeasyCam」、「OBJLoader」です。いずれもProcessing IDEの「Add Library…」でインストールできます。

ダウンロード→AStarMesh2-150523a(for Processing2.2.1)

中身見たら吐くよ。