shader之——单光源,法线,高光,+cubeMap

来源:互联网 发布:java 软引用 弱引用 编辑:程序博客网 时间:2024/05/02 00:37
Shader "baicai/me02" {    Properties {        _MainTex ("MainTex", 2D) = "white" {}        _Bump ("Bump", 2D) = "bump" {}        _Intension ("强度", Range(0, 10)) = 10        _Scale ("范围", Range(0, 1)) = 0.5969197        _SpecularColor("SpecularColor",Color) = (1,1,1,1)        _Cubemap ("Cubemap",Cube) = ""{} /////    }    SubShader {        Tags {            "RenderType"="Opaque"        }        Pass {            Tags {                "LightMode"="ForwardBase"            }                                    CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #define UNITY_PASS_FORWARDBASE            #include "UnityCG.cginc"            #include "AutoLight.cginc"            #pragma multi_compile_fwdbase_fullshadows            #pragma target 3.0             float4 _LightColor0;             sampler2D _MainTex;             float4 _MainTex_ST;             sampler2D _Bump;              float4 _Bump_ST;             float _Intension;             float _Scale;             float4 _SpecularColor;             samplerCUBE _Cubemap;             struct VertexInput {                float4 vertex : POSITION;                float3 normal : NORMAL;                float4 tangent : TANGENT;                float2 uv : TEXCOORD0;            };            struct v2f {                float4 pos : SV_POSITION;                float2 uv : TEXCOORD0;                float4 posWorld : TEXCOORD1;                float3x3 tangentTransform:TEXCOORD2;                LIGHTING_COORDS(3,4)            };            ///需要把顶点着色器中的切线空间转化为世界空间            ///或者把世界空间的所有向量转化为切线空间              v2f vert (VertexInput v) {                v2f o ;                o.pos = UnityObjectToClipPos(v.vertex );                o.uv =TRANSFORM_TEX(v.uv, _MainTex);                //求世界法线三件套                float3 normal =normalize( UnityObjectToWorldNormal(v.normal));                float3 tangentDir = normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ).xyz );//切线空间转化为世界空间                float3 bitangentDir = normalize(cross(normal, tangentDir) * v.tangent.w);//切线 法线 计算副切线                //得出结合切线的世界法线                o.tangentTransform = float3x3( tangentDir, bitangentDir, normal);                 //物体世界坐标                o.posWorld = mul(unity_ObjectToWorld, v.vertex);                TRANSFER_VERTEX_TO_FRAGMENT(o)                return o;            }                float4 frag(v2f i) : COLOR {                                                 float3 BumpMap = UnpackNormal(tex2D(_Bump,i.uv));                float3 N = normalize(mul( BumpMap.rgb, i.tangentTransform )); //根据模型的世界法线 将法线贴图转换为世界空间                float3 V = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz); //视向量                float3 L = normalize(_WorldSpaceLightPos0.xyz);                float3 speL = normalize(V+L); //视向量 + 光向量,得到一个高光的光向量////// Lighting:                float atten = LIGHT_ATTENUATION(i);///////// Gloss:                float Gloss = exp2( _Scale * 10.0+1.0);////// Specular:                float NdotSpeL = saturate(dot (speL,N)); //高光强度                float4 col = tex2D(_MainTex,i.uv);                float3 specular0 = atten * _LightColor0.xyz * pow(NdotSpeL,Gloss) * _SpecularColor * _Intension*col.a;///////worldRefl:cubMap                half3 worldRefl = reflect (-V,N);/////                half3 cube=texCUBE(_Cubemap, worldRefl).rgb;//////////// Diffuse:                float NdotL = saturate(dot( N, L )); //漫反射强                            col.rgb= col.rgb * (NdotL *_LightColor0.xyz * atten + UNITY_LIGHTMODEL_AMBIENT.rgb);                /// Final Color:                col.rgb = col.rgb + specular0 + cube*col.a;/////                            return col;            }            ENDCG        }   }   FallBack "Diffuse"}
//真正运用的时候,还是需要把一些计算放到顶点着色器里,让效率达到最高
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 乔思伯v4 乔思伯u3 笔记本电脑买 乔慷慨秦腔 乔慷慨 乔戈里 乔我说 乔郑宇 乔正宇 乔震宇 汇乔花园房价 乔斯年 叶佳琪乔斯年 叶佳琪乔斯年免费阅读 乔斯年叶佳期大结局是什么 叶佳琪乔斯年免费阅读全文 乔斯达 乔日成 乔映霁 乔映霞 云南大叶种乔木普洱茶 吻安,纪先生 叶乔木 乔木普洱茶价格 布朗乔木普洱茶价格 普洱乔木茶 冰岛乔木王普洱茶价格 云南乔木普洱茶 大树茶 温凉乔厉爵全文免费阅读 乔厉爵温凉全文免费阅读 温凉乔厉爵帝国爹地 温凉乔厉爵全文免费阅 乔恋沈凉川全文免费阅读 帝国总裁霸道宠温凉乔历爵 乔松都 乔松 乔森潘 乔本氏甲状腺炎 乔本氏甲状腺炎会遗传吗 甲状腺乔本氏病严重吗 什么叫乔本氏甲状腺炎