网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月26日漏签0天
unity3d吧 关注:116,423贴子:560,862
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 31回复贴,共2页
  • ,跳到 页  
<<返回unity3d吧
>0< 加载中...

一种新的凹凸贴图方式,已强于视差贴图。

  • 只看楼主
  • 收藏

  • 回复
  • pengtaida
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这里说一下 已有的表现凹凸的贴图吧
1.凹凸贴图,这个纯用黑白阴影表现凹凸。这个在PS中表现凹凸 和maya默认的凹凸贴图即是这种。
2.法线贴图 根据物体的法线和灯光的关系 模拟的黑白阴影 广泛用于游戏引擎 是游戏中表现凹凸最常用的方式 一般用于细小的纹理。
3.视差贴图 根据视角的位置 和模型的法线 对模型贴图的UV进行变化 达到高低远近的效果 孤岛危机取得画面的重大成功就是广泛使用了视差贴图。他可以在视角和面只有20多度的时候,依旧保持相当的凹凸效果。(一般用于地面足够,因为人不会趴在地面上)
4.置换贴图 这个在3d软件中有时会用到 基于真正的模型顶点偏移 缺点是 需要面片分段数足够高 同时耗费配置也很高(消耗的配置高于直接用真实模型表现),所以游戏引擎中基本上不会选用这种方式做凹凸。
前三种的问题是,虽然他们很节省配置,但是他们永远也只是模型表皮贴图,当视角与面几乎平行的时候,凹凸感便早已不在。
而现在,一种新的贴图方式,他可以视角和水平面接近1度的时候,更充分的表现出凹凸。并且效果等于效果4正无穷的分段数效果,且流畅的运行。现在,我就把效果图发上去。

上面是贴图前


  • pengtaida
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这里我去掉法线贴图,然后更改一下地势贴图。
这样更有利于让大家看到贴图的作用。



2025-07-26 03:32:13
广告
不感兴趣
开通SVIP免广告
  • pengtaida
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这两个贴图其实是同样的摄像机视角。


  • 你眼眸的星尘
  • Shader
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
又涨姿势了


  • sasolee
  • Script
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
怎么实现呢?


  • 只待苍霞
  • Script
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
非常棒! 请问一下楼主这种技术的学名是什么, 我对此很感兴趣


  • tf107
  • Scene
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个效果,需要支持DX11的显卡… …


  • pengtaida
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
此贴图方式其实也不是教学作者发明的,发明者是国外的。其实就发明时间而言,已经很多年了,但游戏引擎和三维软件都没有引用这一贴图,就不得而知了。


