加入
发新帖
发表于 2013-12-16 16:41 | 查看: 4833| 回复: 21
写啊写啊写着色器,最近比以前又进步了
不过还是有点缺陷
不过,至少在同色半透明物体的处理上已经完美了!

先分享下三个着色器:
单面:
  1. Shader "Custom/SingleFace" {
  2. Properties {
  3.         _Color ("Main Color", Color) = (1,1,1,1)
  4.         _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
  5. }

  6. SubShader {
  7.         Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
  8.         
  9.         ZWrite Off
  10.         Blend SrcAlpha OneMinusSrcAlpha
  11.         Cull Back
  12.         Lighting Off
  13.         Pass {
  14.                 SetTexture [_MainTex] {
  15.                         constantColor [_Color]
  16.                         combine texture * constant
  17.                 }
  18.         }
  19. }

  20. }
复制代码
双面:
  1. Shader "Custom/DoubleFace" {
  2. Properties {
  3.         _Color ("Main Color", Color) = (1,1,1,1)
  4.         _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
  5. }

  6. SubShader {
  7.         Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}

  8.         ZWrite Off
  9.         Blend SrcAlpha OneMinusSrcAlpha
  10.         Cull Off
  11.         Lighting Off
  12.         Pass {
  13.                 SetTexture [_MainTex] {
  14.                         constantColor [_Color]
  15.                         combine texture * constant
  16.                 }
  17.         }
  18. }

  19. }
复制代码
双贴图双面:
  1. Shader "Custom/DoubleDifFace" {
  2. Properties {
  3.         _Color ("Main Color", Color) = (1,1,1,1)
  4.         _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
  5.         _SecondTex ("Base (RGB) Trans (A)", 2D) = "white" {}
  6. }

  7. SubShader {
  8.         Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}

  9.         ZWrite Off
  10.         Blend SrcAlpha OneMinusSrcAlpha
  11.         Lighting Off
  12.         Pass {
  13.                 Cull Back
  14.                 SetTexture [_MainTex] {
  15.                         constantColor [_Color]
  16.                         combine texture * constant
  17.                 }
  18.         }
  19.         Pass {
  20.                 Cull Front
  21.                 SetTexture [_SecondTex] {
  22.                         constantColor [_Color]
  23.                         combine texture * constant
  24.                 }
  25.         }
  26. }

  27. }
复制代码
啊,比《井》里面进步了非常非常多,能满足现在游戏需求了。

不过还有个小问题,我使用双面,效果及问题如下:
133840qsgmxjfh9pnt25r9.jpg
133841dq0fdqqxisonxtq0.jpg
由于不可避免得使用了 ZWrite Off,造成了穿插物体间的不正常现实,比如这个角度是这样,在转折角度又是那个样,不能实现真正的面片穿插,求教如何解决?(同色看不出,或者就完全不让多物体间的穿插发生是现有解决办法)

对于半透明,一直没找到完美的解决方案。不知道是我的问题,还是Unity的问题,还是当今图形引擎的设计问题,或者别的什么?
彭必涛 发表于 2013-12-16 17:13
因而标题修正为: 一堆
彭必涛 发表于 2013-12-16 16:55
到头来发现自己并没进步,仅仅是在原地打转。
发表于 2013-12-16 17:08
啊,貌似根本就是缺陷的方案,仅在局部情况中适用。
又见自带的Soft Edge Unlit 把alpha 调低,再把Alpha cutoff 调高,也能达到相似的效果。不过问题依然,但是有点不一样,研究中。。。

发现了,那个问题不是ZWrite Off 造成的。相反的是ZWrite Off 才可能造成问题,不过已经有办法解决了,就是结合使用CG 来写着色器,能够解决那个潜在的问题。

点评 回复 显示全部楼层 道具 举报

彭必涛 发表于 2013-12-16 17:16
或许要用到 ZTest
发表于 2013-12-16 17:21
好,终于发现自己完全不会,以上帖子内容大家请忽略。
因为我用的都是我会的,还差得太远,难怪问题那么多。

