[ create a new paste ] login | about

Link: http://codepad.org/qD96O7rR    [ raw code | fork ]

Python, pasted on Mar 30:
# ---------------------------------------------------------------------------------------
# --- class to sample vertexmaps from shaders -------------------------------------------
# ---------------------------------------------------------------------------------------
class ShaderToVertexmapSampler(object):

	def ShaderSampleVertexmap(self, document, polygonobject, uvwtag, vertexmap, shader, spline, istile, uvoffset, uvscale):
		# get data
		pointdata = [None] * polygonobject.GetPointCount()

		# create and prepare channeldata
		cd         = ChannelData()
		cd.t       = document.GetTime().Get()
		cd.d       = c4d.Vector()
		cd.n       = c4d.Vector(0, 0, 1)
		if istile:
			cd.texflag = c4d.TEX_TILE
		else:
			cd.texflag = 0
		if shader[c4d.SHADER_MIPOFFSET]:
			cd.off     = shader[c4d.SHADER_MIPOFFSET]
		else:
			cd.off = 0.0
		if shader[c4d.SHADER_MIPSCALE]:
			cd.scale   = shader[c4d.SHADER_MIPSCALE]
		else:
			cd.scale = 0.0

		# sample the shader
		shader.InitRender(c4d.modules.render.InitRenderStruct())
		for i in xrange(polygonobject.GetPolygonCount()):
			uvw  = uvwtag.GetSlow(i)
			poly = polygonobject.GetPolygon(i)

			if pointdata[poly.a] == None:
				cd.p = self.offsetScaleVector(uvw['a'], uvoffset, uvscale)
				pointdata[poly.a] =  self.mapColorToBrightness(color        = shader.Sample(cd),
					                                           spline       = spline)

			if pointdata[poly.b] == None:
				cd.p = self.offsetScaleVector(uvw['b'], uvoffset, uvscale)
				pointdata[poly.b] =  self.mapColorToBrightness(color        = shader.Sample(cd),
					                                           spline       = spline)

			if pointdata[poly.c] == None:
				cd.p = self.offsetScaleVector(uvw['c'], uvoffset, uvscale)
				pointdata[poly.c] =  self.mapColorToBrightness(color        = shader.Sample(cd),
					                                           spline       = spline)

			if pointdata[poly.d] == None:
				cd.p = self.offsetScaleVector(uvw['d'], uvoffset, uvscale)
				pointdata[poly.d] =  self.mapColorToBrightness(color        = shader.Sample(cd),
					                                           spline       = spline)
		shader.FreeRender()
		# write vertexmap data
		vertexmap.SetAllHighlevelData(pointdata)

	# --- scale and offset the uv vector.
	# --> Vector
	# -----------------------------------------------------------------------------------
	def offsetScaleVector(self, vector, offset, scale):
		v = (vector + offset)
		return c4d.Vector(v.x * (1 / (scale.x + 0.001)), v.y * (1 / (scale.y + 0.001)), v.z)

	# --- apply clamping to color vector, convert it into a brightness value and weight
	# --- the brightness.
	# --> float
	# -----------------------------------------------------------------------------------
	def mapColorToBrightness(self, color, spline):

		brightness = (color.x * 0.3) + (color.y * 0.59) + (color.z * 0.11)
		return utils.RangeMap(value     = brightness, 
			                  mininput  = 0.0, 
			                  maxinput  = 1.0, 
		               		  minoutput = 0.0, 
		               		  maxoutput = 1.0, 
		               		  clampval  = False, 
		               		  curve     = spline)


Create a new paste based on this one


Comments: