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

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

这里写图片描述

Shader "Unlit/VertDiffuse"{    Properties    {        _MainTex ("Texture", 2D) = "white" {}        _Color("Overall diffuse color filter",Color)=(1,1,1,1)    }    SubShader    {        Tags { "RenderType"="Opaque" }        LOD 100        Pass        {            Tags{                // 光照模式为Forward,只有向前渲染模式下Unity内置的参数才能正确被赋值                "LightMode"="ForwardBase"            }            CGPROGRAM            // 声明顶点着色器            #pragma vertex vert            // 声明片段着色器            #pragma fragment frag            #include "UnityCG.cginc"            // 因为使用了内置的灯光相关参数,_WorldSpaceLightPos0,_LightColor0等            #include "Lighting.cginc"             struct appdata            {                float4 vertex : POSITION;                float2 uv : TEXCOORD0;                float3 normal:NORMAL;            };            struct v2f            {                float4  col:COLOR;                float2 uv : TEXCOORD0;                float4 vertex : SV_POSITION;            };            sampler2D _MainTex;            float4  _Color;            float4  _speColor;            float _Shininess;            v2f vert (appdata v)            {                v2f o;                // 法线世界单位方向                float3  normalDic = normalize(UnityObjectToWorldNormal(v.normal));                // 世界顶点指向光源,计算方向(注意是顶点指向光源,做反射计算的时候通常会将方向乘上一个负1)                float3 v2lightDic = normalize(_WorldSpaceLightPos0);                // 漫反射颜色计算(点积来计算一个光强系数0-1之间)                float3 diffuseReflection = _LightColor0.rgb * _Color.rgb *  saturate(dot(normalDic,v2lightDic));                // 如果物体背光,就是黑色,所以背光的时候,需要+上环境光                o.col = float4(diffuseReflection,1)+UNITY_LIGHTMODEL_AMBIENT;                o.vertex  = UnityObjectToClipPos(v.vertex);                o.uv = v.uv;                return  o;            }            fixed4 frag (v2f i) : SV_Target            {                // sample the texture                fixed4 col = tex2D(_MainTex, i.uv) * i.col;                return col;            }            ENDCG        }    }}
你可能感兴趣的文章
链表算法--检测环
查看>>
connection pool shutdown错误修改
查看>>
MySQL运维、性能优化命令
查看>>
linux查看http连接数
查看>>
解决上传文件时nginx容器内存暴涨的问题
查看>>
linux知识点
查看>>
Spring Cloud + Docker + K8S 项目优化
查看>>
GRPC学习笔记
查看>>
GIT命令
查看>>
【链表算法 leetcode】删除链表中等于给定值 val 的所有节点
查看>>
哈希表以及哈希算法的应用
查看>>
缓存相关问题及解决方式
查看>>
数据结构和算法笔记
查看>>
《大型分布式网站架构设计与实践》读书笔记
查看>>
多线程笔记
查看>>
RabbitMQ学习笔记
查看>>
Zookeeper笔记
查看>>
redis笔记
查看>>
mongoDB笔记
查看>>
在整数数组中找第二大的数
查看>>