//----------------------------------------------------------------------------

    private static void ApplyPKImportSetting(PKFxFxAsset.DependencyDesc dependency, string path)
    {
        string fExt = Path.GetExtension(path);

        if (PKFxManager.IsSupportedTextureExtension(fExt))
        {
            TextureImporter importer = AssetImporter.GetAtPath(path) as TextureImporter;
            bool            reimport = false;
            if (importer == null)
            {
                return;
            }
            if (importer.sRGBTexture != !dependency.m_IsTextureLinear)
            {
                importer.sRGBTexture = !dependency.m_IsTextureLinear;
                reimport             = true;
            }
            if (dependency.m_IsTextureSampler)
            {
                importer.isReadable = true;
                reimport            = true;
            }
            if (reimport)
            {
                importer.SaveAndReimport();
            }
        }
    }
Exemple #2
0
    public override void            SetupMeshRenderer(PKFxManagerImpl.SBatchDesc batchDesc, GameObject gameObject, PKFxMeshInstancesRenderer meshRenderer)
    {
        if (batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_Distortion))
        {
            gameObject.layer = PKFxManagerImpl.m_DistortionLayer;
        }

        PKFxFxAsset.DependencyDesc DepDesc = PKFxManager.GetBuiltAsset().m_Dependencies.Find(x => batchDesc.m_MeshAsset.Contains(x.m_Path));
        if (DepDesc != null)
        {
            GameObject       meshGO = DepDesc.m_Object as GameObject;
            List <Mesh>      meshes = new List <Mesh>();
            List <Matrix4x4> trans  = new List <Matrix4x4>();

            MeshFilter meshFilter = meshGO.GetComponent <MeshFilter>();
            if (meshFilter != null)
            {
                meshes.Add(meshFilter.sharedMesh);
                trans.Add(meshGO.transform.localToWorldMatrix);
            }
            if (meshes.Count == 0)
            {
                MeshFilter[] meshFilters = meshGO.GetComponentsInChildren <MeshFilter>();
                if (batchDesc.m_SubMeshID == -1)
                {
                    for (int i = 0; i < meshFilters.Length; ++i)
                    {
                        meshes.Add(meshFilters[i].sharedMesh);
                        trans.Add(meshGO.transform.localToWorldMatrix * meshFilters[i].transform.localToWorldMatrix);
                    }
                }
                else if (meshFilters.Length > batchDesc.m_SubMeshID)
                {
                    meshes.Add(meshFilters[batchDesc.m_SubMeshID].sharedMesh);
                    trans.Add(meshGO.transform.localToWorldMatrix * meshFilters[batchDesc.m_SubMeshID].transform.localToWorldMatrix);
                }
            }

            meshRenderer.m_MeshesImportTransform = trans.ToArray();
            meshRenderer.m_Meshes = meshes.ToArray();
        }
        meshRenderer.m_CastShadow = batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_CastShadow);
    }
    private static void OnEffectDependencyFound(IntPtr dependencyPath, int useInfoFlags)
    {
        if (dependencyPath == IntPtr.Zero)
        {
            return;
        }

        PKFxFxAsset.DependencyDesc depDesc = new PKFxFxAsset.DependencyDesc();

        depDesc.m_Path             = PKFxSettings.UnityPackFxPath + "/" + Marshal.PtrToStringAnsi(dependencyPath);
        depDesc.m_IsTextureLinear  = (useInfoFlags & (int)EUseInfoFlag.IsLinearTexture) != 0;
        depDesc.m_IsMeshRenderer   = (useInfoFlags & (int)EUseInfoFlag.IsMeshRenderer) != 0;
        depDesc.m_IsMeshSampler    = (useInfoFlags & (int)EUseInfoFlag.IsMeshSampler) != 0;
        depDesc.m_IsTextureSampler = (useInfoFlags & (int)EUseInfoFlag.IsTextureSampler) != 0;
        if (depDesc.m_IsMeshRenderer && Path.GetExtension(depDesc.m_Path).CompareTo(".pkmm") == 0)
        {
            depDesc.m_Path = Path.ChangeExtension(depDesc.m_Path, ".fbx");
        }
        else
        {
            depDesc.m_IsMeshRenderer = false;
        }

        // if possible, add an argument to this callback to tell if the dependency will be used for distortion,
        // call PKFxImporter.SRGBEnabledOnTexture to check if the sRGB is enable and log a warning (see in PKFxImporter.InitDependencies)
        int idx = m_CurrentlyImportedAsset.m_Dependencies.FindIndex(x => x.m_Path == depDesc.m_Path);

        if (idx < 0)
        {
            m_CurrentlyImportedAsset.m_Dependencies.Add(depDesc);
        }
        else
        {
            PKFxFxAsset.DependencyDesc current = m_CurrentlyImportedAsset.m_Dependencies[idx];
            current.m_IsTextureLinear  = current.m_IsTextureLinear ? true : depDesc.m_IsTextureLinear;
            current.m_IsMeshRenderer   = current.m_IsMeshRenderer ? true : depDesc.m_IsMeshRenderer;
            current.m_IsMeshSampler    = current.m_IsMeshSampler ? true : depDesc.m_IsMeshSampler;
            current.m_IsTextureSampler = current.m_IsTextureSampler ? true : depDesc.m_IsTextureSampler;
        }
    }
