如标题所述,我只想渲染纹理的某些部分。例如,我具有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
答案 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"
}
您可以将此着色器保存到项目的“着色器”目录中,并创建使用它的材质。希望这会有所帮助。