高光反射

顶点高光反射

Shader "Unlit/HighLightReflection"
{Properties{_diffuse("diffuse",Color) = (1,1,1,1)_specular("Specular",Color) = (1,1,1,1)_gloss("Gloss",Range(1,5)) = 5}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"fixed4 _diffuse;fixed4 _specular;float _gloss;struct v2f{float4 vertex : SV_POSITION;fixed3 color : Color;};v2f vert (appdata_base v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;//将法线转换到世界坐标下的法线fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);//光源方向//fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz);fixed3 worldLight = normalize(WorldSpaceLightDir(v.vertex));    //unity自己提供的一个计算光源方向的函数//兰伯特公式fixed3 diffuse = _LightColor0.rgb * _diffuse.rgb * saturate(dot(worldNormal,worldLight));//计算反射方向,reflect方法就是计算基于法线方向的入射光线的反射光线的计算。由于方法计算与unity的世界光照方向相反,所以需要加个-值fixed3 reflectDir = normalize(reflect(-worldLight,worldNormal));    //视角方向,V向量//fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - UnityObjectToWorldDir(v.vertex));fixed3 viewDir = normalize(WorldSpaceViewDir(v.vertex)); //unity自己提供的一个计算视角 方向的函数//phong高光反射公式,gloss为调整高光程度的一个次幂级数fixed3 specular = _LightColor0.rgb * _specular.rgb * pow(max(0,dot(reflectDir,viewDir)),_gloss);o.color =  diffuse + ambient + specular;return o;}fixed4 frag (v2f i) : SV_Target{return fixed4(i.color,1);}ENDCG}}
}

片元高光反射

Shader "Unlit/FragmentHighLight"
{Properties{_diffuse("diffuse",Color) = (1,1,1,1)_specular("Specular",Color) = (1,1,1,1)_gloss("Gloss",Range(1,5)) = 5}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"fixed4 _diffuse;fixed4 _specular;float _gloss;struct v2f{float4 vertex : SV_POSITION;fixed3 worldNormal : TEXCOORD0;fixed3 worldPos : TEXCOORD1;};v2f vert (appdata_base v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);//将法线转换到世界坐标下的法线fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);//光源方向o.worldNormal = worldNormal;o.worldPos = UnityObjectToWorldDir(v.vertex);return o;}fixed4 frag (v2f i) : SV_Target{//环境光fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;//光源方向//fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);fixed3 worldLightDir = normalize(WorldSpaceLightDir(i.vertex));  //兰伯特公式fixed3 diffuse = _LightColor0.rgb * _diffuse.rgb * max(0,dot(worldLightDir,i.worldNormal));//计算反射方向,reflect方法就是计算基于法线方向的入射光线的反射光线的计算。由于方法计算与unity的世界光照方向相反,所以需要加个-值fixed3 reflectDir = normalize(reflect(-worldLightDir,i.worldNormal));//视角方向,V向量//fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);fixed3 viewDir = normalize(WorldSpaceViewDir(i.vertex)); //unity自己提供的一个计算视角 方向的函数//phong高光反射公式,gloss为调整高光程度的一个次幂级数fixed3 specular = _LightColor0.rgb * _specular.rgb * pow(max(0,dot(reflectDir,viewDir)),_gloss);fixed3 color = ambient + diffuse + specular;return fixed4(color,1);}ENDCG}}
}

Blinn_phong高光反射公式

Shader "Unlit/BlinnPhongHighLight"
{Properties{_diffuse("diffuse",Color) = (1,1,1,1)_specular("Specular",Color) = (1,1,1,1)_gloss("Gloss",Range(1,5)) = 5}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"fixed4 _diffuse;fixed4 _specular;float _gloss;struct v2f{float4 vertex : SV_POSITION;fixed3 worldNormal : TEXCOORD0;fixed3 worldPos : TEXCOORD1;};v2f vert (appdata_base v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);//将法线转换到世界坐标下的法线fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);//光源方向o.worldNormal = worldNormal;o.worldPos = UnityObjectToWorldDir(v.vertex);return o;}fixed4 frag (v2f i) : SV_Target{//环境光fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;//光源方向//fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);fixed3 worldLightDir = normalize(WorldSpaceLightDir(i.vertex));  //兰伯特公式fixed3 diffuse = _LightColor0.rgb * _diffuse.rgb * max(0,dot(worldLightDir,i.worldNormal));//计算反射方向,reflect方法就是计算基于法线方向的入射光线的反射光线的计算。由于方法计算与unity的世界光照方向相反,所以需要加个-值//fixed3 reflectDir = normalize(reflect(-worldLightDir,i.worldNormal));//视角方向,V向量fixed3 viewDir = normalize(WorldSpaceViewDir(i.vertex)); //unity自己提供的一个计算视角 方向的函数//计算半角向量fixed3 halfDir = normalize(worldLightDir + viewDir);//blinn_phong高光反射公式,gloss为调整高光程度的一个次幂级数fixed3 specular = _LightColor0.rgb * _specular.rgb * pow(max(0,dot(i.worldNormal,halfDir)),_gloss);fixed3 color = ambient + diffuse + specular;return fixed4(color,1);}ENDCG}}
}

