《Return of the Obra Dinn》开发日志节选
《Return of the Obra Dinn》中的图像渲染
文:Lucas Pope (aka. @dukope)
译:toni
第一步:物体表面
每个物体表面随机生成一种颜色,数值放大以保持相邻法线的相似性,以防止平滑的表面产生过多边缘。顶点颜色(vertex color)我使用红色通道,从而得到最终的表面色彩。
第二步:灯光/贴图
在unity中选择灯光放入红色通道,关闭绿色通道,在蓝色通道中放入贴图。所有的元素都在单通道中运动,因为贴图/运算方式以灰度图像模式(grayscale)进行。为了保持贴图与光源可以分别受到外界影响,我让光源抵抗了纯白色反射率(albedo)。这样的隔离使得我可以在今后合并关卡的贴图/灯光时使用不同的抖动曲线(dither curves)。还有,当我在上一步中使用顶点颜色来处理物体表面时,我也使用相同的方法将蓝色贴图通道颜色提高来让贴图颜色看起来比较深。
第三步:合并
最后的着色(shader)部分,我提取以上两部分然后将它们合并。物体的缓冲器(buffer)用来产生线框边缘,贴图/灯光缓冲器用来处理剩下的部分。贴图与灯光处在不同的通道中,我现在可以给他们赋予不同的抖动曲线了。我想让灯光看起来很锐利,所以我做了以下三个调整:黑,50%,白。贴图可以调整的稍微夸张,接近白色,全范围阴影。你可以通过观看贴图的抖动纹数量样来调整灯光的锐利度。保持边线在黑暗中也能被看见,灯光的数值取决于阴影。好了,现在的贴图颜色可能有些过深,我会在今后的开发过程中继续修正。
共享抖动曲线
上面这张图的效果,是灯光与贴图共享抖动曲线的结果。虽然看上去很风格化,但在视觉上会干扰物体边缘。我决定使用更清晰的强光照明与密集纹理的贴图。
文:Lucas Pope (aka. @dukope)
译:toni
第一步:物体表面
![]() |
每个物体表面随机生成一种颜色,数值放大以保持相邻法线的相似性,以防止平滑的表面产生过多边缘。顶点颜色(vertex color)我使用红色通道,从而得到最终的表面色彩。
第二步:灯光/贴图
![]() |
在unity中选择灯光放入红色通道,关闭绿色通道,在蓝色通道中放入贴图。所有的元素都在单通道中运动,因为贴图/运算方式以灰度图像模式(grayscale)进行。为了保持贴图与光源可以分别受到外界影响,我让光源抵抗了纯白色反射率(albedo)。这样的隔离使得我可以在今后合并关卡的贴图/灯光时使用不同的抖动曲线(dither curves)。还有,当我在上一步中使用顶点颜色来处理物体表面时,我也使用相同的方法将蓝色贴图通道颜色提高来让贴图颜色看起来比较深。
第三步:合并
![]() |
最后的着色(shader)部分,我提取以上两部分然后将它们合并。物体的缓冲器(buffer)用来产生线框边缘,贴图/灯光缓冲器用来处理剩下的部分。贴图与灯光处在不同的通道中,我现在可以给他们赋予不同的抖动曲线了。我想让灯光看起来很锐利,所以我做了以下三个调整:黑,50%,白。贴图可以调整的稍微夸张,接近白色,全范围阴影。你可以通过观看贴图的抖动纹数量样来调整灯光的锐利度。保持边线在黑暗中也能被看见,灯光的数值取决于阴影。好了,现在的贴图颜色可能有些过深,我会在今后的开发过程中继续修正。
共享抖动曲线
![]() |
上面这张图的效果,是灯光与贴图共享抖动曲线的结果。虽然看上去很风格化,但在视觉上会干扰物体边缘。我决定使用更清晰的强光照明与密集纹理的贴图。