Unity物理摄像机属性
物理摄像机有机身和透镜,机身决定了传感器的尺寸,透镜决定了焦距。这些属性共同决定了水平和垂直的视野。
Overview
A physical camera’s vertical field of view and aspect ratio are driven by the sensor size and focal length.
物理摄像机的视野和视角比例是根据传感器尺寸和焦距决定的。
Sensor Type、SensorSize 、Focal Length共同决定了摄像机视口和纵横比。(如果要开启这一功能还需要在Genaral设置当中勾选Link FOV to Physical Camera)
下面就是参数之间的关系:
水平的FOV的计算: 纵横比的计算:
Additions to the Camera Inspector
The Physical Camera checkbox enables or disables the physical camera mode.(目前这个已经不是了)
Lens shift:可以用来修改、矫正透视效果,具体参见Unity 文档
灯光设置
物理摄像机控制场景亮度
在摄影当中控制画面亮度的参数:
Aperture:光圈
Iso:感光度
Shutter Speed:快门速度
在摄像机的三个参数当中,可以通过控制这三个参数来调整画面的亮度。
如果要启用给予物理的控制,还需要在后处理当中设置Exposure为:Use Physical Camera。
在Exposure当中还有曝光补偿(Compensation),用来整体调整画面亮暗。
灯光亮度设置
在物理摄像机当中,有个重要的改进就是可以使用真实的灯光参数单位:Lux。
如果不用物理摄像机,那么这个灯光参数就还是无法和物理世界光的亮度对应起来,例如太阳亮度:60000-100000lux,大气光亮度:5000-10000,如果不用物理摄像机这两个值就还是需要凭感觉调整。
使用物理摄像机之后就可以查找真实的Lux和Luminance参数,直接设置给光源 或者自发光物体。
给予物理参数的灯光配置流程
1.首先要配置基本的灯光环境
配置场景的直线光环境光,光照强度需要根据真实的物理世界进行调整,太阳直射为:32000-100000。这里只需要设置环境光强度即可。
下面的表格来自于wikipedia,可以参考用来设置光源亮度
Illuminance (lux) | Surfaces illuminated by |
---|---|
0.0001 | Moonless, overcast night sky (starlight)[3] |
0.002 | Moonless clear night sky with airglow[3] |
0.05–0.3 | Full moon on a clear night[4] |
3.4 | Dark limit of civil twilight under a clear sky[5] |
20–50 | Public areas with dark surroundings[6] |
50 | Family living room lights (Australia, 1998)[7] |
80 | Office building hallway/toilet lighting[8][9] |
100 | Very dark overcast day[3] |
150 | Train station platforms[10] |
320–500 | Office lighting[7][11][12][13] |
400 | Sunrise or sunset on a clear day. |
1000 | Overcast day;[3] typical TV studio lighting |
10,000–25,000 | Full daylight (not direct sun)[3] |
32,000–100,000 | Direct sunlight |
2.配置环境光(Ambition Light)
环境光是依赖于天空球的:
环境光主要就是来源于Amient Mode的设置,这个设置会关联到下面的Static Lighting Sky 。会根据选择天空球计算环境光。这个环境光,会bake到光照探针当中,也会影响静态物体的LightMap。
目前HDRI Sky当中有Lux单位的环境光设置,而Preocedural Sky,所以建议使用HDRI天空球。
另外,不建议使用Precedural Sky的太阳,也不要把太阳直接制作到HDRI上,建议使用另外的球或者片代替太阳。
3.上面两步设置完成之后
需要开启自动曝光,并且选择Use Physical Camera模式:
其中Compensation是物理摄像机的曝光补偿默认为0,只是略微整体调整画面亮度和实现特殊效果的,最好不要用来整体修改亮度。
此时,如果天空是黑的,需要增强曝光度让天空变蓝。
4.调整直线光和环境光、加入补光和额外光源
到目前为止得到了一个基本正确的光照环境,需要在Game视图中观察实际亮度,Scene视图目前无法使用物理摄像机:
添加点光源等局部光。添加光照探针和反射探针。
5. 进行场景烘焙
再完成场景光源设置后可以进行 场景烘焙。
烘焙完成后需要使用不同金属度和平滑度的材质球测试环境的反应。
如果材质效果不满意需要通过补光添加光照探针等方式进一步调整
6. 增加雾等后处理效果
物理摄像机的底层原来
实际上就是在Shader当中完成光照计算之后,乘上一个预先生成的曝光图。可以在HDRP的ShaderPassForward.hlsl文件当中找到。
在Frag函数当中,代码如下:
...
diffuseLighting *= GetCurrentExposureMultiplier();
specularLigting *= GetCurrentExposureMultiplier();
...
这部分内容可以通过方法内部的贴图去搜索如何完成的计算。