-
大小: 5KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-05-09
- 语言: 其他
- 标签: unityshader 反射 实时
资源简介
unity镜面反射材质,支持实时镜面反射,模糊反射,高光,法线,光泽度,反射强度等参数。手机可支持。
代码片段和文件信息
using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class Mirror : MonoBehaviour
{
public bool m_DisablePixelLights = true;
public int m_TextureSize = 256;
public float m_ClipPlaneOffset = 0.07f;
public bool m_IsFlatMirror = true;
public layerMask m_Reflectlayers = -1;
private Hashtable m_ReflectionCameras = new Hashtable();
private RenderTexture m_ReflectionTexture = null;
private int m_OldReflectionTextureSize = 0;
private static bool s_InsideRendering = false;
public void OnWillRenderobject()
{
if( !enabled || !renderer || !renderer.sharedMaterial || !renderer.enabled )
return;
Camera cam = Camera.current;
if( !cam )
return;
if( s_InsideRendering )
return;
s_InsideRendering = true;
Camera reflectionCamera;
CreateMirrorobjects( cam out reflectionCamera );
Vector3 pos = transform.position;
Vector3 normal;
if(m_IsFlatMirror){
normal = transform.up;
}
else{
normal= transform.position - cam.transform.position ;
normal.Normalize();
}
int oldPixelLightCount = QualitySettings.pixelLightCount;
if( m_DisablePixelLights )
QualitySettings.pixelLightCount = 0;
UpdateCameraModes( cam reflectionCamera );
float d = -Vector3.Dot (normal pos) - m_ClipPlaneOffset;
Vector4 reflectionPlane = new Vector4 (normal.x normal.y normal.z d);
Matrix4x4 reflection = Matrix4x4.zero;
CalculateReflectionMatrix (ref reflection reflectionPlane);
Vector3 oldpos = cam.transform.position;
Vector3 newpos = reflection.MultiplyPoint( oldpos );
reflectionCamera.worldToCameraMatrix = cam.worldToCameraMatrix * reflection;
Vector4 clipPlane = CameraSpacePlane( reflectionCamera pos normal 1.0f );
Matrix4x4 projection = cam.projectionMatrix;
CalculateObliqueMatrix (ref projection clipPlane);
reflectionCamera.projectionMatrix = projection;
reflectionCamera.cullingMask = ~(1<<4) & m_Reflectlayers.value;
reflectionCamera.targetTexture = m_ReflectionTexture;
GL.SetRevertBackfacing (true);
reflectionCamera.transform.position = newpos;
Vector3 euler = cam.transform.eulerAngles;
reflectionCamera.transform.eulerAngles = new Vector3(0 euler.y euler.z);
reflectionCamera.Render();
reflectionCamera.transform.position = oldpos;
GL.SetRevertBackfacing (false);
Material[] materials = renderer.sharedMaterials;
foreach( Material mat in materials ) {
if( mat.HasProperty(“_Ref“) )
mat.SetTexture( “_Ref“ m_ReflectionTexture );
}
if( m_DisablePixelLights )
QualitySettings.pixelLightCount = oldPixelLightCount;
s_InsideRendering = false;
}
vo
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1730 2012-08-11 16:35 Mirror-AlphaSpecSphere.shader
文件 1530 2012-08-11 06:02 Mirror-BumpSpec.shader
文件 7777 2012-08-11 14:01 Mirror.cs
文件 1954 2012-08-11 15:25 Mirror-AlphaBumpSpec.shader
----------- --------- ---------- ----- ----
12991 4
- 上一篇:fpga实现can总线
- 下一篇:linux网络编程源码
相关资源
- SparkStreaming实时流处理项目视频实战资
- 手机采集摄像头视频socket实时传播
- HJT212-2005标准
- 实时监控目录文件夹的更新状态,与
- 实时录音与播放的内存实现 Qt代码
- 实战:Spark Streaming实时流处理项目实
- 用WindowsSocket实现局域网上的语音实时
- 小程序《实时巴士》-带后端代码
- 手机的加速度和陀螺仪传感器数据实
- 0011、采用实时时钟芯片DS1302+AT89C205
- 明略-金融反欺诈实时解决方案
- KDZ3113矿井地震勘探仪在煤矿中的应用
- 利用近红外反射光谱分析向日葵和大
- 基于多DSP与FPGA的实时图像处理系统设
- 基于H5的实时语音流播放
- UnityShader入门精要 PDF、随书源码、勘
- 矿用便携式激光甲烷检测报警仪
- 实时多任务系统µC/OS-Ⅱ在DSP上的
- 显齿蛇葡萄实时荧光定量PCR内参基因
- 基于FPGA的高速实时数据采集系统设计
- 仿LOL大型多人联机实时对战游戏源码
- 气象雷达资料处理程序
- 基于stc15f2k61s2的dht11+oled实时监测的单
- Chrome插件-《一叶》在任意网页开启实
- 海康网络摄像头实时预览OCX控件
- 矿井瓦斯超限实时预警技术研究
- 实时心率算法
- 采用VC及Opengl基于四叉树及LOD算法的室
- 使用directshow采集视音频并进行H264和
-
基于fli
nk的风电数据实时采集项目总
评论
共有 条评论