高光反射光照模型的公式如下: Cspecular = Clight * mspecular * max(0, dot(v, r))gloss 要计算高光反射需要知道4个参数:入射光线颜色Cspecular,材质高光反射系数gloss,视角方向v和反射方向r. 其中r可由cg函数reflect(i, n)求得. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7088297.html 逐顶点高光反射shader如下: Shader "Custom/Specu…
[Unity Shader](三) ---------------- 光照模型原理及漫反射和高光反射的实现 [Unity Shader](四) ------ 纹理之法线纹理.单张纹理及遮罩纹理的实现 [Unity Shader](五) ------ 透明效果之半透明效果的实现及原理 本文主要参考了冯乐乐老师的<Unity Shader入门精要 >一书,再加上网上一些参考资料而写. 笔者使用的是 Unity 2018.2.0f2 + VS2017,书中使用的是 Unity 5.2.1 ,由于版本…
Unity Shader 学习之旅 unityshader图形图像 纸上学来终觉浅,绝知此事要躬行 美丽的梦和美丽的诗一样 都是可遇而不可求的——席慕蓉 一.渲染流水线 示例图 Tips:什么是 GPU 加速计算? 1.1Draw Call CPU过Draw Call来g告诉GPU开始一个渲染过程.一个Draw Call会指向本次调用需要渲染的图元列表. 通俗的讲我们可以把CPU理解成一群专家,他们有着超强和快速的计算能力,能解决各种各样的问题.GPU则是许许多多个流水线上的工人,尽管它们只能做…
Unity Shader 学习之旅之SurfaceShader unity shader 图形图像  如果大地的每个角落都充满了光明 谁还需要星星,谁还会 在夜里凝望 寻找遥远的安慰——江河 官方文档 一.工作原理 sureface表面着色器相当于unity在顶点片元着色器的基础上进一步的封装.当我们定义一个“surface function”后,可以通过unity已经封装好的的结构体“SurfaceOutput”等直接获取需要的数据,如纹理,法线,光滑度等 二.结构体 2.1标准output结…
1.原理 1.1.Phong模型 计算高光反射需要表面法线.视角方向.光源方向.反射方向等. 在这四个矢量中,我们实际上只需要知道其中3个矢量即可,而第4个矢量(反射方向r)可以通过其他信息计算得到: 这样,我们就可以利用Phong模型来计算高光反射的部分: m(gloss)是材质的光泽度,也被反称为反光度.它用于控制高光区域的"亮点"有多宽,m(gloss)越大,亮点就越小. m(spscular)是材质的高光反射颜色,它用于控制该材质对于高光反射的强度和颜色. c(light)则是…
Blinn-Phong光照模型不用计算反射方向,计算公式如下: h = normalize(v + l); Cspecular = Clight * mspecular * pow(max(0, dot(n, h), gloss)) 转载请注明出处:http://www.cnblogs.com/jietian331/p/7097201.html shader如下: Shader "Custom/Specular Blinn-Phong" { Properties { _Diffuse…
1 高度纹理 使用一张纹理改变物体表面法线,为模型提供更多细节. 有两种主要方法: 1.高度映射:使用一张高度纹理(height map)来模拟表面位移(displacement).得到一个修改后的法线值. 2.法线映射:使用一张法线纹理直接存储表面法线. 1.1 高度纹理 高度图中存储的是强度值(intensity).越浅越说明向外凸起,越深越向里凹. 缺点是计算复杂,消耗性能. 高度图也会与法线映射一起使用.给出表面凹凸的额外信息. 1.2 法线纹理 法线纹理中存储的是法线方向.法线方向的范…
1 单张纹理 1.1 纹理 使用纹理映射(Texture Mapping)技术,我们把一张图片逐纹素(Texel)地控制模型的颜色. 美术人员建模时,会在建模软件中利用纹理展开技术把纹理映射坐标(Texture-Mapping Coordinates)存储在每个顶点上.纹理映射坐标定义了该顶点在纹理中的2D坐标. 纹理映射坐标通常是2维坐标(u,v).也被称为UV坐标.(u为横向,v为纵向) 顶点UV坐标通常被归一化到(0, 1)范围内,但纹理采样的时候常常也有不在(0,1)范围内的坐标. Op…
一个顶点/片元 着色器的结构大概如下: Shader "MyShaderName" { Properties { //属性 } SubShader { //针对显卡A的SubShader Pass { //设置渲染状态和标签 //开始CG代码片段 CGPROGRAM //该代码的预编译指令,例如: #pragma vertex vert #pragma fragment frag //CG代码写在这儿 ENDCG //其他设置 } } SubShader { //针对显卡B的SubSh…
纹理可以用来存储任何表面属性. 可以通过使用渐变纹理来实现插画风格的渲染效果. 这项技术是由Valve公司提出的.Valve使用它来渲染游戏中具有插画风格的角色. 我们使用半兰伯特模型计算漫反射. 因为我们使用的实际上是一个一维纹理: 所以在片元着色器中,我们使用fixed2(halfLambert, halfLambert)作为uv坐标进行纹理采样. 代码实现如下: Shader "Unity Shader Book/Chapter 7/RampTexture" { Properti…