漫反射着色 - 创建半兰伯特光照模型
2017-11-28 16:51
537 查看
Shader "HalfLambert" { // 属性 Properties { // 主纹理 : 初始值白色 _MainTex("_MainTex", 2D) = "white" {} } SubShader { // 标签 Tags { // 渲染类型 : 不透明物体 "RenderType" = "Opaque" } // 层次细节 : 200 LOD 200 // CG代码 CGPROGRAM // 预处理指令 // surface surf : 指定此为suface类型的shader, 渲染函数为surf // HalfLambert : 指定所使用的光照模型为自定义半兰伯特光照模型 #pragma surface surf HalfLambert // 自定义半兰伯特光照模型 // lightDir参数 : 顶点到光源的方向向量 // atten参数 : 光照强度衰减值 inline float4 LightingHalfLambert(SurfaceOutput s, fixed3 lightDir, fixed atten) { // 漫反射光照方向 = 顶点的法线向量与光照方向的点积 float4 difLight = dot(s.Normal, lightDir); // 半兰伯特光照方程 float4 hLambert = difLight * 0.5 + 0.5; float4 col; // _LightColor0 : 是UnityShader的内部变量,代表全局光照颜色,可直接使用 col.rgb = s.Albedo * _LightColor0.rgb * (hLambert * atten * 2); col.a = s.Alpha; return col; } // CG变量 : 与Properties中的变量名保持一致 sampler2D _MainTex; // 输入结构体 struct Input { // 在在纹理名称前直接加上uv,代表取纹理的uv float2 uv_MainTex; }; // 着色函数 void surf(Input IN, inout SurfaceOutput s) { // 纹理采样,样本为_MainTex half4 c = tex2D(_MainTex, IN.uv_MainTex); // 将颜色进行像素输出 s.Albedo = c.rgb; s.Alpha = c.a; } ENDCG } }
相关文章推荐
- 漫反射着色 - 创建自定义漫反射光照模型
- Unity Shaders and Effects Cookbook (1-2)创建自定义漫反射光照模型
- 【Unity Shaders】Diffuse Shading——创建一个自定义的diffuse lighting model(漫反射光照模型)
- 【Unity Shaders】Diffuse Shading——创建一个自定义的diffuse lighting model(漫反射光照模型)
- Obj模型功能完善(物体材质,光照,法线贴图).Cg着色语言+OpenTK+F#实现.
- Unity shader学习之逐像素漫反射光照模型
- Shader自学笔记 2.1.2 逐像素漫反射光照模型实现
- 【DirectX11】第八篇 光照模型——漫反射
- Shader自学笔记 2.1.3 半兰伯特光照模型实现
- 问题六十八:着色模型(shading model)(2)——光照模型(Light model)
- DirectX 3D_基础之地形绘制基础 高度图 创建高度图 加载RAW文件 访问和修改高度图 创建地形的几何信息(顶点计算,索引计算,纹理映射,光照,着色,地形中行走)
- <unity shader入门精要> - unity shader 中实现漫反射光照模型
- UnityShader入门精要学习笔记(五):Unity中实现漫反射光照模型
- GLSL着色语言的学习(二)光照模型
- Unity3D ShaderLab 漫反射卷积光照模型
- Unity3D Shader 半兰伯特光照模型
- 【Unity Shader】 Lambert(兰伯特)光照模型
- 漫反射光照模型
- Unity Shaders and Effects Cookbook (1-4) 创建 Ramp Texture(渐变纹理)控制漫反射着色
- 漫反射着色 - 创建基本的表面着色器