欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D ShaderLab 菲涅耳内轮廓

发布时间:2025/3/15 编程问答 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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 F0nvF0+(1F0)(1(nv))5
各个材质对应的反射率如下:

内轮廓改造菲涅耳公式

将菲涅耳公式改为:F0+F1∗(1−∣n⃗⋅v⃗∣)5将菲涅耳公式改为:F_0+F_1*(1-|\vec{n} \cdot \vec{v}|)^5F0+F1(1nv)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 菲涅耳内轮廓的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。