博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Shader】基于像素的兰伯特高光反射-Phong模型
阅读量:4087 次
发布时间:2019-05-25

本文共 2483 字,大约阅读时间需要 8 分钟。

  • 高光反射:效果看起来和兰伯特差不多…过度比兰伯特平滑,不同的是有高光区域
Shader "Unlit/PixelSpecular"{    Properties    {        _MainTex ("Texture", 2D) = "white" {}        _DiffuseColor ("DiffuseColor", Color) = (1.0, 1.0, 1.0, 1.0)        _SpecularColor("SpecularColor",Color )=(1,1,1,1)        _SpecularGloss("gloss",Range(5,30)) = 5    }    SubShader    {        Tags { "RenderType"="Opaque" }        LOD 100        Pass        {            Tags {                 "LightMode"="ForwardBase"            }            CGPROGRAM            #pragma vertex vert            #pragma fragment frag            // make fog work            #include "UnityCG.cginc"            #include "Lighting.cginc"             struct a2v            {                float4  vertex : POSITION;                float2  uv : TEXCOORD0;                float3  normal:NORMAL;            };            struct v2f            {                float2 uv : TEXCOORD0;                float4 vertex : SV_POSITION;                float3  worldNormal:TEXCOORD1;                 float3  worldPos :TEXCOORD2;            };            sampler2D _MainTex;            float4 _MainTex_ST;            float4  _DiffuseColor;            float4  _SpecularColor;            float _SpecularGloss;            v2f vert (a2v v)            {                v2f o;                o.vertex  = UnityObjectToClipPos(v.vertex );                o.uv = TRANSFORM_TEX(v.uv,_MainTex);                o.worldNormal = UnityObjectToWorldNormal(v.normal);                o.worldPos  = mul(unity_ObjectToWorld,v.vertex);                return o;            }            fixed4 frag (v2f i) : SV_Target            {                // 1.环境光                float3  ambient = UNITY_LIGHTMODEL_AMBIENT;                float3 N = normalize(i.worldNormal);                float3 L = normalize(_WorldSpaceLightPos0);                // 2.漫反射颜色                float3 diffuseColor = _LightColor0.rgb * _DiffuseColor.rgb * saturate(dot(N,L));                // 反射方向                float3 reflectDic = normalize(reflect(-L,N));                // 观察方向                float3  viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);                // 3.高光颜色                float3 specularColor = _LightColor0.rgb * _SpecularColor * pow(saturate(dot(reflectDic,viewDir)),_SpecularGloss);                // sample the texture                fixed4 col = tex2D(_MainTex, i.uv)*float4((ambient+diffuseColor+specularColor),1);                return col;            }            ENDCG        }    }}

转载地址:http://ydkii.baihongyu.com/

你可能感兴趣的文章
Linux下用math.h头文件
查看>>
Linux中用st_mode判断文件类型
查看>>
Ubuntu修改host遇到unable to resolve host
查看>>
路由选择算法
查看>>
Objective-C 基础入门(一)
查看>>
Objective-C 基础入门(三) 读写文件与回调
查看>>
C++ STL标准库与泛型编程(一)概述
查看>>
C++ STL标准库与泛型编程(四)Deque、Queue、Stack 深度探索
查看>>
C++ STL标准库 算法
查看>>
JVM内存模型_Minor GC笔记
查看>>
SpringCloud学习之PassCloud——(一)PassCloud源代码下载
查看>>
Linux下安装Python环境并部署NLP项目
查看>>
Nginx篇-springCloud配置Gateway+Nginx进行反向代理和负载均衡
查看>>
Nginx篇-Nginx配置动静分离
查看>>
缓存篇-Redis缓存失效以及解决方案
查看>>
缓存篇-使用Redis进行分布式锁应用
查看>>
缓存篇-Redisson的使用
查看>>
phpquery抓取网站内容简单介绍
查看>>
找工作准备的方向(4月22日写的)
查看>>
关于fwrite写入文件后打开查看是乱码的问题
查看>>