多重人格 发表于 2020-4-17 09:20:57

求助关于模型菲涅尔内发光的问题。

做了一个模型内发光的Shader,但是呈现出来的效果是模型在摄像机空间下,呈现出来的效果不一样。
效果如图所示。

又没有什么办法,让所有效果统一到模型在摄像机中心的时候,呈现出来的效果。

多重人格 发表于 2020-5-6 09:25:02

哔巴可可 发表于 2020-5-4 12:02
其实你仔细想想,如果你每个角度都一样,为啥不用图片来做,而用模型材质........你本可以渲染一张图就行了

这个每个角度是不一样的,是要用在项目里面角色模型上面的。

骰子玫瑰 发表于 2020-5-5 09:54:35

屌炸了,亮瞎了

哔巴可可 发表于 2020-5-4 12:02:18

其实你仔细想想,如果你每个角度都一样,为啥不用图片来做,而用模型材质........你本可以渲染一张图就行了

pe0899 发表于 2020-4-30 15:26:26

pe0899 发表于 2020-4-30 15:24
你这个shader是没得问题的,主要是因为你的摄像机, 正交摄像机太靠近物体了 ,你吧摄像机的距离稍微拉远 ...

差不多就是我截图的样子, 我拉的有点远 , 你可以自己测试下合理距离~!

pe0899 发表于 2020-4-30 15:24:13

多重人格 发表于 2020-4-29 17:32
这是我弄得Shader也不知道哪个环节出了问题

你这个shader是没得问题的,主要是因为你的摄像机, 正交摄像机太靠近物体了 ,你吧摄像机的距离稍微拉远一点点 就不会这样了,

多重人格 发表于 2020-4-29 17:32:41

pe0899 发表于 2020-4-29 16:10
本来菲尼尔效果就是由 法线 和视线的夹角产生的 dot(Normal,ObjViewDir) 物体月考边缘 法线和视线的夹角 ...

这是我弄得Shader也不知道哪个环节出了问题

多重人格 发表于 2020-4-29 17:32:14


Shader "NewShader/Fresnel"
{
Properties
{
   _Color("Color", Color) = (1,1,1,1)
_FresnelIntensity("FresnelIntensity",Float)=5
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue"="Transparent" }
Blend One One
Pass
{
   CGPROGRAM
   #pragma vertex vert
   #pragma fragment frag
   #include "UnityCG.cginc"
   struct a2v
   {
    float4 vertex : POSITION;
    float4 color : COLOR;
    float3 normal : NORMAL;
   };
   
   struct v2f
   {
    float4 pos : SV_POSITION;
    float3 texcoord : TEXCOORD0;
    float3 texcoord1 : TEXCOORD1;
   };
   
   fixed4 _Color;
   float _FresnelIntensity;
      
   v2f vert ( a2v v )
   {
    v2f o;
    o.pos = UnityObjectToClipPos(v.vertex);
    float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
    o.texcoord.xyz = worldPos;
    float3 worldNormal = UnityObjectToWorldNormal(v.normal);
    o.texcoord1.xyz = worldNormal;

    return o;
   }
   
   fixed4 frag (v2f i ) : SV_Target
   {

    float3 worldPos = i.texcoord.xyz;
    float3 worldViewDir = UnityWorldSpaceViewDir(worldPos);
    worldViewDir = normalize(worldViewDir);
    float3 worldNormal = i.texcoord1.xyz;
    float fresnelColor = ( 0.0 + 1.0 * pow( 1.0 - dot( worldNormal, worldViewDir ), _FresnelIntensity ) )* _Color;
    float4 col = fresnelColor * _Color;
   
    return col;
   }
   ENDCG
}
}


}

pe0899 发表于 2020-4-29 16:10:00

本来菲尼尔效果就是由 法线 和视线的夹角产生的 dot(Normal,ObjViewDir) 物体月考边缘 法线和视线的夹角就越小,看着就会是你图片的效果, 不过如果不是正交摄像机的话效果应该不会像你那个那么严重吧。我写了个在正交摄像机下测试了下效果还能接受啊~!

多重人格 发表于 2020-4-20 17:09:09

nuox4 发表于 2020-4-20 15:29
正交是会到这问题的

有没有什么办法可以解决呢?
页: [1] 2
查看完整版本: 求助关于模型菲涅尔内发光的问题。