【问题标题】:render only some parts of the texture Unity仅渲染 Unity 纹理的某些部分
【发布时间】:2018-08-03 11:07:26
【问题描述】:

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

【问题讨论】:

    标签: unity3d textures shader


    【解决方案1】:

    以下基本表面着色器“移除”了 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 目录中并创建使用它的材质。希望这会有所帮助。

    【讨论】:

    • 我认为他希望它只渲染 0/0 -> 50/50 之间的像素和 600/600 -> 1024/1024 之间的区域......也不确定统一的 UV 是否完整数字,我将不得不对此进行研究,但通常在着色器中它们介于 0f - 1f...
    • 你是对的。我更新了着色器以在 50/50 -> 600/600 之间进行剪辑。感谢您的提示。你对 UV 介于 0f 和 1f 之间也是正确的。这就是我使用_MainTex_TexelSize 计算像素坐标的原因。
    • 啊我完全错过了哈哈!但是嗯,你的if 声明不起作用......如果你 > 50 && u 50 && V 50)
    • 嗯,但这允许所有 4 个角都可以绘制,所以也许不是剪裁,而是写 if(u &lt; 50 &amp;&amp; v &lt; 50 || u &gt; 600 &amp;&amp; v &gt; 600) 然后绘制它,否则剪裁它...
    • 你是对的!现在它应该剪切 0/0 -> 50/50 和 600/600 -> 1024/1024 之外的像素。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    相关资源
    最近更新 更多