def __init__(self, text, parent, size=72, shadow=0, hspace=8, font=None): self.transform = trinity.EveTransform() self.transform.mesh = trinity.Tr2Mesh() self.transform.mesh.geometryResPath = 'res:/Model/Global/zsprite.gr2' self.transform.modifier = 1 self.measurer = trinity.Tr2FontMeasurer() self.measurer.limit = 0 if font is None: font = _GetDefaultFont() self.measurer.font = font self.measurer.fontSize = size self.measurer.letterSpace = hspace area = trinity.Tr2MeshArea() self.transform.mesh.transparentAreas.append(area) area.effect = self.effect = trinity.Tr2Effect() sampler = list(self.effect.samplerOverrides.GetDefaultValue()) sampler[0] = 'DiffuseMapSampler' sampler[1] = trinity.TRITADDRESS_CLAMP sampler[2] = trinity.TRITADDRESS_CLAMP self.effect.samplerOverrides.append(tuple(sampler)) self.effect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpecialFX/TextureColor.fx' diffuseColor = trinity.Tr2Vector4Parameter() diffuseColor.name = 'DiffuseColor' self.effect.parameters.append(diffuseColor) self.diffuseColor = diffuseColor self.diffuseMap = trinity.TriTextureParameter() self.diffuseMap.name = 'DiffuseMap' self.effect.resources.append(self.diffuseMap) parent.children.append(self.transform) trinity.device.RegisterResource(self) self.SetText(text)
def CreateParticles(): particleTransform = trinity.EveTransform() particleTransform.name = 'particleTransform' tex = trinity.TriTextureParameter() tex.name = 'TexMap' tex.resourcePath = PARTICLE_SPRITE_TEXTURE heattex = trinity.TriTextureParameter() heattex.name = 'HeatTexture' heattex.resourcePath = PARTICLE_SPRITE_HEAT_TEXTURE distanceFadeControl = trinity.Tr2Vector4Parameter() distanceFadeControl.name = DISTANCE_RANGE distanceFadeControl.value = (0, 1, 0, 0) particles = trinity.Tr2RuntimeInstanceData() particles.SetElementLayout([(trinity.PARTICLE_ELEMENT_TYPE.POSITION, 0, 3), (trinity.PARTICLE_ELEMENT_TYPE.POSITION, 1, 3), (trinity.PARTICLE_ELEMENT_TYPE.CUSTOM, 0, 1), (trinity.PARTICLE_ELEMENT_TYPE.CUSTOM, 1, 4)]) mesh = trinity.Tr2InstancedMesh() mesh.geometryResPath = 'res:/Graphics/Generic/UnitPlane/UnitPlane.gr2' mesh.instanceGeometryResource = particles particleTransform.mesh = mesh area = trinity.Tr2MeshArea() area.effect = trinity.Tr2Effect() area.effect.effectFilePath = PARTICLE_EFFECT area.effect.resources.append(tex) area.effect.resources.append(heattex) area.effect.parameters.append(distanceFadeControl) mesh.additiveAreas.append(area) return (particleTransform, particles, distanceFadeControl)
def CreatePlanet(self, planetPosition): scaling = 0.01 / mapViewConst.SOLARSYSTEM_SCALE planetTransform = trinity.EveTransform() planetTransform.name = 'planetTransform' planetTransform.scaling = (scaling, scaling, scaling) planetTransform.translation = planetPosition self.systemMapTransform.children.append(planetTransform) planetTransform.useDistanceBasedScale = True planetTransform.distanceBasedScaleArg1 = 1.0 planetTransform.distanceBasedScaleArg2 = 0.0 planetTransform.mesh = trinity.Tr2Mesh() planetTransform.mesh.geometryResPath = 'res:/Model/Global/zsprite.gr2' planetTransform.modifier = 1 area = trinity.Tr2MeshArea() planetTransform.mesh.additiveAreas.append(area) effect = trinity.Tr2Effect() effect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpecialFX/TextureColor.fx' area.effect = effect diffuseColor = trinity.Tr2Vector4Parameter() diffuseColor.name = 'DiffuseColor' effect.parameters.append(diffuseColor) diffuseMap = trinity.TriTextureParameter() diffuseMap.name = 'DiffuseMap' diffuseMap.resourcePath = 'res:/UI/Texture/Classes/MapView/spotSprite.dds' effect.resources.append(diffuseMap)
def CopyAreaOnly(area): newArea = trinity.Tr2MeshArea() newArea.name = area.name newArea.index = area.index newArea.count = area.count newArea.reversed = area.reversed return newArea
def CopyAreaForPrePassShadows(area, sourceAreaType=SOURCE_AREA_TYPE_OPAQUE): originalEffect = area.effect if originalEffect is None or not hasattr(originalEffect, 'effectFilePath'): return newArea = trinity.Tr2MeshArea() newArea.name = area.name newArea.index = area.index newArea.count = area.count newEffect = trinity.Tr2Effect() if originalEffect.effectFilePath.lower().find('avatar') == -1: if sourceAreaType == SOURCE_AREA_TYPE_DECAL and originalEffect.effectFilePath.lower( ).find('alphatest') == -1: return elif originalEffect.effectFilePath.lower().find('cloth') == -1: if sourceAreaType == SOURCE_AREA_TYPE_DECAL: newEffect.effectFilePath = SHADOW_ALPHATEST_EFFECT_PATH else: newEffect.effectFilePath = SHADOW_OPAQUE_EFFECT_PATH elif sourceAreaType == SOURCE_AREA_TYPE_DECAL: newEffect.effectFilePath = SHADOW_CLOTH_ALPHATEST_EFFECT_PATH else: newEffect.effectFilePath = SHADOW_CLOTH_OPAQUE_EFFECT_PATH newEffect.name = originalEffect.name CopyResources(originalEffect, newEffect, {'DiffuseMap', 'CutMaskMap'}) CopyParameters( originalEffect, newEffect, { 'TransformUV0', 'MaterialDiffuseColor', 'CutMaskInfluence', 'ArrayOfCutMaskInfluence' }) newArea.effect = newEffect return newArea
def Create3DRender(self): self.renderTexture = trinity.TriTexture2DParameter() self.renderTexture.name = 'DiffuseMap' self.renderColor = trinity.TriVector4Parameter() self.renderColor.name = 'DiffuseColor' self.renderColor.value = (1, 1, 1, 1) self.renderEffect = trinity.Tr2Effect() self.renderEffect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpecialFX/TextureColor.fx' self.renderEffect.resources.append(self.renderTexture) self.renderEffect.parameters.append(self.renderColor) self.renderArea = trinity.Tr2MeshArea() self.renderArea.effect = self.renderEffect self.renderMesh = trinity.Tr2Mesh() self.renderMesh.name = 'orbitalBombardmentTarget' self.renderMesh.geometryResPath = 'res:/Graphics/Generic/UnitPlane/UnitPlane.gr2' self.renderMesh.transparentAreas.append(self.renderArea) self.transform = trinity.EveRootTransform() self.transform.mesh = self.renderMesh self.renderScene.objects.append(self.transform) self.renderJob = trinity.CreateRenderJob() self.renderJob.Update(self.renderScene) self.renderObject = self.GetRenderObject() self.renderObject.is2dPick = False self.renderTarget = trinity.Tr2RenderTarget( self.width, self.height, 1, trinity.PIXEL_FORMAT.B8G8R8A8_UNORM) self.renderJob.PushRenderTarget(self.renderTarget) self.renderJob.RenderScene(self.renderObject) self.renderJob.PopRenderTarget() self.renderJob.ScheduleRecurring(insertFront=True) self.renderTexture.SetResource(trinity.TriTextureRes( self.renderTarget)) self.renderSteps[-1].enabled = False return self.transform
def _ApplyIsisEffect(ship, isSkinned): if isSkinned: isisEffect = blue.resMan.LoadObject( 'res:/dx9/model/ui/isisEffectSkinned.red') else: isisEffect = blue.resMan.LoadObject('res:/dx9/model/ui/isisEffect.red') blue.resMan.Wait() areaCount = ship.mesh.geometry.GetMeshAreaCount(0) resourceList = ship.mesh.opaqueAreas[0].effect.resources normalMapParam = [res for res in resourceList if res.name == 'NormalMap'][0] if hasattr(normalMapParam, 'lodResource'): normalMapPath = normalMapParam.lodResource.highDetailResPath else: normalMapPath = normalMapParam.resourcePath del ship.spriteSets[:] del ship.spotlightSets[:] del ship.planeSets[:] del ship.decals[:] del ship.mesh.opaqueAreas[:] del ship.mesh.depthAreas[:] del ship.mesh.transparentAreas[:] del ship.mesh.additiveAreas[:] del ship.mesh.decalAreas[:] del ship.mesh.distortionAreas[:] area = trinity.Tr2MeshArea() area.index = 0 area.count = areaCount area.effect = isisEffect normalMap = [ res for res in area.effect.resources if res.name == 'NormalMap' ][0] normalMap.resourcePath = normalMapPath ship.mesh.additiveAreas.append(area)
def SetupStubble(meshes, name, stubblePath, adding = True): ret = [] stubbleName = '{0}Stubble'.format(name) stubbleMeshes = (mesh for mesh in meshes if mesh.name.startswith(pdDef.DOLL_PARTS.HEAD)) for mesh in stubbleMeshes: if adding: if any(map(lambda x: 'stubble' in x.name.lower(), mesh.decalAreas)): ret.append(mesh) continue c_skin_areas = (area for area in mesh.opaqueAreas if area.effect.name.lower().startswith('c_skin_')) for area in c_skin_areas: stubbleArea = trinity.Tr2MeshArea() stubbleArea.name = stubbleName stubbleArea.index = area.index stubbleArea.count = area.count stubbleArea.effect = trinity.Load(stubblePath) for resource in stubbleArea.effect.resources: if resource.name == 'LengthTexture': while resource.resource.IsLoading(): pdCf.Yield() mesh.decalAreas.append(stubbleArea) ret.append(mesh) if SkinSpotLightShadows.instance: SkinSpotLightShadows.instance.CreateEffectParamsForMesh(mesh, False) for instance in SkinLightmapRenderer.instances: if instance(): instance().BindLightmapShader(mesh) else: targetAreasToRemove = [ area for area in mesh.decalAreas if area.name == stubbleName ] for ta in targetAreasToRemove: mesh.decalAreas.remove(ta) return ret
def CopyAreaForPrePassDepthNormal(area, sourceAreaType=SOURCE_AREA_TYPE_OPAQUE): originalEffect = area.effect if originalEffect is None: return newArea = trinity.Tr2MeshArea() newArea.name = area.name newArea.index = area.index newArea.count = area.count newArea.effect = area.effect ConvertDepthNormalAreaToTr2ShaderMaterial(newArea) return newArea
def CopyAreaForPrePassDepthNormal(area, sourceAreaType = SOURCE_AREA_TYPE_OPAQUE): """ Copies and converts a particular Tr2MeshArea, producing a new one with the correct effect setup to use pre-pass rendering. """ originalEffect = area.effect if originalEffect is None: return newArea = trinity.Tr2MeshArea() newArea.name = area.name newArea.index = area.index newArea.count = area.count newArea.effect = area.effect ConvertDepthNormalAreaToTr2ShaderMaterial(newArea) return newArea
def CreateSun(self, sunGraphic): def GetEffectParameter(effect, parameterName): for each in effect.parameters: if each.name == parameterName: return each scaling = 1.0 / mapViewConst.SOLARSYSTEM_SCALE * 16 sunTransform = trinity.EveTransform() sunTransform.name = 'Sun' sunTransform.scaling = (scaling, scaling, scaling) sunTransform.useDistanceBasedScale = True sunTransform.distanceBasedScaleArg1 = 0.02 sunTransform.distanceBasedScaleArg2 = 0.1 self.systemMapTransform.children.append(sunTransform) for each in sunGraphic.mesh.additiveAreas: if 'flare' not in each.name.lower() and 'rainbow' not in each.name.lower(): transform = trinity.EveTransform() try: size = GetEffectParameter(each.effect, 'Size') transform.scaling = (size.x, size.y, size.z) except: continue transform.mesh = trinity.Tr2Mesh() transform.mesh.geometryResPath = 'res:/Model/Global/zsprite.gr2' transform.modifier = 1 transform.name = each.name area = trinity.Tr2MeshArea() transform.mesh.additiveAreas.append(area) effect = trinity.Tr2Effect() effect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpecialFX/TextureColor.fx' area.effect = effect diffuseColor = trinity.Tr2Vector4Parameter() diffuseColor.name = 'DiffuseColor' effect.parameters.append(diffuseColor) diffuseColor = diffuseColor diffuseMap = trinity.TriTextureParameter() diffuseMap.name = 'DiffuseMap' diffuseMap.resourcePath = each.effect.resources[0].resourcePath effect.resources.append(diffuseMap) try: color = GetEffectParameter(each.effect, 'Color') diffuseColor.value = color.value except: continue sunTransform.children.append(transform)
def ApplyAreaRes(areaRes, mesh, areaIdx): """ This function ensures that the specified Area is in the correct areaLists in the specified Mesh, and then applies the material from the specified areaRes. """ geo = mesh.geometry if not (geo.isPrepared and geo.isGood): log.LogWarn('FAILED TO PREPARE MESH %s' % mesh.name) return metashaders = LoadMetaMaterialLibrary() try: currentShader = metashaders[str(areaRes.metatype)] except KeyError: log.LogWarn('Unknown MetaMaterial: %s' % areaRes.metatype) return for typeIdx in xrange(mesh.GetAreasCount()): areaList = mesh.GetAreas(typeIdx) if areaList is not None: for area in areaList: if area.index == areaIdx: areaList.remove(area) break for area in currentShader: areaList = getattr(mesh, area['name']) if areaList is not None: areaName = geo.GetMeshAreaName(mesh.meshIndex, areaIdx) newArea = trinity.Tr2MeshArea() newArea.index = areaIdx newArea.count = 1 newArea.name = areaName if 'shLighting' in area and area['shLighting']: newArea.useSHLighting = True newArea.effect = trinity.Tr2ShaderMaterial() newArea.effect.highLevelShaderName = area['shader'] if 'situation' in area: newArea.effect.defaultSituation = area['situation'] newArea.effect.PopulateDefaultParameters() areaList.append(newArea) ApplyMaterialStoreToEffect(newArea.effect, areaRes.material)
def _CreateRuntimeInstanceMesh(instanceType, additive=False): effect = '' if instanceType in INSTANCE_EFFECTS: effect = INSTANCE_EFFECTS[instanceType] mesh = trinity.Tr2InstancedMesh() mesh.instanceGeometryResPath = '' mesh.geometryResPath = _DEFAULT_GEOMETRY mesh.instanceGeometryResource = trinity.Tr2RuntimeInstanceData() area = trinity.Tr2MeshArea() area.effect = trinity.Tr2Effect() area.effect.effectFilePath = effect trinity.WaitForResourceLoads() area.effect.PopulateParameters() for each in area.effect.resources: each.resourcePath = _DEFAULT_TEXTURE if additive: mesh.additiveAreas.append(area) else: mesh.transparentAreas.append(area) return mesh
def AddPrepassAreasToStatic(static): if static.displayTargetMesh: mesh = trinity.Tr2Mesh() mesh.name = 'EnlightenAreas' mesh.geometryResPath = static.geometryResPath static.detailMeshes.append(mesh) for area in static.enlightenAreas: newArea = trinity.Tr2MeshArea() newArea.name = area.name newArea.index = area.index newArea.count = area.count newArea.effect = area.effect mesh.opaqueAreas.append(newArea) area.effect = None static.detailMeshes.append(mesh) for mesh in static.detailMeshes: AddPrepassAreasToStandardMesh(mesh) if ENABLE_MATERIAL_RES_SUPPORT: materialRes = Materials.LoadMaterialResFromObject(static) Materials.ApplyMaterialRes(static, materialRes)
def CopyAreaForPrePassShadows(area, sourceAreaType = SOURCE_AREA_TYPE_OPAQUE): originalEffect = area.effect if originalEffect is None: return newArea = trinity.Tr2MeshArea() newArea.name = area.name newArea.index = area.index newArea.count = area.count newEffect = trinity.Tr2Effect() if 'skinned' in originalEffect.effectFilePath.lower(): if sourceAreaType == SOURCE_AREA_TYPE_DECAL: newEffect.effectFilePath = SKINNED_SHADOW_ALPHATEST_EFFECT_PATH elif 'alphatest' in originalEffect.effectFilePath.lower(): newEffect.effectFilePath = SKINNED_SHADOW_ALPHATEST_EFFECT_PATH else: newEffect.effectFilePath = SKINNED_SHADOW_OPAQUE_EFFECT_PATH elif sourceAreaType == SOURCE_AREA_TYPE_DECAL: newEffect.effectFilePath = STATIC_SHADOW_ALPHATEST_EFFECT_PATH elif 'alphatest' in originalEffect.effectFilePath.lower(): newEffect.effectFilePath = STATIC_SHADOW_ALPHATEST_EFFECT_PATH else: newEffect.effectFilePath = STATIC_SHADOW_OPAQUE_EFFECT_PATH newEffect.name = originalEffect.name newParam = CopyVector4Parameter(area.effect, 'TransformUV0') if newParam is not None: newEffect.parameters.append(newParam) if sourceAreaType == SOURCE_AREA_TYPE_DECAL: newParam = CopyVector4Parameter(area.effect, 'MaterialDiffuseColor') if newParam is not None: newEffect.parameters.append(newParam) newParam = CopyResourceByName(area.effect, 'DiffuseMap') if newParam is not None: newEffect.resources.append(newParam) newParam = CopyFloatParameter(area.effect, 'CutMaskInfluence') if newParam is not None: newEffect.parameters.append(newParam) newArea.effect = newEffect return newArea
def __init__(self, text, parent, size=72, shadow=0, hspace=8): self.transform = trinity.EveTransform() self.transform.mesh = trinity.Tr2Mesh() self.transform.mesh.geometryResPath = 'res:/Model/Global/zsprite.gr2' self.transform.modifier = 1 self.measurer = trinity.Tr2FontMeasurer() self.measurer.limit = 0 fontFamily = uicore.font.GetFontFamilyBasedOnClientLanguageID()[ fontConst.STYLE_DEFAULT] self.measurer.font = fontFamily[2] self.measurer.fontSize = size self.measurer.letterSpace = hspace self.measurer.AddText(text.upper()) height = self.measurer.ascender - self.measurer.descender width = self.measurer.cursorX self.measurer.CommitText(0, self.measurer.ascender) self.transform.scaling = (width, height, 0) area = trinity.Tr2MeshArea() self.transform.mesh.transparentAreas.append(area) area.effect = self.effect = trinity.Tr2Effect() sampler = list(self.effect.samplerOverrides.GetDefaultValue()) sampler[0] = 'DiffuseMapSampler' sampler[1] = trinity.TRITADDRESS_CLAMP sampler[2] = trinity.TRITADDRESS_CLAMP self.effect.samplerOverrides.append(tuple(sampler)) self.effect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpecialFX/TextureColor.fx' diffuseColor = trinity.Tr2Vector4Parameter() diffuseColor.name = 'DiffuseColor' self.effect.parameters.append(diffuseColor) self.diffuseColor = diffuseColor self.diffuseMap = trinity.TriTextureParameter() self.diffuseMap.name = 'DiffuseMap' self.effect.resources.append(self.diffuseMap) parent.children.append(self.transform) trinity.device.RegisterResource(self) self.OnCreate(trinity.device)
def SetShipModel(self, entity): hologramComponent = entity.GetComponent('shipHologram') if hologramComponent is None or not hologramComponent.graphicLoaded: return interiorPlaceable = entity.GetComponent('interiorPlaceable') if interiorPlaceable is None: return effect = trinity.Load( 'res:/graphics/interior/effect/hologram/shipHologramEffect.red') targetPlaceable = interiorPlaceable.renderObject targetPlaceable.isUnique = True targetPlaceable.BindLowLevelShaders() targetVisual = targetPlaceable.placeableRes.visualModel mesh = None for each in targetVisual.meshes: if each.name == 'shipHologramMesh': mesh = each break if mesh is not None: targetVisual.meshes.remove(mesh) targetPlaceable.BoundingBoxReset() if self.activeShipModel is None: return if self.activeShipID is None: return mesh = trinity.Tr2Mesh() mesh.name = 'shipHologramMesh' mesh.geometryResPath = self.activeShipModel.mesh.GetGeometryResPath() maxIndex = 0 for area in self.activeShipModel.mesh.opaqueAreas: maxIndex = max(maxIndex, area.index) for area in self.activeShipModel.mesh.decalAreas: maxIndex = max(maxIndex, area.index) for area in self.activeShipModel.mesh.transparentAreas: maxIndex = max(maxIndex, area.index) meshArea = trinity.Tr2MeshArea() meshArea.effect = effect meshArea.count = maxIndex + 1 mesh.transparentAreas.append(meshArea) effect.BindLowLevelShader([]) bbMinOriginal, bbMaxOriginal = targetVisual.GetBoundingBoxInLocalSpace( ) scale, extra = self.CalculateModelScale( hologramComponent, self.activeShipModel.boundingSphereRadius, self.activeShipID) param = effect.parameters['ScalingAndOffset'] x = param.x = hologramComponent.positionOffset[0] y = param.y = hologramComponent.positionOffset[1] z = param.z = hologramComponent.positionOffset[2] param.w = scale * extra param = effect.parameters['Color'] param.x = hologramComponent.color[0] param.y = hologramComponent.color[1] param.z = hologramComponent.color[2] param = effect.parameters['SpotlightOrigin'] param.x = hologramComponent.spotlightOrigin[0] param.y = hologramComponent.spotlightOrigin[1] param.z = hologramComponent.spotlightOrigin[2] targetVisual.meshes.append(mesh) trinity.WaitForResourceLoads() bbMin, bbMax = self.activeShipModel.GetLocalBoundingBox() maxBounds = max(abs(bbMin[0]), max(bbMax[0], max(abs(bbMin[2]), bbMax[2]))) bbMin = (-maxBounds, bbMin[2], -maxBounds) bbMax = (maxBounds, bbMax[2], maxBounds) bbMin = geo2.Vec3Scale(bbMin, scale) bbMax = geo2.Vec3Scale(bbMax, scale) bbMin = geo2.Vec3Add(bbMin, (x, y, z)) bbMax = geo2.Vec3Add(bbMax, (x, y, z)) bbMin = geo2.Min(bbMin, bbMinOriginal) bbMax = geo2.Max(bbMax, bbMaxOriginal) targetPlaceable.BoundingBoxOverride(bbMin, bbMax)
def CopyAreaForPrePassDepthNormal(area, sourceAreaType=SOURCE_AREA_TYPE_OPAQUE, materialLookupTable=None): """ Copies and converts a particular Tr2MeshArea, producing a new one with the correct effect setup to use pre-pass rendering. """ originalEffect = area.effect if originalEffect is None: return if hasattr(originalEffect, 'effectFilePath' ) and 'glass' in originalEffect.effectFilePath.lower(): return newArea = trinity.Tr2MeshArea() newArea.name = area.name newArea.index = area.index newArea.count = area.count newArea.reversed = area.reversed newMaterial = trinity.Tr2ShaderMaterial() newMaterial.highLevelShaderName = 'NormalDepth' if sourceAreaType == SOURCE_AREA_TYPE_DECAL: newMaterial.name = 'Skinned_Cutout_NormalDepth' newMaterial.defaultSituation = 'AlphaCutout' else: newMaterial.name = 'Skinned_Opaque_NormalDepth' newMaterial.defaultSituation = '' if hasattr(originalEffect, 'effectFilePath' ) and 'double' in originalEffect.effectFilePath.lower(): newMaterial.defaultSituation = newMaterial.defaultSituation + ' DoubleMaterial' if hasattr(originalEffect, 'name'): name = originalEffect.name.lower() if name.startswith('c_skin_'): newMaterial.defaultSituation = newMaterial.defaultSituation + ' SmoothNormal' elif name.startswith('c_eyes'): newMaterial.defaultSituation = newMaterial.defaultSituation + ' EyeShader' CopyResources(area.effect, newMaterial, {'NormalMap', 'SpecularMap', 'DiffuseMap', 'CutMaskMap'}) CopyParameters( area.effect, newMaterial, { 'TransformUV0', 'MaterialDiffuseColor', 'CutMaskInfluence', 'MaterialSpecularFactors', 'ArrayOfCutMaskInfluence', 'ArrayOfMaterialLibraryID', 'ArrayOfMaterial2LibraryID', 'ArrayOfMaterialSpecularFactors' }) if 'MaterialSpecularFactors' in newMaterial.parameters: newMaterial.parameters[ 'MaterialSpecularFactors'].z = newMaterial.parameters[ 'MaterialSpecularFactors'].z * 0.7 MaterialLibraryID = pdCcf.FindParameterByName(area.effect, 'MaterialLibraryID') if MaterialLibraryID is None: MaterialLibraryID = 11 else: MaterialLibraryID = MaterialLibraryID.x MaterialSpecularCurve = pdCcf.FindParameterByName(area.effect, 'MaterialSpecularCurve') if MaterialSpecularCurve is None: MaterialSpecularCurve = (0, 50, 0, 0) else: MaterialSpecularCurve = (MaterialSpecularCurve.x, MaterialSpecularCurve.y, MaterialSpecularCurve.z, MaterialSpecularCurve.w) param = trinity.Tr2FloatParameter() param.name = 'MaterialLibraryID' param.value = FindMaterialID(MaterialLibraryID, 1 + MaterialSpecularCurve[3], MaterialSpecularCurve[1], materialLookupTable=materialLookupTable) newMaterial.parameters['MaterialLibraryID'] = param MaterialLibraryID = pdCcf.FindParameterByName(area.effect, 'Material2LibraryID') if MaterialLibraryID is not None: param = trinity.Tr2FloatParameter() param.name = 'Material2LibraryID' param.value = FindMaterialID(MaterialLibraryID.x, 1 + MaterialSpecularCurve[3], MaterialSpecularCurve[1]) newMaterial.parameters['Material2LibraryID'] = param newArea.effect = newMaterial return newArea