Esempio n. 1
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)
Esempio n. 2
0
    def BindCustomShaders(effect, useFastShaders, doll):
        path = effect.effectFilePath.lower()
        name = effect.name.lower()
        if 'glassshader' in path:
            for res in effect.resources:
                if res.name == 'GlassReflectionCube':
                    return

            res = trinity.TriTextureParameter()
            res.name = 'GlassReflectionCube'
            res.resourcePath = pdDef.GLASS_SHADER_REFLECTION_CUBE_PATH
            effect.resources.append(res)
        elif name.startswith('c_s2'):
            for res in effect.resources:
                if res.name == 'ClothingReflectionCube':
                    return

            res = trinity.TriTextureParameter()
            res.name = 'ClothingReflectionCube'
            res.resourcePath = 'res:/Texture/Global/GenericReflection_cube.dds'
            effect.resources.append(res)
            for name in ['CellReflectionMap', 'CellReflection2ndMap']:
                res = trinity.TriTextureParameter()
                res.name = name
                effect.resources.append(res)

        fastFx = '_fast.fx'
        if useFastShaders and fastFx not in path and path in pdDef.SHADERS_THAT_CAN_SWITCH_TO_FAST_SHADER_MODE:
            effect.effectFilePath = ApplySuffix(effect.effectFilePath[:-3], fastFx)
        elif doll.useDXT5N:
            effect.effectFilePath = ApplySuffix(effect.effectFilePath[:-3], '_dxt5n.fx')
Esempio n. 3
0
def CreateLineSet(pickEnabled = False, texturePath = None):
    lineSet = trinity.EveCurveLineSet()
    tex2D = trinity.TriTextureParameter()
    tex2D.name = 'TexMap'
    tex2D.resourcePath = texturePath or 'res:/UI/Texture/classes/MapView/lineSegment.dds'
    lineSet.lineEffect.resources.append(tex2D)
    overlayTex2D = trinity.TriTextureParameter()
    overlayTex2D.name = 'OverlayTexMap'
    overlayTex2D.resourcePath = 'res:/UI/Texture/classes/MapView/lineSegmentConstellation.dds'
    lineSet.lineEffect.resources.append(overlayTex2D)
    if not pickEnabled:
        lineSet.pickEffect = None
    return lineSet
Esempio n. 4
0
 def CreateCurvedLineSet(self, effectPath=None):
     lineSet = trinity.EveCurveLineSet()
     if effectPath is not None:
         lineSet.lineEffect.effectFilePath = effectPath
     texMap = trinity.TriTextureParameter()
     texMap.name = 'TexMap'
     texMap.resourcePath = 'res:/dx9/texture/UI/lineSolid.dds'
     lineSet.lineEffect.resources.append(texMap)
     overlayTexMap = trinity.TriTextureParameter()
     overlayTexMap.name = 'OverlayTexMap'
     overlayTexMap.resourcePath = 'res:/dx9/texture/UI/lineOverlay5.dds'
     lineSet.lineEffect.resources.append(overlayTexMap)
     return lineSet
Esempio n. 5
0
    def __CreateBakeEffect(self):
        self.effectHeight = trinity.Tr2Effect()
        if self.effectHeight is None:
            self.logger.error('Could not create effect for planet with id %s', self.itemID)
            return
        mainMesh = self.model.highDetail.children[0].meshLod
        if mainMesh is None:
            mainMesh = self.model.highDetail.children[0].mesh
            errorMsg = 'No LODs found on planet.\n'
            errorMsg += 'modelPath=%s\n'
            errorMsg += 'presetPath=%s\n'
            errorMsg += 'shaderPreset=%s\n'
            self.logger.error(errorMsg, self.modelPath, self.presetPath, str(self.attributes.shaderPreset))
        if len(mainMesh.transparentAreas) > 0:
            resPath = mainMesh.transparentAreas[0].effect.effectFilePath
        elif len(mainMesh.opaqueAreas) > 0:
            resPath = mainMesh.opaqueAreas[0].effect.effectFilePath
        else:
            self.logger.error('Unexpected program flow! Loading fallback shader.')
            resPath = 'res:/Graphics/Effect/Managed/Space/Planet/EarthlikePlanet.fx'
        resPath = resPath.replace('.fx', 'BlitHeight.fx')
        self.effectHeight.effectFilePath = resPath
        if self.__GetHeightMap1() is not None and self.__GetHeightMap2() is not None:
            param1 = trinity.TriTextureParameter()
            param1.name = 'NormalHeight1'
            self.heightMapResPath1 = GetGraphicFile(self.__GetHeightMap1())
            self.effectHeight.resources.append(param1)
            param2 = trinity.TriTextureParameter()
            param2.name = 'NormalHeight2'
            self.heightMapResPath2 = GetGraphicFile(self.__GetHeightMap2())
            self.effectHeight.resources.append(param2)
            param3 = trinity.Tr2FloatParameter()
            param3.name = 'Random'
            param3.value = float(self.itemID % 100)
            self.effectHeight.parameters.append(param3)
            param4 = trinity.Tr2FloatParameter()
            param4.name = 'TargetTextureHeight'
            param4.value = 2048
            self.effectHeight.parameters.append(param4)
        paramList = self.__GetPlanetShaderParameters('', 'trinity.Tr2Vector4Parameter')
        for param in paramList:
            self.effectHeight.parameters.append(param)

        paramList = self.__GetPlanetShaderParameters('', 'trinity.Tr2FloatParameter')
        for param in paramList:
            self.effectHeight.parameters.append(param)

        resList = self.__GetPlanetShaderParameters('', 'trinity.TriTextureParameter')
        for res in resList:
            self.effectHeight.resources.append(res)
