Ejemplo n.º 1
0
            Tuple <IRenderableTexture, float> IAlphaTexturesProvider.GetTexture(IDeviceContextHolder contextHolder, uint materialId)
            {
                if (!_cache.TryGetValue(materialId, out var result))
                {
                    if (_texturesProvider == null)
                    {
                        _texturesProvider = new Kn5TexturesProvider(_kn5, false);
                    }

                    result = new Tuple <IRenderableTexture, float>[] { null };

                    var material = _kn5.GetMaterial(materialId);
                    if (material != null && (material.BlendMode != Kn5MaterialBlendMode.Opaque || material.AlphaTested))
                    {
                        var shader       = material.ShaderName;
                        var normalsAlpha = shader == "ksPerPixelNM" || shader == "ksPerPixelNM_UV2" || shader.Contains("_AT") || shader == "ksSkinnedMesh";
                        if (normalsAlpha || !shader.Contains("MultiMap") && shader != "ksTyres" && shader != "ksBrakeDisc")
                        {
                            var textureName = material.GetMappingByName(normalsAlpha ? "txNormal" : "txDiffuse")?.Texture;
                            var alphaRef    = material.GetPropertyValueAByName("ksAlphaRef");
                            if (textureName != null && !shader.Contains("damage"))
                            {
                                result = new[] { Tuple.Create(_texturesProvider.GetTexture(contextHolder, textureName), alphaRef) };
                            }
                        }
                    }

                    _cache[materialId] = result;
                }

                return(result[0]);
            }
Ejemplo n.º 2
0
            Tuple <IRenderableTexture, float> INormalsNormalTexturesProvider.GetTexture(IDeviceContextHolder contextHolder, uint materialId)
            {
                if (!_cache.TryGetValue(materialId, out var result))
                {
                    if (_texturesProvider == null)
                    {
                        _texturesProvider = new Kn5TexturesProvider(_kn5, false);
                    }

                    var material    = _kn5.GetMaterial(materialId);
                    var textureName = material?.GetMappingByName("txNormal")?.Texture;
                    if (textureName != null && !material.ShaderName.Contains("damage"))
                    {
                        var texture = _texturesProvider.GetTexture(contextHolder, textureName);
                        result = new[] { Tuple.Create(texture, material.GetPropertyValueAByName("normalMult") + 1f) };
                    }
                    else
                    {
                        result = new Tuple <IRenderableTexture, float>[] { null };
                    }

                    _cache[materialId] = result;
                }

                return(result[0]);
            }