`
aijun980204
  • 浏览: 98185 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Unity3d 车身、玻璃材质shader

阅读更多

Shader "Reflective/Glass" {  
    Properties {  
        _Color ("Main Color", Color) = (1,1,1,1)  
        _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)  
        _Shininess ("Shininess", Range (0.01, 1)) = 0.078125  
        _ReflectColor ("Reflect Strength", Color) = (1,1,1,0.5)  
        _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}  
        _Parallax ("Height", Range (0.005, 0.08)) = 0.02  
        _Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect }  
    }  
    SubShader   
    {  
        LOD 300  
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}  
        Blend one OneMinusDstColor  
        ZWrite Off  
          
        // First pass does reflection cubemap  
        Pass   
        {   
            Name "BASE" 
            Tags {"LightMode" = "Always"}  
CGPROGRAM 
#pragma vertex vert 
#pragma fragment frag 
#pragma fragmentoption ARB_fog_exp2 
#pragma fragmentoption ARB_precision_hint_fastest 
#include "UnityCG.cginc"  
 
struct v2f {  
    V2F_POS_FOG;  
    float2 uv : TEXCOORD0;  
    float3 I : TEXCOORD1;  
};  
 
uniform float4 _MainTex_ST;  
 
v2f vert(appdata_tan v)  
{  
    v2f o;  
    PositionFog( v.vertex, o.pos, o.fog );  
    o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);  
 
    // calculate object space reflection vector   
    float3 viewDir = ObjSpaceViewDir( v.vertex );  
    float3 I = reflect( -viewDir, v.normal );  
      
    // transform to world space reflection vector  
    o.I = mul( (float3x3)_Object2World, I );  
      
    return o;   
}  
 
uniform sampler2D _MainTex;  
uniform samplerCUBE _Cube;  
uniform float4 _ReflectColor;  
 
half4 frag (v2f i) : COLOR  
{  
    half4 texcol = tex2D (_MainTex, i.uv);  
    half4 reflcol = texCUBE( _Cube, i.I );  
    reflcol *= texcol.a;  
    return reflcol * _ReflectColor;  
}   
ENDCG  
        }  
 
        UsePass "Parallax Specular/PPL" 
 
    }  
    FallBack "Reflective/VertexLit", 1  

Shader "Reflective/Glass" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
        _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
        _ReflectColor ("Reflect Strength", Color) = (1,1,1,0.5)
        _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
        _Parallax ("Height", Range (0.005, 0.08)) = 0.02
        _Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect }
    }
    SubShader
    {
        LOD 300
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
        Blend one OneMinusDstColor
        ZWrite Off
       
        // First pass does reflection cubemap
        Pass
        {
            Name "BASE"
            Tags {"LightMode" = "Always"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_fog_exp2
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"

struct v2f {
    V2F_POS_FOG;
    float2 uv : TEXCOORD0;
    float3 I : TEXCOORD1;
};

uniform float4 _MainTex_ST;

v2f vert(appdata_tan v)
{
    v2f o;
    PositionFog( v.vertex, o.pos, o.fog );
    o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);

    // calculate object space reflection vector   
    float3 viewDir = ObjSpaceViewDir( v.vertex );
    float3 I = reflect( -viewDir, v.normal );
   
    // transform to world space reflection vector
    o.I = mul( (float3x3)_Object2World, I );
   
    return o;
}

uniform sampler2D _MainTex;
uniform samplerCUBE _Cube;
uniform float4 _ReflectColor;

half4 frag (v2f i) : COLOR
{
    half4 texcol = tex2D (_MainTex, i.uv);
    half4 reflcol = texCUBE( _Cube, i.I );
    reflcol *= texcol.a;
    return reflcol * _ReflectColor;
}
ENDCG
        }

        UsePass "Parallax Specular/PPL"

    }
    FallBack "Reflective/VertexLit", 1
}

车身shader用Reflective/Specular中的一种

然后加入以下脚本:

RenderToCubemap.js:

// Attach this script to an object that uses a Reflective shader.  
// Realtime reflective cubemaps!  
@script ExecuteInEditMode  
 
var cubemapSize = 128;  
var oneFacePerFrame = false;  
private var cam : Camera;  
private var rtex : RenderTexture;  
 
function Start ()   
{  
    // render all six faces at startup  
    UpdateCubemap( 63 );  
}  
 
function LateUpdate ()   
{  
    if (oneFacePerFrame)   
    {  
        var faceToRender = Time.frameCount % 6;  
        var faceMask = 1 << faceToRender;  
        UpdateCubemap (faceMask);  
    }   
    else   
    {  
        UpdateCubemap (63); // all six faces  
    }  
}  
 
function UpdateCubemap (faceMask : int)   
{  
    if (!cam)   
    {  
        var go = new GameObject ("CubemapCamera", Camera);  
        go.hideFlags = HideFlags.HideAndDontSave;  
        go.transform.position = transform.position;  
        go.transform.rotation = Quaternion.identity;  
        cam = go.camera;  
        cam.farClipPlane = 100; // don't render very far into cubemap  
        cam.enabled = false;  
    }  
 
    if (!rtex)   
    {   
        rtex = new RenderTexture (cubemapSize, cubemapSize, 16);  
        rtex.isPowerOfTwo = true;  
        rtex.isCubemap = true;  
        rtex.hideFlags = HideFlags.HideAndDontSave;  
        renderer.sharedMaterial.SetTexture ("_Cube", rtex);  
    }  
 
    cam.transform.position = transform.position;  
    cam.RenderToCubemap (rtex, faceMask);  
}  
 
function OnDisable ()   
{  
    DestroyImmediate (cam);  
    DestroyImmediate (rtex);  

分享到:
评论

相关推荐

    【unity3d】玻璃材质Shader

    本资源集合包含了适用于Unity3D的多种玻璃材质Shader,能够帮助开发者实现逼真的门窗彩色贴花效果。 首先,我们来看"Glass Shaders 1.4.unitypackage"这个文件。这是一个Unity3D的包文件,里面包含了不同类型的玻璃...

    Unity毛玻璃模糊效果Shader

    Unity毛玻璃模糊效果Shader,直接赋值到材质球上进行使用即可。

    UN283 unity3d游戏插件 材质shader 实时折射 镜面反射 Mirror_Shaders

    "UN283 unity3d游戏插件"可能是一个针对该引擎的特定工具或扩展,旨在提升游戏图形表现力,尤其是材质和光照效果。描述中的“材质shader”指的是用于控制游戏物体表面视觉效果的程序代码,它决定了物体如何在屏幕上...

    unity URP的玻璃shader

    unity URP的玻璃shader,内含demo场景,不会用的可以参考,有其他问题可以留言

    unity3d 玻璃材质

    本篇文章将深入探讨如何在Unity3D中实现玻璃材质的Shader。 玻璃材质的主要特性包括透明度、反射、折射以及内部结构的可见性。在Unity3D中,我们可以使用Shader来模拟这些效果。以下是一个简单的玻璃材质Shader的...

    unity玻璃双面透明显示材质shader

    解决三维模型导入unity中,玻璃双面透明显示的材质问题。

    unity3D自发光透明SHADER

    "自发光透明SHADER"是Unity3D中一种特殊的Shader,用于实现物体表面具有自我发光和透明效果的材质。 自发光(Self-Illumination)是指物体本身不依赖外部光源就能发出光亮的效果,这种效果在许多场景中非常有用,...

    unity3d 通透材质shader

    总之,“unity3d 通透材质shader”是Unity3D中的高级渲染技术,Subsurface Scattering是其重要组成部分,用于模拟半透明材质的真实感。通过理解这些原理并结合`SubsurfaceScattering.unitypackage`中的资源,开发者...

    unity3d材质资源包 unity3d材质资源包

    1. **材质实例化**:Unity3D中的材质是基于Shader(着色器)的,每个材质都链接到一个或多个Shader,Shader定义了如何在屏幕上显示物体表面。用户可以创建材质实例,并调整其属性以适应不同的场景需求。 2. **纹理...

    Unity Shader实现玻璃材质效果

    Unity Shader 实现玻璃材质效果 Unity Shader 实现玻璃材质效果是 Unity 游戏引擎中的一种常见的技术,它可以用来实现玻璃、水晶等材质的效果。在本篇文章中,我们将详细介绍 Unity Shader 实现玻璃材质效果的技术...

    unity3d材质 硬表面车漆

    Unity3D的材质系统是基于Shader(着色器)的,Shader是一种编程脚本,它控制了游戏对象如何在屏幕上显示。对于车漆效果,我们通常需要模拟复杂的反射、折射和光泽特性,这些可以通过定制的Shader来实现。"硬表面车漆...

    unity3d 高级汽车材质效果 Car Paint - Pro 3.1

    Car Paint Pro将帮助我们模拟任何类型的金属相关材质逼真的可视化,反光透明涂层,金属片与程序性片状工具,覆盖层,菲涅耳,基底光泽度和漫射,这个着色器主要被推荐用于高端工作站,要求Unity 5.5.0或更高版本。...

    Unity3D脚本:Unity3D 车身与玻璃材质2

    在给定的标题和描述中,我们聚焦于Unity3D中的车身与玻璃材质的实现,主要涉及到自定义Shader(着色器)的应用。 首先,玻璃材质在Unity3D中通常需要具有反射、透明以及光泽度等特性,以模拟真实世界中玻璃的效果。...

    unity3D 镜面反射shader

    在本主题中,我们将深入探讨Unity3D中的镜面反射Shader及其实现。 镜面反射在图形学中是一个重要的概念,它模拟了光在物体表面的反射现象,使得场景看起来更加真实。在Unity3D中,我们可以使用内置的Standard ...

    Unity3D Shader开发中文视频讲义

    Unity3D Shader开发是游戏开发领域中的重要环节,它涉及到图形渲染、光照处理、材质表现等核心内容。Shader是编写图形着色器的程序,它直接影响到游戏画面的质量和性能。在Unity3D中,Shader语言通常使用的是基于Cg/...

    unity3d 径向模糊效果shader

    unity3d 径向模糊-运动模糊 模糊效果shader

    Unity3D 力场/防护罩 shader

    在Unity3D游戏开发中,视觉效果的呈现是至关重要的,而着色器(Shader)则是实现这些效果的关键工具。本资源"Unity3D 力场/防护罩 shader"提供了力场和防护罩效果的实现方案,使得开发者可以创建出具有科幻感的游戏...

    Unity3D车漆shader

    Unity3D的一个车漆shaher,两个反射通道,亲测可用,非常不错,推荐下载。

    unity3d built-in shader源代码

    Unity3D是一款强大的跨平台游戏开发引擎,其内置着丰富的Shader资源,用于处理图形渲染的各种效果。Shader是计算机图形学中的一个重要概念,它控制着如何将几何数据转化为屏幕上看到的像素颜色。Unity3D的内置Shader...

    Unity3D 里面的Cg shader 入门

    Unity3D中使用Cg编写Shader,主要是利用其提供的框架和接口,来控制渲染效果。Shader可以控制诸如光照、纹理映射、透明度、阴影和镜面反射等渲染效果的计算和展示。Cg语言在Unity3D中直接支持,能够提供访问图形硬件...

Global site tag (gtag.js) - Google Analytics