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

扫一扫,访问微社区

开发者专栏

关注:1720

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

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

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

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

[复制链接]  [移动端链接]
排名
1308
昨日变化
5

26

主题

771

帖子

2608

积分

Rank: 9Rank: 9Rank: 9

UID
76248
好友
16
蛮牛币
15739
威望
0
注册时间
2015-2-28
在线时间
671 小时
最后登录
2017-6-22

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

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

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


                    



回复

使用道具 举报

排名
110
昨日变化

2

主题

1767

帖子

4741

积分

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

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

回复 支持 反对

使用道具 举报

4四处流浪
414/500
排名
4181
昨日变化
5

1

主题

28

帖子

414

积分

Rank: 4

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

回复

使用道具 举报

6蛮牛粉丝
1186/1500
排名
1223
昨日变化
3

2

主题

77

帖子

1186

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

5熟悉之中
569/1000
排名
6034
昨日变化
54

0

主题

306

帖子

569

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
574/1000
排名
3643
昨日变化
22

9

主题

121

帖子

574

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

6蛮牛粉丝
1346/1500
排名
2573
昨日变化
17

4

主题

399

帖子

1346

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

3偶尔光临
276/300
排名
7465
昨日变化
4

0

主题

87

帖子

276

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

4四处流浪
412/500
排名
6142
昨日变化
3

3

主题

164

帖子

412

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

7日久生情
2006/5000
排名
292
昨日变化
1

7

主题

171

帖子

2006

积分

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

UID
21
好友
1
蛮牛币
3237
威望
30
注册时间
2013-5-28
在线时间
402 小时
最后登录
2017-6-22

社区QQ达人

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

回复 支持 反对

使用道具 举报

3偶尔光临
181/300
排名
9463
昨日变化
5

2

主题

38

帖子

181

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

4四处流浪
378/500
排名
7465
昨日变化
4

1

主题

164

帖子

378

积分

Rank: 4

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

回复

使用道具 举报

3偶尔光临
165/300
排名
14158
昨日变化
7

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 | 显示全部楼层

试试看看,谢谢








回复 支持 反对

使用道具 举报

排名
14158
昨日变化
7

0

主题

22

帖子

78

积分

Rank: 2Rank: 2

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

回复

使用道具 举报

排名
2122
昨日变化
8

2

主题

137

帖子

804

积分

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

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

回复

使用道具 举报

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

本版积分规则

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