翻译Shader(1)

不想写,,还想学,,只能想出个这种方法来了,参考:

https://onevcat.com/2013/07/shader-tutorial-1/

Shader "Unity Shaders Book/Chapter 3/Redify" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }
    SubShader {
        Tags { "RenderType"="Opaque" }  //renderType只是标记当前shader的类型,起个Tag作用,详情:https://www.jianshu.com/p/d8356533fcc2
        LOD 200    //当lod小于的话就不会工作,zai QualitySetting里面会有
        
        CGPROGRAM  ///表名从这里开始,ENDCG结束
		// #pargma 关键词 函数名 光照模型 [其它选项]
        #pragma surface surf Lambert addshadow
		//不懂,通过使用编译指示符#pragma multi_compile或者#pragma shader_feature,结合判定宏是否启用的指令defined,
		//https://blog.csdn.net/wodownload2/article/details/104223134
        #pragma shader_feature REDIFY_ON


		//很复杂,ampler2D就是和texture所绑定的一个数据容器接口。
		//要想访问在Properties中所定义的变量的话,必须使用和之前变量相同的名字进行声明。于是其实sampler2D _MainTex;做的事情就是再次声明并链接了_MainTex,使得接下来的CG程序能够使用这个变量。
	   //https://onevcat.com/2013/07/shader-tutorial-1/
        sampler2D _MainTex; //二维纹理,为什么和上面的一样呢

        struct Input {
			//CG程序中,我们有这样的约定,在一个贴图变量(在我们例子中是_MainTex)之前加上uv两个字母,就代表提取它的uv值(其实就是两个代表贴图上点的二维坐标 )
            float2 uv_MainTex;
        };
		// 输入      SurfaceOutput是预定义的输出结构,surf函数的目标就是根据输入把这个输出结构填上。
		void surf (Input IN, inout SurfaceOutput o) {
			//tex2d函数,这是CG程序中用来在一张贴图中对一个点进行采样的方法,返回一个float4
			//取_MainTex图片上坐标为IN.uv_MainTex.点的RGBA
            half4 c = tex2D (_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    } 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zero游戏开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值