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

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

这里写图片描述

  • 现在的背光区域不再像兰伯特模型中的一样黑暗了,变得更亮了一些
  • 算法和兰伯特一样,只是将从顶点的计算移到了片段着色器中,这样的计算更加细腻和平滑,同时性能消耗会大于在顶点着色器中的计算
Shader "Unlit/HalfLambert"{    Properties    {        _MainTex ("Texture", 2D) = "white" {}        _Diffuse("Diffuse Color",Color) =(1,1,1,1)    }    SubShader    {        Pass {            Tags{                "LightMode"="ForwardBase"            }            CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #include "UnityCG.cginc"            #include "Lighting.cginc"             fixed4 _Diffuse;            sampler2D _MainTex;            float4  _MainTex_ST;            struct a2v            {                float4 vertex :POSITION ;                float2 uv:TEXCOORD0 ;                float3  normal:NORMAL;             };            struct v2f            {                float4 pos:SV_POSITION;                float3 worldNormal:TEXCOORD0;                float2 uv:TEXCOORD1;              };            v2f vert(a2v v)            {                v2f o;                o.worldNormal = normalize(UnityObjectToWorldNormal(v.normal));                o.uv = TRANSFORM_TEX(v.uv,_MainTex);                o.pos = UnityObjectToClipPos(v.vertex);                return o;            }            fixed4 frag(v2f i):SV_Target            {                fixed3 N = i.worldNormal;                fixed3 L = normalize(_WorldSpaceLightPos0);                // 半兰伯特公式                float halfLambert =  dot(N,L)*0.5+0.5;                // 漫反射颜色计算                float3  diffuseColor = _Diffuse.rgb * _LightColor0.rgb * halfLambert;                // 漫反射+环境光                float4  mixColor = float4 (diffuseColor,0.5) + UNITY_LIGHTMODEL_AMBIENT;                // 纹理采样后的颜色 * 混合计算后的颜色                float4 color = tex2D(_MainTex,i.uv) * mixColor;                return  color;            }            ENDCG        }    }}
你可能感兴趣的文章
常见链表相关算法-java语言实现
查看>>
链表算法--检测环
查看>>
connection pool shutdown错误修改
查看>>
MySQL运维、性能优化命令
查看>>
linux查看http连接数
查看>>
解决上传文件时nginx容器内存暴涨的问题
查看>>
linux知识点
查看>>
Spring Cloud + Docker + K8S 项目优化
查看>>
GRPC学习笔记
查看>>
GIT命令
查看>>
【链表算法 leetcode】删除链表中等于给定值 val 的所有节点
查看>>
哈希表以及哈希算法的应用
查看>>
缓存相关问题及解决方式
查看>>
数据结构和算法笔记
查看>>
《大型分布式网站架构设计与实践》读书笔记
查看>>
多线程笔记
查看>>
RabbitMQ学习笔记
查看>>
Zookeeper笔记
查看>>
redis笔记
查看>>
mongoDB笔记
查看>>