庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili


漫反射-Diffuse 
镜面反射-Specular
常用向量
漫反射
跟Camera或者人眼的观察视角无关
镜面反射 
跟Camera或者人眼的观察视角有关系
phong 光的反射与人眼的视角方向越重合(夹角越小),反射越强,反之,夹角越大,高光越暗
半角向量h 光方向L与视角方向V的中间方向
float3 halfVector = normliaze(viewDirection + lightDirection);
halfAngle = normalize(normalize(lightDirection) + normalize(eyeDirection));
为什么半角向量是两个向量相加?
https://www.zhihu.com/question/25266627
半角h与法线n的夹角越小,镜面高光越强
半角h与法线n的夹角越大,镜面高光越弱
Phong
始终要明确的一点是光的方向L实际是(现实中)光的反方向
取反,乘以-1,就取到光方向了
reflect(L,N) 光方向与法线方向
Blinn-Phong
Phong比Blinn_Phong的效果要好,但计算量也高,Blinn_Phong的计算量低,性能好
节点练习
Phong
Blinn-Phong
Old_School效果 
观察方向 = 眼镜的位置 - (世界空间下)点的位置
float3 vDir = normalize(_WorldSpaceCameraPos.xyz - i.posWS.xyz);
Shader "AP01/L05/OldSchool"
{Properties{_MainCol ("颜色", color) = (1.0, 1.0, 1.0, 1.0)_SpecularPow ("高光次幂", range(1, 90)) = 30}SubShader{Tags { "RenderType"="Opaque" }Pass{Name "FORWARD"Tags { "LightMode"="ForwardBase" }CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0// 输入参数// 修饰字(满足小朋友太多的问好, 想保发量的大家看热闹)// uniform  共享于vert,frag// attibute 仅用于vert// varying  用于vert,frag传数据uniform float3 _MainCol;     // RGB够了 float3uniform float _SpecularPow;  // 标量 float// 输入结构struct VertexInput{float4 vertex : POSITION;   // 顶点信息 Get✔float4 normal : NORMAL;     // 法线信息 Get✔};// 输出结构struct VertexOutput{float4 posCS : SV_POSITION;     // 裁剪空间(暂理解为屏幕空间吧)顶点位置float4 posWS : TEXCOORD0;       // 世界空间顶点位置float3 nDirWS : TEXCOORD1;      // 世界空间法线方向};// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;                   // 新建输出结构o.posCS = UnityObjectToClipPos( v.vertex );     // 变换顶点位置 OS>CSo.posWS = mul(unity_ObjectToWorld, v.vertex);   // 变换顶点位置 OS>WSo.nDirWS = UnityObjectToWorldNormal(v.normal);  // 变换法线方向 OS>WSreturn o;                                           // 返回输出结构}// 输出结构>>>像素float4 frag(VertexOutput i) : COLOR{// 准备向量float3 nDir = normalize(i.nDirWS);float3 lDir = _WorldSpaceLightPos0.xyz;float3 vDir = normalize(_WorldSpaceCameraPos.xyz - i.posWS.xyz);float3 hDir = normalize(vDir + lDir);// 准备点积结果float ndotl = dot(nDir, lDir);float ndoth = dot(nDir, hDir);// 光照模型float lambert = max(0.0, ndotl);float blinnPhong = pow(max(0.0, ndoth), _SpecularPow);float3 finalRGB = _MainCol * lambert + blinnPhong;// 返回结果return float4(finalRGB, 1.0);}ENDCG}}FallBack "Diffuse"
}

庄懂着色器_L05_镜面反射相关推荐

  1. 庄懂着色器_L21_CyberPunk

    庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 案例_赛博小人 模型准备 平常所说的1U,2U对应Unity的是0U,1U 3Dsmax的顺序是从1开始的;Unity_UV的顺序是从0 ...

  2. 庄懂着色器_L09_Fresnel/Matcap/Cubemap

    庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 环境反射的做法有Matcap和Cubemap 菲涅尔现象 菲涅尔连连看部分 Fresnel = pow(1-ndotv,powVal)下 ...

  3. 庄懂着色器_L18_序列帧与极坐标

    庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 序列帧_Sequence 小人是一个AB的模型,外面鬼火是AD模式,是一个双Pass的Shader 代码部分 Pass可以都是有一个名字 ...

  4. 《Unity着色器和屏幕特效开发秘笈》—— 第3章 利用镜面反射让游戏闪耀起来...

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第3章,第3.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  5. 庄懂的技术美术入门课(美术向)——01~02学习笔记

    目录 Lecture 01 1) 工程搭建示范 a) 准备工作 b) 创建Shader 2) 理论介绍 a) 结构(Struct) b) 简单的渲染管线 c) 模型->输入结构 d) 输入结构- ...

  6. 个人学习笔记——庄懂的技术美术入门课(美术向)01

    个人学习笔记--庄懂的技术美术入门课(美术向)01 0 前言 1 工程搭建示范 2 理论 2.1 结构(struct) 2.2 渲染管线 3 操作 3.1-2 向量/标量/点积等若干线代基础 3.3 ...

  7. 庄懂的技术美术入门课(美术向) Lesson1

    庄懂的技术美术入门课(美术向) Lesson1 一.关于结构和渲染管 1.1 结构 1.2 渲染管线 模型到输入结构的过程是选取.采集模型文件中的信息,可以提供给后续渲染用的相关信息 顶点Shader ...

  8. 个人学习笔记——庄懂的技术美术入门课(美术向)03

    个人学习笔记--庄懂的技术美术入门课(美术向)03 1 回顾渲染流程 2 尝试shader代码 3 Lambert试试 4 节点组 5 作业 1 回顾渲染流程 老师以美术绘画的角度理解渲染管线,比较形 ...

  9. 【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 amp; 纹理混合...

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://hpw123.net/a/C__/kongzhitaichengxu/2014/1117/120.html 作者:毛星 ...