Exemple #4
0
    public static Texture GetTextureLinear(PKFxManagerImpl.SBatchDesc batchDesc)
    {
        Texture distoTexture = null;

        if (batchDesc.m_NormalMap != null)
        {
            bool isLinear = batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_Distortion);
            PKFxFxAsset.DependencyDesc DepDesc = null;

            if (!isLinear)
            {
                return(null);
            }

            string path = Path.GetDirectoryName(batchDesc.m_NormalMap) + "/" + Path.GetFileNameWithoutExtension(batchDesc.m_NormalMap) + "_linear" + Path.GetExtension(batchDesc.m_NormalMap);
            DepDesc = PKFxManager.GetBuiltAsset().m_Dependencies.Find(x => path.Contains(x.m_Path));

            if (DepDesc == null)
            {
                DepDesc = PKFxManager.GetBuiltAsset().m_Dependencies.Find(x => batchDesc.m_NormalMap.Contains(x.m_Path));
            }
            if (DepDesc != null)
            {
                distoTexture = DepDesc.m_Object as Texture;
            }

            if (distoTexture != null)
            {
                if (batchDesc.m_Type != PKFxManagerImpl.ERendererType.Ribbon)
                {
                    distoTexture.wrapMode = TextureWrapMode.Clamp;
                }
            }
            else
            {
                Debug.LogError("[PKFX] Error while trying to create linear texture. Try to reimport \"" + batchDesc.m_NormalMap + "\" and check if its format is compatible with Unity.");
            }
        }
        return(distoTexture);
    }
 internal static void AddSound(PKFxFxAsset.DependencyDesc depDesc)
 {
     m_Sounds[depDesc.m_Path] = depDesc.m_Object as AudioClip;
 }
Exemple #6
0
    public override Material        ResolveParticleMaterial(PKFxManagerImpl.SBatchDesc batchDesc)
    {
        Material customMat = TryFindAndInstantiateCustomMaterial(batchDesc);

        if (customMat != null)
        {
            return(customMat);
        }

        Shader shader = ResolveShader(batchDesc);

        Debug.Assert(shader != null);
        Material material = new Material(shader);

        // Set the diffuse texture:
        Texture diffuseTexture = GetTextureDiffuse(batchDesc);

        material.mainTexture = diffuseTexture;

        // Set the material uniforms:
        material.SetInt("_UniformFlags", batchDesc.m_UniformFlags);

        // We can stop here if the material is for a mesh particle:
        if (batchDesc.m_Type == PKFxManagerImpl.ERendererType.Mesh)
        {
            return(material);
        }

        // Set the alpha remap texture
        if (batchDesc.m_AlphaRemap != null)
        {
            string path = Path.GetDirectoryName(batchDesc.m_AlphaRemap) + "/" + Path.GetFileNameWithoutExtension(batchDesc.m_AlphaRemap) + "_linear" + Path.GetExtension(batchDesc.m_AlphaRemap);
            PKFxFxAsset.DependencyDesc DepDesc = PKFxManager.GetBuiltAsset().m_Dependencies.Find(x => path.Contains(x.m_Path));
            if (DepDesc != null)
            {
                Texture alphaRemapTexture = DepDesc.m_Object as Texture;
                alphaRemapTexture.wrapMode = TextureWrapMode.Clamp;
                Debug.Assert(alphaRemapTexture != null);
                material.SetTexture("_AlphaMap", alphaRemapTexture);
            }
        }

        // Set the blend mode:
        int srcMode = 0;
        int dstMode = 0;

        // Additive and distortion
        if (batchDesc.HasUniformFlag(PKFxManagerImpl.EUniformFlags.Is_Additive) ||
            batchDesc.HasUniformFlag(PKFxManagerImpl.EUniformFlags.Is_AdditiveNoAlpha) ||
            batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_Distortion))
        {
            srcMode = (int)UnityEngine.Rendering.BlendMode.One;
            dstMode = (int)UnityEngine.Rendering.BlendMode.One;
        }
        else if (batchDesc.HasUniformFlag(PKFxManagerImpl.EUniformFlags.Is_AdditiveAlphaBlend))
        {
            srcMode = (int)UnityEngine.Rendering.BlendMode.One;
            dstMode = (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha;
        }
        else         // Alpha blended
        {
            srcMode = (int)UnityEngine.Rendering.BlendMode.SrcAlpha;
            dstMode = (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha;
        }

        material.SetInt("_SrcBlendMode", srcMode);
        material.SetInt("_DstBlendMode", dstMode);

        if (IsUI(batchDesc.m_UserData))
        {
            material.SetInt("_ZTestMode", (int)UnityEngine.Rendering.CompareFunction.Always);
        }
        else
        {
            material.SetInt("_ZTestMode", (int)UnityEngine.Rendering.CompareFunction.LessEqual);
        }

        // Set the shader variation:
        if (batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_AlphaRemap))
        {
            material.EnableKeyword("PK_HAS_ALPHA_REMAP");
        }
        if (batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_AnimBlend))
        {
            material.EnableKeyword("PK_HAS_ANIM_BLEND");
        }
        if (batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_Distortion))
        {
            material.EnableKeyword("PK_HAS_DISTORTION");
        }
        if (batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_Lighting))
        {
            material.EnableKeyword("PK_HAS_LIGHTING");
        }
        if (batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_RibbonComplex))
        {
            material.EnableKeyword("PK_HAS_RIBBON_COMPLEX");
        }
        if (batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_Color))
        {
            material.EnableKeyword("PK_HAS_COLOR");
        }
        if (batchDesc.HasMaterialFlag(PKFxManagerImpl.EMaterialFlags.Has_Soft) && PKFxSettings.EnableSoftParticles)
        {
            material.EnableKeyword("PK_HAS_SOFT");
            material.SetFloat("_InvSoftnessDistance", batchDesc.m_InvSofnessDistance);
        }
        // Set the render queue:
        material.renderQueue = m_RenderQueue + batchDesc.m_DrawOrder;
        return(material);
    }