Unity之Shader Pass 的通用指令 LOD - 五

Pass 的通用指令 LOD

// 通过对SubShader 设定一个整形 Level Of Detail 即 LOD 数值,
//可以在运行时根据硬件设备的能力决定是否使用此shader, 
//以及使用哪一个层级的 SubShader 
//下面Shader中包含两个数值的LOD  LOD 600 和 LOD 500

Shader "Custom/PassOne" {
    Properties {
        //定义一个颜色
        _Color ("Main Color", Color) = (0, 0, 1, 0.5)
        //定义一个贴图
        _MainTex ("Base (RGB)", 2D) = "white" {} 
    }
    SubShader 
    {       
        Tags {"RenderType" = "Opaque" "IGNOREPROJECTOR" = "TRUE" "QUEUE" = "Transparent"}
        //在此设置该shader的LOD 为 600 如果机器能支持 LOD值 为 600 那么该shader执行该SubShader
        LOD 600

        Pass
        {
            Material
            {
                Diffuse [_Color]  // 使用定义的颜色为漫反射
                //或者  Diffuse (0, 1, 0, 1) 直接写颜色数值  
            }

            // 打开光照, 在此要打开,因为本shader 没写自发光,
            // 只能依靠反射世界中的其他光才能显示出颜色, 
            // 如果 设置为 Lighting Off,关掉光照,那么就成黑色的了
            Lighting On 

            //给材质设置 贴图 
            SetTexture [_MainTex] 
            {
                Combine texture * primary double
            }
        }
    } 

    SubShader 
    {       
        //此处设置LOD 为 500 如果机器无法支持 600,那么机器在渲染的时候
        //将跳过第一个SubShader,如果能支持 500,那么 跳过 第一个SubShader后
        //会执行本 SubShader
        LOD 500

        Pass
        {
            Material
            {           
                Diffuse (0, 1, 0, 1) //在此直接写颜色值     
            }
            Lighting On
        }
    } 

    FallBack "Diffuse"
}

效果如下
这里写图片描述

在此仅仅设置了颜色,没有添加贴图
这里写图片描述

下面添加了贴图,颜色设置为(1, 1, 1, 1)

这里写图片描述

效果如下
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中实现镜子效果的方式有多种,其中一种常用的是使用Shader来进行渲染。下面是一个简单镜子Shader示例: ```c# Shader "Custom/Mirror" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (v2f i) : SV_Target { // 计算镜子反射矩阵 float4x4 reflectionMatrix = float4x4( float4(-1, 0, 0, 0), float4(0, 1, 0, 0), float4(0, 0, 1, 0), float4(0, 0, 0, 1) ); // 将坐标通过反射矩阵进行镜像翻转 float2 reflectedUV = mul(reflectionMatrix, float4(i.uv, 0, 1)).xy; // 从反射纹理中采样颜色 fixed4 col = tex2D(_MainTex, reflectedUV); return col; } ENDCG } } } ``` 这个Shader的原理是通过计算反射矩阵来实现镜像效果。在顶点着色器中,我们对顶点坐标进行了变换,通过反射矩阵将原始UV坐标进行镜像翻转。然后在片段着色器中,我们从反射纹理中采样颜色,并返回该颜色作为最终结果。 你可以将以上代码保存为一个名为“Mirror.shader”的文件,并将其添加到Unity项目中的一个“Shaders”文件夹中。然后将镜子Shader应用到你想要渲染镜子效果的材质上即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值