在添加新的着色器时,如何才能保持角色的主要纹理?

问题描述 投票:-1回答:1

我创建了一个pbr着色器图。问题是当我改变材质来使用新的着色器时,角色的纹理也在改变。有什么方法可以让新的着色器保持原来的纹理?

这是一个原始材料的截图,使用与原始着色器的字符。

Original materials with the selected original shader

这是原始纹理。

Original textures

这是带有脚本的角色网格检查器设置。

Character mesh

这是检查器中新的着色器设置。

New shader settings

这是脚本。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public Shader _shader;

    // Start is called before the first frame update
    void Start()
    {
        Store();
    }

    // Update is called once per frame
    void Update()
    {

    }

    private void Store()
    {
        Texture tex = gameObject.GetComponent<Renderer>().material.GetTexture("_MainTex");
        gameObject.GetComponent<Renderer>().material.shader = _shader;
        gameObject.GetComponent<Renderer>().material.SetTexture("_MainTex", tex);
    }
}

当现在运行游戏时,它改变了新的着色器,但它没有保留原来的纹理。

我试着把脚本中的那行,也就是Store函数中的最后一行改成这样:但是没有什么变化。

gameObject.GetComponent<Renderer>().material.SetTexture("vanguard_diffuse", tex);

这种发光的线条是很好的,这是新的着色器应该做的效果,但我希望它能像第一张截图那样在原始纹理上做。

New shader

新的着色器使用pbr和hdr以及其他的东西来使角色慢慢消失,然后再显示出来,边缘有发光的颜色。我不知道怎么用在人物身上,用原来的纹理。

我刚刚做了这个教程,效果很好,但我希望现在能在角色的原始纹理上使用。

https:/www.youtube.comwatch?v=taMp1g1pBeE

c# unity3d shader
1个回答
1
投票

你需要从着色器图中的纹理中取样,并使用采样二维节点(我想是这样叫的)。然后你需要将这些节点的输出链接到输出节点的反射率和法线通道。如果你需要对多个纹理进行采样,或者想将你的其他着色器的东西添加到albedo中,你可以将这两个节点一起添加。

© www.soinside.com 2019 - 2024. All rights reserved.