Unity3D ShaderLab 菲涅耳内轮廓
生活随笔
收集整理的这篇文章主要介绍了
Unity3D ShaderLab 菲涅耳内轮廓
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
菲涅耳内轮廓
- 菲涅耳内轮廓
- 菲涅耳简化公式
- 内轮廓改造菲涅耳公式
- 实现
- 效果
菲涅耳内轮廓
使用菲涅耳公式实现内轮廓效果。
菲涅耳简化公式
F0为平面的基础反射率,n⃗为法向量,v⃗为视角向量。F0+(1−F0)(1−(n⃗⋅v⃗))5F_0为平面的基础反射率,\vec{n}为法向量,\vec{v}为视角向量。 \\ F_0+(1−F_0)(1−(\vec{n} \cdot \vec{v}))^5 F0为平面的基础反射率,n为法向量,v为视角向量。F0+(1−F0)(1−(n⋅v))5
各个材质对应的反射率如下:
内轮廓改造菲涅耳公式
将菲涅耳公式改为:F0+F1∗(1−∣n⃗⋅v⃗∣)5将菲涅耳公式改为:F_0+F_1*(1-|\vec{n} \cdot \vec{v}|)^5将菲涅耳公式改为:F0+F1∗(1−∣n⋅v∣)5
实现
Shader "Unlit/Fresnel" {Properties{_FresnelColor ("FresnelColor", Color) = (1, 1, 1, 1)_FresnelBase ("FresnelBase", Range(0, 1)) = 1_FresnelScale ("FresnelScale", Range(0, 1)) = 1_FresnelPower ("FresnelPower", Range(0, 5)) = 5}SubShader{ZWrite OffCull OffBlend One OneTags { "RenderType" = "Transparent" }Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float3 normal : NORMAL;};struct v2f{float4 vertex : SV_POSITION;float3 normal : TEXCOORD0;float3 viewDir : TEXCOORD1;};float _FresnelBase;float _FresnelScale;float _FresnelPower;float4 _FresnelColor;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.normal = normalize(UnityObjectToWorldDir(v.normal));o.viewDir = normalize(UnityWorldSpaceViewDir(mul(unity_ObjectToWorld, v.vertex)));return o;}fixed4 frag(v2f i) : SV_Target{return saturate(_FresnelBase + _FresnelScale * pow(1.0 - abs(dot(i.normal, i.viewDir)), _FresnelPower)) * _FresnelColor;}ENDCG}} }效果
与50位技术专家面对面20年技术见证,附赠技术全景图总结
以上是生活随笔为你收集整理的Unity3D ShaderLab 菲涅耳内轮廓的全部内容,希望文章能够帮你解决所遇到的问题。