最新文章

  1. Tslib移植与分析【转】
  2. 谈博客的赢(盈)利模式
  3. [luoguP1168]中位数(主席树+离散化)
  4. \00在python中
  5. html5本地缓存如何提交,HTML5: 本地缓存
  6. vscode 书签_10个我必备的 VS code 拓展
  7. codeforces 41A-C语言解题报告
  8. 2021年广西艺术高考成绩查询,2021年广西美术高考成绩查询网址:https://www.gxeea.cn/...
  9. 建筑电气工程设计常用图形和文字符号_想要识图无忧?电气工程图图形符号全能图解,电工最爱识图助手...
  10. java 监听request_ServletRequest 监听器
  11. 第一阶段冲刺 第三天
  12. UVA 208 划水记录2
  13. maven 项目 spring mvc + jdbc 配置文件
  14. js分页工具分页功能实现
  15. Intellij里面的几个异常处理方案
  16. 结婚吉日怎样挑选?好好把握幸福启程
  17. Codeforces Round #644 1360H. Binary Median(思维、构造)
  18. 测开高阶技术- Docker/环境布置/容器 讲清楚了,全套教程
  19. 【USB】USB video class (UVC)相关概念学习
  20. 进销存系统中的多计量单位

热门文章

  1. 威盾V4补丁和升级包最新版本
  2. 我的大学——记大学的生活
  3. vue点击左右箭头左右滑动效果
  4. python爬虫面试简历_Python爬虫面试简历
  5. linux 目录及文件权限 000 444 666 777
  6. Google搜索引擎从入门到精通
  7. Au:相位表与相位分析面板
  8. 最大值——科林明伦杯J题
  9. YOLOv7如何提高目标检测的速度和精度,基于优化算法提高目标检测速度
  10. [Java] ganymed-ssh2实现ssh连接工具