Unity Shader标准光照模型——高光反射相关推荐

  1. Unity Shader 常规光照模型代码整理

    Unity Shader 常规光照模型代码整理 本次整理在Unity中几种常见的光照模型,包含 1.BlinnPhong(常规光照模型) 2.ForwardRender(多灯光带有衰弱前向渲染) 3. ...

  2. unity shader学习---光照模型(二)

    更复杂的光照 效果图 理论 unity的光源类型 unity的渲染路径 在这里插入图片描述 实验 多光源 阴影 不透明物体的阴影 让物体接收阴影 统-管理光照衰减和阴影 透明度物体的阴影 代码 多光源 ...

  3. Unity Shader漫反射光照模型与半兰伯特光照模型

    文章目录 一.基础光照模型中漫反射部分的计算公式 二.逐顶点光照实现 逐顶点代码 逐顶点效果图 三.逐像素光照模型实现 逐像素代码 逐像素效果图 四.半兰伯特光照模型实现 广义半兰伯特光照模型公式 半 ...

  4. 【Unity3D Shader编程】之十三 单色透明Shader 标准镜面高光Shader

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/50878538 作者:毛星云(浅 ...

  5. 【Unity3D Shader编程】之十三 单色透明Shader 标准镜面高光Shader

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  6. Unity Shader自定义光照模型

    前几天去一家公司面试,因为简历上写着"能写简单的Shader",就被问了一个问题:怎么自定义一个光照模型? 直接懵逼了,隐隐约约能联想到的什么漫反射光+镜面反射光+环境光...难道 ...

  7. Unity Shader 入门精要——反射、折射

    目录 反射 折射 菲涅尔反射 反射 使用了反射效果的物体通常看起来就像镀了层金属.想要模拟反射效果很简单,我们只需要通过入射光线的方向和表面法线方向来计算反射方向,再利用反射方向对立方体纹理采样即可. ...

  8. Unity Shader知识点(三)高光反射Shader

    前言 此文及专栏系是以Shader入门精要为基础整理的Unity Shader学习笔记,尽量以初学者视角还原(其实半年前我就是初学者),错误还需指正. 本篇是实操部分的第三个Shader,即高光反射S ...

  9. 《Unity Shader入门精要》笔记:初级篇(2)

    本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载. 本篇博客会补充一些扩展内容(例如其他博客链接). 本篇博客还会提供一些边读边做的效果截图.文章内所有数学 ...

最新文章

  1. 【CentOS】设置服务开机自动启动
  2. pandas的分列操作str.split()
  3. IPC之哲学家进餐问题
  4. 【网络安全】一个堆题inndy_notepad的练习笔记
  5. python实现货币转换
  6. 解析 WordPress 插件机制
  7. Generative Adversarial Learning Towards Fast Weakly Supervised Detection(CVPR2018)阅读笔记
  8. xshell 6 连接debian系统拒绝了密码_Xshell中操作Linux的常用命令,你知道几个?
  9. nodepad 关闭语法检查
  10. C/C++中函数指针的含义(转)
  11. 字节跳动杯2018中国大学生程序设计竞赛-女生专场题解
  12. 销售与顾客的PV同步算法
  13. 软件测试方法进行调优,性能测试调优过程
  14. 跟我一起学QT_QT标准对话框_颜色选择框
  15. export和import 输出/接收模块变量的接口
  16. 用Vim查看和编辑二进制文件
  17. 浅谈(Java)AIO-异步IO
  18. 大专计算机档案,大专档案自我鉴定(精选5篇)
  19. 美学设计专家解读小度智能音箱Play设计 天猫精灵被打脸了
  20. WPS 从今以后我再也不会用了 记录一下!

热门文章

  1. win怎么在计算机里按日期搜索文件,Win8系统如何按指定修改日期搜索文件
  2. sqlite3中,blob字段的读取和写入
  3. 监控服务器网卡上传和下载网速的脚本
  4. Android数据存储之文件存储
  5. 库存出入库管理业务流程图怎么做?
  6. 真正可用的获取任意进程的内存使用率 和任务管理器一模一样
  7. Atmel爱特梅尔AT89S52单片机开发实训装置,QY-DPJ12
  8. 使用conda进行python环境管理
  9. 微信小程序搜索,搜索历史,清除搜索历史,以及点击搜索历史实现搜索功能
  10. 解开硬盘逻辑死锁的一种有效方法 (转)