def BlitAlphaIntoAlphaWithMask(self, path, mask, subrect=None, srcRect=None): effect = self.MakeEffect('BlitIntoAlpha1') effect2 = self.MakeEffect('BlitIntoAlpha2') self.AppendResource(effect, 'Texture', mask, 'TextureReverseUV') self.AppendResource(effect2, 'Texture', path, 'TextureReverseUV') self.AppendResource(effect2, 'MaskMap', mask, 'MaskReverseUV') if srcRect: self.AppendParameter(effect, trinity.Tr2Vector4Parameter(), 'SourceUVs', srcRect) self.AppendParameter(effect2, trinity.Tr2Vector4Parameter(), 'SourceUVs', srcRect) self.renderJob.SetRenderState(trinity.D3DRS_SEPARATEALPHABLENDENABLE, 1) self.renderJob.SetRenderState(trinity.D3DRS_BLENDOPALPHA, trinity.TRIBLENDOP_REVSUBTRACT) self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ONE) self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ONE) self.CompositeTexture(effect, subrect) self.renderJob.SetRenderState(trinity.D3DRS_BLENDOPALPHA, trinity.TRIBLENDOP_ADD) self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ONE) self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ONE) self.CompositeTexture(effect2, subrect)
def ColorizedBlitTexture(self, detail, zone, overlay, color1, color2, color3, subrect = None, addAlpha = False, skipAlpha = False, useAlphaTest = False, srcRect = None, weight = 1.0, mask = None): if useAlphaTest: effect = self.MakeEffect('ColorizedBlit_AlphaTest') else: effect = self.MakeEffect('ColorizedBlit') effect.StartUpdate() res = [] res.append(self.CreateResource(effect, 'DetailMap', detail, 'DetailReverseUV')) res.append(self.CreateResource(effect, 'ZoneMap', zone, 'ZoneReverseUV')) res.append(self.CreateResource(effect, 'OverlayMap', overlay, 'OverlayReverseUV')) if mask: res.append(self.CreateResource(effect, 'MaskMap', mask, 'MaskReverseUV2')) effect.resources.extend(res) param = [] param.append(self.CreateParameter(trinity.Tr2FloatParameter(), 'Strength', weight)) param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'Color1', color1)) param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'Color2', color2)) param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'Color3', color3)) if srcRect: param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'SourceUVs', srcRect)) if mask: param.append(self.CreateParameter(trinity.Tr2FloatParameter(), 'UseMask', 1.0)) effect.parameters.extend(param) effect.EndUpdate() self.renderJob.SetRenderState(trinity.D3DRS_SEPARATEALPHABLENDENABLE, 1) self.renderJob.SetRenderState(trinity.D3DRS_BLENDOPALPHA, trinity.TRIBLENDOP_ADD) if skipAlpha: self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ZERO) else: self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ONE) if addAlpha: self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ONE) else: self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ZERO) self.CompositeTexture(effect, subrect)
def makeBitmapStep(filePath, scaleToFit = True, color = (1.0, 1.0, 1.0, 1.0), targetSize = None): """ Helper function to create a renderstep that shows a bitmap without stretching, by scaling it or adding black. http://carbon/wiki/Core_Graphics_Snippets """ tex = trinity.TriTexture2DParameter() tex.name = 'Texture' tex.resourcePath = filePath if targetSize is None: bb = trinity.device.GetRenderContext().GetDefaultBackBuffer() targetSize = (bb.width, bb.height) fx = trinity.Tr2Effect() fx.effectFilePath = 'res:/Graphics/Effect/Managed/Space/System/ColoredBlit.fx' fx.resources.append(tex) while tex.resource.isLoading: blue.synchro.Yield() sw = float(tex.resource.width) sh = float(tex.resource.height) tw = float(targetSize[0]) th = float(targetSize[1]) v = trinity.Tr2Vector4Parameter() v.name = 'Color' v.value = color fx.parameters.append(v) v = trinity.Tr2Vector4Parameter() v.name = 'SourceUVs' fx.parameters.append(v) sourceAspect = sw / sh targetAspect = tw / th if scaleToFit: if targetAspect > sourceAspect: span = targetAspect / sourceAspect v.value = (0.5 - 0.5 * span, 0.0, 0.5 + 0.5 * span, 1.0) else: span = sourceAspect / targetAspect v.value = (0, 0.5 - 0.5 * span, 1.0, 0.5 + 0.5 * span) elif targetAspect > sourceAspect: d = 1.0 - sw * th / (sh * tw) d *= 0.5 v.value = (0.0, d, 1.0, 1.0 - d) else: d = 1.0 - tw * sh / (th * sw) d *= 0.5 v.value = (d, 0.0, 1.0 - d, 1.0) return trinity.TriStepRenderEffect(fx)
def makeCubemapStep(filePath, scaleToFit = True, color = (1.0, 1.0, 1.0, 1.0), cubeFace = 0, targetSize = None): """ Helper function to create a renderstep that shows a cubemap. http://carbon/wiki/Core_Graphics_Snippets """ tex = trinity.TriTextureCubeParameter() tex.name = 'BlitSource' tex.resourcePath = filePath if targetSize is None: bb = trinity.device.GetRenderContext().GetDefaultBackBuffer() targetSize = (bb.width, bb.height) targetAspect = float(targetSize[0]) / float(targetSize[1]) fx = trinity.Tr2Effect() fx.effectFilePath = 'res:/Graphics/Effect/Managed/Space/System/ColoredBlitCube.fx' fx.effectResource.Reload() fx.resources.append(tex) v = trinity.Tr2Vector4Parameter() v.name = 'Color' v.value = color fx.parameters.append(v) v = trinity.Tr2FloatParameter() v.name = 'cubeFace' v.value = cubeFace fx.parameters.append(v) v = trinity.Tr2Vector4Parameter() v.name = 'ScaleXY' fx.parameters.append(v) if scaleToFit: if targetAspect >= 1.0: v.value = (targetAspect, 1.0, 1.0, 1.0) else: v.value = (1.0, 1.0 / targetAspect, 1.0, 1.0) elif targetAspect < 1.0: v.value = (targetAspect, 1.0, 1.0, 1.0) else: v.value = (1.0, 1.0 / targetAspect, 1.0, 1.0) return trinity.TriStepRenderEffect(fx)
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 CopyCommonAvatarMaterialParams(mat, fx, meshName=None): CopyResources( fx, mat, { 'NormalMap', 'SpecularMap', 'DiffuseMap', 'CutMaskMap', 'FresnelLookupMap', 'ColorNdotLLookupMap' }) CopyParameters( fx, mat, { 'MaterialDiffuseColor', 'MaterialSpecularColor', 'MaterialSpecularCurve', 'MaterialSpecularFactors', 'FresnelFactors', 'MaterialLibraryID', 'TransformUV0', 'CutMaskInfluence' }) cmi = mat.parameters.get('CutMaskInfluence') if cmi and cmi.value >= 0.85: if meshName and 'drape' in meshName: cmi.value = 1.0 elif cmi.value <= 1.0: cmi.value = 0.999 if 'MaterialSpecularColor' in mat.parameters: mat.parameters['MaterialSpecularColor'].x = mat.parameters[ 'MaterialSpecularColor'].x * 1.2 mat.parameters['MaterialSpecularColor'].y = mat.parameters[ 'MaterialSpecularColor'].y * 1.2 mat.parameters['MaterialSpecularColor'].z = mat.parameters[ 'MaterialSpecularColor'].z * 1.2 if 'MaterialDiffuseColor' not in mat.parameters: param = trinity.Tr2Vector4Parameter() param.name = 'MaterialDiffuseColor' param.value = (1, 1, 1, 1) mat.parameters['MaterialDiffuseColor'] = param
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 CopyBlitTexture(self, path, subrect=None, srcRect=None, isNormalMap=False, alphaMultiplier=1.0): effect = self.MakeEffect('Copyblit') self.AppendResource(effect, 'Texture', path, 'TextureReverseUV', mapType='N' if isNormalMap else '') if srcRect: self.AppendParameter(effect, trinity.Tr2Vector4Parameter(), 'SourceUVs', srcRect) self.AppendParameter(effect, trinity.Tr2FloatParameter(), 'AlphaMultiplier', alphaMultiplier) self.renderJob.SetRenderState(trinity.D3DRS_SEPARATEALPHABLENDENABLE, 1) self.renderJob.SetRenderState(trinity.D3DRS_BLENDOPALPHA, trinity.TRIBLENDOP_ADD) self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ONE) self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ZERO) self.CompositeTexture(effect, subrect)
def createMeshAreaParams(self, meshArea, isDecal, isCloth = False, isTranslucent = False): """ Create the effect needed to draw mesh into the shadow map during the depth pass. The effect will use a skinned or non-skinned shader, based on not-cloth or cloth. For opaque vs. decals, only one shader is needed -- a spotlight.x parameter controls if the diffuse alpha should be used or not to do alphatesting. """ shadowEffect = trinity.Tr2Effect() shadowEffect.effectFilePath = SPOTLIGHT_SHADOW_EFFECT if not isCloth else SPOTLIGHT_SHADOW_EFFECT_CLOTH v = trinity.Tr2Vector4Parameter() v.name = 'spotlight' v.value = (float(isDecal), 1.0 / self.shadowResolution, float(isTranslucent), 1) shadowEffect.parameters.append(v) effect = None if hasattr(meshArea, 'effect') and meshArea.effect: effect = meshArea.effect elif hasattr(meshArea, 'effectReversed') and meshArea.effectReversed: effect = meshArea.effectReversed if type(effect) is not trinity.Tr2Effect: return if effect and isDecal: for p in effect.parameters: if p.name == 'TransformUV0': v = trinity.Tr2Vector4Parameter() v.name = p.name v.value = p.value shadowEffect.parameters.append(v) elif p.name == 'CutMaskInfluence': v = trinity.Tr2FloatParameter() v.name = p.name v.value = p.value shadowEffect.parameters.append(v) for r in effect.resources: if r.name == 'DiffuseMap' or r.name == 'CutMaskMap': t = trinity.TriTexture2DParameter() t.name = r.name t.SetResource(r.resource) shadowEffect.resources.append(t) shadowEffect.RebuildCachedData() if effect: pdCcf.AddWeakBlue(self, 'meshAreaShadowEffect', meshArea, shadowEffect) pdCcf.AddWeakBlue(self, 'meshAreaOriginalEffect', meshArea, meshArea.effect)
def createMeshAreaParams(self, meshArea, isDecal, isCloth=False, isTranslucent=False): shadowEffect = trinity.Tr2Effect() shadowEffect.effectFilePath = SPOTLIGHT_SHADOW_EFFECT if not isCloth else SPOTLIGHT_SHADOW_EFFECT_CLOTH v = trinity.Tr2Vector4Parameter() v.name = 'spotlight' v.value = (float(isDecal), 1.0 / self.shadowResolution, float(isTranslucent), 1) shadowEffect.parameters.append(v) effect = None if hasattr(meshArea, 'effect') and meshArea.effect: effect = meshArea.effect elif hasattr(meshArea, 'effectReversed') and meshArea.effectReversed: effect = meshArea.effectReversed if type(effect) is not trinity.Tr2Effect: return if effect and isDecal: for p in effect.parameters: if p.name == 'TransformUV0': v = trinity.Tr2Vector4Parameter() v.name = p.name v.value = p.value shadowEffect.parameters.append(v) elif p.name == 'CutMaskInfluence': v = trinity.Tr2FloatParameter() v.name = p.name v.value = p.value shadowEffect.parameters.append(v) for r in effect.resources: if r.name == 'DiffuseMap' or r.name == 'CutMaskMap': t = trinity.TriTexture2DParameter() t.name = r.name t.SetResource(r.resource) shadowEffect.resources.append(t) shadowEffect.RebuildCachedData() if effect: PD.AddWeakBlue(self, 'meshAreaShadowEffect', meshArea, shadowEffect) PD.AddWeakBlue(self, 'meshAreaOriginalEffect', meshArea, meshArea.effect)
def PatternBlitTexture(self, pattern, detail, zone, overlay, patterncolor1, patterncolor2, patterncolor3, color2, color3, subrect = None, patternTransform = (0, 0, 8, 8), patternRotation = 0.0, addAlpha = False, skipAlpha = False, srcRect = None): effect = self.MakeEffect('PatternBlit') effect.StartUpdate() res = [] res.append(self.CreateResource(effect, 'PatternMap', pattern, 'PatternReverseUV')) res.append(self.CreateResource(effect, 'DetailMap', detail, 'DetailReverseUV')) res.append(self.CreateResource(effect, 'ZoneMap', zone, 'ZoneReverseUV')) res.append(self.CreateResource(effect, 'OverlayMap', overlay, 'OverlayReverseUV')) effect.resources.extend(res) param = [] param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'PatternColor1', patterncolor1)) param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'PatternColor2', patterncolor2)) param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'PatternColor3', patterncolor3)) param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'PatternTransform', patternTransform)) param.append(self.CreateParameter(trinity.Tr2FloatParameter(), 'PatternRotation', patternRotation)) param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'Color2', color2)) param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'Color3', color3)) if srcRect: param.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), 'SourceUVs', srcRect)) effect.parameters.extend(param) effect.EndUpdate() self.renderJob.SetRenderState(trinity.D3DRS_SEPARATEALPHABLENDENABLE, 1) self.renderJob.SetRenderState(trinity.D3DRS_BLENDOPALPHA, trinity.TRIBLENDOP_ADD) self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ONE) if skipAlpha: self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ZERO) else: self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ONE) if addAlpha: self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ONE) else: self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ZERO) self.CompositeTexture(effect, subrect)
def ConvertDepthNormalAreaToTr2ShaderMaterial(area): if area.effect is None: return 0 if type(area.effect) is trinity.Tr2ShaderMaterial: return 0 originalEffect = area.effect newMaterial = trinity.Tr2ShaderMaterial() newMaterial.highLevelShaderName = 'NormalDepth' if 'skinned' in originalEffect.effectFilePath.lower(): if 'decal' in originalEffect.effectFilePath.lower(): newMaterial.name = 'Skinned_Cutout_NormalDepth' newMaterial.defaultSituation = 'AlphaCutout' elif 'alphatest' in originalEffect.effectFilePath.lower(): newMaterial.name = 'Skinned_Cutout_NormalDepth' newMaterial.defaultSituation = 'AlphaCutout' else: newMaterial.name = 'Skinned_Opaque_NormalDepth' newMaterial.defaultSituation = '' elif 'decal' in originalEffect.effectFilePath.lower(): newMaterial.name = 'Cutout_NormalDepth' newMaterial.defaultSituation = 'AlphaCutout' elif 'alphatest' in originalEffect.effectFilePath.lower(): newMaterial.name = 'Cutout_NormalDepth' newMaterial.defaultSituation = 'AlphaCutout' else: newMaterial.name = 'Opaque_NormalDepth' newMaterial.defaultSituation = '' newParam = CopyResourceByName(area.effect, 'NormalMap') if newParam is not None: newMaterial.parameters['NormalMap'] = newParam newParam = CopyResourceByName(area.effect, 'SpecularMap') if newParam is not None: newMaterial.parameters['SpecularMap'] = newParam newParam = CopyVector4Parameter(area.effect, 'TransformUV0') if newParam is not None: newMaterial.parameters['TransformUV0'] = newParam newParam = CopyVector4Parameter(area.effect, 'MaterialSpecularCurve') if newParam is not None: newMaterial.parameters['MaterialSpecularCurve'] = newParam newParam = CopyVector4Parameter(area.effect, 'MaterialLibraryID') if newParam is None: newParam = trinity.Tr2Vector4Parameter() newParam.name = 'MaterialLibraryID' newParam.value = (11, 0, 0, 0) newMaterial.parameters['MaterialLibraryID'] = newParam if 'decal' in originalEffect.effectFilePath.lower(): newParam = CopyVector4Parameter(area.effect, 'MaterialDiffuseColor') if newParam is not None: newMaterial.parameters['MaterialDiffuseColor'] = newParam newParam = CopyResourceByName(area.effect, 'DiffuseMap') if newParam is not None: newMaterial.parameters['DiffuseMap'] = newParam newParam = CopyFloatParameter(area.effect, 'CutMaskInfluence') if newParam is not None: newMaterial.parameters['CutMaskInfluence'] = newParam area.effect = newMaterial return 1
def FindOrAddVec4(effect, name): for r in effect.parameters: if r.name == name: return r p = trinity.Tr2Vector4Parameter() p.name = name effect.parameters.append(p) return p
def CopyVector4Parameter(effect, parameterName): newParameter = trinity.Tr2Vector4Parameter() newParameter.name = parameterName originalParam = FindParameterByName(effect, parameterName) if originalParam is not None: newParameter.value = originalParam.value else: return return newParameter
def TwistNormalBlitTexture(self, path, strength, subrect = None, srcRect = None): effect = self.MakeEffect('TwistNormalBlit') self.AppendResource(effect, 'Texture', path, 'TextureReverseUV') self.AppendParameter(effect, trinity.Tr2FloatParameter(), 'Strength', strength) if srcRect: self.AppendParameter(effect, trinity.Tr2Vector4Parameter(), 'SourceUVs', srcRect) self.renderJob.SetRenderState(trinity.D3DRS_SEPARATEALPHABLENDENABLE, 1) self.renderJob.SetRenderState(trinity.D3DRS_BLENDOPALPHA, trinity.TRIBLENDOP_ADD) self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ZERO) self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ONE) self.CompositeTexture(effect, subrect)
def FindOrAddVec4(effect, name): """ Find a vector4 with this name, or create it. Returns the found/created Vector4Parameter """ for r in effect.parameters: if r.name == name: return r p = trinity.Tr2Vector4Parameter() p.name = name effect.parameters.append(p) return p
def FillColor(self, color, subrect = None, skipAlpha = False, addAlpha = False): effect = self.MakeEffect('ColorFill') self.AppendParameter(effect, trinity.Tr2Vector4Parameter(), 'color1', color) self.renderJob.SetRenderState(trinity.D3DRS_SEPARATEALPHABLENDENABLE, 1) self.renderJob.SetRenderState(trinity.D3DRS_BLENDOPALPHA, trinity.TRIBLENDOP_ADD) if skipAlpha: self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ZERO) else: self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ONE) if addAlpha: self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ONE) else: self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ZERO) self.CompositeTexture(effect, subrect)
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 _FindAreaHighlightParameters(self, area, highlightAreas, highlightParameters, highlight): if len(highlightAreas) > 0 and area.name not in highlightAreas: return False if area.effect is None or type(area.effect) != trinity.Tr2ShaderMaterial: return False if 'MaterialHighlight' not in area.effect.parameters: if highlight: parameter = trinity.Tr2Vector4Parameter() parameter.name = 'MaterialHighlight' parameter.value = (0, 0, 0, 0) area.effect.parameters['MaterialHighlight'] = parameter highlightParameters.append(parameter) return True else: highlightParameters.append(area.effect.parameters['MaterialHighlight']) return False
def BlitTexture(self, path, maskPath, weight, subrect=None, addAlpha=False, skipAlpha=False, srcRect=None, multAlpha=False, isNormalMap=False): effect = self.MakeEffect('SimpleBlit') self.AppendResource(effect, 'Texture', path, 'TextureReverseUV', mapType='N' if isNormalMap else '') self.AppendResource(effect, 'MaskMap', maskPath, 'MaskReverseUV') self.AppendParameter(effect, trinity.Tr2FloatParameter(), 'Strength', weight) if multAlpha: self.AppendParameter(effect, trinity.Tr2FloatParameter(), 'MultAlpha', 1.0) if srcRect: self.AppendParameter(effect, trinity.Tr2Vector4Parameter(), 'SourceUVs', srcRect) self.renderJob.SetRenderState(trinity.D3DRS_SEPARATEALPHABLENDENABLE, 1) self.renderJob.SetRenderState(trinity.D3DRS_BLENDOPALPHA, trinity.TRIBLENDOP_ADD) if skipAlpha: self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ZERO) else: self.renderJob.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ONE) if addAlpha: self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ONE) else: self.renderJob.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ZERO) self.CompositeTexture(effect, subrect)
def FindOrMakeAlphathreshold(self, effect, v1, v2, v3, v4): """ find a alpha threshold, or make one.""" for i, each in enumerate(effect.constParameters): if each[0] == 'AlphaThreshold': del effect.constParameters[i] break nodes = nodemanager.FindNodes(effect.parameters, 'AlphaThreshold', 'trinity.Tr2Vector4Parameter') res = None if nodes: res = nodes[0] else: res = trinity.Tr2Vector4Parameter() res.name = 'AlphaThreshold' if res: res.v1 = v1 res.v2 = v2 res.v3 = v3 res.v4 = v4 return res
def AddMaterialParam(material, name, value): if type(value) == trinity.TriTextureRes: param = trinity.TriTexture2DParameter() param.name = name param.SetResource(value) elif type(value) == trinity.Tr2RenderTarget: param = trinity.TriTexture2DParameter() param.name = name t = trinity.TriTextureRes(value) param.SetResource(t) elif type(value) == trinity.Tr2DepthStencil: param = trinity.TriTexture2DParameter() param.name = name t = trinity.TriTextureRes(value) param.SetResource(t) else: param = trinity.Tr2Vector4Parameter() param.name = name param.value = value material.parameters[name] = param
def Create3DRender(self): self.renderTexture = trinity.TriTextureParameter() self.renderTexture.name = 'DiffuseMap' self.renderColor = trinity.Tr2Vector4Parameter() 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) if self.trackType == self.TRACKTYPE_BALL: self.transform = trinity.EveRootTransform() else: self.transform = trinity.EveTransform() if self.faceCamera: self.transform.modifier = 1 self.transform.mesh = self.renderMesh self.sceneParent.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 _FindAreaHighlightParameters(self, area, highlightAreas, highlightParameters, highlight): """ Searches for 'MaterialHighlight' on area shader and creates one if needed. Returns True iff the new parameter was created (and the shader needs rebinding). """ if len(highlightAreas) > 0 and area.name not in highlightAreas: return False if area.effect is None or type( area.effect) != trinity.Tr2ShaderMaterial: return False if 'MaterialHighlight' not in area.effect.parameters: if highlight: parameter = trinity.Tr2Vector4Parameter() parameter.name = 'MaterialHighlight' parameter.value = (0, 0, 0, 0) area.effect.parameters['MaterialHighlight'] = parameter highlightParameters.append(parameter) return True else: highlightParameters.append( area.effect.parameters['MaterialHighlight']) return False
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 Finalize(self, format, w, h, generateMipmap = False, textureToCopyTo = None, compressionSettings = None, mapType = None): isPC = not blue.sysinfo.isTransgaming doCompression = compressionSettings is not None and compressionSettings.compressTextures and compressionSettings.AllowCompress(mapType) and isPC if doCompression: textureToCopyTo = None if not self.isReady: raise AttributeError('isReady must be true when Finalize() is called.') newParams = [] lastFx = None for r in iter(self.texturesWithCutouts): cutout = [r[0].cutoutX, r[0].cutoutY, r[0].cutoutWidth, r[0].cutoutHeight] if r[4]: cutout = r[4] if lastFx is not None and r[1] != lastFx: lastFx.StartUpdate() lastFx.parameters.extend(newParams) lastFx.EndUpdate() newParams = [] lastFx = r[1] newParams.append(self.CreateParameter(trinity.Tr2Vector4Parameter(), r[2], cutout)) if lastFx is not None: lastFx.StartUpdate() lastFx.parameters.extend(newParams) lastFx.EndUpdate() def FindOrAddFloat(effect, name): for r in effect.parameters: if r.name == name: return r p = trinity.Tr2FloatParameter() p.name = name effect.parameters.append(p) return p for step in iter(self.renderJob.steps): if type(step) == trinity.TriStepRenderEffect: for res in step.effect.resources: mapFormat = res.resource.format if mapFormat == trinity.PIXEL_FORMAT.R8_UNORM: v = FindOrAddFloat(step.effect, res.name.lower() + '_L8') v.value = 1.0 elif mapFormat == trinity.PIXEL_FORMAT.R8G8_UNORM: v = FindOrAddFloat(step.effect, res.name.lower() + '_L8A8') v.value = 1.0 r = self.texturesByResourceID.get(id(res.resource)) if r: mapName = r[3] if mapName == 'N' and mapFormat == trinity.PIXEL_FORMAT.R8G8_UNORM: v = FindOrAddFloat(step.effect, res.name.lower() + '_blitAsNormal') v.value = 1.0 self.renderJob.PopDepthStencil() self.renderJob.PopRenderTarget() self.renderJob.GenerateMipMaps(self.renderTarget) if textureToCopyTo is not None: self.renderJob.CopyRenderTarget(textureToCopyTo, self.renderTarget) self.renderJob.ScheduleChained() try: self.renderJob.WaitForFinish() except Exception: self.renderJob.CancelChained() raise self.texturesWithCutouts = [] self.texturesByResourceID.clear() self.isDone = True if self.renderJob.status != trinity.RJ_DONE: return if not doCompression: if textureToCopyTo is not None: return textureToCopyTo tex = trinity.TriTextureRes() tex.CreateAndCopyFromRenderTarget(self.renderTarget) return tex hostBitmap = trinity.Tr2HostBitmap(self.renderTarget) tex = trinity.TriTextureRes() compressionFormat = COMPRESS_DXT5n if mapType is NORMAL_MAP else COMPRESS_DXT5 hostBitmap.Compress(compressionFormat, compressionSettings.qualityLevel, tex) while not tex.isPrepared: blue.synchro.Yield() return tex