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

扫一扫,访问微社区

开发者专栏

关注:1675

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

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

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

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

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

25

主题

767

帖子

2379

积分

Rank: 9Rank: 9Rank: 9

UID
76248
好友
15
蛮牛币
15172
威望
0
注册时间
2015-2-28
在线时间
629 小时
最后登录
2017-4-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"
}

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


                    



回复

使用道具 举报

排名
120
昨日变化

2

主题

1155

帖子

3965

积分

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

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

回复 支持 反对

使用道具 举报

4四处流浪
373/500
排名
4425
昨日变化

1

主题

27

帖子

373

积分

Rank: 4

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

回复

使用道具 举报

6蛮牛粉丝
1020/1500
排名
1482
昨日变化

2

主题

70

帖子

1020

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

4四处流浪
495/500
排名
6935
昨日变化
2

0

主题

284

帖子

495

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

4四处流浪
415/500
排名
4689
昨日变化
36

7

主题

96

帖子

415

积分

Rank: 4

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

回复

使用道具 举报

6蛮牛粉丝
1231/1500
排名
2786
昨日变化
1

4

主题

371

帖子

1231

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

3偶尔光临
183/300
排名
9322
昨日变化
4

0

主题

60

帖子

183

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

4四处流浪
382/500
排名
6128
昨日变化
3

3

主题

143

帖子

382

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

7日久生情
1895/5000
排名
306
昨日变化

7

主题

160

帖子

1895

积分

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

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

社区QQ达人

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

回复 支持 反对

使用道具 举报

3偶尔光临
160/300
排名
10079
昨日变化
7

2

主题

37

帖子

160

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

4四处流浪
338/500
排名
8157
昨日变化
3

1

主题

156

帖子

338

积分

Rank: 4

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

回复

使用道具 举报

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

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

试试看看,谢谢








回复 支持 反对

使用道具 举报

排名
17499
昨日变化
5

0

主题

21

帖子

50

积分

Rank: 2Rank: 2

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

回复

使用道具 举报

排名
2106
昨日变化

2

主题

134

帖子

780

积分

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

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

回复

使用道具 举报

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

本版积分规则

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