ShaderLab (一) 使用Unity内置cg库 struct结构体的bind语义 摆脱繁重的语义bind

77 篇文章 1 订阅
7 篇文章 0 订阅

从unity编辑器Unity2020.1.0f1(is Buy)\Unity\Editor\Data\CGIncludes\UnityCG.cginc ,找到已经 写好语义bind的struct结构体放到自己编写的shader脚本里面使用

 

Shader "P2 MyShader" {

    //属性,可以在编辑器里面bind和修改的
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
     
    SubShader{        

        Pass{
            
            //第一步:顶点初始化[系统做]
            CGPROGRAM   //插入 cg代码开始            
            
            struct my_struct{ //定义结构体

                int a; //类型 名称        
        
            };

            float sum(float a,float b){ //定义函数

                return a+ b;
            
            }

            struct my_vert_data{//用结构体 存储语义参数 ;建议参考unity内置cg库的结构体来bind语义

                
                float4 pos : POSITION;

            
            };
            
            //第二步:编写顶点shader
            #pragma vertex my_vert //把my_vert作为顶点着色器入口
            fixed4  _Color; //(表示颜色)在着色器里面使用 属性块里面的变量 名字必须跟属性块的变量名一致
            sampler2D _MainTex; //(表示纹理)在着色器里面使用 属性块里面的变量 名字必须跟属性块的变量名一致

            //怎么样获得上一个工位的参数(pos): --> 用语义bind句获取(float4 pos : POSITION),打算给下一个工位返回什么? 括号后就再bind语义一次 (): POSITION 
            float4 my_vert(my_vert_data data) : POSITION{ //使用语义bind结构体 
                return UnityObjectToClipPos(data.pos);  //mul(UNITY_MATRIX_MVP,pos) 位置转到世界空间,返回语义bind结构体对应bind语义
            }
            //第三步:Tellellation曲面化[系统做]
            //第四步:几何shader[系统做]
            //第五步:裁剪,投影[系统做]
            //第六步:三角形遍历[系统做]
            //第七步:编写像素(片元)shader 上色并且返回颜色给第八步   
            #pragma fragment my_frag //把my_frag作为(像素)片元着色器入口,拿到上一个工位的参数进行上色,完会返回1个颜色给第八步               
            /*
            fixed4 my_frag(float2 uv : TEXCOORD0) : COLOR{ //float2存放UV  bind:拿到上一个工位的第一套纹理语义  bind:返回颜色语义
                //return fixed4(1.0,0.0,0.0,1.0);            
                //return _Color; 返回引用属性块里的变量
                return tex2D(_MainTex,uv);  //使用标准内置函数查找 纹理图片UV的颜色 
            }
            */
            fixed4 my_frag() : COLOR{
            
                return _Color; 

            }
            //第八步:输出[系统做]           
            ENDCG       //插入 cg代码结束
        
        }
     
     }
    FallBack "Diffuse"//降级处理
}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AD_喵了个咪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值