def writeMappingNode(self, name, texname, mtex):
        yi = self.yi
        yi.paramsPushList()

        yi.paramsSetString("element", "shader_node")
        yi.paramsSetString("type", "texture_mapper")
        yi.paramsSetString("name", name)
        yi.paramsSetString("texture", mtex.texture.name)

        switchTexCoords = {
            'UV': 'uv',
            'GLOBAL': 'global',
            'ORCO': 'orco',
            'WINDOW': 'window',
            'NORMAL': 'normal',
            'REFLECTION': 'reflect',
            'STICKY': 'stick',
            'STRESS': 'stress',
            'TANGENT': 'tangent',
            'OBJECT': 'transformed',
        }

        texco = switchTexCoords.get(mtex.texture_coords, 'orco')  # get texture coords, default is 'orco'
        yi.paramsSetString("texco", texco)

        if mtex.object:
            texmat = mtex.object.matrix_local.inverted()
            rtmatrix = yafrayinterface.new_floatArray(4 * 4)

            for x in range(4):
                for y in range(4):
                    idx = (y + x * 4)
                    yafrayinterface.floatArray_setitem(rtmatrix, idx, texmat[x][y])

            yi.paramsSetMemMatrix("transform", rtmatrix, True)
            yafrayinterface.delete_floatArray(rtmatrix)

        yi.paramsSetInt("proj_x", proj2int(mtex.mapping_x))
        yi.paramsSetInt("proj_y", proj2int(mtex.mapping_y))
        yi.paramsSetInt("proj_z", proj2int(mtex.mapping_z))

        if   mtex.mapping == 'FLAT':
            yi.paramsSetString("mapping", "plain")
        elif mtex.mapping == 'CUBE':
            yi.paramsSetString("mapping", "cube")
        elif mtex.mapping == 'TUBE':
            yi.paramsSetString("mapping", "tube")
        elif mtex.mapping == 'SPHERE':
            yi.paramsSetString("mapping", "sphere")

        yi.paramsSetPoint("offset", mtex.offset[0], mtex.offset[1], mtex.offset[2])
        yi.paramsSetPoint("scale", mtex.scale[0], mtex.scale[1], mtex.scale[2])

        if mtex.use_map_normal:  # || mtex->maptoneg & MAP_NORM )
            # scale up the normal factor, it resembles
            # blender a bit more
            nf = mtex.normal_factor * 2
            yi.paramsSetFloat("bump_strength", nf)
