中易网

unity3d中玻璃反射周围环境怎么表现

答案:2  悬赏:10  
解决时间 2021-04-22 02:43
unity3d中玻璃反射周围环境怎么表现
最佳答案
反射上面加个衰减.衰减类型用fresnel折射用纯白烟雾颜色是控制玻璃颜色的地方。
全部回答
透明玻璃材质和镜面反射材质都是需要光影技术(shader)配合的,属于特效材质。 转给你个车身、玻璃材质的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); }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
急求造句:哪里…哪里…哪里…哪里…都…
世缘乐器我想知道这个在什么地方
如果代数式根号下x-3分之4有意义,则x的取值范
环城西路 旺旺宠物店 里面的狗不是很好,大家
老人脾气不好,儿女如何让巧妙相处
网络硬盘怎么老是打不开啊,要那么大空间来干
哪个人帮我想个好听点的QT家族名字啊
金丝枣小米粥的做法
求蜡笔小新四川方言版 上海宝山区
玉堂蓉源超市我想知道这个在什么地方
2016年连锁加盟展会有哪些?
想做熟食批发生意求高人帮??
应该选什么颜色的棒球帽?
我已经是问问一级图标为什么还不亮?
怎样选择家用防蚊纱窗?面料和材质需要注重些
推荐资讯
一根黄瓜的热量是多少?香蕉有助于减肥的原理
江门五色灯光工程联系方式??
橘黄色的外套要配什么颜色的围巾才好看
阿妈酒店这个地址在什么地方,我要处理点事
新买的白色卡西欧手表没带几个星期就发黄掉色
石家庄北国商城有哪些女装品牌
用wrod2007或excel2007制作图表,折线图,横
房照上男方放弃产权,没有离婚还算是共有财产
爱丽丝会馆地址有知道的么?有点事想过去
得克士兼职让我回学校开个同意兼职的证明 我
唐山23中都有什么艺术特长
结婚在芜湖天泰酒店到底是在天和厅还是天泰厅
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?