-
大小: 5KB文件类型: .rar金币: 2下载: 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网络编程源码
相关资源
- 实时显示钢筋标注面积V0.44
- wifi局域网内双向语音实时通话
- 读取串口数据并画实时曲线的VC 程序
- uCOS编译环境建立 BC45 TASM
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 嵌入式实时操作系统ucos-II 第二版 源
- 基于ARM7TDMI微处理器的矿用电子皮带秤
- 嵌入式实时操作系统μC/OS-II与eCos的
- 嵌入式实时操作系统在DATU中的应用
- 嵌入式实时操作系统μC/OS-II下通用驱
- 嵌入式实时操作系统μC/OS-II在ARM上的
- SAC型液压支架控制器检测平台的设计
- 基于MSP430单片机的实时多任务操作系
- 反射组和3d N $$ \\ mathcal {N} $$ 6 SCFT
- IBM SVC通过优化实现实时存储
- 基于CAN总线与ZigBee的瓦斯实时监测及
- 基于ZigBee的油井无线数据采集系统的
- 嵌入式实时操作系统的RAM盘扩展
- UnityShader卷轴效果
- STM32F407实时时钟_DS1302实时时钟模块和
- 基于STM32F103的实时时钟程序,采用D
- 超宽反射波宽的高分子稳定液晶型反
- 长线变频系统反射波过电压振荡的解
- 企业数据中台建设.pdf
- 统一付款界面-付款系统的进步
- 新浪微博用户的实时影响力研究
- vs2010 ffmpeg实时解码h264码流
- X264实时编码,FFmpeg实时解码
- 自学编程创新意:livecoding.tv实时直播
评论
共有 条评论