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

扫一扫,访问微社区

开发者专栏

关注:1774

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

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

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

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

[复制链接]  [移动端链接]
排名
1227
昨日变化
4

27

主题

772

帖子

2680

积分

Rank: 9Rank: 9Rank: 9

UID
76248
好友
17
蛮牛币
15960
威望
0
注册时间
2015-2-28
在线时间
695 小时
最后登录
2017-7-27

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

发表于 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"
}

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


                    



回复

使用道具 举报

排名
100
昨日变化

2

主题

2106

帖子

5171

积分

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

UID
47709
好友
1
蛮牛币
3616
威望
0
注册时间
2014-10-5
在线时间
1133 小时
最后登录
2017-7-26
发表于 2017-4-3 17:00:27 | 显示全部楼层
哎...今天够累的,签到来了游戏源码下载...

回复 支持 反对

使用道具 举报

4四处流浪
428/500
排名
4142
昨日变化
16

1

主题

29

帖子

428

积分

Rank: 4

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

回复

使用道具 举报

6蛮牛粉丝
1298/1500
排名
1108
昨日变化
3

2

主题

83

帖子

1298

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

5熟悉之中
711/1000
排名
5255
昨日变化
39

0

主题

384

帖子

711

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
632/1000
排名
3417
昨日变化
6

10

主题

131

帖子

632

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

6蛮牛粉丝
1473/1500
排名
2367
昨日变化
5

4

主题

442

帖子

1473

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

4四处流浪
473/500
排名
6254
昨日变化
64

0

主题

206

帖子

473

积分

Rank: 4

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

回复

使用道具 举报

4四处流浪
412/500
排名
6254
昨日变化
8

3

主题

164

帖子

412

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

7日久生情
2085/5000
排名
285
昨日变化
1

9

主题

182

帖子

2085

积分

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

UID
21
好友
1
蛮牛币
3407
威望
30
注册时间
2013-5-28
在线时间
426 小时
最后登录
2017-7-27

社区QQ达人

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

回复 支持 反对

使用道具 举报

3偶尔光临
189/300
排名
9504
昨日变化
3

2

主题

38

帖子

189

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

4四处流浪
402/500
排名
7088
昨日变化
8

1

主题

166

帖子

402

积分

Rank: 4

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

回复

使用道具 举报

3偶尔光临
165/300
排名
14447
昨日变化
8

0

主题

123

帖子

165

积分

Rank: 3Rank: 3Rank: 3

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

试试看看,谢谢








回复 支持 反对

使用道具 举报

排名
14053
昨日变化
10

0

主题

24

帖子

83

积分

Rank: 2Rank: 2

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

回复

使用道具 举报

排名
2080
昨日变化

2

主题

139

帖子

832

积分

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

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

回复

使用道具 举报

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

本版积分规则

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