PyMaxwell - mxmGenerator

Pour vous simplifier la vie
Avatar de l’utilisateur
Rodman
SL17
Messages : 1055

Re: PyMaxwell - mxmGenerator

Message 08 avr. 2014, 22:37

Je viens d'installer pymaxwell de Maxwell 3.0.1.

Le code suivant devrait marcher: ;)

Code : Tout sélectionner

########################################################################################
# Copyright 2014 Rodman
#
# Create a list of mxm materials based on:
# an input mxm as model
# a list of constant parameters (colors, values, bitmaps, etc.) from Layers, Bsdfs, etc.
# a changing parameter with a specific range
#
# Works with pymaxwell of Maxwell 3.0.1
########################################################################################

from pymaxwell import *
from math import *

def range4mxm(start, end, step):
    while start <= end:
        yield start
        start += step

def mxmGenerator(mxmInputPath,outputPath='c:/output/',materialName='mxmGenerator',layerNumber=1,bsdfNumber=1,iStart=0,iEnd=100,stepPercent=5):
	valeurs = []
	for i in range4mxm(iStart,iEnd,(iEnd-iStart)*float(stepPercent)/100):
		valeurs.append(i)
	for i in range(len(valeurs)):	
		# Create a scene.
		scene = Cmaxwell(mwcallback)
		# Add new material to scene.
		material = scene.createMaterial(materialName,False)
		# Reading material from disk
		ok = material.read(mxmInputPath)
		if ok == 0:
			print("Error reading material from disk")
		
		# Select your Layer and Bsdf
		layer = material.getLayer(layerNumber-1) # Layer 2 (bottom one)
		bsdf = layer.getBSDF(bsdfNumber-1) # Bsdf 1


		# Do your modification with constant parameters and the changing parameter

		# Set BSDF roughness.
		map = Cattribute()
		map.activeType = MAP_TYPE_VALUE
		map.value = valeurs[i]
		bsdf.setAttribute('roughness',map)
		
		# Set BSDF colors
		reflectance = bsdf.getReflectance()
		# Reflectance 0
		map.activeType = MAP_TYPE_RGB
		map.rgb.assign(0.2,0.8,0.3)
		reflectance.setAttribute('color',map)
		# Reflectance 90
		map.rgb.assign(0.2,0.8,0.5)
		reflectance.setAttribute('color.tangential',map)
		# Transmittance
		map.rgb.assign(0.1,0.0,0.0)
		reflectance.setAttribute('transmittance.color',map)

		# Create a directory
		if not os.path.exists(outputPath): os.makedirs(outputPath)
		# Write material to disk
		ok = material.write(outputPath+materialName+'_'+str(int(floor(valeurs[i])))+'.'+str(int(valeurs[i]-floor(valeurs[i])))+'.mxm')
		if ok == 0:
			print('Error saving material to disk')
		else:
			print('Material saved to '+outputPath)

mxmGenerator('c:/input/test.mxm','c:/output/','mxmGenerator',2,1,0,50,15)
Cette nouvelle version simplifie l'écriture comme tu peux le voir. (c'est enfin un peu plus logique, encore que dans pymaxwell.py, il y a des commentaires de la v2 qui ne devraient pas y être...)

Avatar de l’utilisateur
Roch
Messages : 7576
Localisation : Marseille - France
Contact :

Re: PyMaxwell - mxmGenerator

Message 09 avr. 2014, 15:27

ça marche merci bien ! je vais pouvoir générer des biblios de matériaux simples.

Avatar de l’utilisateur
Rodman
SL17
Messages : 1055

Re: PyMaxwell - mxmGenerator

Message 09 avr. 2014, 16:07

:)

Répondre