Some code tidying in Psychoblend.
Specifically: 1. Factored out color exporting. 2. Switched floating point writing to use .format() with 6 digits of precision. The main gain here is that numbers like 1.0 don't print with a bunch of useless trailing zeros.
This commit is contained in:
parent
26b5ee3b55
commit
4207c77e27
|
@ -1,6 +1,6 @@
|
|||
import bpy
|
||||
|
||||
from .util import escape_name, mat2str, needs_def_mb, needs_xform_mb, ExportCancelled
|
||||
from .util import escape_name, mat2str, color2str, psycolor2str, needs_def_mb, needs_xform_mb, ExportCancelled
|
||||
|
||||
class Assembly:
|
||||
def __init__(self, render_engine, objects, visible_layers, group_prefix="", translation_offset=(0,0,0)):
|
||||
|
@ -180,21 +180,21 @@ class Mesh:
|
|||
# Write vertices and (if it's smooth shaded) normals
|
||||
for ti in range(len(self.time_meshes)):
|
||||
w.write("Vertices [")
|
||||
w.write(" ".join([("%f" % i) for vert in self.time_meshes[ti].vertices for i in vert.co]), False)
|
||||
w.write(" ".join(["{:.6} {:.6} {:.6}".format(vert.co[0], vert.co[1], vert.co[2]) for vert in self.time_meshes[ti].vertices]), False)
|
||||
w.write("]\n", False)
|
||||
if self.time_meshes[0].polygons[0].use_smooth and self.ob.data.psychopath.is_subdivision_surface == False:
|
||||
w.write("Normals [")
|
||||
w.write(" ".join([("%f" % i) for vert in self.time_meshes[ti].vertices for i in vert.normal]), False)
|
||||
w.write(" ".join(["{:.6} {:.6} {:.6}".format(vert.normal[0], vert.normal[1], vert.normal[2]) for vert in self.time_meshes[ti].vertices]), False)
|
||||
w.write("]\n", False)
|
||||
|
||||
# Write face vertex counts
|
||||
w.write("FaceVertCounts [")
|
||||
w.write(" ".join([("%d" % len(p.vertices)) for p in self.time_meshes[0].polygons]), False)
|
||||
w.write(" ".join(["{}".format(len(p.vertices)) for p in self.time_meshes[0].polygons]), False)
|
||||
w.write("]\n", False)
|
||||
|
||||
# Write face vertex indices
|
||||
w.write("FaceVertIndices [")
|
||||
w.write(" ".join([("%d"%v) for p in self.time_meshes[0].polygons for v in p.vertices]), False)
|
||||
w.write(" ".join(["{}".format(v) for p in self.time_meshes[0].polygons for v in p.vertices]), False)
|
||||
w.write("]\n", False)
|
||||
|
||||
# MeshSurface/SubdivisionSurface section end
|
||||
|
@ -232,14 +232,9 @@ class SphereLamp:
|
|||
w.write("SphereLight $%s {\n" % self.name)
|
||||
w.indent()
|
||||
for col in self.time_col:
|
||||
if col[0] == 'Rec709':
|
||||
w.write("Color [rec709, %f %f %f]\n" % (col[1][0], col[1][1], col[1][2]))
|
||||
elif col[0] == 'Blackbody':
|
||||
w.write("Color [blackbody, %f %f]\n" % (col[1], col[2]))
|
||||
elif col[0] == 'ColorTemperature':
|
||||
w.write("Color [color_temperature, %f %f]\n" % (col[1], col[2]))
|
||||
w.write(color2str(col[0], col[1]) + "\n")
|
||||
for rad in self.time_rad:
|
||||
w.write("Radius [%f]\n" % rad)
|
||||
w.write("Radius [{:.6}]\n".format(rad))
|
||||
|
||||
w.unindent()
|
||||
w.write("}\n")
|
||||
|
@ -278,14 +273,9 @@ class RectLamp:
|
|||
w.write("RectangleLight $%s {\n" % self.name)
|
||||
w.indent()
|
||||
for col in self.time_col:
|
||||
if col[0] == 'Rec709':
|
||||
w.write("Color [rec709, %f %f %f]\n" % (col[1][0], col[1][1], col[1][2]))
|
||||
elif col[0] == 'Blackbody':
|
||||
w.write("Color [blackbody, %f %f]\n" % (col[1], col[2]))
|
||||
elif col[0] == 'ColorTemperature':
|
||||
w.write("Color [color_temperature, %f %f]\n" % (col[1], col[2]))
|
||||
w.write(color2str(col[0], col[1]) + "\n")
|
||||
for dim in self.time_dim:
|
||||
w.write("Dimensions [%f %f]\n" % dim)
|
||||
w.write("Dimensions [{:.6} {:.6}]\n".format(dim[0], dim[1]))
|
||||
|
||||
w.unindent()
|
||||
w.write("}\n")
|
||||
|
@ -338,57 +328,15 @@ class Material:
|
|||
w.indent()
|
||||
if self.mat.psychopath.surface_shader_type == 'Emit':
|
||||
w.write("Type [Emit]\n")
|
||||
if self.mat.psychopath.color_type == 'Rec709':
|
||||
col = self.mat.psychopath.color
|
||||
w.write("Color [rec709, %f %f %f]\n" % (
|
||||
col[0], col[1], col[2],
|
||||
))
|
||||
elif self.mat.psychopath.color_type == 'Blackbody':
|
||||
w.write("Color [blackbody, %f %f]\n" % (
|
||||
self.mat.psychopath.color_blackbody_temp,
|
||||
1.0,
|
||||
))
|
||||
elif self.mat.psychopath.color_type == 'ColorTemperature':
|
||||
w.write("Color [color_temperature, %f %f]\n" % (
|
||||
self.mat.psychopath.color_blackbody_temp,
|
||||
1.0,
|
||||
))
|
||||
w.write(psycolor2str(self.mat.psychopath) + "\n")
|
||||
elif self.mat.psychopath.surface_shader_type == 'Lambert':
|
||||
w.write("Type [Lambert]\n")
|
||||
if self.mat.psychopath.color_type == 'Rec709':
|
||||
col = self.mat.psychopath.color
|
||||
w.write("Color [rec709, %f %f %f]\n" % (
|
||||
col[0], col[1], col[2],
|
||||
))
|
||||
elif self.mat.psychopath.color_type == 'Blackbody':
|
||||
w.write("Color [blackbody, %f %f]\n" % (
|
||||
self.mat.psychopath.color_blackbody_temp,
|
||||
1.0,
|
||||
))
|
||||
elif self.mat.psychopath.color_type == 'ColorTemperature':
|
||||
w.write("Color [color_temperature, %f %f]\n" % (
|
||||
self.mat.psychopath.color_blackbody_temp,
|
||||
1.0,
|
||||
))
|
||||
w.write(psycolor2str(self.mat.psychopath) + "\n")
|
||||
elif self.mat.psychopath.surface_shader_type == 'GGX':
|
||||
w.write("Type [GGX]\n")
|
||||
if self.mat.psychopath.color_type == 'Rec709':
|
||||
col = self.mat.psychopath.color
|
||||
w.write("Color [rec709, %f %f %f]\n" % (
|
||||
col[0], col[1], col[2],
|
||||
))
|
||||
elif self.mat.psychopath.color_type == 'Blackbody':
|
||||
w.write("Color [blackbody, %f %f]\n" % (
|
||||
self.mat.psychopath.color_blackbody_temp,
|
||||
1.0,
|
||||
))
|
||||
elif self.mat.psychopath.color_type == 'ColorTemperature':
|
||||
w.write("Color [color_temperature, %f %f]\n" % (
|
||||
self.mat.psychopath.color_blackbody_temp,
|
||||
1.0,
|
||||
))
|
||||
w.write("Roughness [%f]\n" % self.mat.psychopath.roughness)
|
||||
w.write("Fresnel [%f]\n" % self.mat.psychopath.fresnel)
|
||||
w.write(psycolor2str(self.mat.psychopath) + "\n")
|
||||
w.write("Roughness [{:.6}]\n".format(self.mat.psychopath.roughness))
|
||||
w.write("Fresnel [{:.6}]\n".format(self.mat.psychopath.fresnel))
|
||||
else:
|
||||
raise "Unsupported surface shader type '%s'" % self.mat.psychopath.surface_shader_type
|
||||
w.unindent()
|
||||
|
|
|
@ -96,7 +96,7 @@ class PsychoExporter:
|
|||
res_y = int(self.scene.render.resolution_y * (self.scene.render.resolution_percentage / 100))
|
||||
self.w.write('Resolution [%d %d]\n' % (res_x, res_y))
|
||||
self.w.write("SamplesPerPixel [%d]\n" % self.scene.psychopath.spp)
|
||||
self.w.write("DicingRate [%f]\n" % self.scene.psychopath.dicing_rate)
|
||||
self.w.write("DicingRate [{:.6}]\n".format(self.scene.psychopath.dicing_rate))
|
||||
self.w.write('Seed [%d]\n' % self.fr)
|
||||
|
||||
# RenderSettings section end
|
||||
|
|
|
@ -11,10 +11,41 @@ def mat2str(m):
|
|||
s = ""
|
||||
for j in range(4):
|
||||
for i in range(4):
|
||||
s += (" %f" % m[i][j])
|
||||
s += " {:.6}".format(m[i][j])
|
||||
return s[1:]
|
||||
|
||||
|
||||
def color2str(color_type, color_data):
|
||||
if color_type == 'Rec709':
|
||||
return "Color [rec709, {:.6} {:.6} {:.6}]".format(
|
||||
color_data[0],
|
||||
color_data[1],
|
||||
color_data[2],
|
||||
)
|
||||
elif color_type == 'Blackbody':
|
||||
return "Color [blackbody, {:.6} {:.6}]".format(
|
||||
color_data[0],
|
||||
color_data[1],
|
||||
)
|
||||
elif color_type == 'ColorTemperature':
|
||||
return "Color [color_temperature, {:.6} {:.6}]".format(
|
||||
color_data[0],
|
||||
color_data[1],
|
||||
)
|
||||
|
||||
|
||||
def psycolor2str(psymat):
|
||||
color_type = psymat.color_type
|
||||
color_data = psymat.color
|
||||
|
||||
if color_type == 'Blackbody' or color_type == 'ColorTemperature':
|
||||
# TODO: add the brightness multiplier to the Psychoblend material
|
||||
# settings. Here we're just defaulting it to 1.0.
|
||||
color_data = [psymat.color_blackbody_temp, 1.0]
|
||||
|
||||
return color2str(color_type, color_data)
|
||||
|
||||
|
||||
def needs_def_mb(ob):
|
||||
""" Determines if the given object needs to be exported with
|
||||
deformation motion blur or not.
|
||||
|
|
|
@ -3,7 +3,7 @@ import bpy
|
|||
from math import degrees, tan, atan
|
||||
from mathutils import Vector, Matrix
|
||||
|
||||
from .util import escape_name, mat2str, ExportCancelled
|
||||
from .util import escape_name, color2str, mat2str, ExportCancelled
|
||||
|
||||
class World:
|
||||
def __init__(self, render_engine, scene, visible_layers, aspect_ratio):
|
||||
|
@ -90,16 +90,16 @@ class Camera:
|
|||
w.indent()
|
||||
|
||||
for fov in self.fovs:
|
||||
w.write("Fov [%f]\n" % fov)
|
||||
w.write("Fov [{:.6}]\n".format(fov))
|
||||
|
||||
for rad in self.aperture_radii:
|
||||
w.write("ApertureRadius [%f]\n" % rad)
|
||||
w.write("ApertureRadius [{:.6}]\n".format(rad))
|
||||
|
||||
for dist in self.focal_distances:
|
||||
w.write("FocalDistance [%f]\n" % dist)
|
||||
w.write("FocalDistance [{:.6}]\n".format(dist))
|
||||
|
||||
for mat in self.xforms:
|
||||
w.write("Transform [%s]\n" % mat2str(mat))
|
||||
w.write("Transform [{}]\n".format(mat2str(mat)))
|
||||
|
||||
w.unindent()
|
||||
w.write("}\n")
|
||||
|
@ -116,7 +116,7 @@ class BackgroundShader:
|
|||
w.write("BackgroundShader {\n")
|
||||
w.indent();
|
||||
w.write("Type [Color]\n")
|
||||
w.write("Color [rec709, %f %f %f]\n" % self.color)
|
||||
w.write("Color [rec709, {:.6} {:.6} {:.6}]\n".format(self.color[0], self.color[1], self.color[2]))
|
||||
w.unindent()
|
||||
w.write("}\n")
|
||||
|
||||
|
@ -147,16 +147,11 @@ class DistantDiskLamp:
|
|||
w.write("DistantDiskLight $%s {\n" % self.name)
|
||||
w.indent()
|
||||
for direc in self.time_dir:
|
||||
w.write("Direction [%f %f %f]\n" % (direc[0], direc[1], direc[2]))
|
||||
w.write("Direction [{:.6} {:.6} {:.6}]\n".format(direc[0], direc[1], direc[2]))
|
||||
for col in self.time_col:
|
||||
if col[0] == 'Rec709':
|
||||
w.write("Color [rec709, %f %f %f]\n" % (col[1][0], col[1][1], col[1][2]))
|
||||
elif col[0] == 'Blackbody':
|
||||
w.write("Color [blackbody, %f %f]\n" % (col[1], col[2]))
|
||||
elif col[0] == 'ColorTemperature':
|
||||
w.write("Color [color_temperature, %f %f]\n" % (col[1], col[2]))
|
||||
w.write(color2str(col[0], col[1]) + "\n")
|
||||
for rad in self.time_rad:
|
||||
w.write("Radius [%f]\n" % rad)
|
||||
w.write("Radius [{:.6}]\n".format(rad))
|
||||
|
||||
w.unindent()
|
||||
w.write("}\n")
|
||||
|
|
Loading…
Reference in New Issue
Block a user