【原】unity shader(3)反射贴图
改编自《cg教程--可编程实时图形学权威指南》上的demo。
反射向量计算公式 R=I-2N(N*I) 备注N*I是点乘 I入射光线,N法向量
函数实现:
float3 reflect(float3 I,float3 N)
{
return I-2.0*N*dot(N,I);
}
Shader "CG shader Reflect"{Properties {environmentMap("Environment Map", Cube) = "" {}reflectivity("reflectivity1", float) =1 //反射系数 影响反射强度decalMap("decalMap", 2D) = "white" {} }SubShader{Pass{CGPROGRAM#pragma vertex vert //顶点编程入口#pragma fragment frag //片段编程入口#include "UnityCG.cginc" //注意引入struct VertInput{float4 position:POSITION;float2 texCoordw:TEXCOORD0;float3 normal1:NORMAL;};struct VertOutput{float4 oPosition:SV_POSITION;float2 oTexCoord:TEXCOORD0;float3 R:TEXCOORD1;};// uniform 类型的参数 需要在Properties uniform samplerCUBE environmentMap;uniform float reflectivity;uniform sampler2D decalMap; VertOutput vert(VertInput input){VertOutput o;o.oPosition=mul(UNITY_MATRIX_MVP,input.position);//UNITY_MATRIX_MVP变量, 就是对应图形中的模型视图投影矩阵(ModelViewProj),unity中规定 必须这么写o.oTexCoord=input.texCoordw;float3 positionW=mul(_Object2World,input.position).xyz;//_Object2World 模型矩阵,把本地坐标转到世界坐标float3 N=mul((float3x3)_Object2World,input.normal1);N=normalize(N);float3 I=positionW-_WorldSpaceCameraPos;//计算入射光线,需要在世界坐标系中计算。_WorldSpaceCameraPos视点(相机)在世界坐标的位置o.R=reflect(I,N);//计算反射光线 reflect系统自带函数return o;}float4 frag(VertOutput output):COLOR{float4 reflectionColor=texCUBE(environmentMap,output.R);float4 decalColor=tex2D(decalMap,output.oTexCoord);float4 color1=lerp(decalColor,reflectionColor,reflectivity);return color1;}ENDCG}} }
上例代码出现的_Object2World,_WorldSpaceCameraPos 莫名奇妙的参数,来自UnityCG.cginc文件,在对cg、hlsl、glsl进行移植的时候,特殊参数需要参考UnityCG.cginc文件的定义。
实现效果:
初学阶段,不妥之处望大家指教。
转载于:https://www.cnblogs.com/U-tansuo/archive/2012/12/09/unity_reflect.html
【原】unity shader(3)反射贴图相关推荐
- Unity Shader - Heightmap 高度贴图
目录:Unity Shader - 知识点目录(先占位,后续持续更新) 原文:Heightmap 版本:2019.1 Heightmap 高度贴图(也称为视差映射)是一个类似于法线映射的概念,但是这种 ...
- unity shader实现纹理贴图
unity实现纹理贴图很简单,首先在appdata结构体里声明uv语义TEXCOORD0,就可以获得当前顶点的uv坐标,对外部导入的模型来说.这个uv坐标是在3d模型软件例如maya中制作模型的人预先 ...
- Unity Shader 高光反射光照模型
高光反射光照模型计算公式如下: 需要四个参数:入射光线的颜色和强度,材质的高光反射系数,视角方向,反射方向. 反射方向可以由表面法线和光源方向计算而得: 也可以直接使用CG提供的计算反射方向的函数re ...
- 【备份】《Unity Shader入门精要》配图
说明:本页面是书籍<Unity Shader入门精要>的随书彩图集锦,包含了书中所有的插图,使用时可通过图片编号进行搜索. 作者:冯乐乐 邮箱:lelefeng1992@gmail.c ...
- 【备忘】《Unity Shader入门精要》随书彩色插图
转载来源:http://www.manew.com/blog-194008-42590.html <Unity Shader入门精要>随书彩色插图 <Unity Shader入门精要 ...
- 《Unity Shader入门精要》随书彩色插图
说明:本页面是书籍<Unity Shader入门精要>的随书彩图集锦,包含了书中所有的插图,使用时可通过图片编号进行搜索. 作者:冯乐乐 邮箱:lelefeng1992@gmail.c ...
- unity shader法线贴图实现凹凸映射效果
法线贴图 法线贴图是一张保存了物体法线信息的纹理,可以用来细化模型的光照效果. 例如一块石头表面坑坑洼洼的,如果全部用建模实现,需要非常多的顶点数和面数才能完成.但是做一个简单的模型,比如表面平整的一 ...
- 【Unity Shader】 CubeMap(立方体贴图)
Unity Shader 立方体贴图 一.介绍CubeMap Shader中对CubeMap采样 Unity中如何制作CubeMap 二.Reflect CubeMap(反射立方体纹理用于环境映射) ...
- Unity Shader 水多种元素的实现(反射、折射、菲涅尔、深浅、浪花/泡沫、水波、可交互)
综合效果 经过各元素叠加 和 程序的审美调参 后的综合效果 交互的水波与边缘浪花的合并需要优化一下 反射 两种方案: cubeMap 以水面对称设一个摄像机 cubeMap 实现:反射探针生成Cube ...
最新文章
- webservice 返回对象 java_JAVA 调用webservice不同返回值类型的方法
- 【Linux】一步一步学Linux——ipcrm命令(142)
- android网络监听
- 五分钟读懂UML类图
- MATLAB学习笔记(十五)
- 用bool函数判断int类型相加溢出_Go是强类型语言,不支持隐式类型转换,那该怎么办?...
- S1304第一本书内测测试分析
- C++中的异常处理(上)
- Google earth
- 类的加载过程详解之过程五:类的Unloading(卸载)
- 使用ActivityGroup来切换Activity和Layout,android入门开发与实战
- html5+前端脸部识别采集,前端人脸识别框架Tracking.js
- js生成二维码,js 解析二维码,jsqrcode,js从url生成二维码
- 从DOS中装操作系统时要加载smartdrv命令
- Kubuntu 22.04的安装及基本配置(语言、分辨率自适应等)
- 网记者采访时,一直称李某萍为“妻子”
- 拔丝芋头的Java学习日记--Day6
- android win10 投屏,安卓手机投影win10不成功,版本升级前可以
- Semantic Nighttime Image Segmentation with Synthetic Stylized Data Gradual Adaptation
- 微擎 公众号分享朋友圈不显示缩略图