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)
예제 #2
0
 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)
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
 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
예제 #7
0
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)
예제 #8
0
 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)
예제 #11
0
        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)
예제 #12
0
 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)
예제 #13
0
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
예제 #14
0
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
예제 #15
0
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
예제 #16
0
 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
예제 #18
0
 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)
예제 #19
0
    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)
예제 #20
0
 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)
예제 #22
0
    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
예제 #23
0
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
예제 #24
0
파일: ui3d.py 프로젝트: connoryang/1v1dec
 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
예제 #25
0
 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
예제 #26
0
 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)
예제 #27
0
    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