仅渲染纹理Unity的某些部分

时间:2018-08-03 11:07:27

标签: unity3d textures shader

如标题所述,我只想渲染纹理的某些部分。例如,我具有1024 * 1024的纹理,现在我要渲染0/0 50/50像素点与600/600 1024/1024区域之间的区域(正方形)。

有可能这样吗? 也许您可以帮助我完成一些我需要执行的逻辑步骤,因为我真的不知道如何开始。 是的,我需要一个带有2个纹理槽的着色器和一个仅渲染某些部分的脚本^^

我认为这与此有关:https://answers.unity.com/questions/529814/how-to-have-2-different-objects-at-the-same-place.html

1 个答案:

答案 0 :(得分:0)

以下基本表面着色器“删除”了50/50至600/600之间的所有外部像素(这称为剪切):

Shader "Custom/ClippedTexture" {
    Properties {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader {
        Tags { "RenderType" = "Opaque" }

        CGPROGRAM

        #pragma surface surf Lambert

        struct Input {
            float2 uv_MainTex;
        };

        sampler2D _MainTex;
        float4 _MainTex_TexelSize;

        void surf (Input IN, inout SurfaceOutput o) {
            float u = IN.uv_MainTex.x * _MainTex_TexelSize.x;
            float v = IN.uv_MainTex.y * _MainTex_TexelSize.y;

            if((u < 51 && v < 51) || (u > 599 && v > 599)) {
                clip(-1); // skip pixel
            } else {
                o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
            }
        }
        ENDCG
    } 
    Fallback "Diffuse"
}

您可以将此着色器保存到项目的“着色器”目录中,并创建使用它的材质。希望这会有所帮助。