Unity Shader学习记录第一章
No.1
- 学习对象为[大神冯乐乐的CSDN](https://blog.csdn.net/candycat1992/category_9262054.html)
- 本节主要学习了
- 属性 Properties
- 三种自定义光照模型函数
- 漫反射光照模型
- 半兰伯特光照模型
- 渐变图实现双向反射分布优化的光照模型
- tex2D函数 dot函数等
- 代码记录如下
学习对象为大神冯乐乐的CSDN
本节主要学习了
属性 Properties
三种自定义光照模型函数
漫反射光照模型
半兰伯特光照模型
渐变图实现双向反射分布优化的光照模型
tex2D函数 dot函数等
代码记录如下
```csharp
Shader "Unlit/BasicDiffuse"
{Properties{_MainTex("texture",2D)="white"{}_RampTex("_RampTex",2D)="white"{}_EmissiveColor("EmissiveColor",COLOR)=(1,1,1,1)_AmbientColor("AmbientColor",COLOR)=(1,1,1,1)_MySliderValue("This is a Slider",Range(0,10))=2.5}SubShader {Tags { "RenderType"="Opaque" }LOD 200CGPROGRAM//#pragma surface surf Lambert#pragma surface surf BasicDiffuse_BRDFsampler2D _MainTex;sampler2D _RampTex;//每再属性 Properties中声明一个变量时,需要再CGPROGAM中声明一个和Properties中名称相同的变量,这将建立一个链接,两者将操作同一个数据//float4 _EmissiveColor;float4 _AmbientColor;float _MySliderValue;//自定义光照模型//名称命名为 Lighting<自定义的光照模型的名称>//有三种可供选择的光照模型函数//half4 LightingName(SurfaceOutput s,half3 lightDir,half atten){} -这个函数被用于forward rendering(正向渲染),但是不需要考虑view direction(观察角度)时。//half4 LightingName(SurfaceOutput s,half3 lightDir,half3 viewDir, half atten){} -这个函数被用于forward rendering(正向渲染),需要考虑view direction(观察角度)时。//half4 LightingName_PrePass (SurfaceOutput s, half4 light){} -这个函数被用于需要使用defferred rendering(延迟渲染)时。inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten){//计算到达该点的光照值 dot返回的结果相当于到达该点入射光的余弦值 角度越大,值越小,进入人眼光照越少,物体看起来越暗//max函数放置,光照从相反方向射入时,会出现非预期的效果,比如全黑,所以使用max 函数确保光照值不是非预期效果float difLight=max(0,dot(s.Normal,lightDir));//半兰伯特光照模型 使光照值从0-1.0 变为0.5-1.0 是物体更亮float hLambert=difLight*0.5+0.5;//使用渐变图控制控制漫反射光照的颜色float2 tempRamp=(hLambert,hLambert);float3 ramp=tex2D(_RampTex, tempRamp).rgb;float4 col;//计算颜色值COL//颜色值的rgb由三部分计算得到:// 一。s的反射率 反射率越大,进入人眼光线越多,颜色越鲜亮// 二。LightColor0.rgb _LightColor0是unity内置变量,我们可以使用它得到场景中光源的颜色// 三。最后一个是得到得到的该点的光照值和衰减率的乘积 后面的乘2根据效果自行修改,乘2时光照会更鲜艳col.rgb=s.Albedo *_LightColor0.rgb * (ramp) /*(hLambert *atten *2)*/;col.a=s.Alpha;return col;}//自动逸光照模型//这个自定义光照将使用双向反射分布函数//即考虑观察值的正向渲染//新增加参数viewDir 这个参数将由unity 内部提供,来得到当前的观察点位置到观察点的方向向量inline float4 LightingBasicDiffuse_BRDF(SurfaceOutput s,fixed3 lightDir,half3 viewDir,fixed atten){//计算到达该点的光照值 dot返回的结果相当于到达该点入射光的余弦值 角度越大,值越小,进入人眼光照越少,物体看起来越暗//max函数放置,光照从相反方向射入时,会出现非预期的效果,比如全黑,所以使用max 函数确保光照值不是非预期效果//float difLight=max(0,dot(s.Normal,lightDir));//将上面求光照点的两个夹角后面的光照改为veiweDirfloat difLight=max(0,dot(s.Normal,viewDir));//半兰伯特光照模型 使光照值从0-1.0 变为0.5-1.0 是物体更亮float hLambert=difLight*0.5+0.5;//使用渐变图控制控制漫反射光照的颜色float2 tempRamp=(hLambert,hLambert);float3 ramp=tex2D(_RampTex, tempRamp).rgb;float4 col;//计算颜色值COL//颜色值的rgb由三部分计算得到:// 一。s的反射率 反射率越大,进入人眼光线越多,颜色越鲜亮// 二。LightColor0.rgb _LightColor0是unity内置变量,我们可以使用它得到场景中光源的颜色// 三。最后一个是得到得到的该点的光照值和衰减率的乘积 后面的乘2根据效果自行修改,乘2时光照会更鲜艳col.rgb=s.Albedo *_LightColor0.rgb * (ramp) /*(hLambert *atten *2)*/;col.a=s.Alpha;return col;}struct Input {float2 uv_MainTex;};void surf (Input IN, inout SurfaceOutput o) {half4 c = tex2D (_MainTex, IN.uv_MainTex);//float4 c;//c=pow((_EmissiveColor+_AmbientColor),_MySliderValue);o.Albedo = c.rgb;o.Alpha = c.a;}ENDCG} FallBack "Diffuse"
}
Unity Shader学习记录第一章相关推荐
- 《SysML精粹》学习记录--第一章
<SysML精粹>学习记录 第一章:基于模型的系统工程(MBSE)概览 MBSE简单介绍 MBSE的三大支柱 小结 第一章:基于模型的系统工程(MBSE)概览 MBSE简单介绍 基于模 ...
- Unity Shader 学习记录(3) —— CG语言和Shader文件
1 什么是语义 赋给shader的输入输出的字符串,表达了参数的含义.语义告诉shader从哪里获取数据,又把数据输出到哪里. 2 Shader的三种debug方法 1 假色彩图像 2 VStudio ...
- 机器学习-周志华-学习记录-第一章绪论
文章目录 绪论 一.什么是机器学习 二.基本术语 三.假设空间 四.归纳偏好 总结 参考链接 绪论 为了更早地适应研究生的生活,我决定重新学习周志华老师的机器学习这本书.同时也为了能够养成博客记录的习 ...
- unity shader 学习记录
记录下我学习unity shader的过程,并把我看到过的高质量教程推荐给大家! 借助插件shaderforge来熟悉着色的效果,并对照着shaderforge自动生成的shader代码手工优化和实现 ...
- Unity Shader学习记录(15) —— Unity的光源类型
光源类型 Unity 一共支持4种光源类型:平行光.点光源.聚光灯和面光源 (area light).面光源仅在烘焙时才可发挥作用,因此不在本节讨论范围内.由于每种光源的几何定义不同,因此它们对应的光 ...
- O‘relly 机器学习实战 基于Scikit-learn 、Keras和Tensorflow 学习记录-第一章
@[TOC](这里写自定义目录标题) #第一章 机器学习概述 案例1.1: 使用Scikit-learn 训练并运行一个线性模型 import matplotlib.pyplot as plt imp ...
- Unity Shader学习记录(18) —— Shader动画
纹理动画 纹理动画在游戏中的应用非常广泛.尤其在各种资源都比较局限的移动平台上,我们往往会使用纹理动画来代替复杂的粒子系统等模拟各种动画效果. 11.2.1序列帧动画 _Time是float4类型, ...
- Unity Shader 学习记录(5) —— 实现漫反射光照模型
1 公式计算 从公式可以看出,要计算漫反射需要知道4 个参数:入射光线的颜色和强度 cgh"材质的漫反射系数mdiuse,表面法线n以及光源方向I. 为了防止点积结果为负值,我们需要使用ma ...
- Unity Shader学习记录(6) —— 高光反射光照模型和内置计算函数
1 高光反射光照模型计算公式 从公式可以看出,要计算高光反射需要知道 4 个参数:入射光线的颜色和强度c,材质的光反射系数 m,视角方向v以及反射方向r.其中,反射方向r可以由表面法线n和光源i计算得 ...
- C语言深度剖析书籍学习记录 第一章 关键字
C语言标准定义了32个关键字 union声明联合数据类型 Union declaration - cppreference.com 维护足够的空间来置放多个数据成员中的"一种",而 ...
最新文章
- 如何保证世界杯直播不卡顿?腾讯云要用AI解决这个问题
- DSDT亮度修复失败
- getLastSql()用法
- 注释,无处不在的注释
- map分组后取前10个_hive中分组取前N个值的实现
- 产品质量的基石——微软Bug管理
- 数据结构设计_数据结构设计之实现 Trie (前缀树)[Sumatran Rhinoceros]
- 2020本博客年度信息
- 免打扰清理微信僵尸好友工具
- 生产者消费者问题实验java,java实现:《操作系统实验一》:模拟管程解决解决生产者-消费者...
- [心得]AUP Unix编程艺术知识整理
- Python爬虫之抓取豆瓣影评数据
- 32位系统为什么又叫x86系统呢?
- 计算机信息系统安全管理包括什么,计算机信息系统的运行安全包括什么
- VF2, VF3算法
- HDLbits练习答案(完) 只有你一个success啊
- Ubuntu系统搭建SU2计算环境
- java gps轨迹_记录 GPS 轨迹 LogGPS
- vue中v-for为何要加key?index为何不推荐作为key
- 未来5年最有“钱景”的行业!两会上指明了~