Esempio n. 6
0
 def AddTex2D(self, effect, name, resourcePath = None):
     param = trinity.TriTextureParameter()
     param.name = name
     if resourcePath is not None:
         param.resourcePath = resourcePath
     effect.resources.append(param)
     return param
Esempio n. 7
0
    def BindInteriorShader(self, effect, wrinkleFx, doll, suffix):
        path = effect.effectFilePath.lower()
        if pdDef.DOLL_PARTS.HAIR not in path:
            if doll.currentLOD >= 0:
                if 'skinnedavatarbrdf' not in path:
                    effect.effectFilePath = '{0}{1}'.format(pdDef.INTERIOR_AVATAR_EFFECT_FILE_PATH[:-3], suffix)
                    for r in effect.resources:
                        if r.name == 'FresnelLookupMap':
                            break
                    else:
                        res = trinity.TriTextureParameter()
                        res.name = 'FresnelLookupMap'
                        res.resourcePath = pdDef.FRESNEL_LOOKUP_MAP
                        effect.resources.append(res)

            elif doll.currentLOD == pdDef.LOD_A:
                pass
            elif doll.currentLOD in [pdDef.LOD_SKIN]:
                pdPor.PortraitTools.BindSkinShader(effect, wrinkleFx, scattering=False, buildDataManager=doll.buildDataManager, gender=doll.gender, use_png=pdDef.USE_PNG, fxSuffix=suffix)
                pdPor.PortraitTools.BindLinearAvatarBRDF(effect, suffix)
            elif doll.currentLOD == pdDef.LOD_SCATTER_SKIN:
                pdPor.PortraitTools.BindSkinShader(effect, wrinkleFx, scattering=True, buildDataManager=doll.buildDataManager, gender=doll.gender, use_png=pdDef.USE_PNG, fxSuffix=suffix)
                pdPor.PortraitTools.BindLinearAvatarBRDF(effect, suffix)
        elif doll.currentLOD <= 0:
            pdPor.PortraitTools.BindHeroHairShader(effect, suffix)
Esempio n. 8
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)
Esempio n. 9
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)
Esempio n. 10
0
    def _ExpandOpaque(self, bodyPart, targetTex):
        eoMaskPath = 'res:/graphics/character/global/tattoomask/{0}_opaque_mask_{1}.dds'.format(self._gender, bodyPart)
        eoMaskRes = blue.resMan.GetResource(eoMaskPath)
        fx = trinity.Tr2Effect()
        fx.effectFilePath = EO_SHADERRES
        while eoMaskRes.isLoading or fx.effectResource.isLoading:
            PD.Yield()

        tex = trinity.TriTextureParameter()
        tex.name = 'Mask'
        tex.SetResource(eoMaskRes)
        fx.resources.append(tex)
        v = trinity.Tr2Vector2Parameter()
        v.name = 'gMaskSize'
        v.value = (eoMaskRes.width, eoMaskRes.height)
        fx.parameters.append(v)
        tex = trinity.TriTextureParameter()
        tex.name = 'Texture'
        tex.SetResource(targetTex)
        fx.resources.append(tex)
        v = trinity.Tr2Vector2Parameter()
        v.name = 'gTextureSize'
        v.value = (targetTex.width, targetTex.height)
        fx.parameters.append(v)
        fx.RebuildCachedData()
        vp = trinity.TriViewport()
        vp.width = targetTex.width
        vp.height = targetTex.height
        expandedRT = trinity.Tr2RenderTarget(vp.width, vp.height, 1, trinity.PIXEL_FORMAT.B8G8R8A8_UNORM)
        rj = trinity.CreateRenderJob('Expanding Opaque')
        rj.PushRenderTarget(expandedRT)
        rj.SetProjection(trinity.TriProjection())
        rj.SetView(trinity.TriView())
        rj.SetViewport(vp)
        rj.PushDepthStencil(None)
        rj.Clear((0.0, 0.0, 0.0, 0.0))
        rj.SetStdRndStates(trinity.RM_FULLSCREEN)
        rj.SetRenderState(trinity.D3DRS_SEPARATEALPHABLENDENABLE, 1)
        rj.SetRenderState(trinity.D3DRS_SRCBLENDALPHA, trinity.TRIBLEND_ONE)
        rj.SetRenderState(trinity.D3DRS_DESTBLENDALPHA, trinity.TRIBLEND_ZERO)
        rj.RenderEffect(fx)
        rj.SetRenderTarget(targetTex.wrappedRenderTarget)
        rj.RenderTexture(expandedRT)
        rj.PopRenderTarget()
        rj.PopDepthStencil()
        rj.ScheduleChained()
        rj.WaitForFinish()
