Unity Shaders 基础篇(四) 光照
来源:互联网 发布:淘宝交易管理插件 编辑:程序博客网 时间:2024/06/05 10:48
声明: 本文主要参照CG_WikiBook.
漫反射(Diffuse reflection)
先上效果图:
如图所示,这是一个在单个平行光下的sphere. 采用光照计算模型为diffuse.
所谓的diffuse模型就是说不论在何方向看这个球的某一点(不被遮挡的情况下), 球的亮度都是一致的. 这个点的亮度由以下的公式决定:
其中I的全称为Intensity. K主要代表的是物体的材质. N代表的是物体反射点的法向量.L则代表了光的朝向(从反射点指向光的方向).
代码如下:
Shader "Cg per-vertex diffuse lighting" { Properties { _Color ("Diffuse Material Color", Color) = (1,1,1,1) } SubShader { Pass { Tags { "LightMode" = "ForwardBase" } // make sure that all uniforms are correctly set CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" uniform float4 _LightColor0; // color of light source (from "Lighting.cginc") uniform float4 _Color; // define shader property for shaders struct vertexInput { float4 vertex : POSITION; float3 normal : NORMAL; }; struct vertexOutput { float4 pos : SV_POSITION; float4 col : COLOR; }; vertexOutput vert(vertexInput input) { vertexOutput output; float4x4 modelMatrix = unity_ObjectToWorld; float4x4 modelMatrixInverse = unity_WorldToObject; //input.normal 法向量 模型坐标系 float3 normalDirection = normalize( mul(float4(input.normal, 0.0), modelMatrixInverse).xyz); float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);//光的朝向 世界坐标系 float3 diffuseReflection = _LightColor0.rgb * _Color.rgb * max(0.0, dot(normalDirection, lightDirection)); output.col = float4(diffuseReflection, 1.0); output.pos = mul(UNITY_MATRIX_MVP, input.vertex); return output; } float4 frag(vertexOutput input) : COLOR { return input.col; } ENDCG } } Fallback "Diffuse"}
其中,唯一需要注意的是
float3 normalDirection = normalize( mul(float4(input.normal, 0.0), modelMatrixInverse).xyz);
向量和坐标的转换是不一致的.(待补充)
镜面高光(Specular highlights)
光滑镜面高光(Smooth Specular highlights)
未完待续
0 0
- Unity Shaders 基础篇(四) 光照
- 【Unity Shaders】Shader中的光照
- Unity Shaders 基础篇(一) 基本概念
- Unity Shaders 基础篇(二) 基本操作
- 【Unity Shaders】Shader中的光照,shadersshader
- 【Unity Shader】基础光照
- Unity Shaders 基础篇(三) 纹理与透明度
- 【Unity Shaders】Diffuse Shading——漫反射光照改善技巧
- 【Unity Shaders】《Unity Shaders and Effects Cookbook》总结篇
- 【Unity学习笔记】——基础篇:关于光照GI
- 【Unity Shaders】Lighting Models —— 光照模型之Lit Sphere
- Unity Shaders and Effects Cookbook (1-2)创建自定义漫反射光照模型
- Unity Shaders and Effects Cookbook (1-3) 创建 Half Lambert 光照模型
- Unity Shaders and Effects Cookbook (3-2) 创建简单的 Phong 高光 光照模型
- Unity Shaders and Effects Cookbook (3-3) 创建 BlinnPhong 光照模型
- 【Unity Shaders】学习笔记之为创建自定义慢反射光照模型(五)
- 【Unity Shaders】学习笔记之为创建Half Lambert光照模型(六)
- 第6章 Unity 中的基础光照
- WebStorm编程环境下常用的快捷键
- 火车进站
- iOS中时间与字符串互转
- jvm如何判断对象是否可以被回收
- Python中输出字体的颜色设置
- Unity Shaders 基础篇(四) 光照
- React Native 导航(Navigator)详解——属性篇
- [Hibernate学习第二课]项目的简单优化
- jquery文件框inputfile改变事件 校验文件类型
- Leetcode 239. Sliding Window Maximum
- 自己动手写ORM的感受
- Intellij IDEA 2016学习系列之(三)修改mybatis-generator源码生成中文注释
- Qt Debug 环境的设置(Qt5.6+msvc2015)
- OOAD:面向对象的分析和设计