不过虽然如此,但依旧可以把《井》给优化了

回复 显示全部楼层 道具 举报

发表于 2013-12-16 18:37
带透明的,就这样的,就算不是Unity,也一样

回复 显示全部楼层 道具 举报

发表于 2013-12-16 19:23
orange030 发表于 2013-12-16 18:37
带透明的,就这样的,就算不是Unity,也一样

三维图形学多少年了,咋个就还没解决呢?

回复 显示全部楼层 道具 举报

发表于 2013-12-16 22:24
彭必涛 发表于 2013-12-16 17:08
啊,貌似根本就是缺陷的方案,仅在局部情况中适用。
又见自带的Soft Edge Unlit 把alpha 调低,再把Alpha  ...

不过大抵我的游戏会告诉运动,于是这些都是浮云了。
不过上面的代码,估计会有问题,不过我已经有解决方案了。
嗯,具体等到时候上模型的时候再详细研究了,着色器的研究暂时可以告一段落了。

回复 显示全部楼层 道具 举报

发表于 2013-12-16 23:42
彭必涛 发表于 2013-12-16 19:23
三维图形学多少年了,咋个就还没解决呢?

老外的论坛,说木有呢

回复 显示全部楼层 道具 举报

发表于 2013-12-17 07:38
orange030 发表于 2013-12-16 23:42
老外的论坛,说木有呢

谢啦,那这个解决了是不是能上siggraph什么的。。。

回复 显示全部楼层 道具 举报

发表于 2013-12-17 12:44
彭必涛 发表于 2013-12-17 07:38
谢啦,那这个解决了是不是能上siggraph什么的。。。

是说目前软硬件的机制就这样的
就算你基于你的游戏表现,用某种方式,看起来像解决了,也不奇怪

点评 回复 显示全部楼层 道具 举报

orange030 发表于 2013-12-17 15:21
en.....
彭必涛 发表于 2013-12-17 14:48
(硬件)
彭必涛 发表于 2013-12-17 14:48
我不是解决不了这个软件机制的问题么
发表于 2013-12-18 16:50

回复 显示全部楼层 道具 举报

发表于 2013-12-18 16:53
江南 发表于 2013-12-18 16:50
http://en.wikibooks.org/wiki/GLSL_Programming/Unity
http://en.wikibooks.org/wiki/Cg_Programming/Uni ...

呜,暂时无力去学更多语言来尝试解决问题了。

大该要等到二阶段完成之后再考虑作完美化工作吧。这里记下了,以往都直接从单纯的ShaderLab 着手,希望到时候Cg 或者GLSL 能给我带来惊喜。

回复 显示全部楼层 道具 举报

发表于 2013-12-18 17:13
求谁帮忙下载个 controlled-transparent-shader
pudn 地址为: (我传东西传不上去呢,于是一直下载不了)
http://en.pudn.com/downloads509/ ... tail2116893_en.html
http://www.pudn.com/downloads509 ... /detail2116893.html

回复 显示全部楼层 道具 举报

发表于 2013-12-18 17:27
有个解决方案是: 半透明材质有时候渲染排序人工控制,不过感觉有点坑,达不到完美的效果

回复 显示全部楼层 道具 举报

发表于 2013-12-18 17:29
又见着这么一句话:
绘制被遮挡部分 ZTest Off,  ZTest Greater 绘制未被遮挡部分 ZTest On, ZTest LEqual 效果。

或许,可以给一个Shader用多个通道或者分别不同的通道实现不同位置的情况?

回复 显示全部楼层 道具 举报

发表于 2013-12-18 20:49
忍不住,又搞了半天,还是解决不了。真心应该放弃了。

回复 显示全部楼层 道具 举报

您需要登录后才可以回帖 登录 | 加入

搜索

繁體   

返回顶部