Esempio n. 11
0
 def CreateLineset(self):
     lineSet = trinity.EveCurveLineSet()
     lineSet.scaling = (1.0, 1.0, 1.0)
     tex2D1 = trinity.TriTextureParameter()
     tex2D1.name = 'TexMap'
     tex2D1.resourcePath = 'res:/dx9/texture/UI/lineSolid.dds'
     lineSet.lineEffect.resources.append(tex2D1)
     return lineSet
Esempio n. 12
0
 def SetSkyboxTexture(self, texturePath):
     self.backgroundEffect = trinity.Tr2Effect()
     texture = trinity.TriTextureParameter()
     texture.name = 'EnvMap1'
     texture.resourcePath = texturePath
     self.backgroundEffect.resources.append(texture)
     self.backgroundEffect.effectFilePath = 'res:/Graphics/Effect/Managed/Interior/Static/EnvironmentCubemap.fx'
     self.backgroundCubemapPath = str(texturePath)
Esempio n. 13
0
            def AddEyeCube(effect):
                for res in effect.resources:
                    if res.name == 'EyeReflectionCube':
                        return

                res = trinity.TriTextureParameter()
                res.name = 'EyeReflectionCube'
                res.resourcePath = pdDef.EYE_SHADER_REFLECTION_CUBE_PATH
                effect.resources.append(res)
Esempio n. 14
0
 def ConstructLineSet(self):
     self.lineSet = trinity.EveCurveLineSet()
     self.lineSet.additive = True
     tex2D = trinity.TriTextureParameter()
     tex2D.name = 'TexMap'
     tex2D.resourcePath = 'res:/dx9/texture/UI/lineSolid.dds'
     self.lineSet.lineEffect.resources.append(tex2D)
     sm.GetService('sceneManager').GetActiveScene().objects.append(
         self.lineSet)
Esempio n. 15
0
def CopyResource(res):
    if res is None:
        return
    newRes = trinity.TriTextureParameter()
    newRes.name = res.name
    newRes.resourcePath = res.resourcePath
    if res.resourcePath == '' and res.resource is not None:
        newRes.SetResource(res.resource)
    return newRes
Esempio n. 16
0
 def ConstructDebugLineset(self):
     if hasattr(self, 'debugLineSet'):
         scene = sm.GetService('sceneManager').GetActiveScene()
         if self.debugLineSet in scene.objects:
             return
     self.debugLineSet = trinity.EveCurveLineSet()
     self.debugLineSet.scaling = (1.0, 1.0, 1.0)
     tex2D1 = trinity.TriTextureParameter()
     tex2D1.name = 'TexMap'
     tex2D1.resourcePath = 'res:/texture/global/lineSolid.dds'
     self.debugLineSet.lineEffect.resources.append(tex2D1)
     tex2D2 = trinity.TriTextureParameter()
     tex2D2.name = 'OverlayTexMap'
     tex2D2.resourcePath = 'res:/UI/Texture/Planet/link.dds'
     self.debugLineSet.lineEffect.resources.append(tex2D2)
     scene = sm.GetService('sceneManager').GetActiveScene()
     scene.objects.append(self.debugLineSet)
     return self.debugLineSet
