码迷,mamicode.com
首页 > 编程语言 > 详细

Unity 记录 Unity Shader 碰到的一个奇怪bug记录。

时间:2020-07-16 21:55:36      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:return   为什么   环境   计算   探索   clip   一个   http   ace   

                v2f vert(a2v v){
                    //return UnityObjectToClipPos(v);
                    v2f f;
                    f.position = UnityObjectToClipPos(v.vertex);
                    //return UnityObjectToClipPos(v.vertex);
                    //f.temp = v.normal;
                    fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;//UNITY_LIGHTMODEL_AMBIENT 环境光?
    fixed3 normalDir = normalize( mul(v.normal,(float3x3)unity_WorldToObject));
                    fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);//对于每一个顶点来说,光的位置就是光的方向,因为光是平行光
                    fixed3 diffuse = _LightColor0.rgb * max(dot(normalDir,lightDir),0)*_Diffuse.rgb;//取得漫反射的颜色
                

                    //高光
                    fixed3 reflectDir = normalize(reflect(-lightDir,normalDir));
                    fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(v.vertex, unity_WorldToObject).xyz);//相机单位化的向量
                    fixed3 specular = _LightColor0.rgb * pow( max( 0 , dot(reflectDir,viewDir) ),10);
                    //fixed3 specular = _LightColor0.rgb * pow( max( 0 , 1),10);
                    
                    f.color = diffuse + ambient + specular;
                    //f.color = diffuse + ambient;
                    return f;
                }

                
                fixed4 frag(v2f f) : SV_Target {
                    //return fixed4(0.5,0.9,1,1);
                    //return fixed4(f.temp,1);
                 return fixed4(f.color,1);
                }
 这是高光反射的入门代码
 fixed3 specular = _LightColor0.rgb * pow( max( 0 , dot(reflectDir,viewDir) ),10);
这段代码按道理有max ,视角与反射光夹角为钝角的时候,值取0,那背面就不应该存在高光,但是这事情还是发生了
 
技术图片

 

 技术图片

用的Unity版本

技术图片

 

 那就可能是反射光发生了问题

fixed3 reflectDir = normalize(reflect(-lightDir,normalDir));
 光线入射方向取反 然后计算reflect 在背光面(不知道示例为什么不会出现第二个高光)与相机的夹角是有可能成为锐角的,但是示例shader却没有出现背光面高光,高光也能因视角的移动而变化。
猜测:
1.可能是获取相机的视角有问题
fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - f.worldVertex);//相机单位化的向量
2.获取的光线有问题
fixed3 reflectDir = normalize(reflect(-lightDir,normalDir));
 
这个问题先搁置一下,以后再探索,如果有大佬知道原因,希望不吝探讨和赐教一下。

Unity 记录 Unity Shader 碰到的一个奇怪bug记录。

标签:return   为什么   环境   计算   探索   clip   一个   http   ace   

原文地址:https://www.cnblogs.com/victor2k/p/13324434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!