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 菲涅耳内轮廓的全部內容,希望文章能夠幫你解決所遇到的問題。