首页 > 解决方案 > 仅渲染 Unity 纹理的某些部分

问题描述

正如标题所描述的,我只想渲染纹理的某些部分。例如,我有一个 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

标签: unity3dtexturesshader

解决方案


以下基本表面着色器“移除”了 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"
}

您可以将此 Shader 保存到项目的 Shader 目录中并创建使用它的材质。希望这可以帮助。


推荐阅读