开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:1963

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 2034|回复: 26

[东方喵] 【ShaderToy】怎么实现切土豆的shader?

[复制链接]  [移动端链接]
排名
982
昨日变化
3

31

主题

788

帖子

3012

积分

Rank: 9Rank: 9Rank: 9

UID
76248
好友
19
蛮牛币
17084
威望
0
注册时间
2015-2-28
在线时间
793 小时
最后登录
2017-11-17

专栏作家蛮牛译员活力之星七夕浪漫情人

发表于 2017-4-1 16:48:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 东方喵 于 2017-4-12 10:41 编辑

怎么实现切土豆的shader?

看见四月的蛮牛训练营,就想起昨晚儿炒的土豆片,所以,这里就用土豆(Cube(方土豆儿)、Capsule(长土豆儿)来当土豆去削把~~)来简单演示下。
先讲下我的思路:
这里我总共是分两个pass来实现的:
第一个pass是CullFront,首先,在第一个的vetrex函数中 ,用切片儿方向和顶点的法线,计算出切面儿刀口的光照,然后,将切面儿位置和方向变换成Model空间,下一步好接着去用。
第二个pass是CullBack,和第一个pass的计算逻辑一致,but,使用普通的光照去计算。
顺便
挂个小脚本及时更新切片儿位置:
[C#] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;

public class ClipObj : MonoBehaviour {
    public Transform clipObj;//切片儿的大菜刀
    public Material mat;//超市打折的土豆
    void Update () {
        Vector3 cpos = clipObj.position;
        Vector4 cnor = clipObj.up;
        mat.SetVector ("cPos",new Vector4(cpos.x,cpos.y,cpos.z,1) );//第四个元素为1,而不是0,可确保平移
        mat.SetVector ("cNormal",new Vector4(cnor.x,cnor.y,cnor.z,0) );
    }
}

接下来是被切片物体的shader:

[C#] 纯文本查看 复制代码
Shader "Tut/Shader/ClipObj" {
    Properties {

    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200
        pass
        {
        Tags{"LightMode"="ForwardBase"}
        Cull Front
        CGPROGRAM
#pragma vertex vert
#pragma fragment frag
# include "UnityCG.cginc"
#pragma target 3.0

        struct v2f
{
    float4 pos:SV_POSITION;
            float vc:TEXCOORD0;
            float3 px:TEXCOORD1;
            float3 cp:TEXCOORD2;
            float3 cn:TEXCOORD3;
        };
float4 cPos;//world Position
float4 cNormal;
v2f vert(appdata_full i)
{
    v2f o;
    o.pos = mul(UNITY_MATRIX_MVP, i.vertex);
    float3 ld = ObjSpaceLightDir(i.vertex);
    ld = normalize(ld);
    //对于填补的洞口,使用剪切方向作为法线,计算光照
    o.vc = max(0, dot(cNormal.xyz, ld));
    o.px = i.vertex / i.vertex.w;
    //float4 wPos=
    o.cp = mul(_World2Object, cPos).xyz;
    o.cn = mul(_World2Object, cNormal).xyz;

    return o;
}

float4 frag(v2f i):COLOR
        {
            float3 dir = i.cp - i.px;
float c = dot(dir, i.cn);
            clip(c);

            return float4(i.vc, i.vc, i.vc,0);
        }
        ENDCG
        }
        pass
        {
        Tags{"LightMode"="ForwardBase"}
        Cull Back
        CGPROGRAM
#pragma vertex vert
#pragma fragment frag
# include "UnityCG.cginc"
#pragma target 3.0

        struct v2f
{
    float4 pos:SV_POSITION;
            float vc:TEXCOORD0;
            float3 px:TEXCOORD1;
            float3 cp:TEXCOORD2;
            float3 cn:TEXCOORD3;
        };
float4 cPos;//world Position
float4 cNormal;
v2f vert(appdata_full i)
{
    v2f o;
    o.pos = mul(UNITY_MATRIX_MVP, i.vertex);
    float3 ld = ObjSpaceLightDir(i.vertex);
    ld = normalize(ld);
    o.vc = max(0, dot(i.normal, ld));//正常计算光照
    o.px = i.vertex / i.vertex.w;

    o.cp = mul(_World2Object, cPos).xyz;
    o.cn = mul(_World2Object, cNormal).xyz;

    return o;
}

float4 frag(v2f i):COLOR
        {
            float3 dir = i.cp - i.px;
float c = dot(dir, i.cn);
            clip(c);

            return float4(i.vc, i.vc, i.vc,0);
        }
        ENDCG
        }
    } 
    FallBack "Diffuse"
}

土豆儿削好了!
完活,收工~!


                    



回复

使用道具 举报

头像被屏蔽
排名
104
昨日变化

2

主题

2638

帖子

5871

积分

UID
47709
好友
1
蛮牛币
4003
威望
0
注册时间
2014-10-5
在线时间
1193 小时
最后登录
2017-10-12
发表于 2017-4-3 17:00:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

回复 支持 反对

使用道具 举报

5熟悉之中
561/1000
排名
3467
昨日变化
1

3

主题

39

帖子

561

积分

Rank: 5Rank: 5

UID
1527
好友
3
蛮牛币
1241
威望
0
注册时间
2013-8-5
在线时间
189 小时
最后登录
2017-11-16
发表于 2017-4-5 11:15:00 | 显示全部楼层
,试试看看

回复

使用道具 举报

7日久生情
1512/5000
排名
896
昨日变化
2

2

主题

86

帖子

1512

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
66098
好友
2
蛮牛币
5064
威望
0
注册时间
2015-1-5
在线时间
482 小时
最后登录
2017-11-17
发表于 2017-4-5 11:37:49 | 显示全部楼层
有意思~!~~~

回复

使用道具 举报

5熟悉之中
960/1000
排名
3784
昨日变化
3

0

主题

479

帖子

960

积分

Rank: 5Rank: 5

UID
156480
好友
0
蛮牛币
1572
威望
0
注册时间
2016-7-12
在线时间
177 小时
最后登录
2017-11-13
发表于 2017-4-5 11:49:52 | 显示全部楼层
6666666666666666666666

回复 支持 反对

使用道具 举报

5熟悉之中
701/1000
排名
3266
昨日变化
3

11

主题

136

帖子

701

积分

Rank: 5Rank: 5

UID
45963
好友
1
蛮牛币
1488
威望
0
注册时间
2014-9-21
在线时间
200 小时
最后登录
2017-11-15
发表于 2017-4-5 22:07:38 | 显示全部楼层
这个厉害1

回复

使用道具 举报

7日久生情
1684/5000
排名
1968
昨日变化
9

4

主题

478

帖子

1684

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
112674
好友
4
蛮牛币
1065
威望
0
注册时间
2015-7-8
在线时间
636 小时
最后登录
2017-11-17
QQ
发表于 2017-4-6 09:13:18 | 显示全部楼层
6666666666666666

回复 支持 反对

使用道具 举报

5熟悉之中
656/1000
排名
5039
昨日变化
1

0

主题

264

帖子

656

积分

Rank: 5Rank: 5

UID
159125
好友
1
蛮牛币
1020
威望
0
注册时间
2016-8-1
在线时间
174 小时
最后登录
2017-11-13
发表于 2017-4-6 10:25:27 | 显示全部楼层
感谢分享

回复

使用道具 举报

4四处流浪
433/500
排名
6626
昨日变化
7

3

主题

179

帖子

433

积分

Rank: 4

UID
90973
好友
0
蛮牛币
638
威望
0
注册时间
2015-4-10
在线时间
95 小时
最后登录
2017-9-28
发表于 2017-4-6 11:21:25 | 显示全部楼层
切掉的土豆在哪呢
[发帖际遇]: aqs10842 在论坛发帖时没有注意,被小偷偷去了 2 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
2275/5000
排名
284
昨日变化

10

主题

199

帖子

2275

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
21
好友
1
蛮牛币
3907
威望
30
注册时间
2013-5-28
在线时间
478 小时
最后登录
2017-11-17

社区QQ达人

发表于 2017-4-6 11:43:48 | 显示全部楼层
可以尝试放一张动图

回复 支持 反对

使用道具 举报

3偶尔光临
242/300
排名
9668
昨日变化
7

3

主题

48

帖子

242

积分

Rank: 3Rank: 3Rank: 3

UID
117699
好友
0
蛮牛币
231
威望
0
注册时间
2015-8-12
在线时间
107 小时
最后登录
2017-11-15
发表于 2017-4-6 14:53:16 | 显示全部楼层
有源码吗
[发帖际遇]: yogioh123456 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复

使用道具 举报

4四处流浪
419/500
排名
7180
昨日变化
3

1

主题

167

帖子

419

积分

Rank: 4

UID
203307
好友
0
蛮牛币
1396
威望
0
注册时间
2017-1-19
在线时间
105 小时
最后登录
2017-8-22
发表于 2017-4-6 19:07:37 | 显示全部楼层
.................

回复

使用道具 举报

3偶尔光临
158/300
排名
15597
昨日变化
15

0

主题

115

帖子

158

积分

Rank: 3Rank: 3Rank: 3

UID
209789
好友
0
蛮牛币
317
威望
0
注册时间
2017-3-3
在线时间
11 小时
最后登录
2017-4-14
发表于 2017-4-6 19:40:28 | 显示全部楼层

试试看看,谢谢








回复 支持 反对

使用道具 举报

4四处流浪
481/500
排名
7575
昨日变化
76

0

主题

256

帖子

481

积分

Rank: 4

UID
213486
好友
0
蛮牛币
895
威望
0
注册时间
2017-3-21
在线时间
99 小时
最后登录
2017-11-17
发表于 2017-4-6 19:48:23 | 显示全部楼层
这个可以有

回复

使用道具 举报

排名
2181
昨日变化

2

主题

143

帖子

859

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
14733
好友
1
蛮牛币
1540
威望
0
注册时间
2014-2-18
在线时间
194 小时
最后登录
2017-11-2
QQ
发表于 2017-4-7 17:44:17 | 显示全部楼层
不错不错

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表