游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: 纤维素

卡通3D引擎技术很高么?

[复制链接]

40

主题

211

帖子

212

积分

中级会员

Rank: 3Rank: 3

积分
212
QQ
发表于 2004-9-25 11:29:00 | 显示全部楼层

Re: Re:卡通3D引擎技术很高么?

rankey: Re:卡通3D引擎技术很高么?

dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3

dp3 oT0.x, v3, -c4...

[em7]汇编不懂啊
卡通渲染我看过很多
都是用汇编写的 晕啊~
有没有用cg或HLSL语言写的 [em5]

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2004-9-25 11:38:00 | 显示全部楼层

Re:卡通3D引擎技术很高么?

float4x4 matrix44_world_view_proj;
float3 light0_pos;
float3 eye_pos;
float4x4 matrix44_invview;
float4x4 matrix44_world;

struct VS_INPUT_STRUCT
{
   float4 position:     POSITION;
   float3 normal:       NORMAL;
   float2 texcoord0:    TEXCOORD0;
};

struct VS_OUTPUT_STRUCT
{
   float4 position:     POSITION;
   float2 base_map:     TEXCOORD0; 
   float2 edge_map: TEXCOORD1; // 轮廓线贴图
   float2 toon_map: TEXCOORD2; // toon贴图
};

VS_OUTPUT_STRUCT toonrender_main(VS_INPUT_STRUCT vsInStruct )
{
     VS_OUTPUT_STRUCT vsOutStruct;
     vsOutStruct.position = mul( vsInStruct.position, matrix44_world_view_proj );
   float3 pos_world = mul(vsInStruct.position, matrix44_world);
  float3 lightvector_world = normalize(pos_world.xyz - light0_pos);
foat3 eyevector_world = normalize(pos_world.xyz - eye_pos);
    vsOutStruct.base_map = vsInStruct.texcoord0;
   vsOutStruct.toon_map = float2(dot(lightvector_world, vsInStruct.normal), 1.0);
  vsOutStruct.edge_map = float2(dot(eyevector_world, vsInStruct.normal), 1.0);
return vsOutStruct;
}

这种方法和上面老兄用asm写的是一样的
只是用eyevector求轮廓线会在某些情况下出现大片黑色
所以现在的卡通渲染很少这么处理,除非故意为之(比如vj)
最好是在图像空间求之,速度慢,但是效果非常好 

1

主题

60

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2004-9-25 14:37:00 | 显示全部楼层

Re:卡通3D引擎技术很高么?

应该是程序员的工作。美工的话建模做贴图的时候也应该注意一下,卡通风格的模型色调都比较鲜艳,用的颜色过渡比较少。

我认为卡通渲染的本质是边线加粗+非平滑过渡的光照效果。

40

主题

211

帖子

212

积分

中级会员

Rank: 3Rank: 3

积分
212
QQ
发表于 2004-9-25 18:48:00 | 显示全部楼层

Re:卡通3D引擎技术很高么?

谢谢12楼的代码

9

主题

121

帖子

121

积分

注册会员

Rank: 2

积分
121
QQ
发表于 2004-9-25 19:23:00 | 显示全部楼层

Re:卡通3D引擎技术很高么?

我那段VS代码也就是做了个边缘面选取,然后勾边.再加非平滑过渡光照帖图,只是很简单的一个演示,当然还有许许多多其他的方法,适各种情况选用,只是想说这里面没什么难的原理很简单

to: secondage

嗯,的确是用eyevector做边缘面选取,不过另外加了个mip帖图平移,效果会好些,图像层做速度太慢了就不考虑了.这个代码软件模拟vs的话这个速度也还可以,用ps做就恐怖了:)

我3d研究不多,你们继续^_

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2004-9-25 21:27:00 | 显示全部楼层

Re:卡通3D引擎技术很高么?

靠,利害!

看来我的程序也得改成汇编了,否则效率太低……

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-9-25 21:30:00 | 显示全部楼层

Re:卡通3D引擎技术很高么?

随便顶一个。绝对不潜水

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2004-9-25 23:01:00 | 显示全部楼层

Re:卡通3D引擎技术很高么?

toon shade的勾边的公认算法应该是在Image space中使用3x3 sobel filter完成,这个需要使用8次texture sample,所以速度不会非常快。
另外,做sobel filter的source image最好是选用物体法线或者物体深度,这样效果会比较好。

24

主题

104

帖子

104

积分

注册会员

Rank: 2

积分
104
发表于 2004-9-27 22:21:00 | 显示全部楼层

Re:卡通3D引擎技术很高么?

用GPU ASM和HLSL有什么区别?

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-10-1 15:54:00 | 显示全部楼层

Re:卡通3D引擎技术很高么?

???如何作水墨?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-18 22:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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