Example #2
0
    def writeMappingNode(self, name, texname, mtex):
        yi = self.yi
        yi.paramsPushList()

        yi.paramsSetString("element", "shader_node")
        yi.paramsSetString("type", "texture_mapper")
        yi.paramsSetString("name", name)
        #yi.paramsSetString("texture", self.namehash(mtex.tex))
        yi.paramsSetString("texture", mtex.texture.name)

        #'UV'  'GLOBAL' 'ORCO' , 'WINDOW', 'NORMAL' 'REFLECTION' 'STICKY' 'STRESS' 'TANGENT'
        # texture coordinates, have to disable 'sticky' in Blender
        #change to coord. type Blender, texture_coords.  for test
        yi.paramsSetString("texco", "orco")
        if mtex.texture_coords == 'UV'          :          yi.paramsSetString("texco", "uv")
        elif mtex.texture_coords == 'GLOBAL'    :          yi.paramsSetString("texco", "global")
        elif mtex.texture_coords == 'ORCO'      :          yi.paramsSetString("texco", "orco")
        elif mtex.texture_coords == 'WINDOW'    :          yi.paramsSetString("texco", "window")
        elif mtex.texture_coords == 'NORMAL'    :          yi.paramsSetString("texco", "normal")
        elif mtex.texture_coords == 'REFLECTION':          yi.paramsSetString("texco", "reflect")
        elif mtex.texture_coords == 'STICKY'    :          yi.paramsSetString("texco", "stick")
        elif mtex.texture_coords == 'STRESS'    :          yi.paramsSetString("texco", "stress")
        elif mtex.texture_coords == 'TANGENT'   :          yi.paramsSetString("texco", "tangent")

        elif mtex.texture_coords == 'OBJECT':

            yi.paramsSetString("texco", "transformed")

            if mtex.object is not None:

                texmat = mtex.object.matrix_local.copy().invert()
                rtmatrix = yafrayinterface.new_floatArray(4*4)

                for x in range(4):
                    for y in range(4):
                        idx = (y + x * 4)
                        yafrayinterface.floatArray_setitem(rtmatrix, idx, texmat[x][y])

                yi.paramsSetMemMatrix("transform", rtmatrix, True)
                yafrayinterface.delete_floatArray(rtmatrix)

        yi.paramsSetInt("proj_x", proj2int(mtex.mapping_x))
        yi.paramsSetInt("proj_y", proj2int(mtex.mapping_y))
        yi.paramsSetInt("proj_z", proj2int(mtex.mapping_z))

        if   mtex.mapping == 'FLAT'   : yi.paramsSetString("mapping", "plain")
        elif mtex.mapping == 'CUBE'   : yi.paramsSetString("mapping", "cube")
        elif mtex.mapping == 'TUBE'   : yi.paramsSetString("mapping", "tube")
        elif mtex.mapping == 'SPHERE' : yi.paramsSetString("mapping", "sphere")

        if mtex.use_map_normal: #|| mtex->maptoneg & MAP_NORM )
            # scale up the normal factor, it ressembles
            # blender a bit more
            nf = mtex.normal_factor * 5
            yi.paramsSetFloat("bump_strength", nf)
	def writeMappingNode(self, name, texname, mtex):
		yi = self.yi
		yi.paramsPushList()
		
		yi.paramsSetString("element", "shader_node")
		yi.paramsSetString("type", "texture_mapper")
		yi.paramsSetString("name", name)
		yi.paramsSetString("texture", self.namehash(mtex.tex))
		
		# texture coordinates, have to disable 'sticky' in Blender
		if mtex.texco == Blender.Texture.TexCo.UV:		yi.paramsSetString("texco", "uv")
		elif mtex.texco == Blender.Texture.TexCo.GLOB:		yi.paramsSetString("texco", "global")
		elif mtex.texco == Blender.Texture.TexCo.ORCO:  	yi.paramsSetString("texco", "orco")
		elif mtex.texco == Blender.Texture.TexCo.WIN:		yi.paramsSetString("texco", "window")
		elif mtex.texco == Blender.Texture.TexCo.NOR:		yi.paramsSetString("texco", "normal")
		elif mtex.texco == Blender.Texture.TexCo.REFL:		yi.paramsSetString("texco", "reflect")
		elif mtex.texco == Blender.Texture.TexCo.STICK:		yi.paramsSetString("texco", "stick")
		elif mtex.texco == Blender.Texture.TexCo.STRESS:	yi.paramsSetString("texco", "stress")
		elif mtex.texco == Blender.Texture.TexCo.TANGENT:	yi.paramsSetString("texco", "tangent")
		elif mtex.texco == Blender.Texture.TexCo.OBJECT:
			yi.paramsSetString("texco", "transformed")
			if mtex.object != None:
				texmat = mtex.object.getInverseMatrix()
				rtmatrix = yafrayinterface.new_floatArray(4*4)
				for x in range(4):
					for y in range(4):
						idx = (y + x * 4)
						yafrayinterface.floatArray_setitem(rtmatrix, idx, texmat[x][y])		
				yi.paramsSetMemMatrix("transform", rtmatrix, True)
				yafrayinterface.delete_floatArray(rtmatrix)
		
		yi.paramsSetInt("proj_x", proj2int(mtex.xproj))
		yi.paramsSetInt("proj_y", proj2int(mtex.yproj))
		yi.paramsSetInt("proj_z", proj2int(mtex.zproj))
		# allow mapping with procedurals too, i don't see why i shouldn't...
		if   mtex.mapping == Blender.Texture.Mappings.FLAT: yi.paramsSetString("mapping", "plain")
		elif mtex.mapping == Blender.Texture.Mappings.CUBE: yi.paramsSetString("mapping", "cube")
		elif mtex.mapping == Blender.Texture.Mappings.TUBE: yi.paramsSetString("mapping", "tube")
		elif mtex.mapping == Blender.Texture.Mappings.SPHERE: yi.paramsSetString("mapping", "sphere")
		
		yi.paramsSetPoint("offset", mtex.ofs[0], mtex.ofs[1], mtex.ofs[2])
		yi.paramsSetPoint("scale", mtex.size[0], mtex.size[1], mtex.size[2])
		
		if mtex.mapto == Blender.Texture.MapTo.NOR: #|| mtex->maptoneg & MAP_NORM )
			nf = mtex.norfac
			yi.paramsSetFloat("bump_strength", nf)
