unity镜面_unity镜面反射 - CSDN
精华内容
参与话题
  • unity给自己的模型加上镜面效果

    千次阅读 2012-12-26 11:39:47
    首先着色器来自这里:http://game.ceeger.com/forum/read.php?tid=3162 没有账号的童鞋可以到这里下载这个着色器和... 具体使用方法看上面的发的地址。 ...如果你已经开始使用了这个着色器,就会发现一个严重的问题,

    首先着色器来自这里:http://game.ceeger.com/forum/read.php?tid=3162

    没有账号的童鞋可以到这里下载这个着色器和脚本:http://pan.baidu.com/share/link?shareid=149713&uk=3087344852

    具体使用方法看上面的发的地址。


    如果你已经开始使用了这个着色器,就会发现一个严重的问题,那就是在用自己的模型上就会出现各种奇怪的问题,而且蛋疼的是在编辑模式下没问题,运行游戏就有问题!原帖的回帖中也有不少人提到这个问题。

    具体我这里的表现是:1、材质变成了蓝色。2、镜面反射完全不正确。

    我在大概两周的时间里我都没有找到解决办法,后来还到国外翻到了一个叫MirrorReflection2的着色器,后来发现也是一样,而且这个着色器根本就是有问题的,想知道有什么问题的童鞋就自己去研究吧。


    搞技术的就是要解决问题。首先想到的办法是学习着色器自己修改,后来发现这是个坑,看了一些教程后发现都不知道从何开始。后来还是打算慢慢研究为什么在自己的模型上会出错,说实在,我到最后都没搞清楚为什么,可能是顶点法线什么的计算不对吧,不过没关系,最后还是找到了解决办法,倒不如说是偶然发现。


    1、材质变成了蓝色。这个是在一个单独的场景里研究发现的,变成蓝色是因为摄像机的背景颜色就是蓝色的!把摄像机背景颜色改成黑色就没问题。

    2、反射不正确。具体发现过程略过,其实只是一个很简单的道理。如果说内置Plane能正常反射,那么用内置Plane来反射不就好了。等等,我们之所以使用自己的模型就是因为镜面不是矩形的,用Plane该怎么弄?其实之前想过类型Mask之类的东西不过明显不现实,而其实简单的办法是共享材质。所谓镜面归根到底不过是对材质的修改,那么让Plane接收正确的反射,然后使用了相同材质的模型就得到了正确的反射,不过这个Plane该放哪?我们不希望在场景中看到它。放到镜子后面去不就好了,这里谁都看不到,而且还不会影响镜面效果。

    需要注意的是,如果镜面模型很大,而场景进入的时候摄像机看到了模型而看不到Plane,那么模型的材质就是白色的,所以尽量把Plane拉伸到跟模型差不多才能解决这个问题,这大概算是这个方法的弊端,所以如果知道怎么完美的解决方案是最好不过,本文只是抛砖引玉之用。

    展开全文
  • Unity3D镜面反射

    千次阅读 2014-12-03 11:56:46
    点击这里下载 原文地址点击这里
    展开全文
  • Unity环境镜面效果

    2020-07-30 23:32:00
    Unity环境镜面反射效果 利用Unity提供的设置、Shader、Cube、 简单的设置即可完成对环境的反射效果,无需写代码。 教程地址:https://blog.csdn.net/chinarcsdn/article/details/80210924
  • unity实现镜面小插件

    2018-09-18 15:27:46
    直接放上做好的包吧,主要是用代码和基本shader实现的 https://pan.baidu.com/s/1hgg2RYCqEcMAm6_FY0SY7Q

    直接放上做好的包吧,主要是用代码和基本shader实现的

    https://pan.baidu.com/s/1hgg2RYCqEcMAm6_FY0SY7Q

    展开全文
  • 无需自己找镜子Shader,只需2个脚本即可在Unity中创建一个简单的模拟镜面反射效果。 使用教程链接:https://blog.csdn.net/ChinarCSDN/article/details/80862999
  • Unity 镜面反射

    2017-09-11 17:09:09
    一、公式 specuColor = Kd*_LightColor0*pow(max(R·V 0), _Shininess); Kd–环境光颜色、顶点颜色、点光源的距离衰减 _LightColor0–光源颜色 R·V–反射光向量 · 观察向量 二、逐顶点着色(古罗着色)...

    一、公式
    specuColor = Kd*_LightColor0*pow(max(R·V 0), _Shininess);
    Kd–环境光颜色、顶点颜色、点光源的距离衰减
    _LightColor0–光源颜色
    R·V–反射光向量 · 观察向量
    这里写图片描述

    二、逐顶点着色(古罗着色)

    Shader "Custom/MySpecular_Vertex"
    {
        Properties
        {
            _MainTex ("Texture", 2D) = "white" {}
            _Bright("Bright",Float) = 2
            _Shininess("Shininess",Float) = 10
        }
    
        SubShader
        {
            Tags { "RenderType" = "Opaque" }
            LOD 100
    
    
            Pass
            {
                Tags{ "LightMode" = "ForwardBase" }
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #include "UnityCG.cginc"
                #include "Lighting.cginc"
    
                uniform float _Shininess;
                uniform float _Bright;
                uniform sampler2D _MainTex;
    
    
                struct appdata
                {
                    float4 vertex:POSITION;
                    float2 texcoord:TEXCOORD0;
                    half3 normal:NORMAL;
                };
    
                struct v2f
                {
                    float4 pos:SV_POSITION;
                    float2 uv:TEXCOORD0;
                    fixed4 difColor : COLOR0;
                    fixed4 specuColor : COLOR1;
                };
    
    
                v2f vert(in appdata v)
                {
                    v2f o;
                    o.pos = UnityObjectToClipPos(v.vertex);
                    o.uv = v.texcoord;
                    float3 vertexWorldPos = mul(unity_ObjectToWorld, v.vertex);
                    float3 N = normalize(mul((float3x3)unity_ObjectToWorld, v.normal));//法线
                    float3 L;//入射光方向
                    float atten;//点光源的距离衰减系数
                    if (_WorldSpaceLightPos0.w == 0)//_WorldSpaceLightPos0:平行光: (world space direction, 0);
                    {
                        L = normalize(_WorldSpaceLightPos0);
                        atten = 1;
                    }
                    else //_WorldSpaceLightPos0: 其他光: (world space position, 1).
                    {
                        float3 light2Vertex = _WorldSpaceLightPos0 - vertexWorldPos;
                        L = normalize(light2Vertex);
                        float Length = length(light2Vertex);
                        atten = 1 / Length;
                    }
                    float Kd = atten*_Bright/**UNITY_LIGHTMODEL_AMBIENT*/;
                    //计算入射光和法线的夹角的余弦值,并剔除小于零的值(小于0的值相当于从物体的背面向物体表面照射,没有物理意义)
                    float cos = max(dot(N, L), 0);
                    fixed4 difColor = Kd*_LightColor0 *cos;//漫反射光的颜色
    
    
                    //镜面反射
                    float3 R = reflect(-L, N);
                    float3 V= normalize(_WorldSpaceCameraPos - vertexWorldPos);
                    fixed4 specuColor = Kd* _LightColor0*pow(max(dot(R, V), 0), _Shininess);
                    o.difColor = difColor;
                    o.specuColor = specuColor;
    
                    return o;
                }
    
                fixed4 frag(in v2f i) :SV_Target
                {
                    fixed4 col;
                    //纹理采样
                    col = tex2D(_MainTex, i.uv);
                    col *= i.difColor;
                    col += i.specuColor;
                    return col;
                }
                ENDCG
            }
        }
    }

    三、逐像素着色(冯式着色)

    Shader "Custom/MySpecular_Fragment"
    {
        Properties
        {
            _MainTex("Texture", 2D) = "white" {}
            _Bright("Bright",Float) = 2
            _Shininess("Shininess",Float) = 10
        }
    
    
    
        SubShader
        {
            Tags{ "RenderType" = "Opaque" }
            LOD 100
    
            Pass
           {
                Tags{ "LightMode" = "ForwardBase" }
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #include "UnityCG.cginc"
                #include "Lighting.cginc"
    
    
                uniform float _Shininess;
                uniform float _Bright;
                uniform sampler2D _MainTex;
    
                struct appdata
                {
                    float4 vertex:POSITION;
                    float2 texcoord:TEXCOORD0;
                    float3 normal:NORMAL;
                };
    
                struct v2f
                {
                    float4 pos:SV_POSITION;
                    float2 uv:TEXCOORD0;
                    float3 normalDir:TEXCOORD1;
                    float3 worldPos:TEXCOORD2;
                };
    
                v2f vert(in appdata v)
                {
                    v2f o;
                    o.pos = UnityObjectToClipPos(v.vertex);
                    o.uv = v.texcoord;
                    o.normalDir = normalize(mul((float3x3)unity_ObjectToWorld, v.normal));
                    o.worldPos = mul((float3x3)unity_ObjectToWorld, v.vertex);
                    return o;
                }
    
                fixed4 frag(in v2f i) :SV_Target
                {
                    fixed4 col;
                col = tex2D(_MainTex, i.uv);
                float3 N = normalize(i.normalDir);
                float3 L;
                float atten;
                if (_WorldSpaceLightPos0.w == 0)
                {
                    L = normalize(_WorldSpaceLightPos0);
                    atten = 1;
                }
                else
                {
                    float3 light2Vertex = _WorldSpaceLightPos0 - i.worldPos;
                    L = normalize(light2Vertex);
                    float Length = length(light2Vertex);
                    atten = 1 / Length;
                }
                float Kd = atten*_Bright;
                float4 difColor = Kd*_LightColor0*max(0, dot(N, L));
    
                float3 R = reflect(-L, N);
                float3 V = normalize(_WorldSpaceCameraPos - i.worldPos);
                float4 specuColor = Kd*_LightColor0*pow(max(dot(R,V), 0), _Shininess);
                col *= difColor;
                col += specuColor;
                return col;
                }
                ENDCG
            }
        }       
    }
    展开全文
  • Unity3D——镜面反射原理及实现

    千次阅读 2016-12-23 17:03:22
    原文:http://gad.qq.com/user/myarticle?id=438905
  • Unity镜面反射脚本

    2020-10-17 10:16:49
    unity镜面反射脚本,包里4个文件 Mirror.cs :与shader互动的脚本,使用这组材质同时要把这个脚本拖给使用的物体才能生效 Mirror-BumpSpec.shader 实时镜面反射shader 可以配合法线贴图一起用 适用于平面物体 ...
  • unity镜面反射效果

    2020-07-28 23:33:36
    unity镜面反射效果
  • 最终的效果;地址 http://bbs.9ria.com/forum.php?mod=viewthread&tid=122235&extra=page%3D1%26filter%3Dtypeid%26typeid%3D329&page=1
  • Unity实现镜面反射

    2020-07-28 23:32:13
    unity实现镜面反射,将脚本放在需要镜面的面板上,将shader作为他的材质,就能实时形成镜子
  • Unity3d 镜面材质

    2020-07-28 23:33:34
    Unity3d 镜面材质
  • Unity Shader镜面效果

    2019-12-02 16:11:18
    原理:使用Render Texture作为贴图,贴到镜子上 Shader "Mirror" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 ...
  • Unity实现镜面反射效果

    千次阅读 2019-09-30 10:33:21
    1、准备工作 ①创建一个Sphere为发射点,添加LineRenderer组件。 ②调整LineRenderer组件下的宽度属性: 当然想更好看些可以添加个材质修改个颜色啥的。 ③最后随便创建几个Cube当反射墙面(顺便修改tag为"Mirro...
  • 我们在Unity里打开镜像的世界呢,原理很简单,我们再加一个Mirror Camera就可以了,其位置是我们当前Camera相对于镜面的一个镜像的映射(Transform)。 镜像矩阵 这个概念比较复杂,记公式就可以了。 有了公式,...
  • 镜面反射与观察视角的联系 系列6中我已经说明了材料表面的平整程度决定了镜面反射的明显与否,现实生活中找不到绝对平的物体表面,所以我们引入一个概念,每一种材料的表面的平整程度为Nshininess, n越大越平整,越...
  • 今天来说一下在游戏中如何使用镜面反射来给玩家制造出强烈的视觉冲击和超现实感。  在Unity中,已经为我们提供了一个高光函数,我们可以在自己的着色器中使用。这个函数也就是BlinnPhong镜面反射光照模型,它是...
  • 很好用的Unity镜面脚本~里面带有说明文档!
  • shader镜面反射
1 2 3 4 5 ... 20
收藏数 2,359
精华内容 943
关键字:

unity镜面