unity3d - 仅渲染 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
解决方案
以下基本表面着色器“移除”了 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 目录中并创建使用它的材质。希望这可以帮助。
推荐阅读
- web-scraping - 触发函数应用时 Azure 逻辑应用超时
- java - Edittext 在 android 中接受价格格式
- c# - C#第一次调用https api很慢,但是python没问题
- spring-boot - 必需:使用 Spring Boot 和 Java Config 测试 Apache Camel 的明确注释和 pom 依赖项
- c# - ASP.NET 项目中缺少 ControllerBase.File
- sitecore - 无法为 Sitecore 许可证检索 Coveo
- kotlin - Kotlin 数据类开销
- linux - 在不使用 systemctl 的情况下将启动脚本添加到 systemd
- javascript - 如何防止 auth0 第三方 cookie
- visual-studio - MSB3073 以代码 3 退出 - Visual Studio 2017 中的构建后事件