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

扫一扫,访问微社区

开发者专栏

关注:1876

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

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

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

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

[复制链接]  [移动端链接]
排名
1108
昨日变化
2

30

主题

784

帖子

2869

积分

Rank: 9Rank: 9Rank: 9

UID
76248
好友
19
蛮牛币
16534
威望
0
注册时间
2015-2-28
在线时间
745 小时
最后登录
2017-9-24

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

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

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


                    



回复

使用道具 举报

头像被屏蔽
排名
94
昨日变化
2

2

主题

2638

帖子

5868

积分

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

回复 支持 反对

使用道具 举报

4四处流浪
478/500
排名
3985
昨日变化
20

3

主题

38

帖子

478

积分

Rank: 4

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

回复

使用道具 举报

6蛮牛粉丝
1405/1500
排名
1007
昨日变化
1

2

主题

86

帖子

1405

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

5熟悉之中
876/1000
排名
4183
昨日变化
30

0

主题

450

帖子

876

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
690/1000
排名
3231
昨日变化
4

11

主题

136

帖子

690

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

7日久生情
1583/5000
排名
2106
昨日变化
6

4

主题

448

帖子

1583

积分

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

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

回复 支持 反对

使用道具 举报

5熟悉之中
639/1000
排名
5006
昨日变化
2

0

主题

258

帖子

639

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

4四处流浪
433/500
排名
6419
昨日变化
5

3

主题

179

帖子

433

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

7日久生情
2200/5000
排名
279
昨日变化

9

主题

194

帖子

2200

积分

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

UID
21
好友
1
蛮牛币
3638
威望
30
注册时间
2013-5-28
在线时间
459 小时
最后登录
2017-9-25

社区QQ达人

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

回复 支持 反对

使用道具 举报

3偶尔光临
225/300
排名
9591
昨日变化
135

3

主题

44

帖子

225

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

4四处流浪
419/500
排名
6959
昨日变化
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
排名
15038
昨日变化
14

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

试试看看,谢谢








回复 支持 反对

使用道具 举报

3偶尔光临
230/300
排名
10830
昨日变化
166

0

主题

106

帖子

230

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

排名
2113
昨日变化
1

2

主题

142

帖子

857

积分

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

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

回复

使用道具 举报

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

本版积分规则

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