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 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')
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
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
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)
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
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)
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 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 _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()
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
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)
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)
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)
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
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
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)
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')
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
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
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
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
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 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
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)
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)
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 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)
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
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)