求助关于模型菲涅尔内发光的问题。
做了一个模型内发光的Shader,但是呈现出来的效果是模型在摄像机空间下,呈现出来的效果不一样。效果如图所示。
又没有什么办法,让所有效果统一到模型在摄像机中心的时候,呈现出来的效果。
哔巴可可 发表于 2020-5-4 12:02
其实你仔细想想,如果你每个角度都一样,为啥不用图片来做,而用模型材质........你本可以渲染一张图就行了
这个每个角度是不一样的,是要用在项目里面角色模型上面的。 屌炸了,亮瞎了 其实你仔细想想,如果你每个角度都一样,为啥不用图片来做,而用模型材质........你本可以渲染一张图就行了 pe0899 发表于 2020-4-30 15:24
你这个shader是没得问题的,主要是因为你的摄像机, 正交摄像机太靠近物体了 ,你吧摄像机的距离稍微拉远 ...
差不多就是我截图的样子, 我拉的有点远 , 你可以自己测试下合理距离~!
多重人格 发表于 2020-4-29 17:32
这是我弄得Shader也不知道哪个环节出了问题
你这个shader是没得问题的,主要是因为你的摄像机, 正交摄像机太靠近物体了 ,你吧摄像机的距离稍微拉远一点点 就不会这样了, pe0899 发表于 2020-4-29 16:10
本来菲尼尔效果就是由 法线 和视线的夹角产生的 dot(Normal,ObjViewDir) 物体月考边缘 法线和视线的夹角 ...
这是我弄得Shader也不知道哪个环节出了问题
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
}
}
}
本来菲尼尔效果就是由 法线 和视线的夹角产生的 dot(Normal,ObjViewDir) 物体月考边缘 法线和视线的夹角就越小,看着就会是你图片的效果, 不过如果不是正交摄像机的话效果应该不会像你那个那么严重吧。我写了个在正交摄像机下测试了下效果还能接受啊~! nuox4 发表于 2020-4-20 15:29
正交是会到这问题的
有没有什么办法可以解决呢?
页:
[1]
2