2025-07-26 03:26:13
广告
不感兴趣
开通SVIP免广告
  • nKILEYI
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
原贴地址给下?


  • pengtaida
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这里照例提供源代码:
伸手党直接复制粘贴去用吧。
技术党不怕死的就去研究吧。
Shader "Tut/Shader/Bumpy/ReliefMap_1" {
Properties {
_MainTex("MainTex",2D)="white"{}
_BumpMap("BumpMap",2D)="white"{}
_HeightMap("Displacement Map(A)",2D)="white"{}
_Height("Displacement Amount",range(0,0.1))=0.05
}
SubShader {
pass{
Tags{"LightMode"="ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//#pragma only_renderers d3d9
#include "UnityCG.cginc"
float4 vert(appdata_base v):SV_POSITION
{
return mul(UNITY_MATRIX_MVP,v.vertex);
}
float4 frag(float4 pos:POSITION):COLOR
{
return 0;
}
ENDCG
}//Forward base
pass{
Tags{"LightMode"="ForwardAdd"}
Blend One One
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0
#pragma only_renderers d3d9
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _HeightMap;
float4 _MainTex_ST;
float4 _LightColor0;
float _Height;
struct v2f {
float4 pos:SV_POSITION;
float2 uv:TEXCOORD0;
float3 lightDir:TEXCOORD1;
float3 viewDir:TEXCOORD2;
float4 posW:TEXCOORD3;
};
v2f vert (appdata_full v) {
v2f o;
o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
o.uv=TRANSFORM_TEX(v.texcoord,_MainTex);
TANGENT_SPACE_ROTATION;
o.lightDir=ObjSpaceLightDir(v.vertex);
o.viewDir=ObjSpaceViewDir(v.vertex);
o.lightDir=mul(rotation,o.lightDir);
o.viewDir=mul(rotation,o.viewDir);
o.posW=mul(_Object2World,v.vertex);
return o;
}
//depthMap Brighter pixles presents more deep,
//heightMap brighter pixles presents more heigh
//we use Heightmap,brighter pixels more heigh,and so it result to...
float4 frag(v2f i):COLOR
{
//set up ray and initial pixel
float3 viewRay=normalize(i.viewDir*-1);
viewRay.z=abs(viewRay.z);
float3 shadeP=float3(i.uv,0);
//set up depth bias
//more steep viewVay, more less uv offset,
//and steep related to viewRay.z so : 1-viewRay.z
//after abs() the viewRay.z is the same direction with normal in TBN space
//float bias=1-viewRay.z;
//bias=1-pow(bias,4);
//viewRay.xy=viewRay.xy*bias*_Height;//apply the element to contrain uv offset amount,which is viewRay.xy
viewRay.xy*=_Height;
//
int linearStep=20;
int binaryStep=10;
//first change viewRay to a vector that ranged in(0,1)
//after this the viewRay infact dont has the same direction as viewDir,
//but viewRay.xy still related to the steep amount of viewDir,
//and viewRay.z=1,so when step from 0 to viewRay.z
// viewRay.xyz now will intersect with or perice with the (0,1) space that heightMap's alpha(0,1) forms
float3 offset=(viewRay/viewRay.z)/linearStep;//a step
for(int i=0;i<linearStep;i++)//liear search
{
//shadeP.z step from 0 to 1,from top to down
//so they will meet
//we will know if they have met , at the point shadeP.z> d=1-tex2D(_HeightMap) because i use _heightMap, brighter pixel more heighter
float d=1-tex2D(_HeightMap,shadeP.xy).a;
if(shadeP.z<d)//
{
//shadeP=shadeP+offset;
shadeP.xy=shadeP.xy+offset.xy;//uv offset
shadeP.z=shadeP.z+offset.z;//depth step up(0 to 1)
}
}
//
float3 biOffset=offset;
for(int i=0;i<binaryStep;i++)
{
biOffset=biOffset/2;//every step,narrow the search range by divide it by 2
float d=1-tex2D(_HeightMap,shadeP.xy).a;
if(shadeP.z<d)
shadeP+=biOffset;//step froward one/2
else
shadeP-=biOffset;//first shadeP.z must bigger than d=1-tex2D(HeightMap).so step back one/2
}
float4 c=tex2D(_MainTex,shadeP.xy);
float3 N=UnpackNormal(tex2D(_BumpMap,shadeP.xy));
float diff=max(0,dot(N,i.lightDir));
float atten=length(_WorldSpaceLightPos0-i.posW);
atten=1/(1+atten*atten);
c=c*_LightColor0*diff*atten;
return c*2;
}
ENDCG
}
}
FallBack "Diffuse"
}


  • 贴吧用户_06S9NQ8
  • Shader
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
地势映射?


  • pengtaida
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
温馨提示,研究前请先把上面的注释翻译成中文。
这里我提供一下教学作者自己的翻译:






  • pengtaida
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这本书是由http://tieba.baidu.com/p/3748160433推荐的,这里我代表大家感谢@61tech的无私分享。


  • pengtaida
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
总的来说 其实不缺乏shader 的教学,缺乏的是 对shader的学习能力。
个人感觉思维难度远大于C#。


2025-07-26 03:20:13
广告
不感兴趣
开通SVIP免广告
  • pengtaida
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
每次复制源代码都要手动申请人工恢复一次。如果大家现在没看见源代码,那就坐等会吧。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 31回复贴,共2页
  • ,跳到 页  
<<返回unity3d吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示