Esempio n. 17
0
            def AddClothingCube(effect):
                for res in effect.resources:
                    if res.name == 'ClothingReflectionCube':
                        return

                res = trinity.TriTextureParameter()
                res.name = 'ClothingReflectionCube'
                res.resourcePath = 'res:/Texture/Global/GenericReflection_cube.dds'
                effect.resources.append(res)
Esempio n. 18
0
    def _GetEffectParameter(self, effect, name):
        try:
            param = _FindNamedItem(effect.resources, name)
        except KeyError:
            param = trinity.TriTextureParameter()
            param.name = name
            effect.resources.append(param)

        return (param, 'resourcePath')
Esempio n. 19
0
 def CreateLineSet(self,
                   lsName,
                   transform,
                   animationTexture=None,
                   scale=1.0):
     ls = trinity.EveCurveLineSet()
     ls.scaling = (scale, scale, scale)
     tex2D_1 = trinity.TriTextureParameter()
     tex2D_1.name = 'TexMap'
     tex2D_1.resourcePath = 'res:/texture/global/lineSolid.dds'
     ls.lineEffect.resources.append(tex2D_1)
     if animationTexture:
         tex2D_2 = trinity.TriTextureParameter()
         tex2D_2.name = 'OverlayTexMap'
         tex2D_2.resourcePath = animationTexture
         ls.lineEffect.resources.append(tex2D_2)
     self.lineSets[lsName] = ls
     transform.children.append(ls)
     self.transformsByLineSets[ls] = transform
     return ls
Esempio n. 20
0
def SetOrAddMap(effect, mapName, mapPath = None):
    for res in effect.resources:
        if res.name == mapName:
            if mapPath:
                res.resourcePath = mapPath
            return res

    map = trinity.TriTextureParameter()
    map.name = mapName
    if mapPath:
        map.resourcePath = mapPath
    effect.resources.append(map)
    return map
Esempio n. 21
0
def CreatePlanarLineSet(pickEnabled = False, texturePath = None):
    lineSet = trinity.EveCurveLineSet()
    lineSet.lineEffect = trinity.Tr2Effect()
    lineSet.lineEffect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpecialFX/Lines/Lines3DPlanar.fx'
    tex2D = trinity.TriTextureParameter()
    tex2D.name = 'TexMap'
    tex2D.resourcePath = texturePath or 'res:/dx9/texture/ui/linePlanarBase.dds'
    lineSet.lineEffect.resources.append(tex2D)
    if pickEnabled:
        lineSet.pickEffect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpecialFX/Lines/Lines3DPlanarPicking.fx'
    else:
        lineSet.pickEffect = None
    return lineSet
Esempio n. 22
0
def CopyResources(sourceEffect, targetMaterial, resourceNames):
    if hasattr(sourceEffect, 'resources'):
        for res in sourceEffect.resources:
            if res.name not in resourceNames or type(
                    res) != trinity.TriTextureParameter:
                continue
            newParameter = trinity.TriTextureParameter()
            newParameter.name = res.name
            newParameter.resourcePath = res.resourcePath
            if res.resourcePath == '' and res.resource is not None:
                newParameter.SetResource(res.resource)
            if type(targetMaterial) == trinity.Tr2Effect:
                targetMaterial.resources.append(newParameter)
            else:
                targetMaterial.parameters[res.name] = newParameter
Esempio n. 23
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)
Esempio n. 24
0
 def CreateResource(self, effect, paramName, resPath, cutoutName = None, paramType = None, mapType = ''):
     if paramType is None:
         paramType = trinity.TriTextureParameter()
     paramRes = None
     error = False
     skipLoad = False
     atlasUVs = None
     if not resPath:
         error = True
     elif type(resPath) in types.StringTypes:
         if type(resPath) == types.UnicodeType:
             resPath = str(resPath)
         if self.atlasData:
             paramRes, atlasUVs = self.atlasData.GetTexture(resPath)
         if not paramRes:
             if self.targetWidth > 0 and self.resData:
                 resDataEntry = self.resData.GetEntryByFullResPath(resPath)
                 if resDataEntry:
                     resPath = resDataEntry.GetMapResolutonMatch(resPath, self.targetWidth)
             paramRes = rm.GetResource(resPath)
             skipLoad = not paramRes.isLoading
     elif type(resPath) == trinity.TriTextureRes:
         paramRes = resPath
         skipLoad = True
     elif hasattr(resPath, 'resource'):
         paramRes = resPath.resource
     else:
         error = True
     if error or paramRes is None:
         raise Exception('Invalid resource passed to texture compositor!')
         sys.exc_clear()
     param = paramType
     param.name = paramName
     param.SetResource(paramRes)
     item = (paramRes,
      effect,
      cutoutName,
      mapType,
      atlasUVs)
     if cutoutName:
         self.texturesWithCutouts.append(item)
     if not skipLoad:
         self.texturesByResourceID[id(paramRes)] = item
         if paramRes not in self.resourcesToLoad:
             self.resourcesToLoad.append(paramRes)
     return param
