Phong光照模型
Phong光照模型
一、Phong光照模型理论
Lambert模型可以较好的模拟出粗糙物体表面的光照效果,但是真实环境还存在着许多表面光滑的物体,例如金属、陶瓷等,Lambert光照模型无法较好地表现。
所以在1975年,Bui Tuong Phong提出了一种局部光照的经验模型,他认为物体表面反射光线由三部分组成:
SurfaceColor=CAmbient+CDiffuse+CSpecularSurfaceColor=C_{Ambient}+C_{Diffuse}+C_{Specular}SurfaceColor=CAmbient+CDiffuse+CSpecular
其中:
·CAmbientC_{Ambient}CAmbient:环境光
·CDiffuseC_{Diffuse}CDiffuse:漫反射
·CSpecularC_{Specular}CSpecular:镜面反射
物体除了受灯光影响,还会收到环境光(Ambient)影响。
当光线照射到一个表面光滑的物体时,除了有漫反射光之外,从某个角度还可以看到很强的反射光。
在接近镜面反射角的一个固定范围内,大部分入射 ...
灯光阴影
灯光阴影
一、渲染路径
Unity支持不同的渲染路径,不同的渲染路径在光照和阴影方面会有不同的特点。
1.延迟着色渲染路径
定义:将着色步骤推迟处理的渲染方式,是实现最逼真光影效果的渲染路径,但对硬件要求较高。
使用延迟着色时,灯光Pass基于G-Buffer和深度信息计算光照,因此计算量与场景复杂程度无关,可以减少性能浪费。
延迟着色不支持真正的抗锯齿,也不能处理半透明物体,这些会自动使用前向渲染处理。
延迟着色只能在有多重渲染目标、Shader Model3.0或以上,并且支持深度渲染贴图的显卡上运行。
2.前向渲染路径
前向渲染是传统的渲染路径,支持所有Unity的图形功能。
前向渲染路径渲染使用一个或者火哥Pass渲染每一个物体,取决于影响到物体的灯光。
一个灯光是逐像素光照还是其他方式渲染取决于这四点:
(1)渲染模式设置为Not Important的灯光总是以逐顶点或者SH的方式渲染。
(2)渲染模式设置为Important的灯光总是逐像素渲染。
(3)最亮的平行光总是逐像素渲染。
(4)如果逐像素光照的灯光数量少于项目质量设置中Pixel Light的数量,那么其余较亮的 ...
Lambert光照模型
Lambert光照模型
一、Lambert光照模型理论
在现实生活中,一个物体的颜色是由射进眼镜里的光线决定的。
当光线射到物体表面时,一部分被物体表面吸收,另一部分被反射。对于透明物体而言,还有一部分光会透过物体,产生透射光。
被物体吸收的光会产生热量,所以只有反射光和透射光才能进入人眼,从而产生视觉效果。
物体表面的光照颜色由入射光、物体材质以及材质和光的交互规律觉定。
Lambert光照模型可以比较真实地还原粗糙物体表面与光的交互行为,且计算效率非常高,被广泛使用。
当光线照射到物体表面粗糙的物体,例如:石灰墙壁、纸张等,光线会向各个方向等强度的反射,即光的漫反射现象(Diffuse)。
漫反射满足Lambert定律:反射光线强度与表面法线和光源方向之间的夹角呈正比。产生漫反射的物体表面称为理想漫反射体。
Lambert光照模型计算公式:
Cdiffuse=(Clight⋅Mdiffuse)saturate(n⋅l)C_{diffuse}=(C_{light} \cdot M_{diffuse})saturate(n \cdot l)Cdiffuse=(Clight⋅Mdi ...
Unity的包含文件
Unity的包含文件
一、包含文件的使用语法
包含文件是以cginc作为拓展名的文本文件。
Windows系统,Unity所有包含文件存放在安装目录\Editor\Data\CGIncludes\下;Mac系统,包含文件存在Applications\Unit\Unity.app\Contents\CGIncludes\下。
使用方法:
1234567{ CGPROGRAM //... #include “UnityCG.cginc" //... ENDCG}
二、UnityCG.cginc
1.顶点着色器输入结构体
12345678910111213141516171819202122232425262728293031323334353637383940414243444546//appdata基础结构体struct appdata_base { float4 vertex : POSITION; float3 normal : NORMAL; float4 texcoord : TEXCOORD ...
Unity ShaderLab 顶点-片段着色器基础
Unity ShaderLab 顶点-片段着色器基础
一、创建Shader
Shader创建方式:
Assets->Create->Shader->Unlit Shader,即可创建出一个顶点-片段着色器文件。
Unity中Shader的两种用途:
(1)指定给材质,用于物体渲染。
(2)指定给脚本,用于图像处理。
二、编写Shader方式
Unity渲染管道中的Shader编写:
(1)顶点-片段着色器(Vertex and Fragment Shader)
(2)表面着色器(Surface Shader)
(3)固定函数着色器(Fixed Function Shader)
三、CG语言基础
1.编译指令
CG程序片段通过指令嵌入到Pass中,夹在指令CGPROGRAM和ENDCG之间。
12345678910111213Pass{ //...设置渲染状态.. CGPROGRAM //编译指令 #pragma vertex vert #pragma fragment frag //CG代码 ENDCG}
在CG程序片段之前,通常需要先使用# ...
Unity ShaderLab语法基础
Unity ShaderLab语法基础
一、Shader的组织结构
无论选择何种语言编写Shader,无论编写的Shader是何种类型,Unity Shader总是通过ShaderLab语言进行包装并组织结构。
123456789101112131415161718192021Shader "Name"{ Properties { //开放到材质面板的属性 } SubShader { //顶点-片段着色器 //或者表面着色器 //或者固定函数着色器 } SubShader { //更加精简的版本 //或者表面着色器 //为了在旧的图形设备上运行 } ... FallBack "Name"}
·首先最开始定义的是Shader的名称,然后定义开放出来的所有属性
·Shader中可以编写多个子着色器(SubShader),但至少需要一个
·在程序执行过程中,GPU会按顺序检测第一个可以正常运行的着色器,如果都无法执行,则会执行最后的回退(Fallback)命令 ...
OpenGL学习记录01
OpenGL学习记录01
一、OpenGL介绍
OpenGL(开放图形库)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
OpenGL的高效实现(利用了图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。
本文接下来将使用GLFW库进行代码的编写。
二、GLFW的安装与配置
1、下载
进入GLFW官网,依次点击Download->32-bit Windows binaries。
2、解压文件
下载完之后解压文件。
3、打开Visual Studio创建项目
在Viusal Studio中创建一个c++的空项目。
创建完成后再解决方案中添加一个文件夹,命名为src,并创建一个名为Application.cpp的c++文件。
4、配置环境
添加如下代码。
12345678910111213141516171819202122232425262728293031323334353637#include <GLFW/glfw3.h>int main(void) ...
Unity基础组件教程-SpriteRenderer
Unity基础组件教程-SpriteRenderer
一、SpriteRenderer
1、Sprite:要渲染的精灵。
2、Color:为精灵图形渲染颜色。
3、FilpX和FlipY:在相应轴上反转精灵。
4、Draw Mode: 精灵渲染器的当前绘制模式。
5、Mask Interaction:指定精灵如何与遮罩交互。
6、Sprite Sort Point:指定精灵排序时使用的参考点。
7、Material:指定精灵的渲染材质。材质控制了精灵的外观,包括颜色、透明度、光照和其他视觉效果。
8、Additional Settings:
Sorting Layer:指定精灵所在的排序层。排序层决定了精灵的渲染顺序,相同排序层内的精灵可以通过Order in Layer来进一步排序。
Order in Layer:在同一排序层内定义精灵的渲染顺序。数值越大,精灵越靠前渲染。
二、Draw Mode
1、Simple:默认选项;精灵图像按照其原始尺寸进行绘制;不进行任何缩放或切割操作;适用于需要以原始尺寸显示的精灵。
2、Sliced:主要用于九宫格切片;适 ...
Hexo+Cloudflare搭建自己的博客
使用Hexo+Cloudflare搭建自己的博客
一、Hexo准备
1、安装Node.js
进入官网,下载LTS长期支持版本。
安装完可以用下列命令判断是否安装成功。
12345node -v# 输出内容v20.12.2npm -v# 输出内容10.5.0
2、更换源
123npm config set strict-ssl false #关闭ssl验证npm install -g cnpm --registry=https://registry.npm.taobao.org #安装cnpm
3、安装hexo框架
123cnpm install -g hexo-cli# hexo -v 验证是否安装成功
4、构建hexo
在自己想要存放文件的位置建一个文件夹,然后进入到新建的博客文件夹。
12345678910hexo init #初始化默认文件hexo -s# 在localhost:4000就可以看到我们的博客内容了hexo new post "MyFirstBlog"# 在source/_post 文件夹下就生成了这一篇博客hexo -g# 构建文件
更多信 ...
Codeforces Round 943(Div.3)
Codeforces Round 943(Div.3) A~B
A.Maximize?
总共 ttt 组测试数据,每组测试数据给定一个 xxx ,已知 y∈[1,x)y \in[1,x)y∈[1,x) ,求出最大的 gcd(x,y)+ygcd(x,y)+ygcd(x,y)+y 。
123456789101112131415161718192021222324#include<bits/stdc++.h>using namespace std;const int N=105;int n;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int main(){ int t; cin>>t; while(t--){ int x; cin>>x; int ans=0,y; for(int i=1;i<x;i++){ if(ans<=gcd(x,i)+i ...