Rim 边缘光
2015-10-20 23:18
295 查看
边缘光:计算眼睛和模型顶点法线的点积,结果作为强度,和材质输出;顶点和法线平行时,强度最大,垂直时,强度最小。因此将他取反,即同一方向时,强度最小,垂直时,强度最大。
float rim= 1-dot(normalize(viewDirection),normalDirection);
源代码:
Shader "JQM/Rim_1" { Properties { _Color("Color", color) = (1.0,1.0,1.0,1.0) _SpecColor("Specular Color", color) = (1.0,1.0,1.0,1.0) _Shininess("Shininess",float) = 10 _RimColor("Rim Coloe Color", color) = (1.0,1.0,1.0,1.0) _RimPower("Rim Power",Range(0.1,10.0)) = 3.0 } SubShader{ Pass{ Tags { "LightMode" = "ForwardBase"} CGPROGRAM #pragma vertex vert #pragma fragment frag //使用自定义变量 uniform float4 _Color; uniform float4 _SpecColor; uniform float4 _RimColor; uniform float _Shininess; uniform float _RimPower; //使用Unity定义的变量 uniform float4 _LightColor0; struct vertexInput{ float4 vertex:POSITION; float3 normal:NORMAL; }; struct vertexOutput{ float4 pos:SV_POSITION; float4 posWorld:TEXCOORD0; float3 normalDir:TEXCOORD1; }; //顶点程序 vertexOutput vert(vertexInput v) { vertexOutput o; o.posWorld = mul(_Object2World, v.vertex); o.normalDir = normalize( mul(float4(v.normal,0.0),_World2Object).xyz); o.pos = mul(UNITY_MATRIX_MVP, v.vertex); return o; } //片段程序 float4 frag(vertexOutput i):COLOR { float3 normalDirection = i.normalDir; float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz- i.posWorld.xyz); float rim=1 -dot(normalize(viewDirection),normalDirection); return float4(rim*_Color.xyz,1.0); } ENDCG } } }
相关文章推荐
- Unity Shader 表面着色器边缘光(Rim Lighting)二
- Unity Shader学习:RimLight边缘光
- Shader编程】之十四 边缘发光Shader(Rim Shader)的两种实现形态
- Unity Shader-边缘光(RimLight)效果
- Unity Shader-边缘光(RimLight)效果
- unity3d 之 边缘光(rim)
- 【Unity Shader编程】之十四 边缘发光Shader Rim Shader 的两种实现形态
- 边缘光 rim
- Unity Shader 表面着色器边缘光(Rim Lighting)一
- Unity Shader-边缘光(RimLight)效果
- 边缘计算应用
- S8赛事落幕,阿里云边缘计算护航虎牙7000万低延时流畅直播
- 边缘计算在物联网(IoT)当中的运用「物联网架构探索系列」
- 图像去噪(滤波)与边缘检测的本质说明
- 基于FPGA的sobel算子边缘检测一点小问题总结
- 网易视频批量上传工具----边缘软件
- 算丰边缘计算开发板人脸检测识别-实现原理与代码介绍
- opencv+python 边缘检测的基本原理,及Sobel、LoG和Canny算子的程序实现
- KubeEdge,一个Kubernetes原生边缘计算框架
- 简述Prewitt、Sobel、Laplacian算子提取图像边缘方法及原理