Esempio n. 25
0
def makeBitmapStep(filePath,
                   scaleToFit=True,
                   color=(1.0, 1.0, 1.0, 1.0),
                   targetSize=None):
    tex = trinity.TriTextureParameter()
    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)
Esempio n. 26
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.TriTextureParameter()
                        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)
Esempio n. 27
0
 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
Esempio n. 28
0
def makeCubemapStep(filePath,
                    scaleToFit=True,
                    color=(1.0, 1.0, 1.0, 1.0),
                    cubeFace=0,
                    targetSize=None):
    tex = trinity.TriTextureParameter()
    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)
Esempio n. 29
0
                    def TransferArrayToTexture(cut, mat1, mat2, spec):
                        pixels = []

                        def GetFromArray(array, index, component = 0, default = 0):
                            if array is None or not hasattr(array, 'value') or index >= len(array.value):
                                return default
                            v = array.value[index]
                            if type(v) == trinity.TriVector4:
                                return v.data[component]
                            return v

                        OPT_CUTOUT = 8
                        OPT_DOUBLE_MATERIAL = 16
                        for x in xrange(32):
                            infoList = collapsedMeshes.get(mesh, [])
                            infoTuple = infoList[x] if x < len(infoList) else (0, 0, 0, 0)
                            permute = infoTuple[3]
                            table = paperDollPrePassFixup.MATERIAL_ID_TRANSPARENT_HACK_EXACT if infoTuple[1] == 2 else paperDollPrePassFixup.MATERIAL_ID_EXACT
                            r = int(0.5 + 100 * GetFromArray(cut, x))
                            if permute & OPT_CUTOUT:
                                r += 128
                            g = int(GetFromArray(mat1, x))
                            if permute & OPT_DOUBLE_MATERIAL:
                                b = int(GetFromArray(mat2, x))
                            else:
                                b = g
                            a = int(0.5 + 50 * GetFromArray(spec, x, component=2))
                            pixels.append((x, 0, (a << 24) + (r << 16) + (g << 8) + b))

                        hb = trinity.Tr2HostBitmap(32, 1, 1, trinity.PIXEL_FORMAT.B8G8R8A8_UNORM)
                        hb.SetPixels(0, pixels, 0)
                        lookup = trinity.TriTextureRes()
                        lookup.CreateFromHostBitmap(hb)
                        texParam = trinity.TriTextureParameter()
                        texParam.name = 'CollapsedMeshArrayLookup'
                        texParam.SetResource(lookup)
                        return texParam
Esempio n. 30
0
    def Initialize(self, size, speed, amplitude, tiling, texturePath):
        def TextureDestroyed():
            self.Destroy()

        texture = trinity.Tr2RenderTarget(size, size, 1,
                                          trinity.PIXEL_FORMAT.B8G8R8A8_UNORM)
        self.name = 'Caustics'
        self.size = size
        self.texture = blue.BluePythonWeakRef(texture)
        self.texture.callback = TextureDestroyed
        self.steps.append(trinity.TriStepPushRenderTarget(texture))
        self.steps.append(trinity.TriStepClear((0, 0, 0, 0)))
        self.steps.append(trinity.TriStepSetStdRndStates(
            trinity.RM_FULLSCREEN))
        material = trinity.Tr2ShaderMaterial()
        material.highLevelShaderName = 'Caustics'
        param = trinity.TriTextureParameter()
        param.name = 'Texture'
        param.resourcePath = texturePath
        material.parameters['Texture'] = param
        param = trinity.Tr2FloatParameter()
        param.name = 'Speed'
        param.value = speed
        material.parameters['Speed'] = param
        param = trinity.Tr2FloatParameter()
        param.name = 'Amplitude'
        param.value = amplitude
        material.parameters['Amplitude'] = param
        param = trinity.Tr2FloatParameter()
        param.name = 'Tiling'
        param.value = tiling
        material.parameters['Tiling'] = param
        material.BindLowLevelShader([])
        self.steps.append(trinity.TriStepRenderFullScreenShader(material))
        self.steps.append(trinity.TriStepPopRenderTarget())
        trinity.renderJobs.recurring.append(self)
        return trinity.TriTextureRes(texture)