Example #4
0
    def writeMappingNode(self, name, texname, mtex):
        yi = self.yi
        yi.paramsPushList()

        yi.paramsSetString("element", "shader_node")
        yi.paramsSetString("type", "texture_mapper")
        yi.paramsSetString("name", name)
        yi.paramsSetString("texture", texname)

        # get texture coords, default is 'orco'
        texco = switchTextureCoordinates.get(mtex.texture_coords, "orco")
        yi.paramsSetString("texco", texco)

        if mtex.object:
            texmat = mtex.object.matrix_world.inverted()
            rtmatrix = yafrayinterface.new_floatArray(4 * 4)

            for x in range(4):
                for y in range(4):
                    idx = y + x * 4
                    yafrayinterface.floatArray_setitem(rtmatrix, idx, texmat[x][y])
            yi.paramsSetMemMatrix("transform", rtmatrix, False)
            yafrayinterface.delete_floatArray(rtmatrix)

        yi.paramsSetInt("proj_x", proj2int(mtex.mapping_x))
        yi.paramsSetInt("proj_y", proj2int(mtex.mapping_y))
        yi.paramsSetInt("proj_z", proj2int(mtex.mapping_z))

        mappingCoords = switchMappingCoords.get(mtex.mapping, "plain")
        yi.paramsSetString("mapping", mappingCoords)

        yi.paramsSetPoint("offset", mtex.offset[0], mtex.offset[1], mtex.offset[2])
        if self.preview:  # check if it is a texture preview render
            mtex_X = (
                mtex.scale[0] * 8.998
            )  # tex preview fix: scale X value of tex size for the stretched Plane Mesh in preview scene
            mtex_Z = mtex.scale[2] * 0.00001  # and for Z value of texture size also...
            yi.paramsSetPoint("scale", mtex_X, mtex.scale[1], mtex_Z)
        else:
            yi.paramsSetPoint("scale", mtex.scale[0], mtex.scale[1], mtex.scale[2])

        if mtex.use_map_normal:  # || mtex->maptoneg & MAP_NORM )
            # scale up the normal factor, it resembles
            # blender a bit more
            nf = mtex.normal_factor * 2
            yi.paramsSetFloat("bump_strength", nf)
    def writeMappingNode(self, name, texname, mtex):
        yi = self.yi
        yi.paramsPushList()

        yi.paramsSetString("element", "shader_node")
        yi.paramsSetString("type", "texture_mapper")
        yi.paramsSetString("name", name)
        yi.paramsSetString("texture", texname)

        switchTexCoords = {
            'UV': 'uv',
            'GLOBAL': 'global',
            'ORCO': 'orco',
            'WINDOW': 'window',
            'NORMAL': 'normal',
            'REFLECTION': 'reflect',
            'STICKY': 'stick',
            'STRESS': 'stress',
            'TANGENT': 'tangent',
            'OBJECT': 'transformed',
        }

        texco = switchTexCoords.get(mtex.texture_coords, 'orco')  # get texture coords, default is 'orco'
        yi.paramsSetString("texco", texco)

        if mtex.object:
            texmat = mtex.object.matrix_world.inverted()
            rtmatrix = yafrayinterface.new_floatArray(4 * 4)

            for x in range(4):
                for y in range(4):
                    idx = (y + x * 4)
                    yafrayinterface.floatArray_setitem(rtmatrix, idx, texmat[x][y])
            yi.paramsSetMemMatrix("transform", rtmatrix, False)
            yafrayinterface.delete_floatArray(rtmatrix)

        yi.paramsSetInt("proj_x", proj2int(mtex.mapping_x))
        yi.paramsSetInt("proj_y", proj2int(mtex.mapping_y))
        yi.paramsSetInt("proj_z", proj2int(mtex.mapping_z))

        switchMappingCoords = {
            'FLAT': 'plain',
            'CUBE': 'cube',
            'TUBE': 'tube',
            'SPHERE': 'sphere',
        }
        mappingCoords = switchMappingCoords.get(mtex.mapping, 'plain')
        yi.paramsSetString("mapping", mappingCoords)

        yi.paramsSetPoint("offset", mtex.offset[0], mtex.offset[1], mtex.offset[2])
        if self.preview:  # check if it is a texture preview render
            mtex_X = mtex.scale[0] * 8.998  # tex preview fix: scale X value of tex size for the stretched Plane Mesh in preview scene
            mtex_Z = mtex.scale[2] * 0.00001  # and for Z value of texture size also...
            yi.paramsSetPoint("scale", mtex_X, mtex.scale[1], mtex_Z)
        else:
            yi.paramsSetPoint("scale", mtex.scale[0], mtex.scale[1], mtex.scale[2])

        if mtex.use_map_normal:  # || mtex->maptoneg & MAP_NORM )
            # scale up the normal factor, it resembles
            # blender a bit more
            nf = mtex.normal_factor * 2
            yi.paramsSetFloat("bump_strength", nf)