UnityShader初级篇——实现逐顶点漫反射光照模型
来源:互联网 发布:知善恶树英语 编辑:程序博客网 时间:2024/05/22 10:57
1.在UnityShader中实现逐顶点漫反射光照模型
计算公式:
漫反射光照 = 光源颜色与强度 * 漫反射颜色 * saturate(dot(法线方向,光照方向));
Shader "Unity Shaders Book/Chapter 6/Diffuse Vertex-Level"{Properties{ //定义属性,控制材质的漫反射颜色_Diffuse ("Diffuse", Color)=(1,1,1,1)}SubShader{Pass{ //指明该Pass的光照模式 Tags{"LightMode"="ForwardBase"} CGPROGRAM//告诉Unity我们定义的定点着色器和片远着色器的名字#pragma vertex vert#pragma fragment frag// 包含引用内置文件#include "Lighting.cginc"//引用属性,定义一个与该属性类型相匹配的变量fixed4 _Diffuse;//定义顶点着色器的输入和输出结构体struct a2v{float4 vertex : POSITION;float3 normal : NORMAL;//存储模型法线信息};struct v2f{float4 pos : SV_POSITION;fixed3 color : COLOR;//将顶点着色器中计算的光照颜色传递给片元着色器};//在顶点着色器中实现逐顶点漫反射光照v2f vert (a2v v){v2f o;//将顶点坐标从模型坐标转换为裁剪坐标o.pos = UnityObjectToClipPos(v.vertex);//获取环境光fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;//将法线从模型空间转到世界空间(光源方向和法线必须处在同一坐标空间下)//截取变换矩阵的前三行前三列,使用其逆矩阵即调换mul函数中的位置,最后归一化fixed3 worldNormal = normalize(mul(v.normal, (float3x3)_World2Object));//获取世界空间中的光源方向fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz);//漫反射光照=(光源颜色与强度信息*漫反射颜色)max(0,dot(顶点法线,光源方向);)fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLight));o.color = ambient + diffuse;return o;}fixed4 frag (v2f i) : SV_Target{ //输出顶点 return fixed4(i.color,1.0);}ENDCG}}Fallback "Diffuse"}
阅读全文
0 0
- UnityShader初级篇——实现逐顶点漫反射光照模型
- UnityShader初级篇——实现逐像素漫反射光照模型
- UnityShader初级篇——实现逐顶点高光反射光照模型
- UnityShader从入门到放弃(四)漫反射—逐顶点光照
- UnityShader初级篇——实现逐像素高光反射光照模型
- UnityShader初级篇——使用半兰伯特光照模型
- UnityShader初级篇——BlinnPhong光照模型
- 漫反射-逐顶点光照
- OpenGL 4.0 GLSL 用单光源 实现逐顶点 漫反射光照模型
- Shader自学笔记 2.1.1 逐顶点漫反射光照模型实现
- unity Shader 的漫反射逐顶点的光照模型
- UnityShader从入门到放弃(五)漫反射—逐片元光照
- UnityShader入门精要学习笔记(五):Unity中实现漫反射光照模型
- 【DirectX11】第八篇 光照模型——漫反射
- HLSL实现漫反射光照模型
- HLSL实现漫反射光照模型
- 基本光照模型实现-漫反射
- 【UnityShader入门精要】Unityshader中的漫反射(逐顶点漫反射diffuse)
- 1002. 写出这个数 (20)
- MongoDB&C++ 开发(八)建索引
- TensorFlow实现自编码器
- Linux启动管理
- [读书笔记]《高质量C++/C编程指南》—林锐 (阅读至第1章)
- UnityShader初级篇——实现逐顶点漫反射光照模型
- Rhyme/ Linux ACL权限 默认与递归ACL权限
- poj 2385
- 第一个登录界面web应用
- [Offer收割]编程练习赛26
- Python Flask(一) –by Maxime Bouroumeau-Fuseau
- 使用Lock和Condition 替代 synchronized的 锁和 等待和唤醒
- python属性访问
- 网络工程师笔记《二》