在Unity里怎么实现双面都显示材质

 我来答
百度网友c86f498
2018-08-20 · TA获得超过106个赞
知道答主
回答量:43
采纳率:100%
帮助的人:33.9万
展开全部

Unity内置的Shader,都是单面效果

其实用改写Shader的方法可以很方便的实现双面材质。
Unity里有3种Shader方式:
1.Fixed Function Shaders 
2.Vertex and Fragment Shaders
3. Surface Shaders
关于这部分的详细介绍,请参考官方的教程。
这三种方式里,都可以通过直接在Shader代码头部添加一个Cull off 语句,实现强制双面渲染。
但是直接用Cull off的方式 有个重大的缺陷,这材质从两面看无论贴图、颜色、反光、照明情况,都是一模一样的,这并不符合大多数实际情况的常识。
在第1和第2种Shader里,是可以通过在一个渲染子程序里用两个渲染Pass来实现双面不同效果的,这部分网上的资料也很多,写起来也很简单直接。

这里主要讨论的是第三种也是最常用的Surface Shader的双面不同效果的实现。
Surface Shader是不能写在Pass里的,所以要实现它的双面不同效果就要用其他变通的办法。
网页链接

AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
指拈笺k
2016-11-12 · 超过14用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:10.3万
展开全部
不是太明白你说的意思。。。如果把上面你写的那句,。改为.,是没有问题的,不知道你说的错误指的是什么?如果你这个bieren上面没有renderer组件的话,会报空引用的错误,不过你都该颜色了,肯定有渲染组件的才对。。。还有,lerp是个差值渐变,你后面参数写个1是什么意思。。。都是1了,到头了,你还用差值??最后的控制完全是代码逻辑问题,再简单不过了吧,控制谁就给谁设置开关,不管是把代码附在每一个bieren上,还是设置数组,用个int变量来控制都是很容易的事情吧。。。单个控制的代码完整如下:publicGameObjectbieren;publicColorcolorStart;publicColorcolorEnd;privatefloatt;voidStart(){}voidUpdate(){bieren.renderer.material.color=Color.Lerp(colorStart,colorEnd,t);t+=Time.deltaTime;}别忘了在检视面板把bieren物体拖上去就行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式