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

Unity3D ShaderLab 简单的立方体图反射

时间:2015-01-19 23:30:52      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

Unity3D ShaderLab 简单的立方体图反射

 

反射是着色器模拟现实环境的一个关键因素,它能使我们的着色器渲染效果更加具备视觉冲击,因为他利用了我们周围的环境,

让着色器反射外界的场景信息并将他们反射到材质表面来模拟外部环境,所以我们会使用立方图【CubeMap】的6张纹理来模拟环境的色彩情况。

首先,创建Shader,创建材质球,准备立方图,双击Shader,进入代码编辑器。

Properties CGPROGRAM,再到surf,本次功能较为简单,先看代码。

 code start -----------------------------------------------------------------------

Shader "91YGame/Cube1" {

Properties {

_MainTint("Diffuse Tint",Color)=(1,1,1,1)

_MainTex ("Base (RGB)", 2D) = "white" {}

_CubeMap("CubeMap",CUBE)=""{}

_ReflAmount("Reflection Amount",Range(0.1,3))=0.5

}

SubShader {

Tags { "RenderType"="Opaque" }

LOD 200

 

CGPROGRAM

#pragma surface surf Lambert

 

sampler2D _MainTex;

samplerCUBE _CubeMap;

float4 _MainTint;

float _ReflAmount;

 

struct Input {

float2 uv_MainTex;

float3 worldRefl;

};

 

void surf (Input IN, inout SurfaceOutput o) {

half4 c = tex2D (_MainTex, IN.uv_MainTex)*_MainTint;

o.Emission = texCUBE(_CubeMap,IN.worldRefl).rgb*_ReflAmount;

o.Albedo = c.rgb;

o.Alpha = c.a;

}

ENDCG

FallBack "Diffuse"

}

 

code end ------------------------------------------------------------------------

 

通过上面的简单修改,我们也获得了简单的里繁体反射效果,在Unity中可以直接查看效果。

 技术分享

总结看来,着色器对立方图进行采样,并得到一个类似真实的反射。

这要归功于Unity在表面着色器的Input结构体中内置的worldRefl属性,他为我们直接提供了必要的反射向量,

帮助我们的立方图进行正确采样。我们只需要在texCube函数中使用worldRefl变量,即可得到正确的反射图。

 

 

Unity3D ShaderLab 简单的立方体图反射

标签:

原文地址:http://www.cnblogs.com/2Yous/p/4234975.html

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