Unity shader学习之逐顶点漫反射光照模型
公式如下:
Cdiffuse = Clight * mdiffuse * max(0, dot(n,l));
其中,n 为表面法线,l 为指向光源的单位向量,mdiffuse 为材质温反射颜色,Cdiffuse 为光源颜色。
需要注意的是,需要防止法线与光源方向点积为负,因些使用max函数。
转载请注明出处:http://www.cnblogs.com/jietian331/p/7068273.html
shader如下:
Shader "Custom/Diffuse Vertex-Level"
{
Properties
{
_Diffuse ("Diffuse", Color) = (,,,)
} SubShader
{
Tags { "RenderType"="Opaque" }
LOD Pass
{
Tags { "LightMode"="ForwardBase" } // 只有设置了正确的LightMode,才能访问一些Unity提供的内置变量,如:_LightColor0
CGPROGRAM
#pragma vertex vert
#pragma fragment frag #include "UnityCG.cginc"
#include "Lighting.cginc" struct appdata
{
float4 vertex : POSITION;
float3 normal : NORMAL;
}; struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
}; float4 _Diffuse; v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex); // 在模型空间中计算
float3 lightDir = ObjSpaceLightDir(v.vertex);
lightDir = normalize(lightDir);
float4 diffuseColor = _Diffuse * _LightColor0 * max(, dot(lightDir, v.normal)); // 也可以世界坐标中计算
//float3 worldNormal = normalize(mul(v.normal, (float3x3)_World2Object)); // 使用顶点变换矩阵的逆转置矩阵来变换法线,参考前面的章节“法线变换”
//float3 worldLight = normalize(_WorldSpaceLightPos0.xyz);
//float4 diffuseColor = _Diffuse * _LightColor0 * saturate(dot(worldNormal, worldLight)); o.color = UNITY_LIGHTMODEL_AMBIENT + diffuseColor;
return o;
} fixed4 frag (v2f i) : SV_Target
{
return i.color;
}
ENDCG
}
} Fallback "Diffuse"
}
效果如下:
Unity shader学习之逐顶点漫反射光照模型的更多相关文章
- Unity shader学习之逐像素漫反射光照模型
shader如下: Shader "Custom/Diffuse Fragment-Level" { Properties { _Diffuse (,,,) } SubShader ...
- 【Unity Shader学习笔记】Unity光照基础-漫反射光照
本代码只适用于平行光. 1.逐顶点漫反射光照 1.1漫反射光照原理 1.2代码实现 在Properties语义块中声明一个漫反射颜色属性 Properties { //漫反射参数,用于调整漫反射效果 ...
- Unity Shader 学习之旅之SurfaceShader
Unity Shader 学习之旅之SurfaceShader unity shader 图形图像 如果大地的每个角落都充满了光明 谁还需要星星,谁还会 在夜里凝望 寻找遥远的安慰——江河 官方文档 ...
- 【Unity Shader学习笔记】Unity光照基础-半兰伯特光照
在光照无法达到的区域,模型的外观通常是全黑的,没有任何明暗变化,这会使模型的背光区域看起来就像一个平面. 使用半兰伯特光照可以解决这个问题. 逐顶点光照技术也被称为兰伯特光照模型.因为它符合兰伯特定律 ...
- Unity Shader 学习之旅
Unity Shader 学习之旅 unityshader图形图像 纸上学来终觉浅,绝知此事要躬行 美丽的梦和美丽的诗一样 都是可遇而不可求的——席慕蓉 一.渲染流水线 示例图 Tips:什么是 GP ...
- Unity shader学习之高光反射光照模型
高光反射光照模型的公式如下: Cspecular = Clight * mspecular * max(0, dot(v, r))gloss 要计算高光反射需要知道4个参数:入射光线颜色Cspecul ...
- 【Unity Shader学习笔记】Unity基础纹理-单张纹理
1 单张纹理 1.1 纹理 使用纹理映射(Texture Mapping)技术,我们把一张图片逐纹素(Texel)地控制模型的颜色. 美术人员建模时,会在建模软件中利用纹理展开技术把纹理映射坐标(Te ...
- 【Unity Shader学习笔记】Unity光照基础-高光反射
1.原理 1.1.Phong模型 计算高光反射需要表面法线.视角方向.光源方向.反射方向等. 在这四个矢量中,我们实际上只需要知道其中3个矢量即可,而第4个矢量(反射方向r)可以通过其他信息计算得到: ...
- Unity Shader入门精要学习笔记 - 第5章 开始 Unity Shader 学习之旅
一个顶点/片元 着色器的结构大概如下: Shader "MyShaderName" { Properties { //属性 } SubShader { //针对显卡A的SubSha ...
随机推荐
- 1 byte 8 bit 1 sh 1 bit 2. 字符与编码在程序中的实现
https://en.wikipedia.org/wiki/Shannon_(unit) 1字节(英语:Byte)=8比特(英语:bit) The shannon (symbol Sh), also ...
- JS图片水印
attendanceClick(userID,headImg,userName,company,scoreNmu) { let base64Image = 'assets/imagesaring.pn ...
- [security][modsecurity] modsecurity 规则说明/中文/转发
原文转发以防丢失. 地址: http://www.catssec.com:8090/exploit/?p=691 转来细读之后,并没有太多的参考价值 :( modsecurity规则手册 通用格式 ...
- Cmake入门资料
1.http://blog.sina.com.cn/s/blog_3f3422fd010009vn.html 2.http://www.cnblogs.com/coderfenghc/tag/cmak ...
- iOS如何接收服务端返回的布尔值
if ([user[@"chat"] boolValue]) { userModel.chat = ; }else { userModel.chat = ; } 关键是要调用boo ...
- VPS常用操作(自用)
1.screen 用来开启进程,关闭ssh或命令行后扔可以继续运行 screen screen -list screen -r xx screen -S PID -X quit 2.mono asf ...
- Python接口自动化【requests处理Token请求】
首先说一下使用python模拟登录或注册时,对于带token的页面怎么登录注册模拟的思路: 1.对于带token的页面,需要先从最开始的页面获取合法token 2.然后使用获取到的合法token进行后 ...
- 敏捷开发之Scrum扫盲篇(转)
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后于他人,我也开始学习Scrum.今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的语言来描述Scrum中 ...
- mysql \c 终止 mysql输入语句模式
\c 遇到这种情况怎么退出mysql 输入语句模式? mysql> select -> 输入\c退出 mysql> select -> \c mysql> 另外一种情况 ...
- 怎么修改TOMCAT的默认主页为你自己项目的主页
如果webapp下有一个abc的文件来下有一个index.html,想设置为首页怎么操作 方法: 修改tomcat/conf/web.xml文件.在web.xml文件中,有一段如下:<welco ...