| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> UnityShader第六章学习笔记 -> 正文阅读 |
|
[游戏开发]UnityShader第六章学习笔记 |
1、Diffuse漫反射表面顶点着色的实现 1.1(LightMode = ForwardBase, include Lighting.cginc情况下)常见变量 UNITY_LIGHTMODEL_AMBIENT:Unity内置变量,环境光信息
_LightColor0:Unity内置变量,光源的颜色强度信息(上面的环境光是间接光照,这里的光源指的是直接光照)
_WorldSpaceLightPos0: 这个地方我一开始搞错了,_WorldSpaceLightPos0在这里不是世界空间里的光源坐标,世界空间里的相机也不是在原点的位置上。此处Unity场景里使用的是平行光源,所以_WorldSpaceLightPos0指的是平行光的方向。 关于点光源的light direction如何计算,可以参考这篇文章
1.2 物体空间中的法线转换到世界空间中(因为光照是世界空间中计算的)
2、 Diffuse漫反射表面片元着色-实现 这里要注意最大的一个问题是,在vertex shader里ObjectNormal转换到WorldSpace之后,在frag shader里再做归一化。 Why?因为frag是直接对vert传过来的数据插值的,如果你在vert里面做归一化、再插值就无法保证是线性的了。
3、半兰伯特表面模型
4、Specular高光反射表面 Phong高光反射的计算要比diffuse表面多两个量:光线反射方向,视线方向。 光线发射方向:
视线方向(camera -> shading point):
总结&思考 1、写代码的时候,内置变量经常忘记对.xyz或.rgb的访问,导致报错 2、最后算总着色的时候,可以发现物体diffuse底色、specular颜色,以及光线颜色是直接乘一起的。这是否符合光学规律呢?值得思考一下。 最后附上随手调出来的苍蝇色XD
5、UnityCG.cginc中一些常用的帮助函数 第一大类:顶点位置->观察方向 WorldSpaceViewDir float3 WorldSpaceViewDir(float4 v) 输入:模型空间中的顶点位置 返回:世界空间中从该点到摄像机的观察方向 UnityWorldSpaceViewDir float3 UnityWorldSpaceViewDir(float4 v) 输入:世界空间中的顶点位置 返回:世界空间中从该点到摄像机的观察方向 ObjSpaceViewDir float3 ObjSpaceViewDir(float4 v) 输入:模型空间的顶点位置 返回:模型空间中该点到摄像机的观察方向 第二大类:顶点位置->光照方向 都仅可用于前向渲染中。 都没有归一化。 WorldSpaceLightDir float3 WorldSpaceLightDir(float4 v) 输入:模型空间中的顶点位置 返回:世界空间中从该点到光源的光照方向 UnityWorldSpaceLightDir float3 UnityWorldSpaceLightDir(float4 v) 输入:世界空间中的顶点位置 返回:世界空间中从该点到光源的光照方向。 ObjSpaceLightDir float3 ObjSpaceLightDir(float4 v) 输入:模型空间中的顶点位置 返回:模型空间中从该点到光源的光照方向。 第三大类:法向/方向矢量不同空间里的变换 UnityObjectToWorldNormal float3 UnityObjectToWorldNormal(float3 norm) 输入:模型空间中法线方向 返回:世界空间中法线方向 UnityObjectToWorldDir float3 UnityObjectToWorldDir(float3 dir) 输入:模型空间中方向矢量 返回:世界空间中方向矢量 UnityWorldToObjectDir float3 UnityWorldToObjectDir(float3 dir) 输入:世界空间中方向矢量 返回:模型空间中方向矢量 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/17 5:58:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |