学习日记#10

学习日记10

shader入门

研究了shader一段时间

UnityShader 基本 结构

渲染流水线:

​ 顶点数据

​ 顶点着色器

​ 曲面细分着色器

​ 几何着色器

​ 裁剪

​ 三角形设置

​ 三角形遍历

​ 片元着色器

​ 屏幕映射

Shader "这里写Shader的名字"
{
	Properties // 这里公布的属性将会被置于unity主面板上
    {
        // 变量声明采用下划线开头首字母大写
		_Color("这是一个颜色", Color) =  (1,1,1,1) // 颜色分量
        _Diffuse("这是一个漫反射系数", Color) = (1,1,1,1) // diffuse = _LightPos0.rgb(内置的第一个重要光源的颜色) * 
            // _Diffuse * max(0, dot(worldNormal, worldLightDir)) (兰伯特模型漫反射 将点积结果从 -1~1 * 0.5 + 0.5  成为半兰伯特模型)
        _Specular("这是一个镜面反射系数", Color) = (1,1,1,1) // specular = pow(max(0, dot(viewDir, reflect_lightDir)), _Gloss) phong模型 // specular =  pow(max(0, dot(normal, halfDir)), _Gloss) 布林冯模型,采用半程向量
        _Gloss("镜面反射的控制系数", Range(8.0, 256)) = 20
            _MainTex("这是一个主纹理贴图", 2D) = “white”{} // 纹理贴图
        _Bump("凹凸贴图,实现高度纹理", 2D) = “normal”{} // 需要转换到切线空间进行法线贴图映射
        _BumpScale("法线贴图的控制", Float) = 4
            _CubeMap("立方体纹理,可实现金属度效果,镜面反射效果等,是一个3d纹理", Cube) = “”{}
    }
    SubShader // 可有多个subshader 由显卡选择渲染
    {
        Tags // 标志声明
        {
           "LightMode" = "ForwardBase" // 前向渲染 ForwarAdd Base逐片元渲染,最多四个,其他逐顶点或球谐函数
           // 延迟渲染 顶点lit渲染
           "IgnorePorject" = "True" // 不受投影和阴影影响
           "RenderType" = "Transparent" // 透明 Oqueup 不透明
               "Queue" = "Alpha" // 渲染队列,透明,不透明物体等
            
        }
        
        ZWrite Off 深度测试
        Blend ScrAlpha OneMinuScrAlpha // 混合因子
            
        Pass // 通道 渲染流水线着色器部分
        {
            Tags{}
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
          	#include "UntiyCG.cginc"
           	#include "Lighting.cginc"
            #include "AutoLight.cginc"
                
  			float4 _MainTex;
            float4 _MainTex_ST; // 变量声明
                struct a2v{
                    // 语义化
                   float4 vertex : POSITION; // 位置
                   float3 normal : NORMAL; // 法线
					float3 tangle : TRANGLE; // 切线
                    float4 texcoord : TEXCOORD0 // 纹理 
                };
                struct v2f{
                	float pos:SV_POSITION;       
                };
                v2f vert(a2v v)
                {
					v2f o;
                    o.pos = UnityObjectToClipPos(v.vertex);
                   	// UnityObjectToClipPos MVP矩阵 Model View Projection 
                    // unity_ObjectToWorld
                    // _WorldSpaceToWorldNormal
                    // _LightColor
                    return o;
                }
            	fixed4 frag(v2f i):SV_Target
                {
                    //
                    diffuse;
                    specular;
                    ambient;
                    return fixed4((diffuse + ambient + specular) *,1.0)
                }
			ENDCG
        }
    }
    Fallback "VertexLit" // 在其他都渲染不了的渲染这个 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值