Unity3d 在Unity中,如何使网格成为“a”;门户网站;或显示底层图像的裁剪

Unity3d 在Unity中,如何使网格成为“a”;门户网站;或显示底层图像的裁剪,unity3d,Unity3d,在Unity中,我想创建一种效果,其中任意形状(四边形或立方体)充当显示图像的“入口”。无论对象以何种方式旋转,或者摄影机透视图是什么,“入口内”的图像始终面向同一方向 在这张图像中,我有一个3D平面,它显示了棋盘格图案纹理,就像场景中的一个切口。无论以何种方式旋转平面对象或放置摄影机,门户内的图像都保持完全固定。内部图像不会移动或扭曲 我希望能够对场景中的多个对象执行此操作。所以一个球体可以是一个固定的狗图片的入口,或者一个立方体可以是一个平铺图案的入口。即使知道这种效应的名称也会有所帮助。

在Unity中,我想创建一种效果,其中任意形状(四边形或立方体)充当显示图像的“入口”。无论对象以何种方式旋转,或者摄影机透视图是什么,“入口内”的图像始终面向同一方向

在这张图像中,我有一个3D平面,它显示了棋盘格图案纹理,就像场景中的一个切口。无论以何种方式旋转平面对象或放置摄影机,门户内的图像都保持完全固定。内部图像不会移动或扭曲


我希望能够对场景中的多个对象执行此操作。所以一个球体可以是一个固定的狗图片的入口,或者一个立方体可以是一个平铺图案的入口。即使知道这种效应的名称也会有所帮助。是否必须编写着色器才能执行此操作?

这称为屏幕空间着色器。大多数着色器将根据像素在网格上的位置计算uv坐标,这些着色器使用屏幕上的位置。这里有一个关于他们的例子

热提示:这通常与渲染到渲染器的第二个摄影机一起使用,以便创建三维空间的入口

您可能需要使用平铺来获得正确的纹理纵横比,此着色器假定它与屏幕相同,即16:9

Shader "Ahoy/Screen Space Texture"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "Queue"="Transparent" "RenderType"="Transparent"}

        Pass
        {
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
                float2 uv : TEXCOORD0;
                float4 screenPos:TEXCOORD1;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                o.screenPos = ComputeScreenPos(o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                float2 uvScreen = i.screenPos.xy / i.screenPos.w;
                uvScreen = TRANSFORM_TEX(uvScreen,_MainTex);
                return tex2D(_MainTex, uvScreen);
            }
            ENDCG
        }
    }
}



您需要编写一个着色器,但它相当简单。听起来你想要的是相对于屏幕而不是“世界”固定的“背景”图像。你要寻找的术语是“屏幕空间纹理”(或UV)。