漫反射(diffuse reflection)

整理来至《GPU编程与CG语言之阳春白雪下里巴人》

一、原理

粗糙的物体表面向各个方向等强度地反射光,这种等同地向各个方向散射的现象称为光的漫反射(diffuse reflection)。产生光的漫反射现象的物体表面称为理想漫反射体,也称为朗伯(Lambert)反射体。

环境光:

方向光:

Lambert 光照模型

二、shader

/*------------------------漫反射与Lambert模型 ------------------
*环境光(UNITY_LIGHTMODEL_AMBIENT)和方向光(Directional Light)
*
*/Shader "JQM/diffuse" {Properties{_MainColor("MainColor" , Color) = (1,1,1,1)_MainTex("MainTex" , 2D) = "white"{}}SubShader {Pass{Tags { "RenderType"="Opaque" }LOD 200CGPROGRAM#pragma vertex vert#pragma fragment fragfloat4 _LightColor0;//第一个平行光的颜色float4 _MainColor;sampler2D _MainTex;struct Input {float4 pos:POSITION;float4 normal:NORMAL;float2 uv:TEXCOORD0;};struct Output{float4 pos:SV_POSITION;float4 normal:NORMAL;float2 uv:TEXCOORD0;float3 pos_world:TEXCOORD1;};Output vert(Input v){Output o;o.pos = mul(UNITY_MATRIX_MVP, v.pos);o.uv = v.uv;o.normal = normalize(v.normal);o.pos_world = mul(_Object2World, v.pos);return o;}float4 frag(Output o):COLOR{float4 color;float3 Kd = tex2D(_MainTex, o.uv).xyz;color = UNITY_LIGHTMODEL_AMBIENT;// + float4(0.5,0.5,0.5,1.0);//法线float3 normalDir= mul(float4(o.normal.xyz,0),_World2Object).xyz;//向量和顶点转到世界空间的运算不一样normalDir = normalize(normalDir);//光源方向//float3 lightDir = -normalize(o.pos_world-_WorldSpaceLightPos0.xyz);//与位置有关系float3 lightDir = normalize(_WorldSpaceLightPos0.xyz);//与位置无关系//1.计算环境光float3 ambient  = Kd*UNITY_LIGHTMODEL_AMBIENT;//2.计算方向光漫反射float3 diffuse=Kd*_LightColor0*max(0.3,dot(normalDir,lightDir)) * _MainColor;color.xyz = ambient + diffuse;color.w = 1;return color;}ENDCG} }FallBack "Diffuse"
}

漫反射(diffuse reflection)相关推荐

  1. 【Unity Shader】三、漫反射Diffuse Shader例子

    学习目标: 漫反射Diffuse Shader,逐顶点计算和逐像素计算. 半兰伯特(HalfLambert)光照模型. 结合材质自身的色彩(Material Color)及环境光(Ambient). ...

  2. 问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.1)——漫反射(diffuse reflection)

    68.1.2.1.1 漫反射光 前面,我们有这么一张图: 为了突出光子和表面里面的原子相互作用,还是用画得更为夸张的图好了.(注意:只关注蓝色光线.) 关于"漫反射光"(上图中的蓝 ...

  3. 湖北经济学院的计算机是否强,graphics-ch11-真实感图形绘制_湖北经济学院:计算机图形学_ppt_大学课件预览_高等教育资讯网...

    第十一章 真实感图形技术 1,简单光照明模型 2,多边形绘制方法 3,透明 4,整体观照明模型 5,光线跟踪算法 第十章 真实感图形绘制 光照模型 (Illumination Model):计算某 一 ...

  4. 关于双向反射率BRDF的定义

    物体表面对电磁波的反射有三种形式:     "   镜面反射(mirror reflection)          反射能量集中在一个方向,反射角=入射角     "   漫反射 ...

  5. MATLAB中的光照处理

    在用MATLAB绘制三维图形时,不仅可以画出带光照模式的曲面,还能在绘图时指定光线的来源. 1.带光照模式的三维曲面 surfl命令用来画一个带光照模式的三维曲面图,该命令显示一个带阴影的曲面,结合了 ...

  6. [GAMES101]现代计算机图形学课程总结3:Shading

    文章目录 概要 Shading的定义 Shading是局部的 输入 不产生阴影(shading不等于shadow) Blinn-Phong Reflectance Model 漫反射 (Diffuse ...

  7. 着色Shading(1)(光照、着色)(笔记)

    文章目录 前言 一.可见性/遮挡(Visibility/Occlusion) 画家算法(Painter's Algorithm) 深度缓存(Z-Buffer) 深度缓存算法的实际操作 深度缓存算法的复 ...

  8. 光线追踪 — 光照模型

    1.简单光照模型--环境光 2.Lambert光照模型(漫反射) Lambert光照模型是一个非常简单的模型,早在200 多年前,一个叫Lambert的家伙提出,当光照射到粗糙 的表面时,它将向四周均 ...

  9. GAMES101笔记_Lec07~09_着色 Shading

    0 我们已经学了什么 What We've Covered So Far 空间中定义了一个摄像机,通过某些变换使模型摆好姿势(Model) 通过观测变换让摄像机放在原点,得到标准的 [ − 1 , 1 ...

  10. MATLAB绘图与图形处理(2)

    原文地址为: MATLAB绘图与图形处理(2) 7.2  三维图形 7.2.1  三维曲线.面填色命令 命令1  comet3 功能  三维空间中的彗星图.彗星图为一个三维的动画图像,彗星头(一个小圆 ...

最新文章

  1. JS日期时间加减实现
  2. python多线程threading
  3. JAVA类型转换问题
  4. linux 下的dd,Linux中的dd命令
  5. 【Qt】Qt6调用Visual Studio2019生成的动态库详解
  6. 基于Hexo+GitHub Page搭建免费个人博客教程
  7. linux笔记-硬链接和符号链接
  8. Vue之安装Google开发插件
  9. 矩张量计算 matlab,用来计算广义相对论常用张量计算的Matlab程序
  10. 岭回归,Lasso回归和弹性网回归理论及特点
  11. power bi报表html,数据可视化系列:Power BI基于Web数据的报表制作(经典级示例)
  12. 可能是最强的Python可视化神器,建议一试
  13. html屏幕遮挡,遮挡屏幕怎么设置 为什么手机上会出现请勿遮挡屏幕顶端
  14. 新手上路必备的 DAX 函数(下)
  15. GitCode 加速同步 GitHub
  16. (超详细)大数据Hadoop之MapReduce组件
  17. Allegro 过孔绘制
  18. 设置了店铺的旺旺分组,但是对应的旺旺分组灯不亮
  19. CesiumJs 简单操作模型
  20. 编写python程序、计算账户余额_小明有20w存款存在余额宝中,按余额宝年收益为2.35%计算,用Python编写程序计算,多少年后小明的存款达到30w?...

热门文章

  1. linux下容器find函数,你知道Linux系统中find命令的使用方法吗?
  2. mysql之从入门到删库跑路
  3. win7旗舰版/专业版黑屏后怎样再次永久激活?
  4. mysql统计每个学生的选课门数_SQL一个查询中包含两个聚集函数怎么弄啊例如,查询每名学生的选课门数和平均成绩怎么弄啊...
  5. 笔记本连接显示器后没有声音_笔记本电脑外接显示器后没声音,请问怎么调整设置...
  6. Cadence OrCAD Capture 在图纸中添加系统框图的方法
  7. 北京最最最牛的IT公司都在这了
  8. Python中的图像增强
  9. 100层楼两个杯子找杯子碎的临界点
  10. 大学毕业生如何成功应聘高薪IT职位 [转]